home *** CD-ROM | disk | FTP | other *** search
/ Inside Macintosh / Inside Macintosh CD-ROM_1995 (CD).toast / Books / Interapplication Comm / Interapplication Comm next >
Text File  |  1994-08-11  |  14MB  |  40,181 lines

  1. INSIDE MACINTOSHInterapplication CommunicationISBN 0-201-62200-91 2 3 4 5 6 7 8 9-MU-9796959493First Printing, June 1993    Apple Computer, Inc.© 1993, Apple Computer, Inc.All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form or by any means, mechanical, electronic, photocopying, recording, or otherwise, without prior written permission of Apple Computer, Inc. Printed in the United States of America.No licenses, express or implied, are granted with respect to any of the technology described in this book. Apple retains all intellectual property rights associated with the technology described in this book. This book is intended to assist application developers to develop applications only for Apple Macintosh computers.Apple Computer, Inc.20525 Mariani AvenueCupertino, CA 95014408-996-1010Apple, the Apple logo, APDA, AppleLink, AppleTalk, LaserWriter, Macintosh, MPW, and SANE are trademarks of Apple Computer, Inc., registered in the United States and other countries.AppleScript, Finder, Moof, New York, QuickDraw, QuickTime, and System 7 are trademarks of Apple Computer, Inc.Adobe Illustrator, Adobe Photoshop, and PostScript are trademarks of Adobe Systems Incorporated, which may be registered in certain jurisdictions.America Online is a service mark of Quantum Computer Services, Inc.CompuServe is a registered trademark of CompuServe, Inc.FrameMaker is a registered trademark of Frame Technology Corporation.Helvetica, Palatino, and Times are registered trademarks of Linotype Company.HyperCard and HyperTalk are registered trademarks of Claris Corporation.Internet is a trademark of Digital Equipment Corporation.ITC Zapf Dingbats is a registered trademark of International Typeface Corporation.Optrotech is a trademark of Orbotech Corporation.Simultaneously published in the United States and Canada.LIMITED WARRANTY ON MEDIA AND REPLACEMENTALL IMPLIED WARRANTIES ON THIS MANUAL, INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE LIMITED IN DURATION TO NINETY (90) DAYS FROM THE DATE OF THE ORIGINAL RETAIL PURCHASE OF THIS PRODUCT.Even though Apple has reviewed this manual, APPLE MAKES NO WARRANTY OR REPRESENTATION, EITHER EXPRESS OR IMPLIED, WITH RESPECT TO THIS MANUAL, ITS QUALITY, ACCURACY, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. AS A RESULT, THIS MANUAL IS SOLD “AS IS,” AND YOU, THE PURCHASER, ARE ASSUMING THE ENTIRE RISK AS TO ITS QUALITY AND ACCURACY.IN NO EVENT WILL APPLE BE LIABLE FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES RESULTING FROM ANY DEFECT OR INACCURACY IN THIS MANUAL, even if advised of the possibility of such damages.THE WARRANTY AND REMEDIES SET FORTH ABOVE ARE EXCLUSIVE AND IN LIEU OF ALL OTHERS, ORAL OR WRITTEN, EXPRESS OR IMPLIED. No Apple dealer, agent, or employee is authorized to make any modification, extension, or addition to this warranty.Some states do not allow the exclusion or limitation of implied warranties or liability for incidental or consequential damages, so the above limitation or exclusion may not apply to you. This warranty gives you specific legal rights, and you may also have other rights which vary from state to state.ContentsFigures, Tables, and ListingsxvPreface    About This BookxxiiiFormat of a Typical ChapterxxivConventions Used in This BookxxvSpecial FontsxxvTypes of NotesxxvAssembly-Language InformationxxviThe Development EnvironmentxxviChapter 1    Introduction to Interapplication Communication1-1Overview of Interapplication Communication1-3Sharing Data Among Applications1-6Sending and Responding to Apple Events1-9Standard Apple Events1-10Handling Apple Events1-12Supporting AppleScript and Other Scripting Languages1-13Scriptable Applications1-16Recordable Applications1-18Applications That Manipulate and Execute Scripts1-19Exchanging Message Blocks1-22Chapter 2    Edition Manager2-1Introduction to Publishers, Subscribers, and Editions2-4About the Edition Manager2-12Using the Edition Manager2-12Receiving Apple Events From the Edition Manager2-13Creating the Section Record and Alias Record2-15Saving a Document Containing Sections2-19Opening and Closing a Document Containing Sections2-22Reading and Writing a Section2-24Formats in an Edition2-24Opening an Edition2-26Format Marks2-27Reading and Writing Edition Data2-27Closing an Edition2-28Creating a Publisher2-29Creating the Edition Container2-32Opening an Edition Container to Write Data2-35Creating a Subscriber2-37Opening an Edition Container to Read Data2-41Choosing Which Edition Format to Read2-41Using Publisher and Subscriber Options2-43Publishing a New Edition While Saving or Manually2-47Subscribing to an Edition Automatically or Manually2-48Canceling Sections Within Documents2-48Locating a Publisher Through a Subscriber2-49Renaming a Document Containing Sections2-50Displaying Publisher and Subscriber Borders2-50Text Borders2-54Spreadsheet Borders2-55Object-Oriented Graphics Borders2-56Bitmapped Graphics Borders2-57Duplicating Publishers and Subscribers2-58Modifying a Subscriber2-59Relocating an Edition2-60Customizing Dialog Boxes2-60Subscribing to Non-Edition Files2-62Getting the Current Edition Opener2-63Setting an Edition Opener2-63Calling an Edition Opener2-64Opening and Closing Editions2-68Listing Files That Can Be Subscribed To2-68Reading From and Writing to Files2-68Calling a Format I/O Function2-68Edition Manager Reference2-71Data Structures2-71The Edition Container Record2-71The Section Record2-72Edition Manager Routines2-73Initializing the Edition Manager2-74Creating and Registering a Section2-74Creating and Deleting an Edition Container2-79Setting and Getting a Format Mark2-81Reading in Edition Data2-83Writing out Edition Data2-86Closing an Edition After Reading or Writing2-88Displaying Dialog Boxes2-90Locating a Publisher and Edition From a Subscriber2-98Edition Container Formats2-101Reading and Writing Non-Edition Files2-102Application-Defined Routines2-105Summary of the Edition Manager2-106Pascal Summary2-106Constants2-106Data Types2-108Edition Manager Routines2-111Application-Defined Routines2-113C Summary2-114Constants2-114Data Types2-116Edition Manager Routines2-119Application-Defined Routines2-122Result Codes2-122Chapter 3    Introduction to Apple Events3-1About Apple Events3-3Apple Events and Apple Event Objects3-6Apple Event Attributes and Parameters3-7Apple Event Attributes3-8Apple Event Parameters3-9Interpreting Apple Event Attributes and Parameters3-10Data Structures Within Apple Events3-12Descriptor Records3-12Keyword-Specified Descriptor Records3-15Descriptor Lists3-16Responding to Apple Events3-20Accepting and Processing Apple Events3-20About Apple Event Handlers3-23Extracting and Checking Data3-23Interacting With the User3-25Performing the Requested Action and Returning a Result3-25Creating and Sending Apple Events3-28Creating an Apple Event Record3-29Adding Apple Event Attributes and Parameters3-29Sending an Apple Event and Handling the Reply3-30Working With Object Specifier Records3-32Data Structures Within an Object Specifier Record3-34The Classification of Apple Event Objects3-39Object Classes3-39Properties and Elements3-42Finding Apple Event Objects3-46About the Apple Event Manager3-48Supporting Apple Events as a Server Application3-48Supporting Apple Events as a Client Application3-49Supporting Apple Event Objects3-49Supporting Apple Event Recording3-50Chapter 4    Responding to Apple Events4-1Handling Apple Events4-4Accepting an Apple Event4-5Installing Entries in the Apple Event Dispatch Tables4-7Installing Entries for the Required Apple Events4-8Installing Entries for Apple Events Sent by the Edition Manager4-9How Apple Event Dispatching Works4-9Handling the Required Apple Events4-11Required Apple Events4-11Handling the Open Application Event4-14Handling the Open Documents Event4-15Handling the Print Documents Event4-17Handling the Quit Application Event4-19Handling Apple Events Sent by the Edition Manager4-20The Section Read, Section Write, and Section Scroll Events4-21Handling the Create Publisher Event4-22Getting Data Out of an Apple Event4-25Getting Data Out of an Apple Event Parameter4-26Getting Data Out of an Attribute4-28Getting Data Out of a Descriptor List4-31Writing Apple Event Handlers4-33Replying to an Apple Event4-36Disposing of Apple Event Data Structures4-39Writing and Installing Coercion Handlers4-41Interacting With the User4-45Setting the Client Application’s User Interaction Preferences4-46Setting the Server Application’s User Interaction Preferences4-48Requesting User Interaction4-49Reference to Responding to Apple Events4-56Data Structures Used by the Apple Event Manager4-56Descriptor Records and Related Data Structures4-56Apple Event Array Data Types4-60Routines for Responding to Apple Events4-61Creating and Managing the Apple Event Dispatch Tables4-61Dispatching Apple Events4-66Getting Data or Descriptor Records Out of Apple Event Parameters and Attributes4-68Counting the Items in Descriptor Lists4-74Getting Items From Descriptor Lists4-74Getting Data and Keyword-Specified Descriptor Records Out of AE Records4-78Requesting User Interaction4-81Requesting More Time to Respond to Apple Events4-84Suspending and Resuming Apple Event Handling4-85Getting the Sizes and Descriptor Types of Descriptor Records4-89Deleting Descriptor Records4-92Deallocating Memory for Descriptor Records4-93Coercing Descriptor Types4-94Creating and Managing the Coercion Handler Dispatch Tables4-96Creating and Managing the Special Handler Dispatch Tables4-99Getting Information About the Apple Event Manager4-103Application-Defined Routines4-104Summary of Responding to Apple Events4-108Pascal Summary4-108Constants4-108Data Types4-112Routines for Responding to Apple Events4-114Application-Defined Routines4-118C Summary4-118Constants4-118Data Types4-123Routines for Responding to Apple Events4-124Application-Defined Routines4-128Assembly-Language Summary4-128Trap Macros4-128Result Codes4-130Chapter 5    Creating and Sending Apple Events5-1Creating an Apple Event5-3Adding Parameters to an Apple Event5-5Specifying Optional Parameters for an Apple Event5-7Specifying a Target Address5-10Creating an Address Descriptor Record5-11Addressing an Apple Event for Direct Dispatching5-13Sending an Apple Event5-13Dealing With Timeouts5-20Writing an Idle Function5-21Writing a Reply Filter Function5-24Reference to Creating and Sending Apple Events5-24Routines for Creating and Sending Apple Events5-25Creating Apple Events5-25Creating and Duplicating Descriptor Records5-26Creating Descriptor Lists and AE Records5-28Adding Items to Descriptor Lists5-29Adding Data and Descriptor Records to AE Records5-32Adding Parameters and Attributes to Apple Events5-33Sending Apple Events5-37Application-Defined Routines5-41Summary of Creating and Sending Apple Events5-44Pascal Summary5-44Constants5-44Data Types5-48Routines for Creating and Sending Apple Events5-50Application-Defined Routines5-51C Summary5-51Constants5-51Data Types5-56Routines for Creating and Sending Apple Events5-57Application-Defined Routines5-59Assembly-Language Summary5-59Trap Macros5-59Result Codes5-60Chapter 6    Resolving and Creating Object Specifier Records6-1Resolving Object Specifier Records6-4Descriptor Records Used in Object Specifier Records6-8Object Class6-9Container6-9Key Form6-11Key Data6-12Key Data for a Property ID6-13Key Data for an Object’s Name6-14Key Data for a Unique ID6-14Key Data for Absolute Position6-14Key Data for Relative Position6-15Key Data for a Test6-15Key Data for a Range6-20Installing Entries in the Object Accessor Dispatch Tables6-21Installing Object Accessor Functions That Find Apple Event Objects6-23Installing Object Accessor Functions That Find Properties6-27Writing Object Accessor Functions6-28Writing Object Accessor Functions That Find Apple Event Objects6-29Writing Object Accessor Functions That Find Properties6-37Defining Tokens6-39Handling Whose Tests6-41Writing Object Callback Functions6-45Writing an Object-Counting Function6-48Writing an Object-Comparison Function6-50Writing Marking Callback Functions6-53Creating Object Specifier Records6-55Creating a Simple Object Specifier Record6-57Specifying the Container Hierarchy6-61Specifying a Property6-63Specifying a Relative Position6-64Creating a Complex Object Specifier Record6-64Specifying a Test6-64Specifying a Range6-72Reference to Resolving and Creating Object Specifier Records6-75Data Structures Used in Object Specifier Records6-75Routines for Resolving and Creating Object Specifier Records6-77Initializing the Object Support Library6-77Setting Object Accessor Functions and Object Callback Functions6-77Getting, Calling, and Removing Object Accessor Functions6-81Resolving Object Specifier Records6-85Deallocating Memory for Tokens6-87Creating Object Specifier Records6-88Application-Defined Routines6-94Object Accessor Functions6-94Object Callback Functions6-96Summary of Resolving and Creating Object Specifier Records6-104Pascal Summary6-104Constants6-104Data Types6-106Routines for Resolving and Creating Object Specifier Records6-106Application-Defined Routines6-108C Summary6-109Constants6-109Data Types6-111Routines for Resolving and Creating Object Specifier Records6-112Application-Defined Routines6-114Assembly-Language Summary6-115Trap Macros6-115Result Codes6-115Chapter 7    Introduction to Scripting7-1About Scripts and Scripting Components7-4Script Editors and Script Files7-6Scripting Components and Scriptable Applications7-8Scripting Components and Applications That Execute Scripts7-11Making Your Application Scriptable7-14About Apple Event Terminology Resources7-15How AppleScript Uses Terminology Information7-17Dynamic Loading of Terminology Information7-20Making Your Application Recordable7-20Manipulating and Executing Scripts7-22Compiling, Saving, Modifying, and Executing Scripts7-24Using a Script Context to Handle an Apple Event7-25Chapter 8    Apple Event Terminology Resources8-1Defining Terminology for Use by the AppleScript Component8-3Structure of Apple Event Terminology Resources8-8Creating an Apple Event Terminology Extension Resource8-13Supporting Standard Suites Without Extensions8-14Extending the Standard Suites8-16Supporting Subsets of Suites8-23Supporting New Suites8-23Handling the Get AETE Event8-23Reference to Apple Event Terminology Resources8-26Header Data for an Apple Event Terminology Resource8-27Suite Data for an Apple Event Terminology Resource8-27Event Data8-29Object Class Data8-36Comparison Operator Data8-42Enumeration and Enumerator Data8-43The Scripting Size Resource8-45Chapter 9    Recording Apple Events9-1About Recordable Applications9-3Factoring Your Application for Recording9-6Factoring the Quit Command and the New Command9-6Sending Apple Events Without Executing Them9-12What to Record9-14Recording User Actions9-15Recording the Selection of Text Objects9-18Recording Insertion Points9-23Recording Typing9-27Recording the Selection of Nontext Objects9-30Identifying Objects9-32Moving the Selection During Recording9-34Recording Interactions With Dialog Boxes9-35How Apple Event Recording Works9-35Chapter 10    Scripting Components10-1Connecting to a Scripting Component10-3Using Scripting Component Routines10-7Compiling and Executing Source Data10-7Saving Script Data10-12Storage Formats for Script Data10-12Resource and File Types for Script Data10-13Loading and Executing Script Data10-14Modifying and Recompiling a Compiled Script10-17Using a Script Context to Handle an Apple Event10-19Supplying a Resume Dispatch Function10-21Supplying an Alternative Active Function10-23Supplying Alternative Create and Send Functions10-24Alternative Create Functions10-24Alternative Send Functions10-25Recording Scripts10-26Writing a Scripting Component10-27Scripting Components Reference10-28Data Structures10-29Required Scripting Component Routines10-30Saving and Loading Script Data10-30Executing and Disposing of Scripts10-33Setting and Getting Script Information10-41Manipulating the Active Function10-45Optional Scripting Component Routines10-46Compiling Scripts10-47Getting Source Data10-51Coercing Script Values10-52Manipulating the Create and Send Functions10-55Recording Scripts10-59Executing Scripts in One Step10-61Manipulating Dialects10-67Using Script Contexts to Handle Apple Events10-71AppleScript Component Routines10-80Initializing AppleScript10-80Getting and Setting Styles for Source Data10-82Generic Scripting Component Routines10-84Getting and Setting the Default Scripting Component10-86Using Component-Specific Routines10-87Routines Used by Scripting Components10-92Manipulating Trailers for Generic Storage Descriptor Records10-92Application-Defined Routines10-94Summary of Scripting Components10-99Pascal Summary10-99Constants10-99Data Types10-105Required Scripting Component Routines10-106Optional Scripting Component Routines10-107AppleScript Component Routines10-110Generic Scripting Component Routines10-110Routines Used by Scripting Components10-111Application-Defined Routines10-111C Summary10-112Constants10-112Data Types10-118Required Scripting Component Routines10-119Optional Scripting Component Routines10-120AppleScript Component Routines10-123Generic Scripting Component Routines10-123Routines Used by Scripting Components10-124Application-Defined Routines10-124Result Codes10-125Chapter 11    Program-to-Program Communications Toolbox11-1About the PPC Toolbox11-4Ports, Sessions, and Message Blocks11-4Setting Up Authenticated Sessions11-6Using the PPC Toolbox11-10PPC Toolbox Calling Conventions11-14Specifying Port Names and Location Names11-17Opening a Port11-20Browsing for Ports Using the Program Linking Dialog Box11-22Obtaining a List of Available Ports11-27Preparing for a Session11-29Initiating a PPC Session11-29Receiving Session Requests11-35Accepting or Rejecting Session Requests11-37Exchanging Data During a PPC Session11-39Reading Data From an Application11-40Sending Data to an Application11-42Ending a Session and Closing a Port11-43Invalidating Users11-44PPC Toolbox Reference11-46Data Structures11-46The PPC Toolbox Parameter Block11-46The PPC Port Record11-48The Location Name Record11-49The Port Information Record11-50PPC Toolbox Routines11-50Initializing the PPC Toolbox11-51Using the Program Linking Dialog Box11-51Obtaining a List of Ports11-54Opening and Closing a Port11-56Starting and Ending a Session11-59Receiving, Accepting, and Rejecting a Session11-66Reading and Writing Data11-71Locating a Default User and Invalidating a User11-75Application-Defined Routines11-77Completion Routines for PPC Toolbox Routines11-77Port Filter Functions11-78Summary of the PPC Toolbox11-80Pascal Summary11-80Constants11-80Data Types11-81PPC Toolbox Routines11-87Application-Defined Routines11-88C Summary11-89Constants11-89Data Types11-90PPC Toolbox Routines11-95Application-Defined Routines11-96Assembly-Language Summary11-96Trap Macros11-96Result Codes11-97Chapter 12    Data Access Manager12-1About the Data Access Manager12-5The High-Level Interface12-7Sending a Query Through the High-Level Interface12-8Retrieving Data Through the High-Level Interface12-9The Low-Level Interface12-9Sending a Query Through the Low-Level Interface12-10Retrieving Data Through the Low-Level Interface12-11Comparison of the High-Level and Low-Level Interfaces12-11Using the Data Access Manager12-12Executing Routines Asynchronously12-12General Guidelines for the User Interface12-13Keep the User in Control12-13Provide Feedback to the User12-13Using the High-Level Interface12-14Writing a Status Routine for High-Level Functions12-22Using the Low-Level Interface12-28Getting Information About Sessions in Progress12-35Processing Query Results12-36Getting Query Results12-36Converting Query Results to Text12-42Creating a Query Document12-46User Interface Guidelines for Query Documents12-46Contents of a Query Document12-48Query Records and Query Resources12-51Writing a Query Definition Function12-51Data Access Manager Reference12-54Data Structures12-54The Asynchronous Parameter Block12-55The Query Record12-56The Results Record12-58Data Access Manager Routines12-59Initializing the Data Access Manager12-60High-Level Interface: Handling Query Documents12-61High-Level Interface: Handling Query Results12-65Low-Level Interface: Controlling the Session12-68Low-Level Interface: Sending and Executing Queries12-76Low-Level Interface: Retrieving Results12-82Installing and Removing Result Handlers12-86Application-Defined Routines12-89Resources12-90The Query Resource12-90The Query String Resource12-91The Query Definition Function Resource12-92Summary of the Data Access Manager12-93Pascal Summary12-93Constants12-93Data Types12-94Data Access Manager Routines12-96Application-Defined Routines12-98C Summary12-98Constants12-98Data Types12-100Data Access Manager Routines12-101Application-Defined Routines12-103Assembly-Language Summary12-103Trap Macros12-103Result Codes12-104GlossaryGL-1IndexIN-1Figures, Tables, and ListingsPreface    About This BookxxiiiChapter 1    Introduction to Interapplication Communication1-1Figure 1-1    Principal methods of communication between applications1-5Figure 1-2    Sharing data with the aid of the Edition Manager1-7Figure 1-3    A publisher, an edition, and a subscriber1-8Figure 1-4    Sharing dynamic data with other applications1-8Figure 1-5    Sending and responding to Apple events with the aid of the Apple Event Manager1-10Figure 1-6    A Set Data event1-12Figure 1-7    How a scripting component executes a script1-14Figure 1-8    A Set Data event sent during script execution1-17Figure 1-9    Recording user actions in a factored application1-19Figure 1-10    Controlling an application’s own behavior by executing a script1-20Figure 1-11    Posting an invoice and updating a database by executing a script1-21Chapter 2    Edition Manager2-1Figure 2-1    The default edition icon2-4Figure 2-2    A publisher, an edition, and a subscriber2-5Figure 2-3    The publisher dialog box2-5Figure 2-4    The subscriber dialog box2-7Figure 2-5    A document and its corresponding editions2-8Figure 2-6    Publisher and subscriber borders2-9Figure 2-7    Edition Manager commands in the Edit menu2-10Figure 2-8    Edition Manager commands under the Publishing menu command2-11Figure 2-9    A document with a publisher and subscriber and its resource fork2-16Figure 2-10    The new publisher alert box2-19Figure 2-11    A sample publisher dialog box2-29Figure 2-12    A sample subscriber dialog box2-37Figure 2-13    The publisher options dialog box with update mode set to On Save2-43Figure 2-14    The publisher options dialog box with update mode set to Manually2-44Figure 2-15    The subscriber options dialog box with update mode set to Automatically2-44Figure 2-16    The subscriber options dialog box with update mode set to Manually2-45Figure 2-17    Edit menu with Show/Hide Borders menu command2-51Figure 2-18    Publisher borders2-52Figure 2-19    Subscriber borders2-53Figure 2-20    A publisher with contents removed2-54Figure 2-21    A publisher border within a spreadsheet document2-55Figure 2-22    A publisher border with resize handles2-56Figure 2-23    A publisher and subscriber with clipped graphics2-57Figure 2-24    Creating multiple publishers alert box2-58Figure 2-25    Saving multiple publishers alert box2-58Figure 2-26    Subscribing directly to a 'PICT' file2-62Listing 2-1    Accepting Section Read events and verifying if a section is registered2-14Listing 2-2    Saving a document containing sections2-21Listing 2-3    Opening a document containing sections2-23Listing 2-4    Creating a publisher2-33Listing 2-5    Writing data to an edition2-36Listing 2-6    Creating a subscriber2-40Listing 2-7    Reading in edition data2-42Listing 2-8    Responding to action codes2-46Listing 2-9    Using your own edition opener function2-67Chapter 3    Introduction to Apple Events3-1Figure 3-1    An Open Documents event3-4Figure 3-2    A Get Data event3-7Figure 3-3    Major attributes and direct parameter of an Open Documents event3-10Figure 3-4    Major attributes and direct parameter of a Get Data event3-11Figure 3-5    A descriptor record whose data handle refers to an unterminated string3-13Figure 3-6    A descriptor record whose data handle refers to event class data3-14Figure 3-7    A keyword-specified descriptor record for the event class attribute of an Open Documents event3-16Figure 3-8    A descriptor list for a list of aliases3-17Figure 3-9    Data structures within an Open Documents event3-19Figure 3-10    Accepting and processing an Open Documents event3-21Figure 3-11    The Apple Event Manager calling the handler for an Open Documents event3-22Figure 3-12    Responding to an Open Documents event3-27Figure 3-13    Data structures within a simple object specifier record3-37Figure 3-14    An object specifier record in a Get Data event3-38Figure 3-15    Superclasses and subclasses3-40Figure 3-16    The object class inheritance hierarchy for the object class cWindow3-44Figure 3-17    An Apple event object of class cWord contained in an Apple event object of class cParagraph3-46Chapter 4    Responding to Apple Events4-1Figure 4-1    A document with a button that triggers a Get Data event4-51Figure 4-2    A server application displaying a dialog box that requests information from the user4-52Figure 4-3    Handling user interaction4-53Figure 4-4    Handling user interaction with the kAEWaitReply flag set4-54Figure 4-5    Handling user interaction with the kAEQueueReply flag set4-55Table 4-1    Coercion handling provided by the Apple Event Manager4-43Table 4-2    Descriptor types used by the Apple Event Manager (excluding those used with object specifier records)4-57Listing 4-1    A DoEvent procedure4-5Listing 4-2    A DoHighLevelEvent procedure for handling Apple events and other high-level events4-6Listing 4-3    Adding entries for the required Apple events to an application’s Apple event dispatch table4-8Listing 4-4    Adding entries for Apple events sent by the Edition Manager to an application’s Apple event dispatch table4-9Listing 4-5    A handler for the Open Application event4-15Listing 4-6    A handler for the Open Documents event4-15Listing 4-7    A handler for the Print Documents event4-18Listing 4-8    A handler for the Quit Application event4-19Listing 4-9    A handler for the Create Publisher event4-23Listing 4-10    Extracting items from a descriptor list4-33Listing 4-11    A function that checks for a keyMissedKeywordAttr attribute4-35Listing 4-12    Adding the keyErrorString parameter to the reply Apple event4-38Listing 4-13    Adding parameters to the reply Apple event4-39Listing 4-14    Using the AEInteractWithUser function4-50Chapter 5    Creating and Sending Apple Events5-1Listing 5-1    Creating the optional keyword for the Create Publisher event5-9Listing 5-2    Creating a target address5-11Listing 5-3    Specifying a target address in an Apple event by using the PPCBrowser function5-12Listing 5-4    Sending an Apple event5-17Listing 5-5    An idle function5-23Chapter 6    Resolving and Creating Object Specifier Records6-1Figure 6-1    Resolving an object specifier record for a table in a document6-6Figure 6-2    Nested object specifier records that specify a container hierarchy6-10Figure 6-3    The container hierarchy for the first row in a table that meets a test6-18Figure 6-4    A logical descriptor record that specifies a test6-19Figure 6-5    Descriptor record for an application-defined token that identifies a document6-39Figure 6-6    Descriptor record for an application-defined token that identifies the pbounds property of a window6-40Figure 6-7    A container hierarchy created by the Apple Event Manager using a whose descriptor record6-43Table 6-1    Standard descriptor types used with keyAEKeyData6-12Table 6-2    Keyword-specified descriptor records for typeCompDescriptor6-16Table 6-3    Keyword-specified descriptor records for typeLogicalDescriptor6-17Table 6-4    Keyword-specified descriptor records in a descriptor record of type typeRangeDescriptor6-20Table 6-5    Keyword-specified descriptor records for typeWhoseDescriptor6-42Table 6-6    Keyword-specified descriptor records for typeWhoseRange6-44Table 6-7    Nested object specifier records that describe a container hierarchy6-56Table 6-8    Object specifier record for the first row that meets a test in the table named “MyAddresses”6-65Table 6-9    Logical descriptor record that specifies a test6-66Table 6-10    A range descriptor record6-73Table 6-11    Keyword-specified descriptor records for typeObjectSpecifier6-76Listing 6-1    Installing object accessor functions that find elements of different classes for container tokens of the same type6-23Listing 6-2    Installing one object accessor function that finds elements of different classes for container tokens of one type6-25Listing 6-3    Installing object accessor functions that find elements of the same class for container tokens of different types6-25Listing 6-4    Installing object accessor functions that locate elements of different classes in the default container6-26Listing 6-5    An object accessor function that locates Apple event objects of object class cDocument6-30Listing 6-6    An object accessor function that locates Apple event objects of object class cParagraph6-32Listing 6-7    An object accessor function that locates Apple event objects of object class cWord6-34Listing 6-8    An object accessor function that locates Apple event objects of object class cWindow6-35Listing 6-9    An object accessor function that identifies any property of a window6-38Listing 6-10    An object-counting function6-49Listing 6-11    Object-comparison function that compares two Apple event objects6-52Listing 6-12    Creating an object specifier record using CreateObjSpecifier6-58Listing 6-13    Using CreateObjSpecifier in an application-defined function6-59Listing 6-14    Specifying a document container6-61Listing 6-15    Specifying a table container6-62Listing 6-16    Creating an object specifier record with the key form formName6-67Listing 6-17    Creating a comparison descriptor record6-68Listing 6-18    Creating a logical descriptor record6-70Listing 6-19    Creating a complex object specifier record6-70Listing 6-20    Creating a range descriptor record6-74Chapter 7    Introduction to Scripting7-1Figure 7-1    A script window in the Script Editor application7-6Figure 7-2    Script file icons in the Finder and corresponding user actions7-7Figure 7-3    How the AppleScript component executes a script7-9Figure 7-4    How an application uses the AppleScript component to execute a script7-13Figure 7-5    Role of the 'aete' and 'aeut' resources when the AppleScript component compiles and executes a script7-18Figure 7-6    Role of the 'aete' and 'aeut' resources when the AppleScript component records and decompiles a script7-19Figure 7-7    Using a handler in a script context to handle an Apple event7-26Chapter 8    Apple Event Terminology Resources8-1Figure 8-1    Structure of an 'aeut' or 'aete' resource8-26Figure 8-2    Structure of the header data in an 'aeut' or 'aete' resource8-27Figure 8-3    Structure of suite data in an 'aeut' or 'aete' resource8-28Figure 8-4    Structure of event data in an 'aeut' or 'aete' resource8-30Figure 8-5    Structure of additional parameter data in an 'aeut' or 'aete' resource8-34Figure 8-6    Structure of object class data in an 'aeut' or 'aete' resource8-36Figure 8-7    Structure of property data in an 'aeut' or 'aete' resource8-38Figure 8-8    Structure of element class data in an 'aeut' or 'aete' resource8-41Figure 8-9    Structure of comparison operator data in an 'aeut' or 'aete' resource8-42Figure 8-10    Structure of enumeration data in an 'aeut' or 'aete' resource8-43Figure 8-11    Structure of enumerator data in an 'aeut' or 'aete' resource8-44Table 8-1    Syntax for AppleScript arguments that correspond to direct parameters8-5Table 8-2    Syntax for AppleScript arguments that correspond to insertion location descriptor records8-6Table 8-3    Structure of the 'aeut' and 'aete' resources8-8Listing 8-1    Resource type declaration for the 'aeut' resource8-9Listing 8-2    Rez input for an 'aete' resource for an application that supports the Required and Core suites in their entirety8-15Listing 8-3    Rez input for an 'aete' resource that extends the definitions of the Required, Core, and Text suites8-17Listing 8-4    A handler for the Get AETE event8-25Listing 8-5    Resource type declaration for the 'scsz' resource8-45Chapter 9    Recording Apple Events9-1Listing 9-1    A function used by a factored application to send itself a Quit Application event9-7Listing 9-2    A routine used by a factored application to handle a Quit Application event9-8Listing 9-3    A routine used by a factored application to send itself a Create Element event9-10Listing 9-4    The Create Element event handler for a factored application9-11Listing 9-5    A routine used by a factored application to handle window movement9-13Chapter 10    Scripting Components10-1Figure 10-1    A generic storage descriptor record10-12Figure 10-2    A component-specific storage descriptor record10-13Listing 10-1    Locating a scripting component that supports specific optional routines10-6Listing 10-2    A routine that compiles and executes source data10-9Listing 10-3    A procedure that uses OSAScriptError to get information about an execution error10-11Listing 10-4    A routine that loads and executes script data previously saved using a generic storage descriptor record10-16Listing 10-5    A routine that displays a compiled script for editing and recompiles it10-18Listing 10-6    A function that loads and modifies script data, then saves it using a generic storage descriptor record10-19Listing 10-7    A general Apple event handler that uses the OSADoEvent function10-21Chapter 11    Program-to-Program Communications Toolbox11-1Figure 11-1    A PPC Toolbox session between two applications11-5Figure 11-2    The icon for the Sharing Setup control panel11-6Figure 11-3    The Sharing Setup control panel11-6Figure 11-4    The session termination alert box11-7Figure 11-5    The users and groups dialog box11-8Figure 11-6    The user termination alert box11-8Figure 11-7    The guest dialog box11-9Figure 11-8    The PPC Toolbox authentication process11-10Figure 11-9    Database and spreadsheet applications using the PPC Toolbox11-13Figure 11-10    Two Macintosh applications and their corresponding ports11-18Figure 11-11    The PPC Toolbox and a dictionary service application11-20Figure 11-12    The program linking dialog box11-22Figure 11-13    The program linking dialog box without a zone list11-23Figure 11-14    The user identity dialog box11-30Figure 11-15    The incorrect password dialog box11-31Figure 11-16    The invalid user name dialog box11-31Figure 11-17    Transmitting message blocks11-40Figure 11-18    The PPC Toolbox parameter blocks11-47Listing 11-1    Initializing the PPC Toolbox using the PPCInit function11-12Listing 11-2    Opening a PPC port11-21Listing 11-3    Using a port filter function11-24Listing 11-4    Browsing through dictionary service ports11-26Listing 11-5    Using the IPCListPorts function to obtain a list of ports11-28Listing 11-6    Using the StartSecureSession function to establish a session11-32Listing 11-7    Initiating a session using the PPCStart function11-34Listing 11-8    Using the PPCInform function to enable a port to receive sessions11-36Listing 11-9    Completion routine for a PPCInform function11-37Listing 11-10    Accepting a session request using the PPCAccept function11-38Listing 11-11    Completion routine for a PPCAccept function11-38Listing 11-12    Rejecting a session request using the PPCReject function11-39Listing 11-13    Completion routine for a PPCReject function11-39Listing 11-14    Using the PPCRead function to read data during a session11-41Listing 11-15    Polling the ioResult field to determine if a PPCRead function has completed11-41Listing 11-16    Using the PPCWrite function to write data during a session11-42Listing 11-17    Polling the ioResult field to determine if a PPCWrite function has completed11-43Listing 11-18    Ending a PPC session using the PPCEnd function11-43Listing 11-19    Closing a PPC port using the PPCClose function11-44Listing 11-20    Using the DeleteUserIdentity function to invalidate a user identity11-45Chapter 12    Data Access Manager12-1Figure 12-1    A connection with a database12-6Figure 12-2    Using high-level Data Access Manager routines12-8Figure 12-3    Using low-level Data Access Manager routines12-10Figure 12-4    A flowchart of a session using the high-level interface12-15Figure 12-5    A flowchart of a session using the low-level interface12-29Figure 12-6    A query document dialog box12-47Figure 12-7    The relationship between resources in a query document and the query record12-49Figure 12-8    The relationship between a query definition function and queries12-50Figure 12-9    Structure of a compiled query ('qrsc') resource12-90Figure 12-10    Structure of a compiled query string ('wstr') resource12-91Table 12-1    Data types defined by the Data Access Manager12-38Listing 12-1    Using the high-level interface12-18Listing 12-2    Two completion routines12-21Listing 12-3    A sample status routine12-26Listing 12-4    Sending a query fragment12-31Listing 12-5    Using the low-level interface12-33Listing 12-6    A result handler12-45Listing 12-7    A query definition function12-52About This BookThis book, Inside Macintosh: Interapplication Communication, describes the interapplication communication architecture, which provides a standard and extensible mechanism for communication among Macintosh applications. This book also describes the system software routines that you can use to implement various forms of interapplication communication in your application.If you are new to programming on the Macintosh computer, you should read Inside Macintosh: Overview for an introduction to general concepts of Macintosh programming; Inside Macintosh: Macintosh Toolbox Essentials for information on how to use menus, windows, and controls in your application; and Macintosh Human Interface Guidelines for a complete discussion of user interface guidelines and principles that every Macintosh application should follow.This book describes how to implement publish and subscribe features in your application, how to communicate with other applications using Apple events, how to respond to scripts, and how to exchange information with other applications using the PPC Toolbox. It also discusses how your application can use the Data Access Manager to access information from a database application or other data source.For an overview of all the features provided by the interapplication communication architecture, see the chapter “Introduction to Interapplication Communication” in this book.To provide support for publish and subscribe features in your application, see the chapter “Edition Manager” in this book. This chapter describes how your application can allow users to share dynamic data among many documents.To communicate with other applications by using Apple events, first see the chapter “Introduction to Apple Events” for a general introduction to Apple events. For information on how to respond to the required Apple events, see the chapter “Responding to Apple Events.” To create and send Apple events, see the chapter “Creating and Sending Apple Events.”You can choose to write your application so that it can recognize descriptions, in Apple events, of objects in the application such as words, paragraphs, shapes, or documents. To do so, see the chapter “Resolving and Creating Object Specifier Records.”In addition to supporting Apple events, you can make your application scriptable—that is, capable of responding to Apple events sent to it by a scripting component. By executing scripts, users of scriptable applications can automate repetitive tasks or conditional tasks that involve multiple applications. For more general information about scripting, see the chapter “Introduction to Scripting.” See the chapter “Apple Event Terminology Resources” for information on the resources your application needs to provide in order to be scriptable.You can also make your application recordable, that is, capable of recording a user’s actions for later playback. For more information, see the chapter “Recording Apple Events.”For information on how your application can execute a script with the aid of a scripting component, see the chapter “Scripting Components.”Although you’ll usually want to use Apple events to communicate with other applications, if you need low-level control of communication between applications you can use the Program-to-Program Communications (PPC) Toolbox. For more information, see the chapter “Program-to-Program Communications Toolbox.”Applications can use the Data Access Manager to access information from a database application or other data source. For example, a user in San Francisco might use a spreadsheet application to request data from a company database in New York. The spreadsheet application can use the Data Access Manager to request the data from the database. The database application in New York sends back the requested data, and the spreadsheet application can then use this data to generate a graph of the information. For information on sending and retrieving information from a data source, see the chapter “Data Access Manager.”For definitions of specific Apple events and Apple event objects, see the Apple Event Registry: Standard Suites, available from APDA.For information on handling files in your application and a description of aliases and alias records, see Inside Macintosh: Files.For information on processes and process serial numbers, see Inside Macintosh: Processes.Format of a Typical ChapterAlmost all chapters in this book follow a standard structure. For example, the chapter “Creating and Sending Apple Events” contains these sections:n    “Creating an Apple Event” and “Sending an Apple Event.” These sections describe how your application can create and send Apple events. They describe the Apple Event Manager routines that you can use to accomplish these tasks, give related user interface information, and provide code samples and additional information.n    “Reference to Creating and Sending Apple Events.” This section provides a complete reference to the Apple Event Manager routines you can use to create and send Apple events. Each routine description also follows a standard format, which presents the routine declaration followed by a description of every parameter of the routine. Some routine descriptions also give additional descriptive information, such as assembly-language information or result codes.n    “Summary of Creating and Sending Apple Events.” This section provides the Pascal and C interfaces for the constants, data structures, routines, and result codes associated with the Apple Event Manager routines for creating and sending Apple events. It also includes relevant assembly-language interface information.Conventions Used in This BookInside Macintosh uses various conventions to present information. Words that require special treatment appear in specific fonts or font styles. Certain information, such as the contents of registers, use special formats so that you can scan them quickly.Special FontsAll code listings, reserved words, and the names of actual data structures, fields, constants, parameters, and routines are shown in Courier (this is Courier).Words that appear in boldface are key terms or concepts and are defined in the Glossary.Types of NotesThere are several types of notes used in this book.NoteA note like this contains information that is interesting but possibly not essential to an understanding of the main text. (An example appears on page 3-26.)uIMPORTANTA note like this contains information that is essential for an understanding of the main text. (An example appears on page 3-33.)ssWARNINGWarnings like this indicate potential problems that you should be aware of as you design your application. Failure to heed these warnings could result in system crashes or loss of data. (An example appears on page page 4-10.)sAssembly-Language InformationSome chapters provide additional assembly-language information. For example, Inside Macintosh provides information about the registers for specific routines like this:Registers on entry        A0    Contents of register A0 on entry    Registers on exit        D0    Contents of register D0 on exit    In addition, Inside Macintosh provides information about the fields of a parameter block in this format:´    inAndOut    Integer    Input/output parameter.    ¨    output1    Ptr    Output parameter.    Æ    input1    Ptr    Input parameter.    The arrow in the far left column indicates whether the field is an input parameter, output parameter, or both. You must supply values for all input parameters and input/output parameters. The routine returns values in output parameters and input/output parameters.The second column shows the field name as defined in the MPW Pascal interface files; the third column indicates the Pascal data type of that field. The fourth column provides a brief description of the use of the field. For a complete description of each field, see the discussion that follows the parameter block or the description of the parameter block in the reference section of the chapter.The Development EnvironmentThe system software routines described in this book are available using Pascal, C, or assembly-language interfaces. How you access these routines depends on the development environment you are using. When showing system software routines, this book uses the Pascal interface available with the Macintosh Programmer’s Workshop (MPW).All code listings in this book are shown in Pascal (except for listings that describe resources, which are shown in Rez-input format). They show methods of using various routines and illustrate techniques for accomplishing particular tasks. All code listings have been compiled and, in many cases, tested. However, Apple Computer, Inc., does not intend for you to use these code samples in your application. You can find the location of code listings in the list of figures, tables, and listings. If you know the name of a particular routine (such as MyHandleODoc or MyHandleQuit) shown in a code listing, you can find the page on which the routine occurs by looking under the entry “sample routines” in the index of this book.In order to make the code listings in this book more readable, they show only limited error handling. You need to develop your own techniques for handling errors. This book occasionally illustrates concepts by reference to sample applications called SurfWriter, SurfDB, and SurfCharter; these are not actual products of Apple Computer, Inc.APDA is Apple’s worldwide source for over three hundred development tools, technical resources, training products, and information for anyone interested in developing applications on Apple platforms. Customers receive the quarterly APDA Tools Catalog featuring all current versions of Apple development tools and the most popular third-party development tools. Ordering is easy; there are no membership fees, and application forms are not required for most of our products. APDA offers convenient payment and shipping options, including site licensing.To order products or to request a complimentary copy of the APDA Tools Catalog, contactAPDA Apple Computer, Inc. P.O. Box 319Buffalo, NY 14207-0319Telephone    800-282-2732 (United States)800-637-0029 (Canada)716-871-6555 (International)    Fax    716-871-6511     AppleLink    APDA    America Online    APDA    CompuServe    76666,2405    Internet    APDA@applelink.apple.com            If you provide commercial products and services, call 408-974-4897 for information on the developer support programs available from Apple.For information on registering signatures, file types, and other technical information, contactMacintosh Developer Technical SupportApple Computer, Inc.20525 Mariani Avenue, M/S 75-3TCupertino, CA 95014-6299The Apple Event Registrar maintains the Apple Event Registry: Standard Suites and other information about the ongoing development of Apple event suites. For more information about Apple event suites, including those under development, send electronic mail to the AppleLink address REGISTRY.Listing 1-0Table 1-0Introduction to Interapplication CommunicationContentsOverview of Interapplication Communication1-3Sharing Data Among Applications1-6Sending and Responding to Apple Events1-9Standard Apple Events1-10Handling Apple Events1-12Supporting AppleScript and Other Scripting Languages1-13Scriptable Applications1-16Recordable Applications1-18Applications That Manipulate and Execute Scripts1-19Exchanging Message Blocks1-22Introduction to Interapplication CommunicationThis chapter describes the interapplication communication (IAC) architecture for Macintosh computers, summarizes how your application can take advantage of it, and tells you where in this book to find the information you need to perform specific tasks.The Apple Event Manager, Event Manager, and Program-to-Program Communications (PPC) Toolbox underlie all the IAC tasks your application can perform. This chapter introduces the Apple Event Manager and the Program-to-Program Communications Toolbox. For information about the Event Manager, see Inside Macintosh: Macintosh Toolbox Essentials. For definitions of the standard Apple events available for use by all applications, see the Apple Event Registry: Standard Suites.The IAC architecture includes the Open Scripting Architecture (OSA). The OSA provides a mechanism that allows users to control multiple applications by means of scripts, or sets of instructions, written in a variety of scripting languages. Each scripting language has a corresponding scripting component that is managed by the Component Manager. When a user executes a script, the scripting component sends Apple events to one or more applications to perform the actions the script describes.This chapter introduces the OSA and describes how to make your application scriptable, or capable of responding to Apple events sent to it by a scripting component. For more information about using the Component Manager, see Inside Macintosh: More Macintosh Toolbox.Overview of Interapplication CommunicationThe interapplication communication (IAC) architecture provides a standard and extensible mechanism for communication among Macintosh applications. The IAC architecture makes it possible for your application ton    provide automated copy and paste operations between your application and other applicationsn    be manipulated by means of scriptsn    send and respond to Apple eventsn    send and respond to high-level events other than Apple eventsn    read and write blocks of data between applicationsThe chapter “Event Manager” in Inside Macintosh: Macintosh Toolbox Essentials describes how your application can use Event Manager routines to send and respond to high-level events. High-level events need not adhere to any specific protocol, so their interpretation is defined by each application that sends or receives them.The most important requirement for high-level communication among all applications is a common vocabulary of events. To provide such a standard, Apple Computer, Inc., has defined a protocol called the Apple Event Interprocess Messaging Protocol (AEIMP). High-level events that conform to this protocol are called Apple events. The vocabulary of publicly available Apple events is published in the Apple Event Registry: Standard Suites, which defines the standard Apple events that developers and Apple have worked out for use by all applications. To ensure that your application can communicate at a high level with other applications that support Apple events now and in the future, you should support the standard Apple events that are appropriate for your application. Effective IAC requires close cooperation among applications at several levels. In addition to the format for high-level events and the standard vocabulary of Apple events, Apple has defined several other standards your application can use to communicate with other applications. These include standard methods for dealing with shared dynamic data, scripts, and low-level message blocks. The IAC architecture comprises the following parts: n    The Edition Manager allows applications to automate copy and paste operations between applications, so that data can be shared dynamically.n    The Open Scripting Architecture (OSA) provides a standard mechanism, based on the Apple Event Manager, that allows users to control multiple applications by means of scripts written in a variety of scripting languages.n    The Apple Event Manager allows applications to send and respond to Apple events.n    The Event Manager allows applications to send and respond to high-level events other than Apple events.n    The Program-to-Program Communications (PPC) Toolbox allows applications to exchange blocks of data with each other by reading and writing low-level message blocks. It also provides a standard user interface that allows a user working in one application to select another application with which to exchange data.Figure 1-1 shows the primary relationships among these parts. The managers and components toward the top of the figure rely on the managers beneath them. The Edition Manager uses the services of the Apple Event Manager to support dynamic data sharing. Scripting components manipulate and execute scripts with the aid of the Apple Event Manager. The Apple Event Manager in turn relies on the Event Manager to send Apple events as high-level events, and the Event Manager uses the services of the PPC Toolbox. Figure 1-1 also shows the five principal means of communication provided by the IAC architecture. In addition to using the Edition Manager and scripting components to send Apple events on their behalf, applications can use the Apple Event Manager directly to send Apple events to other applications. All applications can use the Apple Event Manager to respond appropriately to Apple events, whether they are sent by the Edition Manager, a scripting component, or other applications. Applications can also use the Event Manager directly to send or receive high-level events other than Apple events, and the PPC Toolbox directly to send or receive blocks of data.Figure 1-1    Principal methods of communication between applicationsThe five forms of IAC shown in Figure 1-1 can be summarized as follows:n    Sharing dynamic data. The Edition Manager allows users to copy data from one application’s document to another application’s document, updating information automatically when the data in the original document changes. The verbs publish and subscribe describe this form of dynamic data sharing, and the noun edition describes a copy of the data to be shared. Applications that support dynamic data sharing must implement the Create Publisher and Subscribe To menu commands. The Edition Manager provides the interface that allows applications to share editions.You can let users publish and subscribe on a local volume or across a network. In general, users should be able to publish or subscribe to anything that they can copy or paste. “Sharing Data Among Applications,” which begins on page 1-6, describes how you can use the publish and subscribe features in your application.n    Scripting. The OSA includes the Apple Event Manager, the Apple events defined by the Apple Event Registry: Standard Suites, and the routines supported by scripting components, which applications can use via the Component Manager to execute scripts. Script-editing applications such as Script Editor (not shown in Figure 1-1) allow users to manipulate and execute scripts. Each scripting language has a corresponding scripting component that can execute scripts written in that language. Scripting components typically implement a text-based scripting language based on Apple events. For example, the AppleScript component implements AppleScript, the standard user scripting language defined by Apple Computer, Inc. When the AppleScript component executes a script, it performs the actions described in the script, including sending Apple events to applications when necessary. “Supporting AppleScript and Other Scripting Languages,” which begins on page 1-13, describes how the OSA makes it possible for your application to n    provide human-language equivalents to Apple event codes so that scripting components can send your application the appropriate Apple events during script executionn    allow users to record their actions in the form of a scriptn    manipulate and execute scriptsn    Sending and responding to Apple events. Your application can send Apple events directly to other applications to request services or information or to provide information. To support AppleScript and most other scripting languages based on the OSA, your application must be able to respond to Apple events. “Sending and Responding to Apple Events,” which begins on page 1-9, describes how applications can send and respond to Apple events with the aid of the Apple Event Manager.n    Sending and responding to other high-level events. The Event Manager allows applications to support high-level events other than Apple events. See the chapter “Event Manager” in Inside Macintosh: Macintosh Toolbox Essentials for information about high-level events.n    Exchanging message blocks. The PPC Toolbox allows applications to exchange blocks of data with each other by reading and writing low-level message blocks. This method of communication is most useful for applications that are closely integrated, specifically designed to work together, or dependent on each other for information. It can also be used in code that is not event-based. See “Exchanging Message Blocks” on page 1-22 for a summary of the capabilities provided by the PPC Toolbox.All forms of IAC are based on the premise that applications cooperate with each other. Both the application sending a high-level event or low-level message block and the application receiving it must agree on the protocol for communication. You can ensure effective high-level communication between your application and other Macintosh applications by supporting the standard Apple events defined in the Apple Event Registry: Standard Suites. Sharing Data Among ApplicationsAll Macintosh applications can use the Scrap Manager to share static data by allowing the user to copy and paste data between documents. Dynamic data sharing, or automated copy and paste operations between applications, extends this capability to dynamically changing data. The Edition Manager lets applications share dynamic data at the user’s request. You incorporate publish and subscribe capabilities in your application much as you incorporate copy and paste capabilities.A user can publish data by selecting a portion of text, graphics, or other data in a document and choosing Create Publisher from the Edit menu. In response, your application saves the selected information in a separate file. This stored information is referred to as an edition. The user can subscribe to an edition by choosing Subscribe To from the Edit menu; when the user selects a file that contains an edition, your application includes the information from the edition in the current document. The information in an edition can be shared by many documents.Figure 1-2 shows the principal relationships among the Edition Manager, the publishing application, the subscribing application, and the file that contains the edition. In addition to the relationships illustrated in the figure, the Edition Manager uses the Apple Event Manager to communicate with applications that are sharing dynamic data.Figure 1-2    Sharing data with the aid of the Edition ManagerA publisher is a portion of a document that is made available to other documents through an edition. A subscriber is a portion of a document that reads the information from an edition. Figure 1-3 shows a document containing a publisher, a file containing an edition, and a document containing a subscriber. The bottom fish in the Fishes of the World document is a publisher. The information from this publisher is made available to other documents through the Illustration edition. The Aquarium poster document contains a subscriber that gets its information from the Illustration edition. Note that when a user selects a publisher or subscriber within a document, your application should display a border surrounding the publisher or subscriber.In general, when a user modifies the contents of a publisher and saves the document, your application should write the new data to the edition. The Edition Manager then uses the Apple Event Manager to inform all open applications with subscribers to the edition that it has been updated. These applications can then automatically update the subscribers in the documents.Figure 1-3    A publisher, an edition, and a subscriberFor example, suppose the user changes the color of the fish in the Fishes of the World document shown in Figure 1-3, then saves the document. This automatically changes the Illustration edition, and the subscribing application can update the Aquarium poster document if that’s what the user wants to do.Figure 1-4 shows how a user might create a poster from information contained in other documents.Figure 1-4    Sharing dynamic data with other applicationsYour application should save the new information in the edition whenever the user edits the publisher and saves the document that contains the publisher—unless the user has indicated that the information should be saved in the edition on request only. When the user saves new information in an edition, the Edition Manager replaces the previous contents.When an edition is updated, the Edition Manager informs your application. Your application should then update any subscribers (unless the user has indicated that updates should be incorporated on request only).For example, suppose a user opens a word-processing document called My Stocks that accesses information from an edition called Stock Report. The Stock Report edition might be updated twice a day by an online database. As the information in the edition changes, the My Stocks document can receive automatic updates with the latest information.You can implement publish and subscribe capabilities in your application by using the routines provided by the Edition Manager and supporting the related Apple events. The chapter “Edition Manager” in this book provides sample code that shows how to add these features to your application. The chapter “Responding to Apple Events” in this book describes how to support the related Apple events. Sending and Responding to Apple EventsAn Apple event is a high-level event that conforms to the Apple Event Interprocess Messaging Protocol. The Apple Event Manager uses the Event Manager to send Apple events between applications on the same computer or between applications on remote computers.   Applications typically use Apple events to request services and information from other applications or to provide services and information in response to such requests. For example, any application can use the Get Data Apple event to request that your application locate and return a particular set of data, such as a table. If your application supports the Get Data event, it should be able to recognize the event and respond by locating the requested data and returning a copy of the data to the application that requested it.  Communication between two applications that support Apple events is initiated by a client application, which sends an Apple event to request a service or information. For example, a client application might request services such as printing specific files, checking the spelling of a list of words, or performing a numeric calculation; or it might request information, such as one customer’s address or a list of names and addresses of all customers living in Ohio. The application providing the service or the requested information is called a server application. The client and server applications can reside on the same local computer or on remote computers connected to a network. Figure 1-5 shows the relationships among a client application, the Apple Event Manager, and a server application. The client application uses Apple Event Manager routines to create and send the Apple event, and the server application uses Apple Event Manager routines to interpret the Apple event and respond appropriately. If the client application so requests, the server application adds information to a reply Apple event that the Apple Event Manager returns to the client application. Figure 1-5    Sending and responding to Apple events with the aid of the Apple Event ManagerIf an Apple event is one of the standard events defined in the Apple Event Registry: Standard Suites, the client application can construct the event and the server application can interpret it according to the standard definition for that event. To ensure that your application can respond to Apple events sent by other applications, you should support the standard Apple events that are appropriate for your application.Standard Apple EventsThe current edition of Apple Event Registry: Standard Suites defines the standard suites of Apple events, which are groups of related events that are usually implemented together. The Apple Event Registrar maintains the Apple Event Registry: Standard Suites and other information about the ongoing development of Apple event suites. The standard suites include the following:  n    The Required suite consists of the four Apple events that the Finder sends to applications. These events are Open Application, Open Documents, Print Documents, and Quit Application. The Finder uses the required events as part of the mechanisms in System 7 and later versions for launching and terminating applications. To support System 7, your application must support the required Apple events as described in the chapter “Responding to Apple Events” in this book.  n    The Core suite consists of the basic Apple events, including Get Data, Set Data, Move, Delete, and Save, that nearly all applications use to communicate. You should support the Apple events in the Core suite that make sense for your application. n    A functional-area suite consists of a group of Apple events that support a related functional area. Functional-area suites include the Text suite and the Database suite. You can decide which functional-area suites to support according to which features your application provides. For example, most word-processing applications should support the Text suite, and most database applications should support the Database suite.You do not need to implement all Apple events at once. You should begin by supporting the required Apple events, then add support for the events sent by the Edition Manager, the core events, and the functional-area events as appropriate for your application. If necessary, you can extend the definitions of the standard Apple events to suit specific capabilities of your application. You can also define your own custom Apple events. However, only those applications that choose to support your custom Apple events explicitly will be able to make use of them. If all applications communicated solely by means of custom Apple events, every application would have to support all other applications’ custom events. Instead of creating custom Apple events, try to use the standard Apple events and extend their definitions as necessary.Apple events describe actions to be performed by the applications that receive them. In addition to a vocabulary of actions, or “verbs,” effective communication between applications requires a method of referring to windows, data (such as words or graphic elements), files, folders, volumes, zones, and other items on which actions can be performed. The Apple Event Manager provides a method for specifying structured names, or “noun phrases,” that applications can use to describe the objects on which Apple events act. The Apple Event Registry: Standard Suites includes definitions for Apple event object classes, which are simply names for objects that can be acted upon by each kind of Apple event. Applications use these definitions and Apple Event Manager routines to create complex descriptions of almost any discrete item in another application or its documents. For example, an application could use Apple Event Manager routines and standard object class definitions to construct a Get Data event that requests “the most recent invoice to John Chapman in the Invoices database on the Archives server in the Accounting zone” and send the event to the appropriate application across the network.An Apple event object is any item supported by an application, such as a word, paragraph, shape, or document, that can be described in an Apple event. In the example just given, the specified invoice, the Invoices database, the Archives server, and the Accounting zone are nested Apple event objects. Nearly any item that a user can differentiate and manipulate on a Macintosh computer can be described as an Apple event object of a specified object class nested within other Apple event objects. When handling an Apple event that includes such a description, an application must locate the specified Apple event object and perform the requested action on it.  Most of the standard Apple events defined in the Apple Event Registry: Standard Suites require your application to recognize specific Apple event object classes. Support for the standard Apple events, including Apple event object classes, allows your application to respond to requests for services or information from any other application or process. Handling Apple EventsFigure 1-6 shows a common Apple event from the Core suite, the Set Data event. The SurfDB application is the client; it sends a Set Data event to the SurfCharter application. This event requests that SurfCharter use some new sales figures generated by SurfDB to update the data for the chart named “Summary of Sales” in the document named “Sales Chart.” The Apple event contains information that identifies an action—setting data—and a description of the Apple event object on which to perform the action—“the chart named Summary of Sales in the document named Sales Report.” The Apple event also includes the new data for the chart.  Figure 1-6    A Set Data eventTo respond appropriately, the SurfCharter application in Figure 1-6 can use the Apple Event Manager to determine what kind of Apple event has been sent and pass the event to the appropriate Apple event handler. An Apple event handler is an application-defined function that extracts pertinent data from an Apple event, performs the requested action, and returns a result. In this case, the Set Data event handler must locate an Apple event object—that is, the specified chart in the specified document—and change the data displayed in the chart as requested. The Apple Event Manager provides routines that a server application can use in its Apple event handlers to take apart an Apple event and examine its contents. The SurfCharter application in Figure 1-6 can interpret the contents of the Set Data Apple event according to the definition of that event in the Apple Event Registry: Standard Suites. The Set Data event handler uses both Apple Event Manager routines and the SurfCharter application’s own routines to locate the chart and make the requested change.The Apple Event Manager also provides routines that a client application can use to construct and send an Apple event. However, the most important requirement for applications that support IAC is the ability to respond to Apple events, because this ability is essential for an application that users can control through scripts. The next section describes how you can use Apple events to support scripting in your application.The chapter “Introduction to Apple Events” in this book provides an overview of Apple events and describes how you can use the Apple Event Manager to implement Apple events in your application. The chapters “Responding to Apple Events,” “Creating and Sending Apple Events,” “Resolving and Creating Object Specifier Records,” and “Recording Apple Events” provide detailed information about the Apple Event Manager.  Supporting AppleScript and Other Scripting LanguagesA script is any collection of data that, when executed by the appropriate program, causes a corresponding action or series of actions. For example, some database, telecommunications, and page-layout applications allow users to automate repetitive or conditional tasks by means of scripts written in proprietary scripting languages. The HyperTalk® scripting language allows users to control the behavior of HyperCard® stacks. Macro programs can automate tasks at the level of mouse clicks and keystrokes.   The Open Scripting Architecture (OSA) provides a standard mechanism that allows users to control multiple applications with scripts written in a variety of scripting languages. Each scripting language has a corresponding scripting component. When a scripting component executes a script, it performs the actions described in the script, including sending Apple events to applications if necessary. The OSA comprises the following parts:n    The Apple Event Manager allows applications to respond to Apple events sent by scripting components (see the previous section, “Sending and Responding to Apple Events”).n    The Apple Event Registry: Standard Suites defines the standard vocabulary of Apple events.n    The standard scripting component data structures, routines, and resources allow applications to interact with any scripting component. n    The AppleScript component implements the AppleScript scripting language.The AppleScript component, which implements the AppleScript scripting language, is the implementation of the OSA provided by Apple Computer, Inc. Users can view a script written in the AppleScript scripting language in several different dialects, or versions of the AppleScript language that resemble specific human languages or programming languages.Figure 1-7 shows the relationships among some of these parts. The client application in Figure 1-7 is Script Editor, an application provided by Apple Computer, Inc., that allows users to record, edit, and execute scripts. The client application could also be any other application that uses the standard scripting component routines to execute scripts. Script Editor uses the Component Manager to open a connection with the scripting component that created the script to be executed. Figure 1-7    How a scripting component executes a scriptLike sound resources, scripts can be stored in applications and documents as well as in distinct script files that can be manipulated from the Finder. Script Editor allows users to execute scripts stored in script files. Users can also execute special script files called script applications simply by opening them from the Finder. During script execution, scripting components perform actions described in the script, using the Apple Event Manager to send Apple events when necessary. The server applications shown in Figure 1-7 use the Apple Event Manager to examine the contents of the Apple events they receive and to respond appropriately. A server application always responds to the same Apple event in the same way, regardless of whether the event is sent by a scripting component or directly by a client application. You can take advantage of the OSA in three ways:n    You can make your application scriptable, or capable of responding to Apple events sent to it by a scripting component. An application is scriptable if itn    Responds to the appropriate standard Apple events. See the previous section, “Sending and Responding to Apple Events.”n    Provides an Apple event terminology extension ('aete') resource that describes which Apple events your application supports and the corresponding human-language terminology for use in scripts. The 'aete' resource allows scripting components to interpret scripts correctly and send the appropriate Apple events to your application during script execution. By executing scripts, users of scriptable applications can perform almost any task that they would otherwise perform by choosing menu commands, typing, and so on. Users can also execute scripts to perform many tasks that might otherwise be difficult to accomplish, especially repetitive or conditional tasks that involve multiple applications.n    You can make your application recordable—that is, capable of sending Apple events to itself in response to user actions such as choosing a menu command or changing the contents of a document. After a user has turned on recording for a particular scripting component, the scripting component receives copies of all subsequent Apple events and records them in the form of a script. n    You can have your application manipulate and execute scripts with the aid of a scripting component. To do so, your application mustn    use the Component Manager to open a connection with the appropriate componentn    use the standard scripting component routines to record, edit, compile, save, load, or execute scripts when necessaryUsers of applications that execute scripts can modify the applications’ behavior by editing the scripts. For example, a user of an invoice program might be able to write a script that checks and if necessary updates customer information in a separate database application each time the user posts an invoice.The sections that follow describe these three kinds of scripting capabilities in more detail. The chapter “Introduction to Scripting” in this book provides an overview of the way scripting components work and how you can implement support for scripting in your application.Scriptable ApplicationsIf your application can respond to standard Apple events sent by other applications, it can also respond to the same Apple events sent by a scripting component. Before executing a script that controls your application, a scripting component must associate the human-language terms used in the script with specific Apple event codes supported by your application. Scriptable applications provide this information in an Apple event terminology extension ('aete') resource.   Because scripting components can obtain information from 'aete' resources about the nature of different applications’ support for Apple events, a single script can describe complex tasks performed cooperatively by several specialized applications. For example, a user can execute an AppleScript script to locate all records in a database with specific characteristics, update a series of charts based on those records, import the charts into a page-layout document, and send the document to a remote computer on the network via electronic mail. When a user executes such a script, the AppleScript component attempts to perform the actions the script describes, including sending Apple events to various applications when necessary. To map human-language terms used in the script to the corresponding Apple events supported by each application, the AppleScript component looks up the terms in the applications’ 'aete' resources. Each human-language term specified by an application’s 'aete' resource has a corresponding Apple event code. After the AppleScript component has identified the Apple event codes for the terms used in a script, it can create and send the Apple events that perform the actions described in the script.To respond appropriately to the Apple events sent to it by the AppleScript component, the database application in this example must be able to locate records with specific characteristics so that it can identify and return the requested data. The other applications involved must support Apple events that perform the other actions described in the script.One line in such a script might be a statement like this:copy Totals to chart "Summary of Sales" of document "Sales Chart"In this statement, the word Totals is a variable that has been set earlier in the same script to the value of the new data generated by a database application. The statement causes the AppleScript component to send a Set Data event updating the chart named “Summary of Sales.” Figure 1-8 shows how the AppleScript component would execute this statement. (Figure 1-6 on page 1-12 shows a database application that sends a similar Set Data event directly.) To interpret the terms in this script statement correctly, the AppleScript component must be able to look them up in the SurfCharter application’s 'aete' resource, which maps those terms to the corresponding codes for Apple events, object classes, and so on used by the Apple Event Manager. The AppleScript component can then create and send the Set Data event to SurfCharter.When it receives the Set Data event, the SurfCharter application uses the Apple Event Manager to determine what kind of Apple event has been sent and to pass the event to SurfCharter’s handler for that event, which in turn locates the chart and changes its data as requested.The chapter “Introduction to Scripting” in this book describes how the 'aete' resource works. The chapter “Apple Event Terminology Resources” describes how to define terminology for use by the AppleScript component and how to create an 'aete' resource.Figure 1-8    A Set Data event sent during script executionRecordable ApplicationsIf you decide to make your application scriptable, you can also make it recordable, allowing users to record their actions in your application in the form of a script. Even users with little or no knowledge of a particular scripting language can record their actions in recordable applications in the form of a script. More knowledgeable users can record scripts and then edit or combine them as desired.  Applications generally have two parts: the code that implements the application’s user interface and the code that actually performs the work of the application when the user manipulates the interface. To make your application fully recordable, you should separate these two parts of your application, using Apple events to connect user actions with the work your application performs. Any significant user action within a recordable application should generate Apple events that a scripting component can record as statements in a script. For example, when a user chooses New from the File menu, a recordable application sends itself a Create Element event, and the application’s handler for that event creates the new document. Implementing Apple events in this manner is called factoring your application. A factored application acts as both the client and the server application for the Apple events it sends to itself. In general, a recordable application should generate Apple events for any user action that could be reversed by the Undo command. A recordable application can usually handle a greater variety of Apple events than it can record, since it must record the same action the same way every time even though Apple events might be able to trigger that action in several different ways.A recordable event is any Apple event that any recordable application sends to itself while recording is turned on for the local computer (with the exception of events that the application indicates it does not want to be recorded). After a user turns on recording from the Script Editor application, the Apple Event Manager sends copies of all recordable events to Script Editor. A scripting component previously selected by the user handles each copied event for Script Editor by translating the event into the scripting component’s scripting language and recording the translation as part of a Script Editor script. When a scripting component executes a recorded script, it sends the corresponding Apple events to the applications in which they were recorded.Figure 1-9 illustrates how Apple event recording works. The user performs a significant action (such as choosing New from the File menu), and the SurfCharter application sends itself an Apple event to perform the task associated with that action. If recording is turned on, the Apple Event Manager automatically sends a copy of each recordable Apple event to the application (for example, Script Editor) that initiated recording. The scripting component handles the copy of each recordable event by translating it and recording it as part of a script. To translate each Apple event correctly, the scripting component must first check what equivalent human-language terminology the SurfCharter application uses for that Apple event. The scripting component then records the equivalent statement in the script.The chapter “Recording Apple Events” in this book describes the Apple Event Manager’s recording mechanism in more detail and explains how to use Apple events to factor your application.Figure 1-9    Recording user actions in a factored applicationApplications That Manipulate and Execute ScriptsLike sound resources, scripts can be stored either as separate files with their own icons in the Finder or within an application or its documents. Your application can store and execute scripts regardless of whether it is scriptable or recordable. If your application is scriptable, however, it can execute scripts that control its own behavior, thus acting as both the client application and the server application for the corresponding Apple events. Your application can establish a connection with any scripting component that is registered with the Component Manager on the same computer. Each scripting component can manipulate and execute scripts written in the corresponding scripting language (or, as in the case of AppleScript, one of the scripting language’s dialects) when your application calls the standard scripting component routines.You can use the standard scripting component routines to n    get a handle to a script so you can save the script in a preferences file, in the data fork of a document, or as a separate script filen    manipulate scripts associated with any part of your application or its documents, including both Apple event objects and other objects defined by the applicationn    let users record and edit scriptsn    compile and execute scriptsFigure 1-10 shows how an application might execute a script that controls its own behavior. The appropriate user action handler executes the script in response to a user action, which can be almost anything: choosing a menu command, clicking a button, tabbing from one table cell to another, and so on. The script might consist of a single statement that describes some default action, such as saving or printing, or a series of statements that describe a series of tasks, such as setting default preferences or styles. Figure 1-10 shows a script that corresponds to a single Apple event, but the script could just as easily correspond to a whole series of Apple events. If your application allows users to modify such a script, they can modify the behavior of your application to suit their needs.Figure 1-10    Controlling an application’s own behavior by executing a scriptYour application can associate a script with any Apple event object or application-defined object and execute the script when that object is manipulated in some way. The script can describe actions to be taken by your application, as in Figure 1-10, or actions to be taken by several applications. For example, a user of a word-processing application might attach a script to a specific word so that the application executes the script whenever that word is double-clicked. Such a script could trigger Apple events that look up and display related information from a separate document, run a QuickTime movie, perform a calculation, play a voice annotation, and so on.Figure 1-11 shows one way that a script can be used to control two or more applications. When a user chooses the Post Invoice command in the accounting application, the user action handler for that menu command executes a default script for posting an invoice. That script might describe actions such as saving the invoice, updating the sales journal, and so on. The scripting component sends Apple events to the accounting application to perform these actions. Figure 1-11    Posting an invoice and updating a database by executing a scriptThe accounting application also allows users to open the default invoice-posting script in Script Editor and modify it so that additional actions are performed when it is executed. For example, as shown in Figure 1-11, the script could instruct the SurfDB application to update a database of customer information in addition to performing the default posting actions. In this case, the scripting component sends Apple events to both the accounting application and SurfDB to carry out all the actions described by the script.There is no limit to the actions such a script can describe. In addition to sending the Apple events shown in Figure 1-11, the invoice-posting script could be used to trigger Apple events that cause other applications to perform a credit check, send the invoice to the customer by electronic mail, forward inventory information to a remote server on the network, and so on.The chapter “Scripting Components” in this book describes how your application can use the standard scripting component routines to manipulate and execute its own scripts and allow users to modify those scripts.   Exchanging Message BlocksYou should be able to meet most of your application’s IAC needs by using the Apple Event Manager or the Event Manager. However, if you need low-level control or services not provided by the Apple Event Manager or the Event Manager, you can use the PPC Toolbox. The PPC Toolbox lets you send large amounts of data to other applications located on the same computer or across a network. The PPC Toolbox can also be used by pieces of code that are not event-driven. The PPC Toolbox is usually called by the Operating System; device drivers, desk accessories, or other code modules can also use it.You cannot use the PPC Toolbox to send data between applications unless both your application and the application you’re communicating with are open at the same time. To initiate communication, one program opens a port and requests a session with another program. The target application must also open a port and accept the request. Once a session is established, the two programs can read and write low-level message blocks. The PPC Toolbox also provides a standard user interface that allows a user working in one application to select another application with which to exchange data, whether the communication is achieved by means of Apple events, other high-level events, or message blocks.The chapter “Program-to-Program Communications Toolbox” in this book describes how programs can exchange low-level message blocks.    Listing 2-0Table 2-0Edition ManagerContentsIntroduction to Publishers, Subscribers, and Editions2-4About the Edition Manager2-12Using the Edition Manager2-12Receiving Apple Events From the Edition Manager2-13Creating the Section Record and Alias Record2-15Saving a Document Containing Sections2-19Opening and Closing a Document Containing Sections2-22Reading and Writing a Section2-24Formats in an Edition2-24Opening an Edition2-26Format Marks2-27Reading and Writing Edition Data2-27Closing an Edition2-28Creating a Publisher2-29Creating the Edition Container2-32Opening an Edition Container to Write Data2-35Creating a Subscriber2-37Opening an Edition Container to Read Data2-41Choosing Which Edition Format to Read2-41Using Publisher and Subscriber Options2-43Publishing a New Edition While Saving or Manually2-47Subscribing to an Edition Automatically or Manually2-48Canceling Sections Within Documents2-48Locating a Publisher Through a Subscriber2-49Renaming a Document Containing Sections2-50Displaying Publisher and Subscriber Borders2-50Text Borders2-54Spreadsheet Borders2-55Object-Oriented Graphics Borders2-56Bitmapped Graphics Borders2-57Duplicating Publishers and Subscribers2-58Modifying a Subscriber2-59Relocating an Edition2-60Customizing Dialog Boxes2-60Subscribing to Non-Edition Files2-62Getting the Current Edition Opener2-63Setting an Edition Opener2-63Calling an Edition Opener2-64Opening and Closing Editions2-68Listing Files That Can Be Subscribed To2-68Reading From and Writing to Files2-68Calling a Format I/O Function2-68Edition Manager Reference2-71Data Structures2-71The Edition Container Record2-71The Section Record2-72Edition Manager Routines2-73Initializing the Edition Manager2-74Creating and Registering a Section2-74Creating and Deleting an Edition Container2-79Setting and Getting a Format Mark2-81Reading in Edition Data2-83Writing out Edition Data2-86Closing an Edition After Reading or Writing2-88Displaying Dialog Boxes2-90Locating a Publisher and Edition From a Subscriber2-98Edition Container Formats2-101Reading and Writing Non-Edition Files2-102Application-Defined Routines2-105Summary of the Edition Manager2-106Pascal Summary2-106Constants2-106Data Types2-108Edition Manager Routines2-111Application-Defined Routines2-113C Summary2-114Constants2-114Data Types2-116Edition Manager Routines2-119Application-Defined Routines2-122Result Codes2-122Edition ManagerThis chapter describes how you can use the Edition Manager to allow your users to share and automatically update data from numerous documents and applications.The Edition Manager is available only in System 7 or later. It can be used by many different applications located on a single disk or throughout a network of Macintosh computers. To test for the existence of the Edition Manager, use the Gestalt function, described in Inside Macintosh: Operating System Utilities. Read the information in this chapter if you want your application’s documents to share and automatically update data, or if you want to share and automatically update data with documents created by other applications that support the Edition Manager.For example, a user might want to capture sales figures and totals from within a spreadsheet and then include this information in a word-processing document that summarizes sales for a given month. The Edition Manager establishes a connection between these two documents. When a user modifies the spreadsheet, the information in the word-processing document can be automatically updated to contain the latest changes. To accomplish this, both the spreadsheet application and the word-processing application must support the features of the Edition Manager.To use this chapter, you should be familiar with sending and receiving high-level events, described in the chapter “Event Manager” in Inside Macintosh: Macintosh Toolbox Essentials. Your application must also support Apple events to receive Apple events from the Edition Manager. See the following chapters in this book for detailed information on Apple events. The Edition Manager provides you with the ability ton    capture data within a document and integrate it into another documentn    modify information in a document and automatically update any document that shares its datan    share information between applications on the same computer or across a network of Macintosh computersBuilding the capabilities of the Edition Manager into your program is similar to building cut-and-paste features into your program. Text, graphics, spreadsheet cells, database reports—any data that you can select, you can make accessible to other applications that support the Edition Manager. The next section provides an overview of the main elements of the Edition Manager. Following sections discuss how to implement these features in your application.This chapter also describes an advanced feature that allows applications to share data directly from a file.Introduction to Publishers, Subscribers, and EditionsA section is a portion of a document that shares its contents with other documents. The Edition Manager supports two types of sections: publishers and subscribers. A publisher is a section within a document that makes its data available to other documents or applications. A subscriber is a section within a document that obtains its data from other documents or applications.Your application writes a copy of the data in each publisher to a separate file called an edition container. The actual data that is written to the edition container is referred to as the edition. Your application obtains the data for each subscriber by reading data from the edition container. Note that throughout this chapter, the term edition refers to the edition container and the data it contains. You publish data when you want to make it available to other documents and applications. When data is published, it is stored in an edition container. You subscribe to data that a publisher makes available by reading an edition from its container. NoteSection and edition container are programmatic terms. You should not use them in your application or your documentation. Use publishers, subscribers, and editions. You should also refrain from using other terms such as publication or subscription to describe the dynamic sharing of information provided by the Edition Manager. Use the terms publish and subscribe to describe the Edition Manager features.uEach edition has an icon that is visible from the Finder. Figure 2-1 shows the default edition icon.Figure 2-1    The default edition iconThe name that the user specifies for the edition is located next to the edition icon. For information on providing icons for the editions created by your application, see the chapter “Finder Interface” in Inside Macintosh: Macintosh Toolbox Essentials. Figure 2-2 illustrates a document containing a single publisher, its corresponding edition, and a subscriber to the edition in another document.Figure 2-2    A publisher, an edition, and a subscriberNote that the publisher and subscriber borders illustrated in Figure 2-2 may appear slightly different from the borders you see on the screen. Figure 2-6 on page 2-9 shows the publisher and subscriber borders as they appear onscreen.Data always flows in one direction, from publisher to edition to subscriber. Documents that contain publishers and subscribers do not have to be open at the same time to share data. Whenever the user saves a document that contains a publisher, the edition changes to reflect the current data from the publisher. All subscribers update their contents from the edition. Any number of subscribers can subscribe to a single edition.To create a publisher within a document, a user selects an area of the document to share and chooses Create Publisher from the Edit menu (see Figure 2-7 on page 2-10). Figure 2-3 shows the dialog box that your application should display when the user chooses Create Publisher.Figure 2-3    The publisher dialog boxYour application provides a thumbnail sketch of the edition data, which the Edition Manager displays in the preview area of the publisher dialog box. Your preview of the edition in this dialog box should provide a visual cue about the type of information that the user has selected to publish.A preview area also appears in the subscriber dialog box (see Figure 2-4). This preview, too, should provide a visual cue about the type of information the edition contains. For example, it should allow users to distinguish between text information and spreadsheet arrays.The publisher dialog box uses the extended interface of the standard file dialog box that accompanies System 7. The user navigates through the contents of the disk using the mouse or keyboard.A user can modify a publisher within a document just like any other portion of a document. As a default, each time a user saves a document containing a publisher, your application should automatically write the publisher’s data to the edition. You also need to provide the user with the choice of sending new publisher data to an edition manually (that is, only at the user’s specific request). You should provide these options by using the publisher options dialog box described later in “Using Publisher and Subscriber Options” beginning on page 2-43.For example, one user may choose to update an edition automatically each time a document is saved. This update mode is useful for a user who creates a publisher within a spreadsheet application that records stock information. Each time the user updates the stock information and saves the spreadsheet, a new edition automatically becomes available to subscribers.Another user may choose to update an edition only upon request. This update mode might be useful for a user who creates a publisher within a word-processing application for a quarterly sales report. The user incrementally updates the sales report throughout the entire quarter but does not want this information to be available to subscribers until the end of the quarter. Only at the end of each quarter does the user specifically request to update the edition and make it available to any subscribers.To create a subscriber within a document, the user places the insertion point and chooses Subscribe To from the Edit menu. Figure 2-4 shows the dialog box that your application should display when the user chooses Subscribe To. Figure 2-4    The subscriber dialog boxThe subscriber dialog box also uses the extended interface of the standard file dialog box introduced with System 7. Initially, the dialog box should highlight the name of the last edition published or subscribed to. This allows a user to create a publisher and immediately subscribe to its edition.A subscriber receives its data from a single edition. By default, your application should automatically update a document containing a subscriber whenever a new edition is available. You also need to provide the user with the choice of receiving the latest edition manually (that is, only when the user specifically requests it). You can provide these options by using the subscriber options dialog box described later in “Using Publisher and Subscriber Options” beginning on page 2-43.For example, one user may choose to receive new editions automatically as they become available. This update mode is useful for a user who subscribes to information from an edition that consists of daily sales figures. This user automatically acquires each version of the sales information as it becomes available.Another user may choose to receive a new edition only upon request. This update mode is useful for a user who creates a subscriber to an edition that consists of graphics data (such as a company logo). The user may require only periodic versions of the logo and not need frequent updates. In this case, your application should update the subscriber with a new edition only when the user specifically requests it.A user can select, cut, copy, or paste an entire subscriber. Although the contents of the subscriber as a whole can be modified, a user cannot edit portions of a subscriber. For example, a user can underline or italicize the entire subscriber text but cannot delete a sentence or rotate a single graphic object. This restriction protects the user from losing changes to a subscriber when a new edition arrives. Remember that, as a default, new editions should automatically update a subscriber. Any changes that a user made to the subscriber text would have to be reapplied by the user when the new edition arrives. See “Modifying a Subscriber” on page 2-59 for further information.A single document can contain any number or combination of publishers and subscribers. Figure 2-5 shows an example of a document that contains two publishers and one subscriber (and their corresponding editions). Remember that data always flows in one direction, from publisher to edition to subscriber. The “Concert flyer” document contains a publisher that is subscribed to by the “Benefit concert” document. The “Concert flyer” document also subscribes to a portion of the “Pianos & palm trees” document. In addition, the “Concert flyer” document as a whole is subscribed to by the “Sample flyer” document.Figure 2-5    A document and its corresponding editionsYou should distinguish each selected publisher and subscriber within a document with a border. Display a publisher border as three pixels wide with 50 percent gray lines, and display a subscriber border as three pixels wide with 75 percent gray lines. A rectangle of one white pixel should separate the data from the border itself. Borders should be drawn outside the contents of publishers and subscribers so that data is not obscured. See Figure 2-6 for an illustration of the borders as they appear onscreen. See “Displaying Publisher and Subscriber Borders” on page 2-50 for detailed information on how to implement borders for specific applications.Figure 2-6 shows a document containing a publisher and a document containing a subscriber, with borders displayed for each.Borders for publishers and subscribers should behave like the borders of 'PICT' graphics within a word-processing document. Your application should display a border whenever the user clicks within the content area of a publisher or a subscriber. Your application should hide the border whenever the user clicks outside the content area. See “Displaying Publisher and Subscriber Borders” on page 2-50 for detailed information on how to implement borders for specific applications.Figure 2-6    Publisher and subscriber bordersYou also need to support the standard Edition Manager menu commands in the Edit menu. These menu items includen    Create Publisher…n    Subscribe To…n    Publisher/Subscriber Options…n    Show/Hide Borders (optional)n    Stop All Editions (optional)Use a divider to separate the Edition Manager menu commands from the standard Edit menu commands Cut, Copy, and Paste. Figure 2-7 shows the standard Edition Manager menu commands.Figure 2-7    Edition Manager commands in the Edit menuThe Subscriber Options menu command should toggle with the Publisher Options menu command. When a user selects a subscriber and then accesses the menu bar, your application should adjust its menus so that the Subscriber Options menu command appears in the Edit menu. When a user selects a publisher and then accesses the menu bar, your application should adjust its menus so that the Publisher Options menu command appears in the Edit menu. In addition, you may support a Show Borders menu command that toggles with Hide Borders to display or hide all publishers and subscriber borders within documents. You may also support a Stop All Editions menu command to provide a method for temporarily suspending all update activity in a document. When the user chooses this command, you should place a checkmark next to it. You should also stop all publishers from sending data to editions and all subscribers from receiving new editions. When the user chooses this command again, remove the checkmark and update any subscribers that are set up to receive new editions automatically.If you find that you need all of the available space in the Edit menu for your application’s commands, you may create a hierarchical menu for the Edition Manager menu commands. If you choose to implement this structure, you should allow users to access the Edition Manager menu commands through a Publishing menu command in the Edit menu. Because this menu structure is not as accessible to users, you should implement it only if you have no other alternative.Figure 2-8 shows the Edition Manager menu commands in a hierarchical menu structure.Figure 2-8    Edition Manager commands under the Publishing menu commandFor each publisher or subscriber within an open document, you must have a section record and an alias record. The section record contains a time stamp that records the version of the data that resides in the section. The section record also identifies the section as either a publisher or subscriber, and it establishes a unique identity for each publisher or subscriber. The section record does not contain the data within the section. The alias record is a reference to the edition container from the document that contains the corresponding publisher or subscriber section.There are special options associated with publishers and subscribers within documents. Your application can use the publisher and subscriber options dialog boxes provided by the Edition Manager to make these choices available to the user. For example, a user can select Open Publisher within the subscriber options dialog box to access the document containing the publisher. Your application can also allow a user to cancel subscribers or publishers within documents, specify when to update an edition from a publisher, or specify when to update a subscriber with a new edition. These options are described in “Using Publisher and Subscriber Options” beginning on page 2-43.About the Edition ManagerThe next section discusses how to save, open, read, and write a document that shares data. In addition, it describes how ton    make data accessible to other applicationsn    integrate data into numerous documentsn    set update optionsn    implement bordersn    modify shared datan    customize dialog boxesn    subscribe to data in non-edition filesUsing the Edition ManagerThis section describes how your application cann    receive Apple events from the Edition Managern    set up a section record and alias record for open documents containing sectionsn    save a document that contains sectionsn    open a document that contains sectionsn    read and write sectionsn    create a publisher within a document, create its edition container, and write data to itn    create a subscriber within a document and read its data from an editionTo begin, you must determine whether the Edition Manager is available on the system by using the Gestalt function with the gestaltEditionMgrAttr ('edtn') selector. If the response parameter returns 1 in the bit defined by the gestaltEditionMgrPresent constant (bit 0), the Edition Manager is present.If the Edition Manager is present, load it into memory using the InitEditionPack function. This function determines whether the machine has enough space in the system heap for the Edition Manager to operate.err := InitEditionPack;If the InitEditionPack function returns noErr, you have enough space to load the package. If you do not have enough space, the application can either terminate itself or continue with the Edition Manager functionality disabled.Receiving Apple Events From the Edition ManagerApplications that use the Edition Manager must support Apple events. This requires that your application support the required Open Documents event and Apple events sent by the Edition Manager. See the chapter “Introduction to Apple Events” in this book for general information on Apple events.Apple events sent by the Edition Manager arrive as high-level events. The EventRecord data type defines the event record.TYPE EventRecord =    RECORD        what:                Integer;                {kHighLevelEvent}        message:                LongInt;                {'sect'}        when:                LongInt;        where:                Point;                {'read', 'writ', 'cncl', 'scrl'}        modifiers:                Integer;    END;The Edition Manager can send these Apple events with the event class and event ID as shown here:n    Section Read events ('sect' 'read')n    Section Write events ('sect' 'writ')n    Section Cancel events ('sect' 'cncl')n    Section Scroll events ('sect' 'scrl')Each time your application creates a publisher or a subscriber, the Edition Manager registers its section. When an edition is updated, the Edition Manager scans its list to locate registered subscribers. For each registered subscriber that is set up to receive updated editions automatically, your application receives a Section Read event.If the Edition Manager discovers that an edition file is missing while registering a publisher, it creates a new edition file and sends the publisher a Section Write event. When you receive a Section Cancel event, you need to cancel the specified section. Note that the current Edition Manager does not send you Section Cancel events, but you do need to provide a handler for future expansion.If the user selects a subscriber within a document and then selects Open Publisher in the subscriber options dialog box, the publishing application receives the Open Documents event and opens the document containing the publisher. The publishing application also receives a Section Scroll event. Scroll to the location of the publisher, display this section on the user’s screen, and turn on its border.See “Opening and Closing a Document Containing Sections” beginning on page 2-22 for detailed information on registering and unregistering a section and writing data to an edition. See “Using Publisher and Subscriber Options” beginning on page 2-43 for information on publisher and subscriber options.After receiving an Apple event sent by the Edition Manager, use the Apple Event Manager to extract the section handle. In addition, you must also call the IsRegisteredSection function to determine whether the section is registered. It is possible (because of a race condition) to receive an event for a section that you recently disposed of or unregistered. One way to ensure that an event corresponds to a valid section is to call the IsRegisteredSection function after you receive an event.  err := IsRegisteredSection (sectionH);Listing 2-1 illustrates how to use the Apple Event Manager and install an event handler to handle Section Read events. You can write similar code for Section Write events, Section Scroll events, and Section Cancel events.Listing 2-1    Accepting Section Read events and verifying if a section is registered{the following goes in your initialization code}myErr := AEInstallEventHandler(sectionEventMsgClass {'sect'},                                         sectionReadMsgID {'read'},                                         @MyHandleSectionReadEvent, 0,                                         FALSE);{this is the routine the Apple Event Manager calls when a }{ Section Read event arrives}FUNCTION MyHandleSectionReadEvent(theAppleEvent,                                             reply: AppleEvent;                                             refCon: LongInt): OSErr;VAR    myErr:                OSErr;    sectionH:                SectionHandle;BEGIN    {get section handle out of Apple event message buffer}    myErr := MyGetSectionHandleFromEvent(theAppleEvent, sectionH);    IF myErr = noErr THEN    BEGIN        IF IsRegisteredSection(sectionH) = noErr THEN            {if section is registered, read the new data}            MyHandleSectionReadEvent := DoSectionRead(sectionH);    END     ELSE        MyHandleSectionReadEvent := myErr;END; {MyHandleSectionReadEvent}{this routine reads in subscriber data and updates its display}FUNCTION DoSectionRead(subscriber: SectionHandle): OSErr;BEGIN    {your code here}END;        {DoSectionRead}{this is part of your Apple event–handling code}FUNCTION MyGetSectionHandleFromEvent(theAppleEvent: AppleEvent;                                                 VAR sectionH: SectionHandle)                                                 : OSErr;VAR    ignoreType:                    DescType;    ignoreSize:                    Size;BEGIN    {parse section handle out of message buffer}    MyGetSectionHandleFromEvent        := AEGetParamPtr( theAppleEvent,                                                {event to parse}                                keyDirectObject,                        {look for direct }                                                        { object}                                typeSectionH,                         {want a SectionHandle}                                ignoreType,                        {ignore type it could }                                                        { get}                                @sectionH,                         {put SectionHandle }                                                        { here}                                SizeOf(sectionH),                        {size of storage for }                                                        { SectionHandle}                                ignoreSize);                        {ignore storage it }                                                        { used}END; {MyGetSectionHandleFromEvent} In addition to the Section Read, Section Write, Section Cancel, and Section Scroll events, your application can also respond to the Create Publisher event. For more information on this event, as well as additional information on how to handle Apple events, see the chapter “Responding to Apple Events” in this book. Creating the Section Record and Alias RecordYour application is responsible for creating a section record and an alias record for each publisher and subscriber section within an open document.The section record identifies each section as a publisher or subscriber and provides identification for each section. The section record does not contain the data within the section; it describes the attributes of the section. Your application must provide its own method for associating the data within a section with its section record. Your application is also responsible for saving the data in the section.The alias field of the section record contains a handle to its alias record. The alias record is a reference to the edition container from the document that contains the publisher or subscriber section. You should be familiar with the Alias Manager’s conventions for creating alias records and identifying files, folders, and volumes to locate files that have been moved, copied, or restored from backup. For information on the Alias Manager, see Inside Macintosh: Files.When a user saves a document, your application should store all section records and alias records in the document’s resource fork. Corresponding section records and alias records should have the same resource ID.Figure 2-9 shows a document containing a publisher and subscriber, and the corresponding section records and alias records.Figure 2-9    A document with a publisher and subscriber and its resource forkA section record contains information to identify the data contained within a section as a publisher or a subscriber, a time stamp to record the last modification of the section, and unique identification for each section. The SectionRecord data type defines the section record.TYPE SectionRecord =     RECORD        version:                    SignedByte;                    {always 1 in 7.0}        kind:                    SectionType;                    {publisher or subscriber}        mode:                    UpdateMode;                    {automatic or manual}        mdDate:                    TimeStamp;                    {last change in document}        sectionID:                    LongInt;                    {application-specific, }                                                { unique per document}        refCon:                    LongInt;                    {application-specific}        alias:                    AliasHandle;                    {handle to alias record}        {The following fields are private and are set up by the }        { RegisterSection function described later within this }        { chapter. Do not modify the private fields.}        subPart:                    LongInt;                    {private}        nextSection:                    SectionHandle;                    {private, do not use as a }                                                { linked list}        controlBlock:                    Handle;                    {may be used for comparison }                                                { only}        refNum:                    EditionRefNum;                    {private}END;Field descriptionsversion    Indicates the version of the section record, currently $01.kind    Defines the section type as either publisher or subscriber with the stPublisher or stSubscriber constant.mode    Indicates if editions are updated automatically or manually.mdDate    Indicates which version (modification date) of the section’s contents is contained within the publisher or subscriber. The mdDate field is set to 0 when you create a new subscriber section and to the current time when you create a new publisher. Be sure to update this field each time publisher data is modified. The section’s modification date is compared to the edition’s modification date to determine whether the section and the edition contain the same data. The section modification date is displayed in the publisher and subscriber options dialog boxes. See “Closing an Edition” on page 2-28 for detailed information.sectionID    Provides a unique number for each section within a document. A simple way to implement this is to create a counter for each document that is saved to disk with the document. The counter should start at 1. The section ID is currently used as a tie breaker in the GoToPublisherSection function when there are multiple publishers to the same edition in a single document. The section ID should not be 0 or –1. See “Duplicating Publishers and Subscribers” on page 2-58 for information on multiple publishers.refCon    Reference constant available for application-specific use.alias    Contains a handle to the alias record for a particular section within a document.Whenever the user creates a publisher or subscriber, call the NewSection function to create the section record and the alias record.err := NewSection(container, sectionDocument, kind, sectionID,                       initialMode, sectionH);The NewSection function creates a new section record (either publisher or subscriber), indicates whether editions are updated automatically or manually, sets the modification date, and creates an alias record from the document containing the section to the edition container.You can set the sectionDocument parameter to NIL if the current document has never been saved. Use the AssociateSection function to update the alias record of a registered section when the user names or renames a document by choosing Save As from the File menu. If you are creating a subscriber with the initialMode parameter set to receive new editions automatically, your application receives a Section Read event each time a new edition becomes available for this subscriber.If an error is encountered, the NewSection function returns NIL in the sectionH parameter. Otherwise, NewSection returns a handle to the allocated section record in the sectionH parameter.Set the initialMode parameter to the update mode for each subscriber and publisher created. You can specify the update mode using these constants:CONST            sumAutomatic                    = 0;            {subscriber receives new }                                            { editions automatically}            sumManual                    = 1;            {subscriber receives new }                                            { editions manually}            pumOnSave                    = 0;            {publisher sends new }                                            { editions on save}            pumManual                    = 1;            {publisher does not send }                                            { new editions until user }                                             { request}See “Using Publisher and Subscriber Options” beginning on page 2-43 for detailed information on update modes for publishers and subscribers. See Listing 2-4 beginning on page 2-33 for code that uses the NewSection function to create a publisher. See Listing 2-6 on page 2-40 for code that uses NewSection to create a subscriber. Saving a Document Containing SectionsWhen saving a document that contains sections, you should write out each section record as a resource of type 'sect' and write out each alias record as a resource of type 'alis' with the same ID as the section record. See the chapter “Resource Manager” in Inside Macintosh: More Macintosh Toolbox for detailed information on resources. If a user closes a document that contains newly created publishers without attempting to save its contents, you should display an alert box similar to the one shown in Figure 2-10.Figure 2-10    The new publisher alert boxIf you keep the section records and alias records for each publisher and subscriber as resources, you can use the ChangedResource or WriteResource function. If you detach the section records and alias records from each section, you need to clone the handles and use the AddResource function. See the chapter “Resource Manager” in Inside Macintosh: More Macintosh Toolbox for detailed information on the ChangedResource, WriteResource, and AddResource functions.Use the PBExchangeFiles function to ensure that the file ID remains the same each time you save a document that contains sections. Saving a file typically involves creating a new file (with a temporary name), writing data to it, closing it, and then deleting the original file that you are replacing. You rename the temporary file with the original filename, which leads to a new file ID. The PBExchangeFiles function swaps the contents of the two files (even if they are open) by getting both catalog entries and swapping the allocation pointers. If the files are open, the file control block (FCB) is updated so that the reference numbers still access the same contents (under a new name). See Inside Macintosh: Files for detailed information on the PBExchangeFiles function.Listing 2-2 illustrates how to save a file that contains sections. If the contents of a publisher have changed since the last save, the application-defined procedure MySaveDocument writes the publisher’s data to its edition. It then writes out to the saved document the section records and alias records of all publishers and subscribers. MySaveDocument calls another application-defined routine, MyGetSectionAliasPair, to return a handle and resource ID to a section. As described earlier, you should write out the eligible section records and alias records as resources to allow for future compatibility. There are several different techniques for saving or adding resources; this listing illustrates one technique. The section handles are still valid after using the AddResource function because this listing illustrates just saving, not closing, the file.Before you write out sections, you need to see if any publisher sections share the same control block. Publishers that share the same control block share the same edition.If a user creates an identical copy of a file by choosing Save As from the File menu and does not make any changes to this new file, you simply use the AssociateSection function to indicate to the Edition Manager which document a section is located in.Listing 2-2    Saving a document containing sectionsPROCEDURE MySaveDocument(thisDocument: MyDocumentInfoPtr;                                   numberOfSections: Integer);VAR    aSectionH:                        SectionHandle;    copiedSectionH:                        Handle;    copiedAliasH:                        Handle;    resID:                        Integer;    thisone:                        Integer;    myErr:                        OSErr;BEGIN    FOR thisone := 1 TO numberOfSections DO    BEGIN        aSectionH := MyGetSectionAliasPair(thisDocument, thisone,                                                       resID);        IF (aSectionH^^.kind = stPublisher) &            (aSectionH^^.mode = pumOnSave) &            (MyCheckForDataChanged(aSectionH)) THEN            DoWriteEdition(aSectionH);    END; {end of for}    {set the curResFile to the resource fork of thisDocument}    UseResFile(thisDocument^.resForkRefNum);    {write all section and alias records to the document}    FOR thisone := 1 TO numberOfSections DO    BEGIN        {given an index, get the next section handle and resID }        { from your internal list of sections for this file}        aSectionH := MyGetSectionAliasPair(thisDocument, thisone,                                                       resID);        {check for duplication of control block values}        MyCheckForDupes(thisDocument, numberOfSections);        {save section record to disk}        copiedSectionH := Handle(aSectionH);        myErr := HandToHand(copiedSectionH);        AddResource(copiedSectionH, rSectionType, resID, '');        {save alias record to disk}        copiedAliasH := Handle(aSectionH^^.alias);        myErr := HandToHand(copiedAliasH);        AddResource(copiedSectionH, rAliasType, resID, '');    END; {end of for}    {write rest of document to disk}END; Opening and Closing a Document Containing SectionsWhen opening a document that contains sections, your application should use the GetResource function to get the section record and the alias record for each publisher and subscriber. Set the alias field of the section record to be the handle to the alias. See the chapter “Resource Manager” in Inside Macintosh: More Macintosh Toolbox for detailed information on the GetResource function.You also need to register each section using the RegisterSection function. The RegisterSection function informs the Edition Manager that a section exists.err := RegisterSection(sectionDocument, sectionH,                              aliasWasUpdated);The RegisterSection function adds the section record to the Edition Manager’s list of registered sections. This function assumes that the alias field of each section record is a handle to the alias record. The alias record is a reference to the edition container from the section’s document. If the RegisterSection function successfully locates the edition container for a particular section, the section is registered through a shared control block. The control block is a private field in the section record.If the RegisterSection function cannot find the edition container for a particular subscriber, RegisterSection returns the containerNotFoundWrn result code. If the RegisterSection function cannot find the edition container for a particular publisher, RegisterSection creates an empty edition container for the publisher in the last place the edition was located. The Edition Manager sends your application a Section Write event for that section. When a user attempts to open a document that contains multiple publishers to the same edition, you should warn the user by displaying an alert box (see “Duplicating Publishers and Subscribers” on page 2-58).When a user opens a document that contains a subscriber (with an update mode set to automatic), receives a new edition, and then closes the document without making any changes to the file, you should update the document and simply allow the user to close it. You do not need to prompt the user to save changes to the file.When closing a document that contains sections, you must unregister each section (using the UnRegisterSection function) and dispose of each corresponding section record and alias record.err := UnRegisterSection(sectionH);The UnRegisterSection function removes the section record from the list of registered sections and unlinks itself from the shared control block.Listing 2-3 illustrates how to open an existing file that contains sections. As described earlier, you should retrieve the section and alias resources, connect the pair through the alias field of the section record, and register the section with the Edition Manager. There are many different techniques for retrieving resources; this listing shows one technique. If an alias was out of date and was updated by the Alias Manager during the resolve, the Edition Manager sets the aliasWasUpdated parameter of the RegisterSection function to TRUE. This means that you should save the document. Additionally, your application must maintain its own list of registered sections for each open document that contains sections. You use this list to write out new editions for updated publishers within a document.Listing 2-3    Opening a document containing sectionsPROCEDURE MyOpenExistingDocument(thisDocument: MyDocumentInfoPtr);VAR    sectionH:                            SectionHandle;    aliasH:                            AliasHandle;    aliasWasUpdated:                            Boolean;    registerErr:                            OSErr;    resID:                            Integer;    theResType:                            ResType;    thisone:                            Integer;    numberOfSections:                            Integer;    aName:                            Str255;BEGIN    UseResFile(thisDocument^.resForkRefNum);    {find out the number of section resources}    numberOfSections := Count1Resources(rSectionType);    FOR thisone := 1 TO numberOfSections DO    BEGIN        sectionH := SectionHandle(Get1IndResource(rSectionType,                                                                thisone));        IF sectionH = NIL THEN                                {something could be wrong with }            MySectionErr;                            { the file, handle appropriately}         {get resource ID of the section & use same ID for alias}        GetResInfo(Handle(sectionH), resID, theResType, aName);        {detaching is not necessary, but it is convenient}        DetachResource(Handle(sectionH));        {get the alias}        aliasH := AliasHandle(Get1Resource(rAliasType, resID));        IF aliasH = NIL THEN                                {something could be wrong with }            MyAliasErr;                            { the file, handle appropriately}         DetachResource(Handle(aliasH));        {connect section and alias together}        sectionH^^.alias := aliasH;        {register the section}        registerErr := RegisterSection(thisDocument^.fileSpec,                                                       sectionH, aliasWasUpdated);        {The RegisterSection function may return an error if }        { a section is not registered. This is not a fatal error. }        { Continue looping to register remaining sections.}        {add this section/alias pair to your internal bookkeeping}        MyAddSectionAliasPair(thisDocument, sectionH, resID);        IF aliasWasUpdated THEN             {If alias has changed, make a note of this. }            { It's important to know this when you save.}            MyAliasHasChanged(sectionH);    END; {end of FOR}END;  Reading and Writing a SectionYour application writes publisher data to an edition. New publisher data replaces the previous contents of the edition, making the previous edition information irretrievable. Your application reads data from an edition for each subscriber within a document.The following sections describe how ton    use different formats to write to or read from an editionn    open an edition to initiate writing or readingn    set a format markn    write to or read from an editionn    close an edition after successfully writing or reading dataFormats in an EditionYou can write data to an edition in several different formats. These formats are the same as scrap format types. Scrap format types are indicated by a four-character tag.Typically, when a user copies data, you identify the scrap format types and then write the data to the scrap. With the Edition Manager, when a user decides to publish data, you identify the format types and then write the data to an edition. You can write multiple formats of the same data.For an edition, you should write your preferred formats first. In general, to write data to an edition, your application should use either 'TEXT' format or 'PICT' format. This allows your application to share data with most other applications. To subscribe to an edition, your application should be able to read both 'TEXT' and 'PICT' files. In addition, your application can write any other private formats that you want to support.Scrap format types are described in the chapter “Scrap Manager” in Inside Macintosh: More Macintosh Toolbox.A few special formats are defined as constants.CONST        kPublisherDocAliasFormat                                    = 'alis';    {alias record from the }                                                        { edition to publisher}        kPreviewFormat                                    = 'prvw';    {'PICT' thumbnail }                                                        { sketch}        kFormatListFormat                                    = 'fmts';    {lists all available }                                                        { formats}The kPublisherDocAliasFormat ('alis') format is written by the Edition Manager. It is an alias record from the edition to the publisher’s document. Appended to the end of the alias is the section ID of the publisher, which the Edition Manager uses to distinguish between multiple publishers to a single edition. You should discourage users from making multiple copies of the same publisher. See “Duplicating Publishers and Subscribers” on page 2-58 for detailed information.In addition to writing a publisher’s data to an edition in the 'TEXT' format or 'PICT' format, your application can also write data to an edition in the kPreviewFormat ('prvw') format. If you provide a 'prvw' format in an edition, the Edition Manager uses it to display a preview of the edition data in the preview area of the subscriber dialog box. The 'prvw' format has the same format as a 'PICT' file. To draw a preview in the 'prvw' format, the Edition Manager calls DrawPicture with a rectangle of 120 by 120 pixels. (See Inside Macintosh: Imaging for more information about DrawPicture.) Your application should provide data in a 'prvw' format so that the data displays well in a rectangle of this size. Your application can also use this preview to display subscriber data within a document (to save space).If your application does not provide a preview in the 'prvw' format for an edition, the Edition Manager attempts to provide a preview by using the edition’s 'PICT' format. To draw a preview in the 'PICT' format, the Edition Manager examines the picture’s bounding rectangle and calls DrawPicture with a rectangle that scales the picture proportionally and centers it in a 120-by-12-pixel area. The kFormatListFormat ('fmts') format is a virtual format that is read but never written. It is a list of all the formats and their lengths. Applications can use this format in place of the EditionHasFormat function (described in “Choosing Which Edition Format to Read” on page 2-41), which provides a procedural interface to determine which formats are available.If your application can read two or more of the available formats, use 'fmts' to determine the priority of these formats for a particular edition. The order of 'fmts' reflects the order in which the formats were written.The FormatsAvailable data type defines a record for the 'fmts' format.TYPE FormatsAvailable = ARRAY[0..0] OF    RECORD        theType:                FormatType;                    {format type for an edition}        theLength:                LongInt;                    {length of edition format }                                            { type}    END;For example, an edition container may have a format type 'TEXT' of length 100, and a format type 'styl' of length 32. A subscriber to this edition can open it and then read the format type 'fmts' to list all available formats. In this example, it returns 16 bytes: 'TEXT' $00000064 'styl' $00000020.Opening an EditionFor a publisher, use the OpenNewEdition function to initiate the writing of data to an edition. (Note that the edition container must already exist before you initiate writing; see “Creating the Edition Container” beginning on page 2-32.)err := OpenNewEdition(publisherSectionH, fdCreator,                             publisherSectionDocument, refNum);The publisherSectionH parameter is the publisher section that you are writing to the edition. The fdCreator parameter is the Finder creator type of the new edition. (The edition container file already has a creator type; you can specify the same creator type or establish a new creator type for the edition.)The publisherSectionDocument parameter specifies the document that contains the publisher. This parameter is used to create an alias from the edition to the publisher’s document. If you pass NIL for publisherSectionDocument, an alias is not made in the edition file. The refNum parameter returns the reference number for the edition.For a subscriber, use the OpenEdition function to initiate the reading of data from an edition.err := OpenEdition(subscriberSectionH, refNum);The subscriberSectionH parameter is a handle to the section record for a given section. The refNum parameter returns the reference number for the edition.The user may rename or move the edition in the Finder. Before writing to or reading data from an edition, the Edition Manager verifies the name of the edition. This process is referred to as synching or synchronization. Synching ensures that the Edition Manager’s existing edition names correspond to the Finder’s existing edition names by updating the control block.Format MarksEach format has its own mark. The mark indicates the next position of a read or write operation. Initially, a mark automatically defaults to 0. After reading or writing data, the format mark is set past the last position written to or read from. The mark is similar to the File Manager’s current read or write position marker for a data fork. Any time that an edition is open (after calling the OpenEdition or the OpenNewEdition function), any of the marks for each format can be queried or set. To set the current mark for a section format to a new location, use the SetEditionFormatMark function.err := SetEditionFormatMark(whichEdition, whichFormat,                                     setMarkTo);To get the current mark for a format in an edition file, use the GetEditionFormatMark function.err := GetEditionFormatMark(whichEdition, whichFormat,                                     currentMark);Reading and Writing Edition DataThe Edition Manager allows you to read or write data a few bytes at a time (as with a data fork of a Macintosh file) instead of in one block (as with the Scrap Manager). You can read sequentially by setting the mark to 0 and repeatedly calling read, or you can jump to a specific offset by setting the mark there. The Edition Manager also adds the capability to stream multiple formats by keeping a separate mark for each format. This allows you to write a few bytes of one format and then write a few bytes of another format, and so forth.Once you have opened the edition container for a particular publisher, you can begin writing data to the edition. Use the WriteEdition function to write publisher data to an edition.err := WriteEdition(whichEdition, whichFormat, buffPtr, buffLen);The WriteEdition function writes the specified format (beginning at the current mark for that format type) from the buffer pointed to by the buffPtr parameter up to buffLen bytes. After you open the edition container for a subscriber and determine which formats to read, use the ReadEdition function to read edition data.err := ReadEdition(whichEdition, whichFormat, buffPtr, buffLen);The ReadEdition function reads the data with the specified format (whichFormat) from the edition into the buffer. The ReadEdition function begins reading at the current mark for that format and continues to read up to buffLen bytes. The actual number of bytes read is returned in the buffLen parameter. Once the buffLen parameter returns a value smaller than the value you have specified, there is no additional data to read, and the ReadEdition function returns a noErr result code. NoteThe Translation Manager (if it is available) attempts implicit translation under certain circumstances. For instance, it does so when your application attempts to read from an edition a format type that is not in the edition. In this case, the Translation Manager attempts to translate the data into the requested format. For more information, see the chapter “Translation Manager” in Inside Macintosh: More Macintosh Toolbox.uClosing an EditionWhen you are done writing to or reading data from an edition, call the CloseEdition function.err := CloseEdition(whichEdition, successful);Each time a user edits a publisher within a document, you must update the modification date in the section record (even if the data is not yet written). When the update mode is set to Manually, the user can compare the modification dates for a publisher and its edition in the publisher options dialog box. One modification date indicates when the publisher last wrote data to the edition, and the other modification date indicates when the publisher section was last edited.If the successful parameter for a publisher is TRUE, the CloseEdition function makes the newly written data available to subscribers and sets the modification date in the mdDate field of the edition to correspond to the modification date of the publisher’s section record. If the two dates differ, the Edition Manager sends a Section Read event to all current subscribers.If the successful parameter for a subscriber is TRUE, the CloseEdition function sets the modification date of the subscriber’s section record to correspond to the modification date of the edition.If you cannot successfully read from or write data to an edition, set the successful parameter to FALSE. For a publisher, data is not written to the edition, but it should still be saved with the document that contains the section. When the document is next saved, data can then be written to the edition. See “Closing an Edition After Reading or Writing” on page 2-88 for additional information on the CloseEdition function.Creating a PublisherYou need to support a Create Publisher menu command in the Edit menu. When a user selects a portion of a document and chooses Create Publisher from this menu, you should display the publisher dialog box on the user’s screen. The Create Publisher menu command should remain dimmed until the user selects a portion of a document.Use the NewPublisherDialog function to display the publisher dialog box on the user’s screen. This function is similar to the CustomPutFile procedure described in the chapter “Standard File Package” in Inside Macintosh: Files.err := NewPublisherDialog(reply);The dialog box contains space for a preview (a thumbnail sketch) of the edition and a space for the user to type the name of the edition in which to write the publisher data. Figure 2-11 illustrates a sample publisher dialog box.Figure 2-11    A sample publisher dialog boxThe NewPublisherDialog function displays the preview (provided by your application), displays a text box with the default name of the edition (provided by your application), and handles all user input until the user clicks Publish or Cancel.You pass a new publisher reply record as a parameter to the NewPublisherDialog function.TYPE NewPublisherReply =     RECORD        canceled:                Boolean;                        {user clicked Cancel}        replacing:                Boolean;                        {user chose existing }                                                { filename for an edition}        usePart:                Boolean;                        {always FALSE in version 7.0}        preview:                Handle;                        {handle to 'prvw', 'PICT', }                                                { 'TEXT', or 'snd ' data}        previewFormat:                                        {type of preview}                        FormatType;                            container:                EditionContainerSpec;                            {initially, default name }                                                { and location of edition; }                                                { on return, edition name & }                                                { location chosen by the }                                                 { user to publish data to}    END;You fill in the usePart, preview, previewFormat, and container fields of the new publisher reply record.Always set the usePart field to FALSE. The preview field should contain either NIL or the data to display in the preview. The previewFormat field should contain 'PICT', 'TEXT', 'snd ', or 'prvw'.Set the container field to be the default name and folder for the edition. The default name should reflect the data contained in the publisher. For example, if a user publishes a bar chart of sales information entitled “sales data,” then the default name for the edition could also be “sales data.” Otherwise, you should use the document name followed by a hyphen (-) and a number to establish uniqueness. For example, your default name could be “January Totals - 3.”If the document has not been saved, the default name should be “untitled edition <n>” where n is a number to establish uniqueness. The default folder should be the same as the edition for the last publisher created in the same document. If this is the first publisher in the document, the default folder should be the same folder that the document is in.The canceled field of the new publisher reply record indicates whether the user clicked Cancel. The replacing field indicates whether the user chose to replace an existing edition file. If replacing returns FALSE, call the CreateEditionContainerFile function to create an edition file.The container field is of data type EditionContainerSpec.TYPE EditionContainerSpec =     RECORD        theFile:                    FSSpec;                {record that identifies the }                                            { file to contain edition data}        theFileScript:                    ScriptCode;                {script code of filename}        thePart:                    LongInt;                {which part of file, }                                            { always kPartsNotUsed}        thePartName:                    Str31;                {not used in version 7.0}        thePartScript:                    ScriptCode;                {not used in version 7.0}    END;The field theFile is a file system specification record, a data structure of type FSSpec. You identify the edition using a volume reference number, directory ID, and filename. When specifying an edition, follow the standard conventions described in Inside Macintosh: Files.After filling in the fields of the new publisher reply record, pass it as a parameter to the NewPublisherDialog function, which displays the publisher dialog box.err := NewPublisherDialog(reply);After displaying the publisher dialog box, use the CreateEditionContainerFile function to create the edition container, and then use the NewSection function to create the section record and the alias record. See the next section, “Creating the Edition Container,” and “Creating the Section Record and Alias Record” on page 2-15 for detailed information.The following code segment illustrates how your application might respond to the user choosing the Create Publisher menu item. In this case, the code sets up the preview for the edition, sets the default name for the edition container, and calls an application-defined function (DoNewPublisher, shown in Listing 2-4 on page 2-33) to display the publisher dialog box on the user’s screen. An application might call the DoNewPublisher function in response to the user’s choosing Create Publisher from the Edit menu or in response to handling the Create Publisher event. The chapter “Responding to Apple Events” in this book gives an example of a handler for the Create Publisher event.VAR    thisDocument:                             MyDocumentInfoPtr;     promptForDialog:                             Boolean;    preview:                             Handle;     previewFormat:                             FormatType;     defaultLocation:                             EditionContainerSpec;    myErr:                            OSErr;BEGIN    {Get a preview to show the user. The MyGetPreviewForSelection }    { function returns a handle to the preview.}    preview := MyGetPreviewForSelection(thisDocument);    previewFormat := 'TEXT';    defaultLocation := MyGetDefaultEditionSpec(thisDocument);    promptForDialog := TRUE;    myErr := DoNewPublisher(thisDocument, promptForDialog, preview,                                     previewFormat, defaultLocation);END;Creating the Edition ContainerUse the CreateEditionContainerFile function to create an edition container to hold the publisher data.err := CreateEditionContainerFile(editionFile, fdCreator,                                             editionFileNameScript);This function creates an edition container. The edition container is empty (that is, it does not contain any formats) at this time.To associate an icon with the edition container, create the appropriate entries for the icon in your application’s bundle. See the chapter “Finder Interface” in Inside Macintosh: Macintosh Toolbox Essentials for additional information. Depending on the contents of the edition, the file type will be 'edtp' (for graphics), 'edtt' (for text), or 'edts' (for sound).After creating the edition container, use the NewSection function to create the section record and alias record for the section.Listing 2-4 illustrates how to create a publisher. The DoNewPublisher function shown in the listing is a function provided by an application. Note that an application might call the DoNewPublisher function in response to the user’s choosing the Create Publisher command or in response to the Create Publisher event. The chapter “Responding to Apple Events” in this book gives an example of a handler for the Create Publisher event.The parameters to the DoNewPublisher function include a pointer to information about the document, a Boolean value that indicates if the function should display the new publisher dialog box, the preview for the edition, the preview format, and an edition container.The function displays the publisher dialog box if requested, letting the user accept or change the name of the edition and the location where the edition should reside. Use the CreateEditionContainerFile function to create the edition with the given name and location. Use the NewSection function to create a new section for the publisher.After the section is created, you must write out the edition data. Be sure to add the newly created section to your list of sections for this document. There are several different techniques for creating publishers and unique IDs; this listing displays one technique.After creating the edition container and creating a new section record, the DoNewPublisher function calls another application-defined routine, DoWriteEdition, to open the edition and write data to it.Listing 2-4    Creating a publisherFUNCTION DoNewPublisher(thisDocument: MyDocumentInfoPtr;                                promptForDialog: Boolean;                                 preview: Handle;                                previewFormat: FormatType;                                editionSpec: EditionContainerSpec)                                : OSErr;VAR    getLastErr, dialogErr:                                OSErr;    createErr, sectionErr:                                OSErr;    resID:                                Integer;    thisSectionH:                                SectionHandle;    reply:                                NewPublisherReply;BEGIN    {set up info for new publisher reply record}    reply.replacing := FALSE;    reply.usePart := FALSE;    reply.preview := preview;    reply.previewFormat := previewFormat;    reply.container := editionSpec;    IF promptForDialog THEN     BEGIN        {user interaction is allowed}        {display dialog box and let user select}        dialogErr := NewPublisherDialog(reply);        {dispose of preview data handle}        DisposeHandle(reply.preview);        IF dialogErr <> noErr THEN MyErrHandler(dialogErr);        IF reply.canceled THEN        BEGIN            {do nothing if user canceled}            DoNewPublisher := userCanceledErr;            EXIT(DoNewPublisher);        END;    END;        {of promptForDialog}    IF NOT reply.replacing THEN    BEGIN                {if user isn't replacing an existing file, create a new one}        createErr :=             CreateEditionContainerFile(reply.container.theFile,                                              kAppSignature,                                              reply.container.theFileScript);        IF createErr <> noErr THEN        BEGIN            DoNewPublisher := errAEPermissionDenied;            EXIT(DoNewPublisher);        END;    END; {of not replacing}    {Advance counter to make a new unique sectionID for this }    { document. It is not required that you equate section IDs }    { with resources.}    thisDocument^.nextSectionID := thisDocument^.nextSectionID + 1;    {create a publisher section}    sectionErr := NewSection(reply.container,                                     thisDocument^.fileSpecPtr,                                      stPublisher,                                     thisDocument^.nextSectionID,                                      pumOnSave, thisSectionH);    IF (sectionErr <> noErr) & (sectionErr <> multiplePublisherWrn)             & (sectionErr <> notThePublisherWrn) THEN        MyErrHandler(sectionErr);    resID := thisDocument^.nextSectionID;    {add this section/alias pair to app's internal bookkeeping}    MyAddSectionAliasPair(thisDocument, thisSectionH, resID);    {write out first edition}    DoWriteEdition(thisSectionH);    {Remember that the section and alias records need to be }    { saved as resources when the user saves the document.}    {set the function result appropriately}    DoNewPublisher := MyGetLastError;END; Opening an Edition Container to Write DataSeveral routines are required to write (publish) data from a publisher to an edition container. (For information on creating an edition container, see the previous section.) Before writing data to an edition, you must use the OpenNewEdition function. This function should be used only for a publisher within a document. Use this function to initiate the writing of data to an edition.err := OpenNewEdition(publisherSectionH, fdCreator,                             publisherSectionDocument, refNum);A user may try to save a document containing a publisher that is unable to write its data to an edition—because another publisher (that shares the same edition) is writing, another subscriber (that shares the same edition) is reading, or a publisher located on another computer is registered to the section. In such a case, you may decide to refrain from writing to the edition so that the user does not have to wait. You should also refrain from displaying an error to the user. The contents of the publisher are saved to disk with the document. The next time that the user saves the document, you can write the publisher data to the edition. You should display an alert box to discourage users from making multiple copies of the same publisher and pasting them in the same or other documents (see “Duplicating Publishers and Subscribers” on page 2-58).If a user clicks Send Edition Now within the publisher options dialog box (to write publisher data to an edition manually), and the publisher is unable to write its data to its edition (for any of the reasons outlined above), you should display an error message.After you are finished writing data to an edition, use the CloseEdition function to close the edition.Listing 2-5 illustrates how to write data to an edition. For an existing edition container, you must open the edition, write each format using the WriteEdition function, and close the edition using the CloseEdition function. This listing shows how to write text only. If the edition is written successfully, subscribers receive Section Read events.Listing 2-5    Writing data to an editionPROCEDURE DoWriteEdition(thePublisher: SectionHandle);VAR    eRefNum:                    EditionRefNum;    openErr:                    OSErr;    writeErr:                    OSErr;    closeErr:                    OSErr;    thisDocument:                    MyDocumentInfoPtr;    textHandle:                    Handle;BEGIN    {find out which document this section belongs to}    thisDocument := MyFindDocument(thePublisher);    {open edition for writing}    openErr := OpenNewEdition(thePublisher, kAppSignature,                                          thisDocument^.fileSpecPtr, eRefNum);    IF openErr <> noErr THEN        MyErrHandler(openErr);    {handle error and exit}    {get the text data to write}    textHandle := MyGetTextInSection(thePublisher, thisDocument);    {write out text data}    HLock(textHandle);    writeErr := WriteEdition(eRefNum, 'TEXT', textHandle^,                                       GetHandleSize(textHandle));    HUnLock(textHandle);    IF writeErr <> noErr THEN    BEGIN        {There were problems writing; simply close the edition. }        { When successful = FALSE, the edition data <> section }        { data. Note: this isn't fatal or bad; it just means }        { that the data wasn't written and no Section Read events }        { will be generated.}        closeErr := CloseEdition(eRefNum, FALSE);    END     ELSE    BEGIN        {The write was successful; now close the edition. }        { When successful = TRUE, the edition data = section data.}        { This edition is now available to any subscribers. }        { Section Read events will be sent to current subscribers.}        closeErr := CloseEdition(eRefNum, TRUE);    END;END; Creating a SubscriberYou need to create a Subscribe To menu command in the Edit menu. When a user chooses Subscribe To from this menu, your application should display the subscriber dialog box on the user’s screen.Use the NewSubscriberDialog function to display the subscriber dialog box on the user’s screen. This function is similar to the CustomGetFile procedure described in the chapter “Standard File Package” in Inside Macintosh: Files.To create a subscriber, you must get information from the user, such as the name of the edition being subscribed to. The dialog box displays a listing of all available editions and allows the user to see a preview (thumbnail sketch) of the edition selected. Figure 2-12 shows a sample subscriber dialog box.Figure 2-12    A sample subscriber dialog boxThe subscriber dialog box allows the user to choose an edition to subscribe to. The NewSubscriberDialog function handles all user interaction until a user clicks Subscribe or Cancel. When a user selects an edition container, the Edition Manager accesses the preview for the edition container (if it is available) and displays it.You pass a new subscriber reply record as a parameter to the NewSubscriberDialog function.TYPE        NewSubscriberReply =        RECORD            canceled:                Boolean;                {user clicked Cancel}            formatsMask:                SignedByte;                {formats required}            container:                EditionContainerSpec;                        {initially, default }                                            { name & location of edition }                                            { to subscribe to; on return, }                                            { edition name & location }                                            { chosen by the user}        END;The canceled field returns a Boolean value of TRUE if the user clicked Cancel. To indicate which edition format types (text, graphics, or sound) your application can read, you set the formatsMask field to one or more of these constants:CONST        kPICTformatMask                        = 1;                    {can subscribe to 'PICT'}         kTEXTformatMask                        = 2;                    {can subscribe to 'TEXT'}        ksndFormatMask                        = 4;                    {can subscribe to 'snd '}To support a combination of formats, add the constants together. For example, a formatsMask of 3 displays both graphics and text edition format types in the subscriber dialog box.The container field is of data type EditionContainerSpec. You must initialize the container field with the default edition volume reference number, directory ID, filename, and part. To do so, use the GetLastEditionContainerUsed function to obtain the name of the last edition displayed in the dialog box.err := GetLastEditionContainerUsed(container);This function returns the last edition container for which a new section was created using the NewSection function. If there is no last edition, or if the edition was deleted, GetLastEditionContainerUsed still returns the correct volume reference number and directory ID to use, but leaves the filename blank and returns the fnfErr result code.The container field is of data type EditionContainerSpec.TYPE EditionContainerSpec =     RECORD        theFile:                        FSSpec;                    {file containing edition }                                                    { data}        theFileScript:                        ScriptCode;                    {script code of filename}        thePart:                        LongInt;                    {which part of file, }                                                    { always kPartsNotUsed}        thePartName:                        Str31;                    {reserved}        thePartScript:                        ScriptCode;                    {reserved}    END;The field theFile is of type FSSpec. See Inside Macintosh: Files for further information on file system specification records.After filling in the fields of the new subscriber reply record, pass it as a parameter to the NewSubscriberDialog function, which displays the subscriber dialog box.err := NewSubscriberDialog(reply);After displaying the subscriber dialog box, call the NewSection function to create the section record and the alias record. See “Creating the Section Record and Alias Record” beginning on page 2-15 for detailed information.If the subscriber is set up to receive new editions automatically (not manually), the Edition Manager sends your application a Section Read event. Whenever your application receives a Section Read event, it should read the contents of the edition into the subscriber.Listing 2-6 illustrates how to create a subscriber. As described earlier, you must set up and display the subscriber dialog box to allow the user to subscribe to any of the available editions. After your application creates a subscriber, your application receives a Section Read event to read in the data being subscribed to. Be sure to add the newly created section to your list of sections for this file. There are many different techniques for creating subscribers and unique IDs; this listing displays one technique.Listing 2-6    Creating a subscriberPROCEDURE DoNewSubscriber(thisDocument: MyDocumentInfoPtr);VAR    getLastErr:                    OSErr;    dialogErr:                    OSErr;    sectionErr:                    OSErr;    resID:                    Integer;    thisSectionH:                    SectionHandle;    reply:                    NewSubscriberReply;BEGIN    {put default edition name into reply record}    getLastErr := GetLastEditionContainerUsed(reply.container);    {can subscribe to pictures or text}    reply.formatsMask := kPICTformatMask + kTEXTformatMask;    {display dialog box & let user select edition to subscribe to}    dialogErr := NewSubscriberDialog(reply);    IF dialogErr <> noErr THEN         MyErrHandler(dialogErr);                                    {handle error and exit}    IF reply.canceled THEN                                                 EXIT(DoNewSubscriber);                                    {do nothing if user canceled}    {Advance counter to make a new unique sectionID for this }    { document. It is not necessary to equate section IDs with }    { resources.}    thisDocument^.nextSectionID := thisDocument^.nextSectionID + 1;    {create a subscriber section}    sectionErr := NewSection(reply.container,                                      thisDocument^.fileSpecPtr,                                     stSubscriber,                                      thisDocument^.nextSectionID,                                      sumAutomatic, thisSectionH);    IF sectionErr <> noErr THEN        MyErrHandler(sectionErr);    {handle error and exit}    resID := thisDocument^.nextSectionID;    {add this section/alias pair to app's internal bookkeeping}    MyAddSectionAliasPair(thisDocument, thisSectionH, resID);    {Remember that you will receive a Section Read event to read }    { in the edition that you just subscribed to because the }    { initial mode is set to sumAutomatic.}    {Remember that the section and alias records need to be saved }     { as resources when the user saves the document.}END; Opening an Edition Container to Read DataBefore reading data from an edition, you must use the OpenEdition function. Your application should only use this function for a subscriber. Use this function to initiate the reading of data from an edition.err := OpenEdition(subscriberSectionH, refNum);As a precaution, you should retain the old data until the user can no longer undo. This allows you to undo changes if the user requests it.Your application can supply a procedure such as DoReadEdition to read in data from the edition to a subscriber. When your application opens a document containing a subscriber that is set up to receive new editions automatically, the Edition Manager sends you a Section Read event if the edition has been updated. The Section Read event supplies the handle to the section that requires updating. Listing 2-7, shown in the next section, provides an example of reading data from an edition.Choosing Which Edition Format to ReadAfter your application opens the edition container for a subscriber, it can look in the edition for formats that it understands. To accomplish this, use the EditionHasFormat function.err := EditionHasFormat(whichEdition, whichFormat, formatSize);The EditionHasFormat function returns the noTypeErr result code if a requested format is not available. If the requested format is available, this function returns the noErr result code, and the formatSize parameter contains the size of the data in the specified format or kFormatLengthUnknown (–1), which signifies that the size is unknown.NoteThe Translation Manager (if it is available) attempts implicit translation under certain circumstances. For instance, it does so when your application attempts to read from an edition a format type that is not in the edition. In this case, the Translation Manager attempts to translate the data into the requested format. For more information, see the chapter “Translation Manager” in Inside Macintosh: More Macintosh Toolbox.uAfter your application opens the edition container and determines which formats it wants to read, call the ReadEdition function to read in the edition data. See “Reading and Writing Edition Data” on page 2-27 for detailed information.After you have completed writing the edition data into the subscriber section, call the CloseEdition function to close the edition. See “Closing an Edition” on page 2-28 for detailed information.Listing 2-7 illustrates how to read data from an edition. As described earlier, you must open the edition, determine which formats to read, use the ReadEdition function to read in data, and then use the CloseEdition function to close the edition. This listing shows how to read only text.Listing 2-7    Reading in edition dataPROCEDURE DoReadEdition(theSubscriber: SectionHandle);VAR    eRefNum:                        EditionRefNum;    openErr:                        OSErr;    readErr:                        OSErr;    closeErr:                        OSErr;    thisDocument:                        MyDocumentInfoPtr;    textHandle:                        Handle;    formatLen:                        Size;BEGIN    {find out which document this section belongs to}    thisDocument := MyFindDocument(theSubscriber);    {open the edition for reading}    openErr := OpenEdition(theSubscriber, eRefNum);    IF openErr <> noErr THEN        MyErrHandler(openErr);                                {handle error and exit}    {look for 'TEXT' format}    IF EditionHasFormat(eRefNum, 'TEXT', formatLen) = noErr THEN    BEGIN        {get the handle of location to read to}        textHandle := MyGetTextInSection(theSubscriber,                                                   thisDocument);        SetHandleSize(textHandle, formatLen);        HLock(textHandle);        readErr := ReadEdition(eRefNum, 'TEXT', textHandle^,                                       formatLen);        MyUpdateSubscriberText(theSubscriber, textHandle, readErr);        HUnLock(textHandle);        IF readErr = noErr THEN        BEGIN                    {The read was successful; now close the edition. When }            { successful = TRUE, the section data = edition data.}            closeErr := CloseEdition(eRefNum, TRUE);            EXIT(DoReadEdition);        END;                                                    END;        {of EditionHasFormat}    {'TEXT' format wasn't found or read error; just close }    { the edition. FALSE tells the Edition Manager that your }    { application did not get the latest edition.}    closeErr := CloseEdition(eRefNum, FALSE);END; Using Publisher and Subscriber OptionsYou can allow users to set several special options associated with publishers and subscribers. To set these preferences, users change settings in two dialog boxes provided by the Edition Manager: publisher options and subscriber options. To make these dialog boxes available to the user, provide a command in the Edit menu that toggles between Publisher Options (when the user has selected a publisher within a document) and Subscriber Options (when a user has selected a subscriber within a document). When a user chooses one of these menu commands, you need to display the appropriate dialog box. Use the SectionOptionsDialog function to display the publisher options or subscriber options dialog box on the user’s screen.err := SectionOptionsDialog(reply);Each dialog box contains information regarding the section and its edition. Figure 2-13 shows the publisher options dialog box with the update mode set to On Save. Figure 2-13    The publisher options dialog box with update mode set to On SaveFigure 2-14 shows the publisher options dialog box with the update mode set to Manually.Figure 2-14    The publisher options dialog box with update mode set to Manually As a shortcut for the user, you should display the publisher options dialog box when the user double-clicks a publisher section in a document. Figure 2-15 shows the subscriber options dialog box with the update mode set to Automatically. Figure 2-15    The subscriber options dialog box with update mode set to Automatically Figure 2-16 shows the subscriber options dialog box with the update mode set to Manually.Figure 2-16    The subscriber options dialog box with update mode set to ManuallyAs a shortcut for the user, you should display the subscriber options dialog box when the user double-clicks a subscriber section in a document.You pass a section options reply record as a parameter to the SectionOptionsDialog function.TYPE SectionOptionsReply =     RECORD        canceled:                Boolean;                        {user clicked Cancel}        changed:                Boolean;                        {changed section record}        sectionH:                SectionHandle;                         {handle to the specified }                                                { section record}        action:                ResType;                        {action codes}    END;Set the sectionH parameter to the handle to the section record for the section the user selected.Upon return of the SectionOptionsDialog function, the canceled and changed fields are set. If the canceled field is set to TRUE, the user clicked Cancel. Otherwise, this field is set to FALSE. If the changed field is set to TRUE, the section record is changed. For example, the user may have changed the update mode.The SectionOptionsDialog function returns in the action parameter the code for one of five user actions. The function dismisses the publisher and subscriber options dialog boxes after the user clicks a button.n    Action code is 'read' for a click of the Get Edition Now button.n    Action code is 'writ' for a click of the Send Edition Now button.n    Action code is 'goto' for a click of the Open Publisher button.n    Action code is 'cncl' for a click of the Cancel Publisher or Cancel Subscriber button.n    Action code is '    ' ($20202020) for a click of the OK button. Listing 2-8 shows an example of how your application can respond to the action codes received from the section options reply record. You can use several different techniques for this purpose; this listing shows one technique.Listing 2-8    Responding to action codesPROCEDURE DoOptionsDialog(theSection: SectionHandle);VAR    reply:                        SectionOptionsReply;    theEditionInfo:                        EditionInfoRecord;    action:                        ResType;    sodErr, geiErr:                        OSErr;    gpiErr, gpsErr:                        OSErr;BEGIN    reply.sectionH := theSection;    {display options dialog box}    sodErr := SectionOptionsDialog(reply);    {determine what the user did and handle appropriately}    IF reply.canceled THEN                                {user selected the Cancel button}        EXIT(DoOptionsDialog);    IF reply.changed THEN        {the section record has changed; make note of this}        MySectionHasChanged(theSection);        {if you customize, you may want to do some }        { post-processing now}    {get the action code}    action := reply.action;    IF (action = 'read') THEN    BEGIN            {user selected Get Edition Now button}        DoReadEdition(theSection);        EXIT(DoOptionsDialog);    END;    IF (action = 'writ') THEN    BEGIN            {user selected Send Edition Now button}        DoWriteEdition(theSection);        EXIT(DoOptionsDialog);    END;    IF (action = 'goto') THEN    BEGIN            {user selected Open Publisher button}        geiErr := GetEditionInfo(theSection, theEditionInfo);        IF geiErr <> noErr THEN             MyErrHandler(geiErr);    {handle error and exit}        gpsErr := GotoPublisherSection(theEditionInfo.container);        IF gpsErr <> noErr THEN            MyErrHandler(gpsErr);    {handle error and exit}        EXIT(DoOptionsDialog);    END;    IF (action = 'cncl') THEN    BEGIN     {User selected Cancel Publisher or Cancel Subscriber }        { button. Call the UnRegisterSection function and dispose }        { of the section record and alias record.}        EXIT(DoOptionsDialog);    END;END;The following sections describe the features of the publisher and subscriber options dialog boxes.Publishing a New Edition While Saving or ManuallyBy default, your application should write publisher data to an edition each time the user saves the document and the contents of the publisher differ from the latest edition. In the publisher options dialog box, the user can choose to write new data to an edition each time the document is saved (by clicking On Save) or only upon the user’s specific request (by clicking Manually).When the update mode is set to manual, a user must click the Send Edition Now button in the publisher options dialog box to write publisher data to an edition. When a user clicks this button, the section options reply record contains the action code 'writ'. In this case, you should write out the new edition. Writing to an edition manually is useful when a user tends to save a document numerous times while revising it.Each time the user saves the document, check the update mode of the publisher section. If the publisher section sends its data to an edition when the document is saved, check whether the publisher data has changed since it was last written to the edition. If so, write the publisher’s data to the new edition.In addition, you may also support a Stop All Editions menu command to provide a method for temporarily suspending all update activity. See “Introduction to Publishers, Subscribers, and Editions” beginning on page 2-4 for additional information.Subscribing to an Edition Automatically or ManuallyBy default, your application should subscribe to an edition each time new edition data becomes available. In the subscriber options dialog box, the user can choose to read new data from an edition as the data is available (by clicking Automatically) or only upon the user’s specific request (by clicking Manually).When the update mode is set to manual, the user must click the Get Edition Now button in the subscriber options dialog box to receive new editions. When a user clicks this button, the section options reply record contains the action code 'read'. In this case, you should read in the new edition. See “Opening an Edition Container to Read Data” beginning on page 2-41 for detailed information.When the update mode is set to automatic, your application receives a Section Read event each time a new edition becomes available. In response, you should read the new edition data beginning with the OpenEdition function.Your application does not receive Section Read events for subscribers that receive new editions manually.You may also support a Stop All Editions menu command to provide a method for temporarily suspending all update activity. See “Introduction to Publishers, Subscribers, and Editions” beginning on page 2-4 for additional information.Canceling Sections Within DocumentsThe option of canceling publishers and subscribers is available to the user through the Cancel Publisher and Cancel Subscriber buttons in the corresponding options dialog boxes. When the user clicks one of these buttons, the action code of the section options reply record is 'cncl'. See “Relocating an Edition” on page 2-60 for additional information on canceling a section.When a user cancels a section (either a publisher or subscriber) and then saves the document, or when a user closes an untitled document (which contains newly created sections) without saving it, you must unregister each corresponding section record and alias record using the UnRegisterSection function. In addition, you should also delete the section record and alias record using the DisposeHandle procedure. See Inside Macintosh: Memory for additional information on the DisposeHandle procedure.When a user cancels a publisher section and then saves the document, or when a user closes an untitled document (which contains newly created publishers) without saving it, you must also delete any corresponding edition containers (in addition to deleting section records and alias records).Do not delete an edition container file, section record, or alias record until the user saves the document; the user may decide to undo changes before saving the document.To locate the appropriate edition container to be deleted (before you use the UnRegisterSection function), use the GetEditionInfo function.err := GetEditionInfo(sectionH, editionInfo);The editionInfo parameter is a record of data type EditionInfoRecord.TYPE EditionInfoRecord =     RECORD        crDate:                TimeStamp;                            {date edition container }                                                    { was created}        mdDate:                TimeStamp;                            {date of last change}        fdCreator:                OSType;                            {file creator}        fdType:                OSType;                            {file type}        container:                EditionContainerSpec;                            {the edition}    END;The GetEditionInfo function returns the edition container as part of the edition information.The crDate field contains the creation date of the edition. The mdDate field contains the modification date of the edition.The fdType and the fdCreator fields are the type and creator of the edition file. The container field includes a volume reference number, directory ID, filename, script, and part number for the edition.To remove the edition container, use the DeleteEditionContainerFile function.err := DeleteEditionContainerFile(editionFile);Locating a Publisher Through a SubscriberThe user can locate a publisher from a subscriber within a document by clicking the Open Publisher button in the subscriber options dialog box. As a shortcut, Apple suggests that you also allow the user to locate a publisher by selecting a subscriber in a document and pressing Option–double-click.When the action code of the SectionOptionsReply record is 'goto', use the GoToPublisherSection function.err := GoToPublisherSection(container);The GoToPublisherSection function locates the correct document by resolving the alias in the edition, and it launches the document’s application if necessary (the Edition Manager sends an Open Documents event). The Edition Manager then sends the publishing application a Section Scroll event. If the document containing the requested publisher is located on the same computer as its subscriber, the document opens and scrolls to the location of the publisher. If the document containing the requested publisher is located on a shared volume (using file sharing), the document opens and scrolls to the location of the publisher only if the user has privileges to open the document from the Finder.You need to provide the GoToPublisherSection function with the edition container. To accomplish this, use the GetEditionInfo function. See the previous section, “Canceling Sections Within Documents,” for information on the GetEditionInfo function.Renaming a Document Containing SectionsIf a user renames a document that contains sections by choosing Save As from the File menu, or if a user pastes a portion of a document that contains a section into another document, use the AssociateSection function.Use the AssociateSection function to update the alias record of a registered section.err := AssociateSection (sectionH, newSectionDocument);The AssociateSection function internally calls the UpdateAlias function. It is also possible to update the alias record using the Alias Manager (see the chapter “Alias Manager” in Inside Macintosh: Files for additional information).Displaying Publisher and Subscriber BordersEach publisher and subscriber within a document should have a border that appears when a user selects the contents of these sections. You should display a publisher border as three pixels wide with 50 percent gray lines and a subscriber border as three pixels wide with 75 percent gray lines. Separate the contents of the section from the border itself with one pixel of white space. To create your borders, you should use patterns, not colors. Depending on the user’s monitor type, colors may not be distinguishable.In general, borders for publishers and subscribers should behave like the borders of 'PICT' graphics in a word-processing document. A border should appear when the user clicks the content area of a publisher or a subscriber and disappear when the user clicks outside the content area of a section. You can also make all publisher and subscriber borders appear or disappear by implementing an optional Show/Hide Borders menu command. Figure 2-17 displays the Edition Manager Show/Hide Borders menu command in the Edit menu.Figure 2-17    Edit menu with Show/Hide Borders menu commandDepending on your application, you may choose to include resize handles or similar components in your borders. See “Object-Oriented Graphics Borders” on page 2-56 for an example of resize handles.Whenever a user selects a portion of a publisher or sets the insertion point within a publisher, you should display the border as 50 percent gray. A user can copy the contents of a publisher or subscriber without copying the section itself by selecting the data, copying, and then pasting the data in a new location. A user can cut and paste a selection that contains an entire publisher or subscriber, but you should discourage users from making multiple copies of a publisher. See “Duplicating Publishers and Subscribers” on page 2-58 for detailed information.When the user modifies a publisher, your application should grow or shrink its border to accommodate the new dimension of the section.You should display only one publisher border within a document at a time. If a cursor is inserted within a publisher that is contained within a larger publisher, you should display only the smaller, internal publisher border. If it is absolutely necessary to display all section borders within a document at the same time, you can create a Show/Hide Borders menu item. You do not need to provide support for publishers contained within other publishers. If you do not, you should dim the Create Publisher menu command (to indicate that it is not selectable) when a user attempts to create a publisher within an existing publisher.Figure 2-18 shows the recommended border behavior for publishers. The top window shows a publisher with its borders displayed. The middle window shows how the borders look when a user selects some of the contents of a section. The bottom window shows how the borders look when a user selects data within a document that includes a publisher section.Figure 2-18    Publisher bordersFigure 2-19 shows the recommended border behavior for subscribers. The top window shows a subscriber with its borders displayed. The middle window shows how the borders look when a user selects the contents of a section. The bottom window shows how the borders look when a user selects data within a document that includes a subscriber section.Figure 2-19    Subscriber bordersIf a user tries to select only a portion of a subscriber, you should highlight the entire contents of the subscriber. A user cannot edit the data in a subscriber. See “Modifying a Subscriber” on page 2-59 for detailed information.If a user cancels a section using the publisher or subscriber options dialog box, your application should leave the contents of the section within the document, but you should be sure to remove the borders from this data, as it is no longer considered a section.Generally, the appearance and function of publisher and subscriber borders should be the same across different applications. The following sections entitled “Text Borders,” “Spreadsheet Borders,” “Object-Oriented Graphics Borders,” and “Bitmapped Graphics Borders” describe specialized features for publisher and subscriber borders in word-processing, spreadsheet, or graphics applications. Text BordersIn word-processing documents, a publisher may contain other publishers. However, one publisher should not overlap another publisher. You should display only one publisher border at a time. If an insertion point is placed within a publisher that is encompassed by another larger publisher, you should display only the smaller internal publisher border.In exceptional cases, it may be necessary to display more than one publisher or subscriber border at a time. For example, a publisher may consist of a paragraph that includes a marker for a footnote. The data contained within the footnote should also be considered part of the publisher. When a user selects the paragraph, you should simultaneously display a border around the footnote.The border of a publisher that contains text should be located between characters within the text. The insertion point, when placed on such a boundary, should gravitate toward the publisher. That is, a click in front (to the left) of a publisher border should place the cursor inside the publisher, so that subsequent typing goes inside the publisher. Clicking at the end (to the right) of a publisher border should also place the cursor inside the publisher.Whenever two separate borders are adjacent, the boundary click should go in between them. This is also true for a border that is next to other nontextual aspects of a document, such as 'PICT' graphics or page breaks.When a user removes information from a publisher that contains text data, you should resize the border so that it becomes smaller. When a user adds information to the publisher, you should enlarge the border to accommodate the new text. The insertion point should remain within the publisher. If a user highlights the entire contents of a publisher and then chooses Cut from the Edit menu, you should not delete the publisher border within the document. The user may intend to delete the existing publisher data and replace it with new data, or the user may want to move the entire publisher and its data to a new location. Figure 2-20 shows this state.Figure 2-20    A publisher with contents removedYou should leave the cursor inside the small publisher border for further typing. If the user inserts the cursor in a new location (instead of typing data inside the existing border), you need to remove the empty publisher border from the document to allow the user to move the publisher. This effectively deletes the publisher from the document. If the user pastes the publisher that is currently held in the scrap, you should re-create its border. If the user cuts or copies other data from the document before pasting the publisher from the scrap, the publisher should be removed from the scrap.Spreadsheet BordersBorders around spreadsheet data or other data in arrays should look and behave very much like text borders. Figure 2-21 shows a typical border within a spreadsheet document.Figure 2-21    A publisher border within a spreadsheet documentNote that the border goes below the column headers (A, B, C, D) and to the right of the row labels (1, 2, 3, 4)—it should not overlap these cell boundaries. The border at the bottom and the border on the right side can be placed within the adjacent cells (outside of the cells that constitute the publisher).Unlike borders in word-processing applications, borders in spreadsheet documents (or other documents with array data) can overlap. That is, a user can select a row of cells to be a publisher and an overlapping column of those cells to be another publisher. You should never display more than one publisher border at a time. When a user selects a spreadsheet cell that is part of more than one publisher, you should display only the border of the publisher that was last edited. (This can be accomplished by comparing the modification dates of the publishers.)If it is absolutely necessary to display all section borders within a document at the same time, you can create a Show/Hide Borders command in the Edit menu to toggle all borders on and off.When data is added to or deleted from a publisher that consists of a spreadsheet cell or other array, you should resize its border to accommodate the addition or deletion of data. A publisher should behave like a named range in a spreadsheet. For example, if a user cuts a row within a publisher that consists of a named range in a spreadsheet, you should shrink the publisher data and its border correspondingly.When a user cuts a publisher and its entire contents within a spreadsheet document, the entire section should be held in the scrap. Do not leave an empty publisher border in a spreadsheet (as recommended for text borders). If a user attempts to paste a copy of an existing publisher, you should warn the user by displaying an alert box (see “Duplicating Publishers and Subscribers” on page 2-58).Object-Oriented Graphics BordersIn an object-oriented drawing application, the publisher border should fit just around the selected objects.You can provide resize handles that appear with all drawing objects to allow the user to resize the border of a publisher. Figure 2-22 shows a publisher border with resize handles.Figure 2-22    A publisher border with resize handlesAn application can make publisher borders appear to float over the area the user publishes. The border acts like a clipping rectangle—anything within the border becomes the publisher. Figure 2-23 shows a publisher that contains clipped graphics and its subscriber in another application.A user can create publishers and subscribers that overlap each other. Thus, borders may overlap and it may no longer be possible to turn on a particular border when the user clicks within a publisher. Drawing applications should provide a menu command, Show Borders, that toggles to Hide Borders. This command should allow users to turn all publisher and subscriber borders on or off.Figure 2-23    A publisher and subscriber with clipped graphicsBitmapped Graphics BordersCreating a border around bitmapped graphics in applications is similar to doing so in object-oriented drawing applications. The border appears around the selected area. The user can create overlapping publishers and subscribers in bitmapped graphics applications. You need to provide a Show/Hide Borders command to allow users to turn all borders on and off.Duplicating Publishers and SubscribersWhenever a user clicks a publisher or subscriber border, you should change the contents of the section to a selected state. You should discourage users from making multiple copies of a publisher and pasting them in the same or other documents, because the contents of the edition would be difficult or impossible to predict. Multiple copies of the same publisher also contain the same control block value. See “Creating and Registering a Section” on page 2-74 for detailed information on control blocks.When a user attempts to create a copy of a publisher that already exists, you should display an alert box such as the one shown in Figure 2-24.Figure 2-24    Creating multiple publishers alert boxWhen a user attempts to save a document that contains multiple copies of the same publisher, display an alert box such as the one shown in Figure 2-25.Figure 2-25    Saving multiple publishers alert boxIf a user decides to ignore your alert box, your application should still save the document, but you should continue to display this error message every time the user saves this document.A user can modify the contents of any duplicate publisher, but the contents of the edition will be whichever publisher was the last to write.When a user chooses to copy and paste or duplicate a section, use the HandToHand function (described in Inside Macintosh: Memory) to duplicate the section record and alias record. Set the alias field of the cloned section record to the handle of the cloned alias record and generate a unique section identification number for it. In addition, you should also place the section data, section record, and alias record in the scrap.Use the RegisterSection function (described in “Opening and Closing a Document Containing Sections” on page 2-22) to register the cloned section’s section record.A user can select the contents of a publisher without selecting the border and copy just the data to a new location. In this case, the user has simply copied data (and not the publisher). Do not create a border for this data in the new location.Modifying a SubscriberWhen the user selects data or clicks the data area of a subscriber, you should highlight the entire contents of the subscriber using inverse video. Although you shouldn’t allow a user to edit the information in a subscriber, you can allow a user to make global adornments to subscribers. In other words, users can change the font, size, or other characteristics of the entire subscriber. For example, a user might select a subscriber within a document and change all text from plain to bold. However, you should discourage users from modifying the individual elements contained within a subscriber—for example, by editing a sentence or rotating an individual graphic object.Remember that each time a new edition arrives for a subscriber, any modifications that the user has introduced are overwritten. Global changes to a subscriber are much easier for your application to regenerate.NoteAlthough adornments should be global and never partial, you may still need to give users the ability to select portions of a subscriber, for instance, when performing spell checking and search-and-replace operations.uIf you do allow a user to edit a subscriber section, provide an enable/disable editing option within the subscriber options dialog box using the SectionOptionsExpDialog function, described in “Customizing Dialog Boxes” beginning on the next page. When you allow a user to edit a subscriber, you should change the subscriber from a selected state to editable data.Because a user can modify a publisher just like any other portion of a document, its subscriber may change in size as well as content. For example, a user may modify a publisher by adding two additional columns to a spreadsheet.Relocating an EditionIn the Finder, users cannot move an edition across volumes. To relocate an edition, the user must first select its publisher and cancel the section (remember to remove the border). The user needs to republish and then select a new volume location for the edition. As a convenience for the user, you should retain the selection of all the publisher data after the user cancels the section to make it easy to republish the section.Customizing Dialog BoxesThe expandable dialog box functions allow you to add items to the bottom of the dialog boxes, apply alternate mapping of events to item hits, apply alternate meanings to the item hits, and choose the location of the dialog boxes. See the chapter “Dialog Manager” in Inside Macintosh: Macintosh Toolbox Essentials and the chapter “Standard File Package” in Inside Macintosh: Files for additional information.The expandable versions of these dialog boxes require five additional parameters. Use the NewPublisherExpDialog function to expand the publisher dialog box.err := NewPublisherExpDialog (reply, where, expansionDITLresID,                                         dlgHook, filterProc, yourDataPtr);Use the NewSubscriberExpDialog function to expand the subscriber dialog box.err := NewSubscriberExpDialog (reply, where, expansionDITLresID,                                         dlgHook, filterProc, yourDataPtr);Use the SectionOptionsExpDialog function to expand the publisher options and the subscriber options dialog boxes.err := SectionOptionsExpDialog (reply, where, expansionDITLresID,                                          dlgHook, filterProc, yourDataPtr);The reply parameter is a pointer to a NewPublisherReply, NewSubscriberReply, or SectionOptionsReply record, respectively.You can automatically center the dialog box by passing (–1, –1) in the where parameter. The expansionDITLresID parameter should contain 0 or a valid item list ('DITL') resource ID. This integer is the resource ID of an item list whose items are appended to the end of the standard item list. The dialog items keep their relative positions, but they are moved as a group to the bottom of the dialog box. See the chapter “Dialog Manager” in Inside Macintosh: Macintosh Toolbox Essentials for additional information on item lists.The filterProc parameter should be a pointer to an expandable modal-dialog filter function or NIL. An expandable modal-dialog filter function is similar to a modal-dialog filter function or event filter function except that an expandable modal-dialog filter function accepts two extra parameters. The ModalDialog procedure calls the expandable modal-dialog filter function you provide in this parameter. Providing a filter function enables you to map real events (such as a mouse-down event) to an item hit (such as clicking the Cancel button). For instance, you may want to map a keyboard equivalent to an item hit. See the chapter “Dialog Manager” in Inside Macintosh: Macintosh Toolbox Essentials for information on the ModalDialog procedure.The dlgHook parameter should be a pointer to an expandable dialog hook function or NIL. An expandable dialog hook function is similar to a dialog hook function except that an expandable dialog hook function accepts an additional parameter. The NewSubscriberExpDialog, NewPublisherExpDialog, and SectionOptionsExpDialog functions call your expandable dialog hook function after each call to the ModalDialog procedure. The dialog hook function should take the appropriate action, such as filling in a checkbox. The itemOffset parameter to the procedure is the number of items in the item list before the expansion dialog items. You need to subtract the item offset from the item hit to get the relative item number in the expansion dialog item list. The expandable dialog hook function should return as its function result the absolute item number. When the Edition Manager displays subsidiary dialog boxes in front of another dialog box on the user’s screen, your dialog hook and event filter functions should check the refCon field in the WindowRecord data type (from the window field in the DialogRecord) to determine which window is currently in the foreground. The main dialog box for the NewPublisherExpDialog and the NewSubscriberExpDialog functions contains the following constant:CONST            sfMainDialogRefCon                            = 'stdf';                {new publisher and }                                                        { new subscriber}The main dialog box for the SectionOptionsExpDialog function contains the following constant:CONST            emOptionsDialogRefCon                                = 'optn';                {options dialog}See “Summary of the Edition Manager” beginning on page 2-106 for additional constants. The yourDataPtr parameter is reserved for your use. It is passed back to your dialog hook and event filter function. This parameter does not have to be of type Ptr—it can be any 32-bit quantity that you want. In Pascal, you can pass yourDataPtr in register A6 , and declare your dialog hook and modal-dialog filter as local functions without the last parameter. The stack frame is set up properly for these functions to access their parent local variables. See the chapter “Standard File Package” in Inside Macintosh: Files for detailed information.For the NewPublisherExpDialog and NewSubscriberExpDialog functions, all the pseudo-items for the Standard File Package—such as sfHookFirstCall(–1), sfHookNullEvent(100), sfHookRebuildList(101), and sfHookLastCall(–2)—can be used, as well as emHookRedrawPreview(150).For the SectionOptionsExpDialog function, the only valid pseudo-items are sfHookFirstCall(–1), sfHookNullEvent(100), sfHookLastCall(–2), emHookRedrawPreview(150), emHookCancelSection(160), emHookGoToPublisher(161), emHookGetEditionNow(162), emHookSendEditionNow(162), emHookManualUpdateMode(163), and emHookAutoUpdateMode(164). See the chapter “Standard File Package” in Inside Macintosh: Files for information on pseudo-items.Subscribing to Non-Edition FilesUsing the Edition Manager, a subscriber can read data directly from another document, such as an entire 'PICT' file, instead of subscribing to an edition. This feature is for advanced applications that can set up bottleneck procedures for reading. Figure 2-26 shows a document that is subscribing directly to a 'PICT' file. Figure 2-26    Subscribing directly to a 'PICT' fileFor each application, the Edition Manager keeps a pointer to a bottleneck function. The Edition Manager never opens or closes an edition container directly. Instead, the Edition Manager calls the current edition opener. The InitEditionPack function (described on page 2-74) sets up the current system opener function.To override the standard opener function, create an opener function that contains the following parameters:FUNCTION MyOpener (selector: EditionOpenerVerb;                          VAR PB: EditionOpenerParamBlock): OSErr;Your opener needs to know which formats the file contains and how the data is supposed to be read or written. The opener function is passed an edition opener verb in the selector parameter, which identifies the action the opener function should perform. The opener can allocate a handle or pointer to contain information such as file reference numbers. This value is passed to the I/O routines in the ioRefNum field of the edition opener parameter block.The eoOpen and eoOpenNew edition opener verbs (described in “Calling an Edition Opener” on page 2-64) return a pointer to a function to do the actual reading and writing.The following sections describen    how to get the current edition opener n    how to set your own edition opener n    how to call an edition opener n    the edition opener parametersGetting the Current Edition OpenerWhen you want to get the current edition opener, use the GetEditionOpenerProc function.err := GetEditionOpenerProc(opener);The opener parameter returns a pointer to the current edition opener. A different current opener is kept for each application. One application’s opener is never called by another application.Setting an Edition OpenerYou can provide your own edition opener. To do so, use the SetEditionOpenerProc function.err := SetEditionOpenerProc(@MyOpener);The @MyOpener parameter is a pointer to the edition opener function that you are providing. If you set the current opener to be a routine in your own code, be sure to call the GetEditionOpenerProc function first so that you can save the previous opener. If your opener is passed a selector that it does not understand, use the previous opener provided by the Edition Manager to handle it. See the next section for a list of selectors.Calling an Edition OpenerYou use the CallEditionOpenerProc function to call an edition opener. Since the Edition Manager is a package that may move, a real pointer cannot be safely returned for the standard opener and I/O routines. The system opener and the I/O routines are returned as a value that is not a valid address to a procedure. The CallEditionOpenerProc and CallFormatIOProc functions check for these values and call the system openers.You should never assume that a value for a system opener is a fixed constant.err := CallEditionOpenerProc (selector, PB, routine);Set the selector parameter to one of the edition opener verbs. The edition opener verbs includen    eoCanSubscriben    eoOpenn    eoClosen    eoOpenNewn    eoCloseNewThe PB parameter of the CallEditionOpenerProc function is an edition opener parameter block.TYPE EditionOpenerParamBlock =     RECORD        info:                    EditionInfoRecord;                            {edition container to }                                                        { be subscribed to}        sectionH:                    SectionHandle;                            {publisher or }                                                        { subscriber }                                                        { requesting open}        document:                    FSSpecPtr;                            {document passed}        fdCreator:                    OSType;                            {Finder creator type}        ioRefNum:                    LongInt;                            {reference number}        ioProc:                    FormatIOProcPtr;                            {routine to read }                                                        { formats}        success:                    Boolean;                            {reading or writing }                                                        { was successful}        formatsMask:                    SignedByte;                            {formats required to }                                                        { subscribe}    END;The routine parameter of the CallEditionOpenerProc function is a pointer to an edition opener function.The following list shows which fields of the edition opener parameter block are used by the edition opener verbs:Opener verb        Field    Description    Called by (continued)    eoCanSubscribe    Æ    info    Edition container to subscribe to.    NewSubscriberDialogfunction for a subscriber        Æ    formatsMask    Formats required to subscribe.            ¨    Return value    A noErr code indicates that an edition container can be subscribed to. A noTypeErr code indicates that an edition container cannot be subscribed to.        eoOpen    Æ    info    Edition container to open for reading.    OpenEdition and GetStandardFormats functions for a subscriber        Æ    sectionH    Subscriber section requesting open or NIL.                                ¨    ioRefNum    Reference number for use by I/O routine. Not the same as EditionRefNum.                                ¨    ioProc    I/O routine to call to read formats.            ¨    Return value    A noErr code or appropriate error code.        eoClose    Æ    info    Edition container to be closed for reading.    CloseEdition and GetStandardFormats functions for a subscriber                            Æ    sectionH    Subscriber section requesting close or NIL.                                Æ    ioRefNum    Value returned by eoOpen.            Æ    ioProc    Value returned by eoOpen.            Æ    success    Success value passed to the CloseEdition function.                                ¨    Return value    A noErr code or appropriate error code.                        continued    eoOpenNew    Æ    info    Edition container to open for writing.    OpenNewEdition function for a publisher        Æ    sectionH    Publisher section requesting open or NIL.                                Æ    document    Document pointer passed into the OpenNewEdition function.                                Æ    fdCreator    The fdCreator passed into the OpenNewEdition function.                                ¨    ioRefNum    Reference number for use by I/O routine. Not the same as EditionRefNum.                                                    ¨    ioProc    I/O routine to call to write formats.            ¨    Return value    A noErr code or appropriate error code.        eoCloseNew    Æ    info    Edition container to be closed after writing.    CloseEdition function for a publisher                            Æ    sectionH    Publisher section requesting close or NIL.                                Æ    ioRefNum    Value returned by eoOpenNew.            Æ    ioProc    Value returned by eoOpenNew.            Æ    success    Success value passed to the CloseEdition function.                                ¨    Return value    A noErr code or appropriate error code.        As Listing 2-9 demonstrates, you install your own edition opener function by first saving the current opener and then installing your own opener. The listing also shows an edition opener, the MyEditionOpener function. When it receives the eoCanSubscribe opener verb, the MyEditionOpener function calls another application-defined routine, MyCanSubscribe. The Edition Manager sends your edition opener this verb to help it build the list of files displayed by the NewSubscriber function. The MyCanSubscribe function returns noErr if it can subscribe to the file; otherwise, it calls the original edition opener to handle the request.Listing 2-9    Using your own edition opener functionVAR    gOriginalOpener: EditionOpenerProcPtr;    {global variable}PROCEDURE MyInstallMyOpener;BEGIN    FailOSErr(GetEditionOpenerProc(gOriginalOpener));    FailOSErr(SetEditionOpenerProc(@MyEditionOpener));END; {MyInstallMyOpener}FUNCTION MyEditionOpener (selector: EditionOpenerVerb;                                   VAR PB: EditionOpenerParamBlock)                                     : OSErr; BEGIN    WITH PB DO    BEGIN        CASE selector OF            eoCanSubscribe:                MyEditionOpener := MyCanSubscribe(PB);            eoOpen:                MyEditionOpener := MyEditionOpen(PB);            eoClose:                MyEditionOpener := MyEditionClose(PB);            OTHERWISE                {call the original edition opener}                MyEditionOpener                     := CallEditionOpenerProc(selector, PB,                                                    gOriginalOpener);        END; {of CASE}    END; {of WITH}END; {MyEditionOpener}FUNCTION MyCanSubscribe (VAR PB: EditionOpenerParamBlock): OSErr;BEGIN    {check file type to see if it is a file you can emulate as an }    { edition}    IF PB.info.fdType = {for example}'PICT' THEN        MyCanSubscribe := noErr    ELSE {otherwise, let the saved edition opener decide}            MyCanSubscribe := CallEditionOpenerProc(eoCanSubscribe,                                                                PB, gOriginalOpener);END; {MyCanSubscribe}Opening and Closing EditionsEach time the Edition Manager opens or closes an edition container, it calls the current edition opener procedure and passes it an opener verb and a parameter block.Your opener must be careful when closing documents since a document may already have been opened by another application. Be sure to use the Open/Deny modes whenever possible. Do not close a document if it was already open when your application opened it.Listing Files That Can Be Subscribed ToThe NewSubscriberDialog function calls the edition opener function and passes the eoCanSubscribe opener verb in the selector parameter to build the list of files that can be subscribed to. The preview in the subscriber dialog box is generated by calling the GetStandardFormats function (described in “Edition Container Formats” on page 2-101), which calls the format I/O procedure with the verbs eoOpen, ioHasFormat, ioRead, and then eoClose. See “Calling a Format I/O Function” on this page for detailed information on format I/O verbs.Reading From and Writing to FilesThe I/O procedure is a routine that actually reads and writes the data. It too has an interface of a selector and a parameter block.To override the standard reading and writing functions, create an I/O function. Note that you also need to provide your own opener function to call your I/O function. See “Calling an Edition Opener” on page 2-64.FUNCTION MyIO (selector: FormatIOVerb;                     VAR PB: FormatIOParamBlock): OSErr;Calling a Format I/O FunctionTo indicate to the Edition Manager which format I/O function to use, use the CallFormatIOProc function.err := CallFormatIOProc (selector, PB, routine);Set the selector parameter to one of the format I/O verbs. The format I/O verbs include n    ioHasFormatn    ioReadFormatn    ioNewFormatn    ioWriteFormatThe PB parameter of the CallFormatIOProc function contains a format I/O parameter block.TYPE FormatIOParamBlock =     RECORD        ioRefNum:                    LongInt;                    {reference number}        format:                    FormatType;                    {edition format type}        formatIndex    :                LongInt;                    {opener-specific enumeration }                                                { of formats}        offset:                    LongInt;                    {offset into format}        buffPtr:                    Ptr;                    {data starts here}        buffLen:                    LongInt;                    {length of data}    END;The routine parameter of the CallFormatIOProc function is a pointer to a formatI/O function.The following list shows which fields of FormatIOParamBlock are used by the format I/O verbs:Format I/O verb        Parameter    Description    Called by (continued)    ioHasFormat    Æ    ioRefNum    I/O reference number returned by opener.    EditionHasFormat, GetStandardFormats, and ReadEdition functions        Æ    format    Check for this format.            ¨    formatIndex    An optional enumeration of the supplied format.            ¨    buffLen    If found, return the length size or –1 if size is unknown.            ¨    Return value    A noErr or noTypeErr code.                        continued    ioReadFormat    Æ    ioRefNum    I/O reference number returned by opener.    ReadEdition and GetStandardFormats functions        Æ    format    Get this format.            Æ    formatIndex    Value returned by ioHasFormat.            Æ    offset    Read format beginning from this offset.            Æ    buffPtr    Put data beginning here.            ´    buffLen    Specify buffer length to read, and return actual amount received.            ¨    Return value    A noErr code, or appropriate error code.        ioNewFormat    Æ    ioRefNum    I/O reference number returned by opener.    SetEditionFormatMarkand WriteEdition functions        Æ    format    Create this format.            ¨    formatIndex    An optional enumeration of the supplied format.            ¨    Return value    A noErr code, or appropriate error code.        ioWriteFormat    Æ    ioRefNum    I/O reference number returned by opener.    WriteEdition function        Æ    format    Get this format.            Æ    formatIndex    Value returned by ioNewFormat.            Æ    offset    Write format beginning from this offset.            Æ    buffPtr    Get data beginning here.            ´    buffLen    Specify buffer length to write.            ¨    Return value    A noErr code or appropriate error code.        The marks for each format are kept by the Edition Manager. The format I/O function only needs to be able to read or write, beginning at any offset. If you know that your application always reads an entire format sequentially, you can ignore the offset. Edition Manager ReferenceThis section describes the data structures and routines that are specific to the Edition Manager. The “Data Structures” section describes the edition container record and the section record. The “Edition Manager Routines” section describes the routines your application can use to implement publish and subscribe features in your application.Data StructuresThis section describes the edition container record and the section record. See page 2-91 for a description of the new subscriber reply record, page 2-93 for a description of the new publisher reply record, page 2-95 for a description of the section options record, and page 2-99 for a description of the edition info record. For information on the edition opener parameter block and format I/O parameter block, see page 2-103 and page 2-104, respectively.The Edition Container RecordAn edition container record identifies a specific edition file. Many Edition Manager routines require an edition container record as a parameter. The EditionContainerSpec data type defines an edition container record.TYPE EditionContainerSpec =     RECORD        theFile:                        FSSpec;                    {file containing edition }                                                    { data}        theFileScript:                        ScriptCode;                    {script code of filename}        thePart:                        LongInt;                    {which part of file, }                                                    { always kPartsNotUsed}        thePartName:                        Str31;                    {reserved}        thePartScript:                        ScriptCode;                    {reserved}    END;Field descriptionstheFile    A file specificiation record that identifies the name and location of the edition file. Specify the file using the standard conventions for file specification records as described in the chapter “Introduction to File Management” in Inside Macintosh: Files.theFileScript    A script code that identifies the script in which the name of the document is to be displayed in the Finder. A script code of smSystemScript represents the default system script.thePart    A value that must always be set to kPartsNotUsed in System 7.thePartName    Reserved.thePartScript    Reserved.The Section RecordA section record identifies a specific publisher or subscriber section. It contains information to identify the section as a publisher or a subscriber, a time stamp to record the last modification of the section, and unique identification for each section. Many Edition Manager routines require a handle to a section record as a parameter. The SectionRecord data type defines a section record.TYPE SectionRecord =     RECORD        version:                    SignedByte;                    {always 1 in 7.0}        kind:                    SectionType;                    {publisher or subscriber}        mode:                    UpdateMode;                    {automatic or manual}        mdDate:                    TimeStamp;                    {last change in document}        sectionID:                    LongInt;                    {application-specific, }                                                { unique per document}        refCon:                    LongInt;                    {application-specific}        alias:                    AliasHandle;                    {handle to alias record}        {The following fields are private and are set up by the }        { RegisterSection function. Do not modify the private }        { fields.}        subPart:                    LongInt;                    {private}        nextSection:                    SectionHandle;                    {private, do not use as a }                                                { linked list}        controlBlock:                    Handle;                    {may be used for comparison }                                                { only}        refNum:                    EditionRefNum;                    {private}END;Field descriptionsversion    Indicates the version of the section record, currently $01.kind    Defines the section type as either publisher or subscriber with the stPublisher or stSubscriber constant.mode    Indicates if editions are updated automatically or manually.mdDate    Indicates which version (modification date) of the section’s contents is contained within the publisher or subscriber. The mdDate field is set to 0 when you create a new subscriber section and to the current time when you create a new publisher. Be sure to update this field each time publisher data is modified. The section’s modification date is compared to the edition’s modification date to determine whether the section and the edition contain the same data. The section modification date is displayed in the publisher and subscriber options dialog boxes. See “Closing an Edition” on page 2-28 for detailed information.sectionID    Provides a unique number for each section within a document. A simple way to implement this is to create a counter for each document that is saved to disk with the document. The counter should start at 1. The section ID is currently used as a tie breaker in the GoToPublisherSection function when there are multiple publishers to the same edition in a single document. The section ID should not be 0 or –1. See “Duplicating Publishers and Subscribers” on page 2-58 for information on multiple publishers.refCon    Reference constant available for application-specific use.alias    Contains a handle to the alias record for a particular section within a document.Whenever the user creates a publisher or subscriber, call the NewSection function (described on page 2-75) to create a section record and alias record.Edition Manager RoutinesThis section describes the routines you use ton    initialize the Edition Managern    create and register a sectionn    create and delete an edition containern    set and locate a format markn    read in edition datan    write out edition datan    close an edition after reading or writingn    display dialog boxesn    locate a publisher and edition from a subscribern    read and write non-edition filesResult codes appear at the end of each function where applicable. In addition to the specific result codes listed, you may receive errors generated by the Alias Manager, File Manager, and Memory Manager.Initializing the Edition ManagerYou use the InitEditionPack function to initialize the Edition Manager. Note that you should call this function only once.InitEditionPackBefore calling the InitEditionPack function, be sure to determine whether the Edition Manager is available on your system by using the Gestalt function with the gestaltEditionMgrAttr ('edtn') selector.FUNCTION InitEditionPack: OSErr;DESCRIPTIONThe InitEditionPack function returns an error if the package could not be loaded into the system heap and properly initialized. RESULT CODESnoErr    0    No error    memFullErr    –108    Could not load package    Creating and Registering a SectionYou use the NewSection function to create a new section (either publisher or subscriber) and alias record (which is a reference to the edition container from the document containing the publisher or subscriber section).The NewSection function registers a section much as the RegisterSection function informs the Edition Manager about a section (except that the NewSection function does not resolve an alias to find the edition container).When a section needs to be disposed of because the document containing the section is being closed or because the user has canceled the section, you need to call the UnRegisterSection function before disposing of the section.Using the IsRegisteredSection function, your application must verify that each event received is for a registered section. This is necessary because your application may have just called UnRegisterSection while the event was already being held in the event queue.If a user saves a document that contains sections under another name (using Save As) or pastes a portion of a document that contains a section into another document, use the AssociateSection function to update the section’s alias record. NewSectionUse the NewSection function to create a new section record and alias record for a new publisher or subscriber.FUNCTION NewSection (container: EditionContainerSpec;                            sectionDocument: FSSpecPtr;                             kind: SectionType; sectionID: LongInt;                            initialMode: UpdateMode;                             VAR sectionH: SectionHandle): OSErr;container    The edition you want to publish or subscribe to. sectionDocumentThe volume reference number, directory ID, and filename of the document that contains a section. The sectionDocument parameter can be NIL if your current document has never been saved. If so, when the user finally saves the document, remember to call the AssociateSection function for each section to update its alias record.kind    The type of section (publisher or subscriber) being created. sectionID    A unique number for a section within a document. The NewSection function initializes the sectionID field of the new section record with the specified value. Do not use 0 or –1 for an ID number; these numbers are reserved. If your application copies a section, you need to specify a unique number for the copied section. initialModeThe update mode for the section. For publishers this is either the pumOnSave or pumManual constant, and for subscribers it is either sumAutomatic or sumManual. A subscriber created with sumAutomatic mode automatically receives a Section Read event. To prevent this initial Section Read event, you should set the initialMode parameter to sumManual and then, when NewSection returns, set the mode field of the section record to sumAutomatic.sectionH    The NewSection function returns a handle to the allocated section record in this parameter. If an error occurs, NewSection returns NIL in this parameter.DESCRIPTIONThe NewSection function allocates two handles in the current zone: one handle for the section record and another handle for the alias record. Note that you are responsible for unregistering handles created by the Edition Manager.Your application receives the multiplePublisherWrn result code if there is another registered publisher to the same edition. Your application receives the notThePublisherWrn result code if another publisher (to the same edition) was the last section to write to the edition. The multiplePublisherWrn result code takes priority over the notThePublisherWrn result code.RESULT CODESnoErr    0    No error    editionMgrInitErr    –450    Manager not initialized    badSectionErr    –451    Not a valid section type    badSubPartErr    –454    Bad edition container spec    multiplePublisherWrn    –460    Already is a publisher    notThePublisherWrn    –463    Not the publisher    SEE ALSOFor information on the edition container record, see page 2-71. For information on the section record, see “The Section Record” beginning on page 2-72. For information on file specification records, see Inside Macintosh: Files. See Listing 2-4 on page 2-33 for an example that uses NewSection to create a publisher and Listing 2-6 on page 2-40 for an example that creates a subscriber using NewSection.RegisterSectionWhen opening a document that contains sections, register each section using the RegisterSection function. FUNCTION RegisterSection (sectionDocument: FSSpec;                                  sectionH: SectionHandle;                                   VAR aliasWasUpdated: Boolean): OSErr;sectionDocumentThe volume reference number, directory ID, and filename of the document that contains a section. sectionH    A handle to the section record for a given section.aliasWasUpdatedA Boolean value that returns TRUE if the alias for the edition container subscribed to was out of date and was updated. This may occur if the edition file was moved to a new location or was renamed.DESCRIPTIONThe RegisterSection function adds the section record to the Edition Manager’s list of registered sections and tries to allocate a control block. After calling the RegisterSection function, the controlBlock field of the section record contains either NIL or a valid control block.For a subscriber, the controlBlock field contains NIL if the RegisterSection function could not locate the edition container being subscribed to. The RegisterSection function then returns either the containerNotFoundWrn or the userCanceledErr result code. For a publisher, if the RegisterSection function could not locate its corresponding edition container, the Edition Manager creates an edition container in the last place the edition was located and creates a control block for it. If the RegisterSection function could not locate a publisher’s corresponding edition container or its volume, the controlBlock field contains NIL. You should never re-register a section that is already registered.Note that you can compare control blocks for individual sections. If two sections contain the same control block value, these sections publish or subscribe to the same edition (unless the control block is NIL). The Edition Manager keeps track of how many sections are referencing a control block to know when it can be deallocated. The control block maintains a count of how many sections are referencing it. Each time you use the UnRegisterSection function, the control block subtracts 1 from the number of sections. When the number of sections reaches 0, the control block is deallocated.Your application receives the multiplePublisherWrn result code if there is another registered publisher to the same edition. Your application receives the notThePublisherWrn result code if another publisher (to the same edition) was the last section to write to the edition. The multiplePublisherWrn result code takes priority over the notThePublisherWrn result code.RESULT CODESnoErr    0    No error    userCanceledErr    –128    User clicked Cancel in dialog box    editionMgrInitErr    –450    Manager not initialized    badSectionErr    –451    Not valid section type    multiplePublisherWrn    –460    Already is a publisher    containerNotFoundWrn    –461    Alias was not resolved    notThePublisherWrn    –463    Not the publisher    SEE ALSOFor information on the section record, see “The Section Record” beginning on page 2-72. For information on file specification records, see Inside Macintosh: Files. For additional information and an example of the use of RegisterSection, see “Opening and Closing a Document Containing Sections” beginning on page 2-22.UnRegisterSectionWhen a section needs to be disposed of because the document containing the section is being closed or because the user has canceled the section, you need to call the UnRegisterSection function before disposing of the section.FUNCTION UnRegisterSection (sectionH: SectionHandle): OSErr;sectionH    A handle to the section record for a given section.DESCRIPTIONThe UnRegisterSection function removes the section from the Edition Manager’s list of registered sections. You can then dispose of the section record and alias record with standard Memory Manager and Resource Manager calls. Once unregistered, a section does not receive any events and cannot read or write any data. Depending on your Clipboard strategy, you may want to unregister sections that have been cut into the Clipboard.RESULT CODESnoErr    0    No error    fBsyErr    –47    Section doing I/O    editionMgrInitErr    –450    Manager not initialized    notRegisteredSectionErr    –452    Not registered    IsRegisteredSectionUpon receiving a section event, your application must call the IsRegisteredSection function to verify that the event received is for a registered section. You must call IsRegisteredSection before handling a section event because your application may have just called UnRegisterSection while the event was already being held in the event queue.FUNCTION IsRegisteredSection (sectionH: SectionHandle): OSErr;sectionH    A handle to the section record for a given section. DESCRIPTIONThe IsRegisteredSection function returns a result code (not a Boolean value) indicating whether the section is registered. A noErr result code indicates that a section is registered.RESULT CODESnoErr    0    No error    notRegisteredSectionErr    –452    Not registered    SEE ALSOFor an example of the use of IsRegisteredSection, see Listing 2-1 on page 2-14.AssociateSectionIf a user saves a document that contains sections under another name (using Save As) or pastes a portion of a document that contains a section into another document, use the AssociateSection function to update the section’s alias record.FUNCTION AssociateSection (sectionH: SectionHandle;                                    newSectionDocument: FSSpecPtr): OSErr;sectionH    A handle to the section record for a given section. newSectionDocumentThe volume reference number, directory ID, and filename of the new document. DESCRIPTIONThe AssociateSection function calls UpdateAlias on the section’s alias record. RESULT CODESnoErr    0    No error    paramErr    –50    Invalid parameter    SEE ALSOFor information on the UpdateAlias function, see the chapter “Alias Manager” in Inside Macintosh: Files.Creating and Deleting an Edition ContainerEach time a user creates a new publisher section within a document to an edition that does not already exist, you use the CreateEditionContainerFile function to create an empty edition container.To remove the edition container, use the DeleteEditionContainerFile function.CreateEditionContainerFileYou use the CreateEditionContainerFile function to create an empty edition container.FUNCTION CreateEditionContainerFile                             (editionFile: FSSpec; fdCreator: OSType;                              editionFileNameScript: ScriptCode): OSErr;editionFileThe volume reference number, directory ID, and filename for the edition container being created. fdCreator    The creator type for the edition.editionFileNameScriptThe script of the filename. (You can get this value from the theFileScript field of an edition container specification record.)DESCRIPTIONThe CreateEditionContainerFile function creates an empty edition container file (it does not contain any formats). This function sets the file type of the edition to 'edtu'. As soon as you write data to the edition, the Edition Manager updates the type (to 'edtp' for graphics, 'edtt' for text, or 'edts' for sound). If your application writes both 'TEXT' and 'PICT' formats to the edition, the Edition Manager sets the file type to the type that was written first. If your application has a bundle, you should designate an icon for the appropriate edition types that you can write. RESULT CODESnoErr    0    No error    dskFulErr    –34    Disk is full    nsvErr    –35    No such volume    ioErr    –36    I/O error    bdNamErr    –37    Bad filename    fnfErr    –43    File not found    dirNFErr    –120    Directory not found    editionMgrInitErr    –450    Manager not initialized    SEE ALSOFor information on file specification records, see Inside Macintosh: Files. For an example of the use of CreateEditionContainerFile, see Listing 2-4 on page 2-33.DeleteEditionContainerFileIf a user cancels a publisher section within a document or closes a document containing a newly created publisher without saving, you need to remove the edition container. To locate the appropriate edition container to be deleted, use the GetEditionInfo function. You use the UnRegisterSection function (only after using the GetEditionInfo function) to unregister the section record and alias record of the publisher being canceled. To remove the edition container, use the DeleteEditionContainerFile function. FUNCTION DeleteEditionContainerFile (editionFile: FSSpec): OSErr;editionFileThe volume reference number, directory ID, and filename for the edition container being deleted.DESCRIPTIONIf the user cancels a publisher, do not call the DeleteEditionContainerFile function until the user saves the document. This allows the user to undo changes and revert to the last saved version of the document.The DeleteEditionContainerFile function deletes the edition container only if there is no registered publisher. You need to unregister a publisher before you can delete its corresponding edition container.You should use the DeleteEditionContainerFile function even if there are subscribers to the edition. When a subscriber section tries to read in data, it receives an error if the edition container has been deleted. RESULT CODESnoErr    0    No error    nsvErr    –35    No such volume    ioErr    –36    I/O error    bdNamErr    –37    Bad filename    fnfErr    –43        File not found    dirNFErr    –120    Directory not found    editionMgrInitErr    –450    Manager not initialized    SEE ALSOSee page 2-98 for detailed information on the GetEditionInfo function. See page 2-77 for information on the UnRegisterSection function. For information on file specification records, see Inside Macintosh: Files. Setting and Getting a Format MarkUse the SetEditionFormatMark function to set the current mark for a section format and the GetEditionFormatMark function to get the current mark for a particular format. SetEditionFormatMarkA format mark indicates the next position of a read or write operation. Initially, a mark defaults to 0. After reading or writing data, the format mark is set past the last position written to or read from. To set the current mark for a given format, use the SetEditionFormatMark function.FUNCTION SetEditionFormatMark (whichEdition: EditionRefNum;                                         whichFormat: FormatType;                                         setMarkTo: LongInt): OSErr;whichEditionThe reference number for the edition. whichFormatThe format type for the edition.setMarkTo    The offset for the next read or write for this format.DESCRIPTIONThe SetEditionFormatMark function sets the current mark for the specified format type according to the value of the setMarkTo parameter.RESULT CODESnoErr    0    No error    rfNumErr    –51    Bad edition reference number    noTypeErr    –102    Unknown format (subscriber only)    editionMgrInitErr    –450    Manager not initialized    GetEditionFormatMarkUse the GetEditionFormatMark function to get the current mark for a particular format.FUNCTION GetEditionFormatMark (whichEdition: EditionRefNum;                                         whichFormat: FormatType;                                          VAR currentMark: LongInt): OSErr;whichEditionThe reference number for the edition. whichFormatThe format type whose mark you want to get.currentMarkThe GetEditionFormatMark function returns the mark for the specified format in this parameter. DESCRIPTIONIf the edition does not support the format specified in the whichFormat parameter, you receive a noTypeErr result code.RESULT CODESnoErr    0    No error    rfNumErr    –51    Bad edition reference number    noTypeErr    –102    Unknown format    editionMgrInitErr    –450    Manager not initialized    Reading in Edition DataTo initiate the reading of data from an edition (for a subscriber), use the OpenEdition function.Use the EditionHasFormat function to learn in which formats the edition data is available.Use the ReadEdition function to read data from an edition. This function reads from the current mark for the specified format.OpenEditionTo initiate the reading of data from an edition (for a subscriber), use the OpenEdition function.FUNCTION OpenEdition (subscriberSectionH: SectionHandle;                              VAR refNum: EditionRefNum): OSErr;subscriberSectionHA handle to the section record for a given section. refNum    The OpenEdition function returns the reference number for the edition in this parameter.DESCRIPTIONThe OpenEdition function opens an edition for reading and returns a reference number that your application can use to refer to this edition in other Edition Manager routines. Multiple subscribers can each call the OpenEdition function simultaneously (each call returns a different reference number) and read data from a single edition. If a publisher (located on a different machine) is writing to an edition when you use the OpenEdition function, you receive an flLckedErr result code.RESULT CODESnoErr    0    No error    fnfErr    –43    File not found    flLckedErr    –45    Publisher writing to an edition    permErr    –54    Not a subscriber    editionMgrInitErr    –450    Manager not initialized    SEE ALSOFor an example of the use of OpenEdition, see Listing 2-7 on page 2-42.EditionHasFormatUse the EditionHasFormat function to learn in which formats the edition data is available.FUNCTION EditionHasFormat (whichEdition: EditionRefNum;                                    whichFormat: FormatType;                                     VAR formatSize: Size): OSErr;whichEditionThe reference number for the edition. whichFormatThe format type that you are requesting. For the whichFormat parameter, you should decide which formats to read in the same way that you do when reading data from the scrap. You can also get a list of all the available formats and their respective lengths by reading the kFormatListFormat ('fmts') format. formatSizeThe EditionHasFormat function returns the format length in this parameter.DESCRIPTIONIf the requested format is available, the EditionHasFormat function returns noErr, and the formatSize parameter returns the size of the data in the specified format or kFormatLengthUnknown (–1), which signifies that the size is unknown. You should therefore continue to read the format until there is no more data.NoteNoteThe Translation Manager (if it is available) attempts implicit translation under certain circumstances. For instance, it does so when your application attempts to read from an edition a format type that is not in the edition. In this case, the Translation Manager attempts to translate the data into the requested format. For more information, see the chapter “Translation Manager” in Inside Macintosh: More Macintosh Toolbox.uRESULT CODESnoErr    0    No error    rfNumErr    –51    Bad edition reference number    noTypeErr    –102    Format not available    editionMgrInitErr    –450    Manager not initialized    SEE ALSOFor an example of the use of EditionHasFormat, see Listing 2-7 beginning on page 2-42. For information about the Translation Manager and Scrap Manager, see Inside Macintosh: More Macintosh Toolbox.ReadEditionUse the ReadEdition function to read data from an edition. This function reads from the current mark for the specified format.FUNCTION ReadEdition (whichEdition: EditionRefNum;                              whichFormat: FormatType; buffPtr: UNIV Ptr;                             VAR buffLen: Size): OSErr;whichEditionThe reference number for the edition. whichFormatThe format type that you want to read. buffPtr    A pointer to the buffer into which you want to read the data.buffLen    The number of bytes that you want to read into the buffer. The ReadEdition function returns the actual number of bytes read in the buffLen parameter. DESCRIPTIONThe ReadEdition function reads data from the edition into the specified buffer. ReadEdition returns in the buffLen parameter the total number of bytes read into the buffer. If the buffLen parameter returns a value smaller than the value you have specified, there is no additional data to read, and the ReadEdition function returns a noErr result code. If you use the ReadEdition function after all data is read in, the ReadEdition function returns an eofErr result code.You can read data from an edition while a publisher on the same machine is writing data to the same edition. The data that you are reading is the old edition (not the data that the publisher is writing). If the publisher finishes writing data before you are through reading the old edition data, the ReadEdition function returns an abortErr result code. If the ReadEdition function returns an abortErr result code, you should stop trying to read data and use the CloseEdition function with the successful parameter set to FALSE. NoteThe Translation Manager (if it is available) attempts implicit translation under certain circumstances. For instance, it does so when your application attempts to read from an edition a format type that is not in the edition. In this case, the Translation Manager attempts to translate the data into the requested format. For more information, see the chapter “Translation Manager” in Inside Macintosh: More Macintosh Toolbox.u RESULT CODESnoErr    0    No error    abortErr    –27    Publisher has written a new edition    ioErr    –36    I/O error    fnOpnErr    –38    File not open    eofErr    –39    No more data of that format    rfNumErr    –51    Bad edition reference number    noTypeErr    –102    Format not available    editionMgrInitErr    –450    Manager not initialized    SEE ALSOFor an example of the use of ReadEdition, see Listing 2-7 beginning on page 2-42. Writing out Edition DataTo initiate the writing of data from a publisher to its edition container, use the OpenNewEdition function. (To create an edition container, use the CreateEditionContainerFile function, as described on page 2-79.)Use the WriteEdition function to write data to an edition.OpenNewEditionTo initiate the writing of data from a publisher to its edition container, use the OpenNewEdition function.FUNCTION OpenNewEdition (publisherSectionH: SectionHandle;                                 fdCreator: OSType;                                 publisherSectionDocument: FSSpecPtr;                                  VAR refNum: EditionRefNum): OSErr;publisherSectionHThe publisher section that is writing to the edition. fdCreator    The Finder creator type of the new edition icon.publisherSectionDocumentThe document that contains the publisher. This parameter is used to create an alias from the edition to the publisher’s document. If you pass NIL for publisherSectionDocument, an alias is not made in the edition file.refNum    The OpenNewEdition function returns the reference number for the edition in this parameter. You specify this reference number as a parameter for subsequent calls to WriteEdition, SetEditionFormatMark, and CloseEdition to specify which publisher is writing its data to an edition. If the edition cannot be opened for writing because there is another publisher writing to it, or because the file system does not allow writing, an error is returned and OpenNewEdition sets refNum to NIL. DESCRIPTIONThe OpenNewEdition function opens an edition for writing. The function returns an flLckdErr result code if there is a subscriber on another machine reading data from the same edition. The OpenNewEdition function returns a permErr result code if there is a registered publisher to that edition on another machine.The Edition Manager allows two registered publishers that are located on the same machine to write to the same edition. Note that multiple publishers cannot write to the same edition simultaneously—only one publisher can write to an edition at a given time.RESULT CODESnoErr    0    No error    ioErr    –36    I/O error    flLckdErr    –45    Edition in use by another section    permErr    –54    Registered publisher on another machine    wrPermErr    –61    Not a publisher    editionMgrInitErr    –450    Manager not initialized    SEE ALSOFor an example of the use of OpenNewEdition, see Listing 2-5 beginning on page 2-36. WriteEditionUse the WriteEdition function to write data to an edition. This function begins writing at the current mark for the specified format.FUNCTION WriteEdition (whichEdition: EditionRefNum;                               whichFormat: FormatType;                               buffPtr: UNIV Ptr; buffLen: Size): OSErr;whichEditionThe reference number for the edition. whichFormatThe format type that you want to write. buffPtr    A pointer to the buffer containing the data to write to the edition. buffLen    The number of bytes that you want to write to the edition. DESCRIPTIONThe WriteEdition function writes the specified number of bytes to the edition. If the data cannot be entirely written to the edition, the WriteEdition function returns an error.RESULT CODESnoErr    0    No error    dskFulErr    –34    Disk is full    ioErr    –36    I/O error    rfNumErr    –51    Bad edition reference number    editionMgrInitErr    –450    Manager not initialized    SEE ALSOFor an example that writes data to an edition, see Listing 2-5 beginning on page 2-36. Closing an Edition After Reading or WritingAfter finishing reading from or writing to an edition, use the CloseEdition function to close the edition.CloseEditionUse the CloseEdition function to close an edition after you finish reading from or writing to it.FUNCTION CloseEdition (whichEdition: EditionRefNum;                               successful: Boolean): OSErr;whichEditionThe reference number for the edition. successfulA value that indicates whether your application was successful (TRUE) or unsuccessful (FALSE) in reading from or writing data to the edition.DESCRIPTIONWhen a subscriber successfully finishes reading data from the edition, the CloseEdition function takes the modification date of the edition file that you have read and puts it in the mdDate field of the subscriber’s section record. This indicates that the data contained in the edition and the subscriber section within the document are the same.When a subscriber is unsuccessful in reading data from an edition (because there is not enough memory, or you didn’t find a format that you can read), set the successful parameter to FALSE. The CloseEdition function then closes the edition, but does not set the mdDate field. This implies that the subscriber is not updated with the latest edition.When a publisher successfully finishes writing data to an edition, the CloseEdition function makes the data that the publisher has written to the edition available to any subscribers and sets the corresponding edition file’s modification date (ioFlMdDat) to the mdDate field of the publisher’s section record. The Edition Manager then sends a Section Read event to all current subscribers set to automatic update mode. At this point, the file type of the edition file is set based on the first known format that the publisher wrote.When a publisher is unsuccessful in writing data to an edition, the CloseEdition function discards what the publisher has written to the edition. The data contained in the edition prior to writing remains unchanged, and Section Read events are not sent to subscribers. RESULT CODESnoErr    0    No error    ioErr    –36    I/O error    fnOpnErr    –38    File not open    rfNumErr    –51    Bad edition reference number    editionMgrInitErr    –450    Manager not initialized    SEE ALSOFor an example of the use of CloseEdition, see Listing 2-5 beginning on page 2-36. Displaying Dialog BoxesThe Edition Manager supports three dialog boxes: publisher, subscriber, and options dialog boxes. Your application can display simple dialog boxes that appear centered on the user’s screen, or you can customize your dialog boxes.Use the GetLastEditionContainerUsed function to get the default edition to display.Use the NewSubscriberDialog function to display the subscriber dialog box on the user’s screen and use the NewPublisherDialog function to display the publisher dialog box on the user’s screen. Unlike the Standard File Package routines, the NewPublisherDialog and the NewSubscriberDialog functions allow you to specify the initial volume reference number and directory ID so that there can be one default location for editions for all applications.You use the SectionOptionsDialog function to display the publisher options and subscriber options dialog boxes on the user’s screen.The NewSubscriberExpDialog, NewPublisherExpDialog, and SectionOptionsExpDialog functions are the same as the simple dialog functions but have five additional parameters.GetLastEditionContainerUsedUse the GetLastEditionContainerUsed function to get the default edition to display. This function allows a user to easily subscribe to the data recently published. FUNCTION GetLastEditionContainerUsed                         (VAR container: EditionContainerSpec): OSErr;container    If the GetLastEditionContainerUsed function locates the last edition for which a section was created, the container parameter contains its volume reference number, directory ID, filename, and part, and returns a noErr result code. (The last edition created is associated with the last time that your application or another application located on the same machine used the NewSection function.) DESCRIPTIONIf the last edition used is missing, the GetLastEditionContainerUsed function returns an fnfErr result code, but still returns the correct volume reference number and directory ID that you should use for the NewSubscriberDialog function.Pass the information from the GetLastEditionContainerUsed function to the NewSubscriberDialog function.RESULT CODESnoErr    0    No error    fnfErr    –43    Edition container not found    editionMgrInitErr    –450    Manager not initialized    SEE ALSOFor an example of the use of GetLastEditionContainerUsed, see Listing 2-6 beginning on page 2-40. For a description of the edition container record, see page 2-71. The NewSubscriberDialog function is described next.NewSubscriberDialogWhen a user chooses the Subscribe To menu command, your application should call the NewSubscriberDialog function to allow the user to choose an edition to subscribe to. FUNCTION NewSubscriberDialog                             (VAR reply: NewSubscriberReply): OSErr;reply    The new subscriber reply record. You specify a location to use as the default edition container in the container field of this record. You also specify in the formatsMask field which edition format types NewSubscriberDialog should display. The NewSubscriberDialog function returns information concerning the user’s choice in the canceled and container fields of this record.TYPE NewSubscriberReply =     RECORD        canceled:                    Boolean;                            {user canceled }                                                        { dialog box}        formatsMask:                    SignedByte;                            {formats required}        container:                    EditionContainerSpec;                            {edition selected}    END;Field descriptionscanceled    The NewSubscriberDialog function returns in this field a value that indicates whether the user canceled the dialog box. The function returns TRUE in the canceled field if the user canceled the dialog box. Otherwise, the function returns FALSE in this field and returns in the container field the edition container for the new subscriber.formatsMask    The formatsMask field indicates which edition format type (text, graphics, and sound) to display within the subscriber dialog box. You can set the formatsMask field to the following constants: kTEXTformatMask (1), kPICTformatMask (2), or ksndFormatMask (4). To support a combination of formats, add the constants together. For example, a formatsMask of 3 displays both graphics and text edition format types in the subscriber   dialog box.container    The edition container of the last edition published or subscribed to. You provide in this parameter the location and filename to use as the default edition to subscribe to. If the user clicks the Subscribe button, NewSubscriberDialog returns FALSE in the canceled field and returns the selected edition container for the new subscriber in the container field.     DESCRIPTIONThe NewSubscriberDialog function displays the subscriber dialog box on the user’s screen. The NewSubscriberDialog function (which is based on the CustomGetFile procedure described in the chapter “Standard File Package” in Inside Macintosh: Files) switches to the volume reference number and directory ID and selects the filename of the edition container that you specified in the container field of the reply parameter. Use the GetLastEditionContainerUsed function to get the edition container of the last edition that was either published or subscribed to, then set the container field to this edition container. This allows the user to publish and then easily subscribe.Note that if an edition does not contain either 'PICT', 'TEXT', or 'snd ' data, the NewSubscriberDialog function does not list the edition file in the new subscriber dialog box (unless you install an opener that can recognize the edition’s data in response to the eoCanSubscribe verb).RESULT CODESnoErr    0    No error    editionMgrInitErr    –450    Manager not initialized or could not load package    badSubPartErr    –454    Bad edition container spec    SEE ALSOFor an illustration of the new subscriber dialog box, see Figure 2-12 on page 2-37. For an example of the use of NewSubscriberDialog, see Listing 2-6 beginning on page 2-40. For a description of the edition container record, see page 2-71. For information on edition openers, see “Subscribing to Non-Edition Files” beginning on page 2-62. NewPublisherDialogWhen a user selects a portion of a document and then chooses the Create Publisher menu command, your application should call the NewPublisherDialog function to allow the user to choose a name and location of the edition to which your application writes the publisher data. Your application specifies a location and name to use as the default edition and provides a preview of the publisher data to the NewPublisherDialog function. FUNCTION NewPublisherDialog                         (VAR reply: NewPublisherReply): OSErr;reply    A new publisher reply record. You specify a location to use as the default edition container in the container field of this record. You also specify information in the usePart, preview, and previewFormat fields. The NewPublisherDialog function returns information concerning the user’s choice in the canceled, replacing, and container fields of this record.TYPE NewPublisherReply =     RECORD        canceled:                    Boolean;                    {user canceled dialog box}            replacing:                    Boolean;                    {user chose existing }                                                 { filename for an edition}        usePart:                    Boolean;                    {always false in version 7.0}        preview:                    Handle;                    {handle to 'prvw', 'PICT', }                                                { 'TEXT', or 'snd ' data}         previewFormat:                    FormatType;                    {type of preview}        container:                    EditionContainerSpec;                                                {edition chosen}    END;Field descriptionscanceled    The NewPublisherDialog function returns in this field a value that indicates whether the user canceled the dialog box. The function returns TRUE in the canceled field if the user canceled the dialog box. The function returns FALSE in this field if the user clicked the Publish button and returns in the container field the edition container for the new publisher.replacing    The NewPublisherDialog function returns TRUE in the replacing field if the user chose an existing filename from the list of available editions and confirmed this replacement. If the value of the replacing field is TRUE, do not call the CreateEditionContainerFile function. If the value of this field and the canceled field is FALSE, you can call CreateEditionContainerFile to create a new edition container.usePart    A value that must be set to FALSE before calling the NewPublisherDialog function.preview    A handle to 'prvw', 'PICT', 'TEXT', or 'snd ' data. The NewPublisherDialog function displays this data in the preview area of the dialog box.previewFormat    A value that indicates which type of data the handle in the preview field references.container    An edition container record that specifies the volume reference number, directory ID, and filename to use as the default edition to publish the data to. The NewPublisherDialog function returns in this field the edition container that the user selected. DESCRIPTIONThe NewPublisherDialog function displays the new publisher dialog box on the user’s screen. The NewPublisherDialog function (which is based on the CustomPutFile procedure described in the chapter “Standard File Package” in Inside Macintosh: Files) switches to the volume reference number and directory ID specified by the edition container, sets the editable text item to the filename specified by the edition container, and displays a preview of the publisher data in the new publisher dialog box. The NewPublisherDialog function handles all user interaction until the user clicks the Cancel or Publish button.You should deallocate the handle referenced by the preview field to free up memory.RESULT CODESnoErr    0    No error    editionMgrInitErr    –450    Manager not initialized or could not load package    badSubPartErr    –454    Bad edition container spec    SEE ALSOFor an illustration of the new publisher dialog box, see Figure 2-11 on page 2-29. For an example of the use of NewPublisherDialog, see Listing 2-4 beginning on page 2-33. For a description of the edition container record, see page 2-71. SectionOptionsDialogUse the SectionOptionsDialog function to display the publisher options and subscriber options dialog boxes on the user’s screen.FUNCTION SectionOptionsDialog                              (VAR reply: SectionOptionsReply): OSErr;reply    The reply parameter contains a section options reply record. You specify a handle to the publisher’s or subscriber’s section record in the sectionH field of this record. The SectionOptionsDialog function returns information concerning the user’s actions in the canceled, changed, and action fields.TYPE SectionOptionsReply =     RECORD        canceled:                Boolean;                        {user canceled dialog box}        changed:                Boolean;                        {changed the section record}        sectionH:                SectionHandle;                        {handle to the specified }                                                { section record}        action:                ResType;                        {action codes}    END;Field descriptionscanceled    The SectionOptionsDialog function returns in this field a value that indicates whether the user canceled the dialog box. The function returns TRUE in the canceled field if the user canceled the dialog box. Otherwise, the function returns FALSE in this field. changed    The SectionOptionsDialog function returns TRUE in this field if the user changed the section record. For example, the update mode may have changed. Otherwise, the function returns FALSE in this field. sectionH    A handle to the section record for the section the user selected.action    The SectionOptionsDialog function returns in this field the code for one of five user actions: action code 'read' for user selection of the Get Edition Now button, action code 'writ' for user selection of the Send Edition Now button, action code 'goto' for user selection of the Open Publisher button, action code 'cncl' for user selection of the Cancel Publisher or Cancel Subscriber button, or action code '    ' ($20202020) for user selection of the OK button.DESCRIPTIONThe SectionOptionsDialog function displays the appropriate options dialog box for the specified section record. The function displays information about the subscriber or publisher, such as its latest edition and current update mode setting, and allows the user to perform various actions. The SectionOptionsDialog function handles all user interaction until the user selects a button. The function returns the user’s action in the action field of the reply parameter; your application should then perform the corresponding action. RESULT CODESnoErr    0    No error    memFullErr    –108    Memory full    SEE ALSOFor illustrations of the section options dialog box, see Figure 2-13 through Figure 2-16 beginning on page 2-43. For an example of the use of SectionOptionsDialog, see Listing 2-8 beginning on page 2-46. For a description of the section record, see page 2-72. NewSubscriberExpDialog, NewPublisherExpDialog, SectionOptionsExpDialogThe NewSubscriberExpDialog, NewPublisherExpDialog, and SectionOptionsExpDialog functions are the same as the simple dialog functions but have five additional parameters. These additional parameters allow you to add items to the bottom of the dialog boxes, apply alternate mapping of events to item hits, apply alternate meanings to the item hits, and choose the location of the dialog boxes.FUNCTION NewSubscriberExpDialog                     (VAR reply: NewSubscriberReply; where: Point;                     expansionDITLresID: Integer;                      dlgHook: ExpDlgHookProcPtr;                      filterProc: ExpModalFilterProcPtr;                      yourDataPtr: UNIV Ptr): OSErr;FUNCTION NewPublisherExpDialog                     (VAR reply: NewPublisherReply; where: Point;                     expansionDITLresID: Integer;                      dlgHook: ExpDlgHookProcPtr;                      filterProc: ExpModalFilterProcPtr;                      yourDataPtr: UNIV Ptr): OSErr;FUNCTION SectionOptionsExpDialog                     (VAR reply: SectionOptionsReply; where: Point;                     expansionDITLresID: Integer;                      dlgHook: ExpDlgHookProcPtr;                      filterProc: ExpModalFilterProcPtr;                      yourDataPtr: UNIV Ptr): OSErr;reply    A new subscriber reply, new publisher reply, or section options reply record. You specify information in the fields of this record just as you do in the the corresponding fields of records used by NewSubscriberDialog, NewPublisherDialog, and SectionOptionsDialog.where    A point that specifies a location on the screen where the function displays the dialog box. You can automatically center the dialog box by passing (–1, –1) in the where parameter. expansionDITLresIDA value of 0 or a valid item list ('DITL') resource ID. This integer is the ID of a dialog item list whose items are appended to the end of the standard dialog item list. The dialog items keep their relative positions, but they are moved as a group to the bottom of the dialog box.dlgHook    A pointer to an expandable dialog hook function or NIL. An expandable dialog hook function is similar to a dialog hook function except that an expandable dialog hook function accepts an additional parameter. The NewSubscriberExpDialog, NewPublisherExpDialog, and SectionOptionsExpDialog functions call your expandable dialog hook function after each call to the ModalDialog procedure. The expandable dialog hook function should take the appropriate action, such as filling in a checkbox. The itemOffset parameter to the expandable dialog hook function is the number of items in the item list before your expansion dialog items. You need to subtract the item offset from the item hit to get the relative item number in the expansion item list. The expandable dialog hook function should return as its function result the absolute item number. filterProcA pointer to an expandable modal-dialog filter function or NIL. An expandable modal-dialog filter function is similar to a modal-dialog filter function or event filter function except that an expandable modal-dialog filter function accepts two extra parameters. The ModalDialog procedure calls the expandable modal-dialog filter function you provide in this parameter. An expandable modal-dialog filter function allows you to map real events (such as a mouse-down event) to an item hit (such as clicking a Cancel button). For instance, you may want to map a keyboard equivalent to an item hit.yourDataPtrReserved for your use. It is passed back to your hook and event filter function. This parameter does not have to be of type Ptr—it can be any 32-bit quantity that you want. In Pascal, you can pass yourDataPtr in register A6, and declare your dialog hook and event filter as local functions without the last parameter. The stack frame is set up properly for these functions to access their parent local variables.DESCRIPTIONThe NewPublisherExpDialog, NewSubscriberExpDialog, and SectionOptionsExpDialog functions display the appropriate dialog box, handle user interaction, and call any functions you have provided in the dlgHook and filterProc parameters.For the NewPublisherExpDialog and NewSubscriberExpDialog functions, all the pseudo-items for the Standard File Package such as hookFirstCall(–1), hookNullEvent(100), hookRebuildList(101), and hookLastCall(–2) can be used, as well as hookRedrawPreview(150).For the SectionOptionsExpDialog function, the only valid pseudo-items are hookFirstCall(–1), hookNullEvent(100), hookLastCall(–2), emHookRedrawPreview(150), emHookCancelSection(160), emHookGoToPublisher(161), emHookGetEditionNow(162), emHookSendEditionNow(162), emHookManualUpdateMode(163), and emHookAutoUpdateMode(164).If you provide an expandable dialog hook function, it must contain the following parameters:FUNCTION MyExpDlgHook (itemOffset: Integer; itemHit: Integer;                                theDialog: DialogPtr;                                  yourDataPtr: Ptr): Integer;If you provide an expandable modal-dialog filter function, it must contain the following parameters.FUNCTION MyExpModalFilter (theDialog: DialogPtr;                                     VAR theEvent: EventRecord;                                     itemOffset: Integer;                                     VAR itemHit: Integer;                                     yourDataPtr: Ptr): Boolean;SEE ALSOSee the chapter “Dialog Manager” in Inside Macintosh: Macintosh Toolbox Essentials for additional information on item lists. See the chapter “Standard File Package” in Inside Macintosh: Files for information on dialog hook and modal-dialog filter functions.Locating a Publisher and Edition From a SubscriberThe GetEditionInfo function returns information about a section’s edition such as its location, last modification date, creator, and type.Once you locate a section’s edition, you can use the GoToPublisherSection function to find the document containing the publisher.GetEditionInfoUse the GetEditionInfo function to obtain information about a section’s edition, such as its location, last modification date, creator, and type.FUNCTION GetEditionInfo                            (sectionH: SectionHandle;                              VAR editionInfo: EditionInfoRecord): OSErr;sectionH    A handle to the section record for a given section. editionInfoAn edition information record. The GetEditionInfo function returns the public information contained in the section’s control block.DESCRIPTIONThe Edition Manager ensures that the existing edition name corresponds to the Finder’s existing edition name. If the controlBlock field of the section record is set to NIL or the edition cannot be located, the GetEditionInfo function returns an fnfErr result code.The GetEditionInfo function returns information about the section’s edition in a data structure of type EditionInfoRecord.TYPE EditionInfoRecord =     RECORD        crDate:                TimeStamp;                            {date edition container }                                                    { was created}        mdDate:                TimeStamp;                            {date of last change}        fdCreator:                OSType;                            {file creator}        fdType:                OSType;                            {file type}        container:                EditionContainerSpec;                            {the edition}    END;Field descriptionscrDate    The creation date of the edition. mdDate    The modification date of the edition.fdCreator    The creator of the edition file. fdType    The file type of the edition file. container    An edition container record, which specifies the volume reference number, directory ID, filename, script, and part number for the edition.RESULT CODESnoErr    0    No error    fnfErr    –43    Not registered or file moved    editionMgrInitErr    –450    Manager not initialized    SEE ALSOFor an example of the use of GetEditionInfo, see Listing 2-8 beginning on page 2-46. For another use of this function, see “Canceling Sections Within Documents” beginning on page 2-48. For a description of the edition container record, see page 2-71. GoToPublisherSectionWhen the user wants to locate the publisher for a particular subscriber (by clicking Open Publisher in the subscriber options dialog box), the SectionOptionsDialog function returns the action code 'goto' in the action field of the section options reply record. When you receive this action code, you should open the document containing the publisher. First, use the GetEditionInfo function to find the edition container. Then use the GoToPublisherSection function to open the document containing the publisher.FUNCTION GoToPublisherSection                                 (container: EditionContainerSpec): OSErr;container    An edition container record, which specifies volume reference number, directory ID, and filename of the subscriber’s edition. You obtain the edition container by calling the GetEditionInfo function. DESCRIPTIONThe GoToPublisherSection function resolves the alias in the edition to find the document containing its publisher. In general, this function internally uses the GetStandardFormats function to get the alias to the publisher document and then resolves the alias. It next sends the Finder an Apple event to open the document (which launches its application if necessary) and, after the publisher is registered, sends a Section Scroll event to the publisher.As an optimization, if there is a registered publisher, the GoToPublisherSection function simply sends a Section Scroll event to the publisher. If the edition does not contain an alias and there are no registered publishers, then the GoToPublisherSection function sends an Open Documents event to open the edition to the creating application.If the edition container is not an edition file (as is the case when you are using bottlenecks to subscribe to non-edition files), the GoToPublisherSection function sends the Finder an Apple event to open that file. RESULT CODESnoErr    0    No error    fnfErr    –43    File not found    editionMgrInitErr    –450    Manager not initialized    badSubPartErr    –454    Invalid edition container    SEE ALSOFor illustrations of the section options dialog box for subscribers, see Figure 2-15 on page 2-44 and Figure 2-16 on page 2-45. For an example of responding to the action code 'goto', see Listing 2-8 beginning on page 2-46. For a description of the edition container record, see page 2-71.Edition Container FormatsThe Edition Manager calls the GetStandardFormats function to get the alias used in the GoToPublisherSection function and to get the preview shown in the subscriber dialog box. You probably do not need to call this function directly.GetStandardFormatsYou probably do not need to call the GetStandardFormats function directly because the Edition Manager calls this function.FUNCTION GetStandardFormats                     (container: EditionContainerSpec;                      VAR previewFormat: FormatType;                     preview, publisherAlias, formats: Handle): OSErr;container    An edition container record that specifies the edition volume reference number, directory ID, filename, and part.previewFormatThe GetStandardFormats function returns in this parameter a handle to the first format of the requested format type that it finds in the edition. preview    A format type. The GetStandardFormats function looks for a format of the type specified in this parameter and returns in this parameter the format type of the first format that it finds. The function tries to find one of four formats: 'prvw', 'PICT', 'TEXT', or 'snd '. publisherAliasThe publisherAlias parameter reads the format kPublisherDocAliasFormat ('alis').formats    The formats parameter reads the virtual format kFormatListFormat ('fmts'). DESCRIPTIONYou should pass in valid handles for the formats that you want and NIL for the formats that you don’t want. The handles are resized to the size of the data. If one of the requested formats cannot be found, GetStandardFormats returns a noTypeErr result code. RESULT CODESnoErr    0    No error    noTypeErr    –102    Edition container not found    editionMgrInitErr    –450    Manager not initialized    Reading and Writing Non-Edition FilesThe Edition Manager never opens or closes an edition container directly—it calls the current edition opener. See “Subscribing to Non-Edition Files” beginning on page 2-62 for additional information.To override the standard opener function, create an opener function that contains the following parameters:FUNCTION MyOpener (selector: EditionOpenerVerb;                         VAR PB: EditionOpenerParamBlock): OSErr;When this function is called by the Edition Manager, the selector parameter is set to one of the edition opener verbs (eoOpen, eoClose, eoOpenNew, eoCloseNew, eoCanSubscribe). The PB parameter contains an edition opener parameter block record.Use the GetEditionOpenerProc function to locate the current edition opener and use the SetEditionOpenerProc function to provide your own edition opener. Use the CallEditionOpenerProc function to call an edition opener and use the CallFormatIOProc function to call a format I/O function.GetEditionOpenerProcUse the GetEditionOpenerProc function to locate the current edition opener.FUNCTION GetEditionOpenerProc                            (VAR opener: EditionOpenerProcPtr): OSErr;opener    The GetEditionOpenerProc function returns a pointer to the current edition opener function in this parameter.SetEditionOpenerProcUse the SetEditionOpenerProc function to provide your own edition opener.FUNCTION SetEditionOpenerProc                             (opener: EditionOpenerProcPtr): OSErr;opener    A pointer to the edition opener function that you are providing.CallEditionOpenerProcUse the CallEditionOpenerProc function to call an edition opener.FUNCTION CallEditionOpenerProc                             (selector: EditionOpenerVerb;                              VAR PB: EditionOpenerParamBlock;                             routine: EditionOpenerProcPtr): OSErr;selector    An edition opener verb. When the CallEditionOpenerProc function is called by the Edition Manager, the selector parameter is set to one of the edition opener verbs (eoOpen, eoClose, eoOpenNew, eoCloseNew, eoCanSubscribe). PB    An edition opener parameter block. routine    A pointer to an edition opener function.DESCRIPTIONThe Edition Manager calls an edition opener function whenever it needs to open or close an edition. The Edition Manager passes an edition opener parameter block as one of the parameters to an edition opener function. The edition opener parameter block is defined by this structure:TYPE EditionOpenerParamBlock =     RECORD        info:                    EditionInfoRecord;                            {edition container to }                                                        { be subscribed to}        sectionH:                    SectionHandle;                            {publisher or }                                                        { subscriber }                                                        { requesting open}        document:                    FSSpecPtr;                            {document passed}        fdCreator:                    OSType;                            {Finder creator type}        ioRefNum:                    LongInt;                            {reference number}        ioProc:                    FormatIOProcPtr;                            {routine to read }                                                        { formats}        success:                    Boolean;                            {reading or writing }                                                        { was successful}        formatsMask:                    SignedByte;                            {formats required to }                                                        { subscribe}    END;To override the standard reading and writing functions, you should create an I/O function that contains the following parameters.FUNCTION MyIO (selector: FormatIOVerb;                     VAR PB: FormatIOParamBlock): OSErr;Set the selector parameter to one of the format I/O verbs (ioHasFormat, ioReadFormat, ioNewFormat, ioWriteFormat). The PB parameter contains a format I/O parameter block record.SEE ALSOSee “Calling an Edition Opener” beginning on page 2-64 for additional information.CallFormatIOProcUse the CallFormatIOProc function to call a format I/O function.FUNCTION CallFormatIOProc (selector: FormatIOVerb;                                     VAR PB:FormatIOParamBlock;                                     routine: FormatIOProcPtr): OSErr;selector    A format I/O verb (ioHasFormat, ioReadFormat, ioNewFormat, ioWriteFormat). PB    A format I/O parameter block record.routine    A pointer to a format I/O function. DESCRIPTIONThe Edition Manager calls a format I/O function whenever it needs to read from or write to an edition. The Edition Manager passes a format I/O parameter block as one of the parameters to a format I/O procedure. The format I/O parameter block is defined by this structure:TYPE FormatIOParamBlock =     RECORD        ioRefNum:                    LongInt;                    {reference number}        format:                    FormatType;                    {edition format type}        formatIndex:                    LongInt;                    {opener-specific enumeration }                                                 { of formats}        offset:                    LongInt;                    {offset into format}        buffPtr:                    Ptr;                    {data starts here}        buffLen:                    LongInt;                    {length of data}    END;SEE ALSOSee “Calling a Format I/O Function” beginning on page 2-68 for additional information.Application-Defined RoutinesYour application can provide an edition opener function, format I/O function, expandable dialog hook function, and expandable modal-dialog filter function. For the routine declarations of the edition opener and format I/O functions, see “Reading and Writing Non-Edition Files” beginning on page 2-102. For the routine declarations of the expandable dialog hook and expandable modal-dialog filter functions, see the description of NewSubscriberExpDialog, NewPublisherExpDialog, and SectionOptionsExpDialog beginning on page 2-96. Summary of the Edition ManagerPascal SummaryConstantsCONST            {resource types}    rSectionType                                        = 'sect';                {resource type for a }                                                            { section}    {section types}    stSubscriber                                        = $01;                {subscriber section type}    stPublisher                                        = $0A;                {publisher section type}     {update modes}    sumAutomatic                                        = 0;                {subscriber receives new }                                                             { editions automatically}    sumManual                                        = 1;                {subscriber receives new }                                                             { editions manually}    pumOnSave                                        = 0;                {publisher sends new }                                                             { editions on save}    pumManual                                        = 1;                {publisher does not send }                                                             { new editions until user }                                                            { request}    {edition container subpart number}    kPartsNotUsed                                        = 0;                {edition is the whole file}    kPartNumberUnknown                                        = -1;                {not used in version 7.0}     {preview size}    kPreviewWidth                                        = 120;                {preview width}     kPreviewHeight                                        = 120;                {preview height}    {special formats}    kPublisherDocAliasFormat                                        = 'alis';                {alias record from the }                                                             { edition to publisher}     kPreviewFormat                                        = 'prvw';                {'PICT' thumbnail sketch}    kFormatListFormat                                        = 'fmts';                {list of all available }                                                            { formats and their sizes}    {bits for formatMask}    kPICTformatMask                                        = 1;                {graphics format}    kTEXTformatMask                                        = 2;                {text format}    ksndFormatMask                                        = 4;                {sound format}    {Finder types for edition files}    kPICTEditionFileType                                        = 'edtp';                {contains 'PICT', }    kTEXTEditionFileType                                        = 'edtt';                { 'TEXT', and }    ksndEditionFileType                                        = 'edts';                { 'snd ' file types}    kUnknownEditionFileType                                        = 'edtu';                {unknown file type}    {miscellaneous}    kFormatLengthUnknown                                        = -1;                    {length of format unknown}    {message IDs for Apple events sent by the Edition Manager}    sectionEventMsgClass                                        = 'sect';                {Apple events sent by the }                                                            { Edition Manager}    sectionReadMsgID                                        = 'read';                {Section Read events}    sectionWriteMsgID                                        = 'writ';                {Section Write events}    sectionScrollMsgID                                        = 'scrl';                {Section Scroll events}    sectionCancelMsgID                                        = 'cncl';                {Section Cancel events}    {refCon field when displaying stacked dialog boxes}    sfMainDialogRefCon                                        = 'stdf';                {new publisher and }                                                            { new subscriber}    sfNewFolderDialogRefCon                                        = 'nfdr';                {new folder}    sfReplaceDialogRefCon                                        = 'rplc';                {replace dialog}    sfStatWarnDialogRefCon                                        = 'stat';                {warning dialog}    sfErrorDialogRefCon                                        = 'err ';                {error dialog}    emOptionsDialogRefCon                                        = 'optn';                {options dialog}    emCancelSectionDialogRefCon                                        = 'cncl';                {cancel section}    emGotoPubErrDialogRefCon                                        = 'gerr';                {locate publisher}    {pseudo-item hits for dialogHooks}    emHookRedrawPreview                                        = 150;                {for NewPublisher or }                                                            { NewSubscriber dialogs}    emHookCancelSection                                        = 160;                {for SectionOptions dialog}    emHookGoToPublisher                                        = 161;                {for SectionOptions dialog}    emHookGetEditionNow                                        = 162;                {for SectionOptions dialog}    emHookSendEditionNow                                        = 162;                {for SectionOptions dialog}    emHookManualUpdateMode                                        = 163;                {for SectionOptions dialog}    emHookAutoUpdateMode                                        = 164;                {for SectionOptions dialog}Data TypesTYPE TimeStamp                                            = LongInt;                    {seconds since 1904}    EditionRefNum                                         = Handle;                     {for use in Edition I/O}    UpdateMode                                         = Integer;                    {sumAutomatic, }                                                                { sumManual, }                                                                 { pumOnSave, pumManual}    SectionType                                         = SignedByte;                    {stSubscriber or }                                                                { stPublisher}     FormatType                                         = PACKED ARRAY[1..4] OF CHAR;                                                                 {similar to ResType used }                                                                 { by the Scrap Manager}    SectionHandle                                        = ^SectionPtr;    SectionPtr                                        = ^SectionRecord;    SectionRecord                                         =     RECORD        version:                                    SignedByte;                    {always 1 in version 7.0}        kind:                                    SectionType;                    {publisher or subscriber}        mode:                                    UpdateMode;                    {automatic or manual}        mdDate:                                    TimeStamp;                    {last change to section}        sectionID:                                    LongInt;                    {application-specific, }                                                                { unique per document}        refCon:                                    LongInt;                    {application-specific}        alias:                                    AliasHandle;                    {handle to alias record}        {The following fields are private and are set up by the }        { RegisterSection function.}        subPart:                                    LongInt;                    {private}        nextSection:                                    SectionHandle;                    {private}        controlBlock:                                    Handle;                    {private}        refNum:                                    EditionRefNum;                    {private}    END;    EditionContainerSpecPtr =^EditionContainerSpec;    EditionContainerSpec =    RECORD        theFile:                                    FSSpec;                    {file containing edition }                                                                 { data}        theFileScript:                                     ScriptCode;                    {script code of filename}        thePart:                                    LongInt;                    {which part of file, }                                                                 { always kPartsNotUsed}        thePartName:                                    Str31;                    {reserved}        thePartScript:                                     ScriptCode;                    {reserved}    END;    FormatsAvailable = ARRAY[0..0] OF    RECORD        theType:                                    FormatType;                    {format type for an }                                                                { edition}        theLength:                                    LongInt;                    {length of edition format }                                                                { type}    END;    EditionInfoRecord =     RECORD        crDate:                                    TimeStamp;                    {date edition container }                                                                { was created}        mdDate:                                    TimeStamp;                    {date of last change}        fdCreator:                                    OSType;                    {file creator}        fdType:                                    OSType;                    {file type}        container:                                    EditionContainerSpec;                                                                {the edition}    END;    NewPublisherReply =     RECORD        canceled:                        Boolean;                            {user canceled dialog box}         replacing:                        Boolean;                            {user chose existing }                                                             { filename for an edition}        usePart:                        Boolean;                            {always FALSE in version 7.0}        preview:                        Handle;                            {handle to 'prvw', 'PICT',}                                                            { 'TEXT', or 'snd ' data}        previewFormat:                        FormatType;                            {type of preview}        container:                        EditionContainerSpec;                                                            {edition chosen}    END;    NewSubscriberReply =    RECORD        canceled:                        Boolean;                            {user canceled dialog box}        formatsMask:                        SignedByte;                            {formats required}        container:                         EditionContainerSpec;                                                            {edition selected}    END;    SectionOptionsReply =    RECORD        canceled:                        Boolean;                            {user canceled dialog box}        changed:                         Boolean;                            {changed the section }                                                            { record}        sectionH:                        SectionHandle;                            {handle to the specified }                                                            { section record}        action:                        ResType;                            {action codes}    END;    EditionOpenerVerb    = (eoOpen, eoClose, eoOpenNew, eoCloseNew,                                eoCanSubscribe);     EditionOpenerParamBlock =     RECORD        info:                        EditionInfoRecord;                            {edition container to }                                                            { be subscribed to}        sectionH:                        SectionHandle;                            {publisher or subscriber }                                                            { requesting open}        document:                        FSSpecPtr;                            {document passed}        fdCreator:                        OSType;                            {Finder creator type}        ioRefNum:                        LongInt;                            {reference number}        ioProc:                        FormatIOProcPtr;                            {routine to read formats}        success:                        Boolean;                            {reading or writing was }                                                            { successful}        formatsMask:                        SignedByte;                            {formats required to }                                                            { subscribe}    END;    FormatIOVerb     = (ioHasFormat, ioReadFormat, ioNewFormat, ioWriteFormat);    FormatIOParamBlock =     RECORD        ioRefNum:                        LongInt;                            {reference number}        format:                        FormatType;                            {edition format type}        formatIndex:                        LongInt;                            {opener-specific enumeration }                                                            { of formats}        offset:                        LongInt;                            {offset into format}        buffPtr:                        Ptr;                            {data starts here}        buffLen:                        LongInt;                            {length of data}END;Edition Manager RoutinesInitializing the Edition ManagerFUNCTION InitEditionPack     : OSErr;Creating and Registering a SectionFUNCTION NewSection    (container: EditionContainerSpec; sectionDocument: FSSpecPtr; kind: SectionType; sectionID: LongInt; initialMode: UpdateMode; VAR sectionH: SectionHandle): OSErr;FUNCTION RegisterSection    (sectionDocument: FSSpec; sectionH: SectionHandle; VAR aliasWasUpdated: Boolean): OSErr;FUNCTION UnRegisterSection    (sectionH: SectionHandle): OSErr;FUNCTION IsRegisteredSection(sectionH: SectionHandle): OSErr;FUNCTION AssociateSection    (sectionH: SectionHandle; newSectionDocument: FSSpecPtr): OSErr;Creating and Deleting an Edition ContainerFUNCTION CreateEditionContainerFile(editionFile: FSSpec; fdCreator: OSType; editionFileNameScript: ScriptCode): OSErr;FUNCTION DeleteEditionContainerFile(editionFile: FSSpec): OSErr;Setting and Getting a Format MarkFUNCTION SetEditionFormatMark(whichEdition: EditionRefNum; whichFormat: FormatType; setMarkTo: LongInt): OSErr;FUNCTION GetEditionFormatMark(whichEdition: EditionRefNum; whichFormat: FormatType; VAR currentMark: LongInt): OSErr; Reading in Edition DataFUNCTION OpenEdition    (subscriberSectionH: SectionHandle; VAR refNum: EditionRefNum): OSErr;FUNCTION EditionHasFormat    (whichEdition: EditionRefNum; whichFormat: FormatType; VAR formatSize: Size): OSErr; FUNCTION ReadEdition    (whichEdition: EditionRefNum; whichFormat: FormatType; buffPtr: UNIV Ptr; VAR buffLen: Size): OSErr;Writing out Edition DataFUNCTION OpenNewEdition    (publisherSectionH: SectionHandle; fdCreator: OSType; publisherSectionDocument: FSSpecPtr; VAR refNum: EditionRefNum): OSErr;FUNCTION WriteEdition    (whichEdition: EditionRefNum; whichFormat: FormatType; buffPtr: UNIV Ptr; buffLen: Size): OSErr;Closing an Edition After Reading or WritingFUNCTION CloseEdition    (whichEdition: EditionRefNum; successful: Boolean): OSErr;Displaying Dialog BoxesFUNCTION GetLastEditionContainerUsed(VAR container: EditionContainerSpec): OSErr;FUNCTION NewSubscriberDialog(VAR reply: NewSubscriberReply): OSErr;FUNCTION NewPublisherDialog    (VAR reply: NewPublisherReply): OSErr;FUNCTION SectionOptionsDialog(VAR reply: SectionOptionsReply): OSErr;FUNCTION NewSubscriberExpDialog(VAR reply: NewSubscriberReply; where: Point; expansionDITLresID: Integer; dlgHook: ExpDlgHookProcPtr; filterProc: ExpModalFilterProcPtr; yourDataPtr: UNIV Ptr): OSErr;FUNCTION NewPublisherExpDialog(VAR reply: NewPublisherReply; where: Point; expansionDITLresID: Integer; dlgHook: ExpDlgHookProcPtr; filterProc: ExpModalFilterProcPtr; yourDataPtr: UNIV Ptr): OSErr;FUNCTION SectionOptionsExpDialog(VAR reply: SectionOptionsReply; where: Point; expansionDITLresID: Integer; dlgHook: ExpDlgHookProcPtr; filterProc: ExpModalFilterProcPtr; yourDataPtr: UNIV Ptr): OSErr;Locating a Publisher and Edition From a SubscriberFUNCTION GetEditionInfo    (sectionH: SectionHandle; VAR editionInfo: EditionInfoRecord): OSErr;FUNCTION GoToPublisherSection(container: EditionContainerSpec): OSErr;Edition Container FormatsFUNCTION GetStandardFormats    (container: EditionContainerSpec; VAR previewFormat: FormatType; preview, publisherAlias, formats: Handle): OSErr;Reading and Writing Non-Edition filesFUNCTION GetEditionOpenerProc(VAR opener: EditionOpenerProcPtr): OSErr;FUNCTION SetEditionOpenerProc(opener: EditionOpenerProcPtr): OSErr;FUNCTION CallEditionOpenerProc(selector: EditionOpenerVerb; VAR PB: EditionOpenerParamBlock; routine: EditionOpenerProcPtr): OSErr;FUNCTION CallFormatIOProc    (selector: FormatIOVerb; VAR PB: FormatIOParamBlock; routine: FormatIOProcPtr): OSErr;Application-Defined RoutinesFUNCTION MyExpDlgHook    (itemOffset: Integer; itemHit: Integer; theDialog: DialogPtr; yourDataPtr: Ptr): Integer;FUNCTION MyExpModalFilter    (theDialog: DialogPtr; VAR theEvent: EventRecord; itemOffset: Integer; VAR itemHit: Integer; yourDataPtr: Ptr): Boolean;FUNCTION MyOpener    (selector: EditionOpenerVerb; VAR PB: EditionOpenerParamBlock): OSErr;FUNCTION MyIO    (selector: FormatIOVerb; VAR PB: FormatIOParamBlock): OSErr;C SummaryConstantsCONST        enum {    /*resource types*/    #define rSectionType                                         'sect'                /*resource type for a */                                                            /* section*/    /*section types*/    stSubscriber                                        = 0x01,                /*subscriber section type*/    stPublisher                                        = 0x0A,                /*publisher section type*/     /*update modes*/    sumAutomatic                                        = 0,                /*subscriber receives new */                                                             /* editions automatically*/    sumManual                                        = 1,                /*subscriber receives new */                                                             /* editions manually*/    pumOnSave                                        = 0,                /*publisher sends new */                                                             /* editions on save*/    pumManual                                        = 1,                /*publisher does not send */                                                             /* new editions until user */                                                            /* request*/    /*edition container subpart number*/    kPartsNotUsed                                        = 0,                /*edition is the whole file*/    kPartNumberUnknown                                        = -1,                /*not used in version 7.0*/     /*preview size*/    kPreviewWidth                                        = 120,                /*preview width*/     kPreviewHeight                                        = 120,                /*preview height*/    /*special formats*/    #define kPublisherDocAliasFormat                                         'alis'                /*alias record from the */                                                             /* edition to publisher*/     #define kPreviewFormat                                            'prvw'            /*'PICT' thumbnail sketch*/    #define kFormatListFormat                                             'fmts'            /*list of all available */                                                            /* formats and their sizes*/    /*bits for formatMask*/    kPICTformatMask                                        = 1,                /*graphics format*/    kTEXTformatMask                                        = 2,                /*text format*/    ksndFormatMask                                        = 4,                /*sound format*/    /*Finder types for edition files*/    #define kPICTEditionFileType                                             'edtp'            /*contains 'PICT', */    #define kTEXTEditionFileType                                             'edtt'            /* 'TEXT', and */    #define ksndEditionFileType                                             'edts'            /* 'snd ' file types*/    #define kUnknownEditionFileType                                             'edtu'            /*unknown file type*/    /*pseudo-item hits for dialogHooks*/    emHookRedrawPreview                                        = 150,                /*for NewPublisher or */                                                            /* NewSubscriber dialogs*/    emHookCancelSection                                        = 160,                /*for SectionOptions dialog*/    emHookGoToPublisher                                        = 161,                /*for SectionOptions dialog*/    emHookGetEditionNow                                        = 162,                /*for SectionOptions dialog*/    emHookSendEditionNow                                        = 162,                /*for SectionOptions dialog*/    emHookManualUpdateMode                                        = 163,                /*for SectionOptions dialog*/    emHookAutoUpdateMode                                        = 164                /*for SectionOptions dialog*/};    /*edition opener verbs*/enum {eoOpen, eoClose, eoOpenNew, eoCloseNew, eoCanSubscribe};enum {    /*refCon field when displaying stacked dialog boxes*/    #define emOptionsDialogRefCon                                                 'optn'                /*options dialog*/    #define emCancelSectionDialogRefCon                                                 'cncl'                /*cancel section*/    #define emGotoPubErrDialogRefCon                                                 'gerr'                /*locate publisher*/    kFormatLengthUnknown                                        = -1                 /*length of format unknown*/};    /*refCon field when displaying stacked dialog boxes*/    #define sfMainDialogRefCon                                         'stdf'                {new publisher and }                                                            { new subscriber}    #define sfNewFolderDialogRefCon                                        'nfdr'                {new folder}    #define sfReplaceDialogRefCon                                         'rplc'                {replace dialog}    #define sfStatWarnDialogRefCon     'stat'                                                    {warning dialog}    #define sfErrorDialogRefCon                                         'err '                {error dialog}    /*message IDs for Apple events sent by the Edition Manager*/    #define sectionEventMsgClass                                         'sect'                /*Apple events sent by the */                                                            /* Edition Manager*/    #define sectionReadMsgID                                         'read'                /*Section Read events*/    #define sectionWriteMsgID                                         'writ'                /*Section Write events*/    #define sectionScrollMsgID                                         'scrl'                /*Section Scroll events*/    #define sectionCancelMsgID                                         'cncl'                /*Section Cancel events*/Data Typestypedef unsigned long TimeStamp;                                                            /*seconds since 1904*/typedef Handle EditionRefNum;                            ‘                                /*used in Edition I/O*/typedef short UpdateMode;                                                            /*update mode: sumAutomatic, */                                                            /* sumManual, */                                                             /* pumOnSave, pumManual*/typedef char SectionType;                                                            /*one byte, stSubscriber */                                                            /* or stPublisher*/ typedef unsigned long FormatType;                                                            /*similar to ResType*/struct SectionRecord {    SignedByte version;                                                        /*always 1x01 in version 7.0*/    SectionType kind;                                                        /*stPublisher or */                                                            /* stSubscriber*/    UpdateMode mode;                                                        /*automatic or manual*/    TimeStamp mdDate;                                                        /*last change to section*/    long sectionID;                                                        /*application-specific, */                                                            /* unique per document*/    long refCon;                                                        /*application-specific*/    AliasHandle alias;                                                        /*handle to alias record*/    long subPart;                                                        /*private*/    struct SectionRecord **nextSection;                                                        /*private*/    Handle controlBlock;                                                        /*private*/    EditionRefNum refNum;                                                        /*private*/};typedef struct SectionRecord SectionRecord;typedef SectionRecord *SectionPtr, **SectionHandle;struct EditionContainerSpec {    FSSpec theFile;                                                        /*file containing */                                                             /* edition data*/    ScriptCode theFileScript;                                                         /*script code of filename*/    long thePart;                                                        /*which part of file, */                                                             /* always kPartsNotUsed*/    Str31 thePartName;                                                        /*reserved*/    ScriptCode thePartScript;                                                         /*reserved*/};typedef struct EditionContainerSpec EditionContainerSpec;typedef EditionContainerSpec *EditionContainerSpecPtr;struct EditionInfoRecord {    TimeStamp crDate;                                                    /*date edition container */                                                        /* was created*/    TimeStamp mdDate;                                                    /*date of last change*/    OSType fdCreator;                                                    /*file creator*/    OSType fdType;                                                    /*file type*/    EditionContainerSpec container;                                                    /*the edition*/};typedef struct EditionInfoRecord EditionInfoRecord;struct NewPublisherReply {    Boolean canceled;                                                    /*user canceled dialog box*/     Boolean replacing;                                                    /*user chose existing */                                                         /* filename for an edition*/    Boolean usePart;                                                    /*always FALSE in version */                                                         /* 7.0*/    Handle preview;                                                    /*handle to 'prvw', 'PICT',*/                                                        /* 'TEXT', or 'snd ' data*/    FormatType previewFormat;                                                    /*type of preview*/    EditionContainerSpec container;                                                    /*edition chosen*/};typedef struct NewPublisherReply NewPublisherReply;struct NewSubscriberReply {    Boolean canceled;                                                    /*user canceled dialog box*/    unsigned char formatsMask;                                                    /*formats required*/    EditionContainerSpec container;                                                     /*edition selected*/};typedef struct NewSubscriberReply NewSubscriberReply;struct SectionOptionsReply {    Boolean canceled;                                                    /*user canceled dialog box*/    Boolean changed;                                                     /*changed the section */                                                        /* record*/    SectionHandle sectionH;                                                    /*handle to the specified */                                                        /* section record*/    ResType action;                                                    /*action codes*/};typedef struct SectionOptionsReply SectionOptionsReply;typedef pascal Boolean (*ExpModalFilterProcPtr) (DialogPtr theDialog,                                                 EventRecord *theEvent, short itemOffset,                                                 short *itemHit, Ptr yourDataPtr);typedef pascal short (*ExpDlgHookProcPtr) (short itemOffset, short itemHit,                                                     DialogPtr theDialog, Ptr yourDataPtr);typedef unsigned char EditionOpenerVerb;    struct EditionOpenerParamBlock {    EditionInfoRecord info;                                                    /*edition container to */                                                        /* be subscribed to*/    SectionHandle sectionH;                                                    /*publisher or subscriber */                                                        /* requesting open*/    FSSpecPtr document;                                                    /*document passed*/    OSType fdCreator;                                                    /*Finder creator type*/    long ioRefNum;                                                    /*reference number*/    FormatIOProcPtr ioProc;                                                    /*routine to read formats*/    Boolean success;                                                    /*reading or writing was */                                                        /* successful*/    unsigned char formatsMask;                                                    /*formats required to */                                                        /* subscribe*/};typedef struct EditionOpenerParamBlock EditionOpenerParamBlock;typedef pascal short (*EditionOpenerProcPtr) (EditionOpenerVerb selector,                                                            FormatIOParamBlock *PB);enum {ioHasFormat, ioReadFormat, ioNewFormat, ioWriteFormat};typedef unsigned char FormatIOVerb;struct FormatIOParamBlock {    long ioRefNum;                                                    /*reference number*/    FormatType format;                                                    /*edition format type*/    long formatIndex;                                                    /* opener-specific */                                                         /* enumeration */                                                        /* of formats*/    unsigned long offset;                                                    /*offset into format*/    Ptr buffPtr;                                                    /*data starts here*/    unsigned long buffLen;                                                    /*length of data*/};typedef struct FormatIOParamBlock FormatIOParamBlock;typedef pascal short (*FormatIOProcPtr) (FormatIOVerb selector,                                                    FormatIOParamBlock *PB);Edition Manager RoutinesInitializing the Edition Managerpascal OSErr InitEditionPack    (void)Creating and Registering a Sectionpascal OSErr NewSection    (const EditionContainerSpec *container,const FSSpec *sectionDocument,SectionType kind, long sectionID,UpdateMode initialMode,SectionHandle *sectionH);pascal OSErr RegisterSection(const FSSpec *sectionDocument,SectionHandle sectionH,Boolean *aliasWasUpdated);pascal OSErr UnRegisterSection(SectionHandle sectionH);pascal OSErr IsRegisteredSection(SectionHandle sectionH);pascal OSErr AssociateSection(SectionHandle sectionH,const FSSpec *newSectionDocument);Creating and Deleting an Edition Containerpascal OSErr CreateEditionContainerFile(const FSSpec *editionFile, OSType fdCreator, ScriptCode editionFileNameScript);pascal OSErr DeleteEditionContainerFile(const FSSpec *editionFile);Setting and Getting a Format Markpascal OSErr SetEditionFormatMark(EditionRefNum whichEdition,FormatType whichFormat,unsigned long setMarkTo);pascal OSErr GetEditionFormatMark(EditionRefNum whichEdition,FormatType whichFormat,unsigned long *currentMark);Reading in Edition Datapascal OSErr OpenEdition    (SectionHandle subscriberSectionH, EditionRefNum *refNum);pascal OSErr EditionHasFormat(EditionRefNum whichEdition,FormatType whichFormat,Size *formatSize);pascal OSErr ReadEdition    (EditionRefNum whichEdition,FormatType whichFormat, void *buffPtr,Size *buffLen);Writing out Edition Datapascal OSErr OpenNewEdition    (SectionHandle publisherSectionH,OSType fdCreator,const FSSpec *publisherSectionDocument,EditionRefNum *refNum);pascal OSErr WriteEdition    (EditionRefNum whichEdition,FormatType whichFormat, const void *buffPtr, Size *buffLen);Closing an Edition After Reading or Writingpascal OSErr CloseEdition    (EditionRefNum whichEdition,Boolean successful);Displaying Dialog Boxespascal OSErr GetLastEditionContainerUsed(EditionContainerSpec *container);pascal OSErr NewSubscriberDialog(NewSubscriberReply *reply);pascal OSErr NewPublisherDialog(NewPublisherReply *reply);pascal OSErr SectionOptionsDialog(SectionOptionsReply *reply);pascal OSErr NewSubscriberExpDialog(NewSubscriberReply *reply, Point where,short expansionDITLresID,ExpDlgHookProcPtr dlgHook,ExpModalFilterProcPtr filterProc,void *yourDataPtr);pascal OSErr NewPublisherExpDialog(NewPublisherReply *reply, Point where,short expansionDITLresID,ExpDlgHookProcPtr dlgHook,ExpModalFilterProcPtr filterProc,void *yourDataPtr);pascal OSErr SectionOptionsExpDialog(SectionOptionsReply *reply, Point where, short expansionDITLresID,ExpDlgHookProcPtr dlgHook,ExpModalFilterProcPtr filterProc,void *yourDataPtr);Locating a Publisher and Edition From a Subscriberpascal OSErr GetEditionInfo    (const SectionHandle sectionH,EditionInfoRecord *editionInfo);pascal OSErr GoToPublisherSection(const EditionContainerSpec *container);Edition Container Formatspascal OSErr GetStandardFormats(const EditionContainerSpec *container,FormatType *previewFormat,Handle preview, Handle publisherAlias,Handle formats);Reading and Writing Non-Edition filespascal OSErr GetEditionOpenerProc(EditionOpenerProcPtr *opener);pascal OSErr SetEditionOpenerProc(EditionOpenerProcPtr opener);pascal OSErr CallEditionOpenerProc(EditionOpenerVerb selector,EditionOpenerParamBlock *PB,EditionOpenerProcPtr routine);pascal OSErr CallFormatIOProc(FormatIOVerb selector,FormatIOParamBlock *PB,FormatIOProcPtr routine);Application-Defined Routinespascal OSErr MyExpDlgHook    (short itemOffset, short itemHit,DialogPtr theDialog,Ptr yourDataPtr);pascal OSErr MyExpModalFilter(DialogPtr theDialog,EventRecord *theEvent,short itemOffset, short *itemHit, Ptr yourDataPtr);pascal OSErr MyOpener    (EditionOpenerVerb selector,EditionOpenerParamBlock *PB);pascal OSErr MyIO    (FormatIOVerb selector,FormatIOParamBlock *PB);Result CodesnoErr    0    No error    abortErr    –27    Publisher has written a new edition    dskFulErr    –34    Disk is full    nsvErr    –35    No such volume    ioErr    –36    I/O error    bdNamErr    –37    Bad filename    fnOpnErr    –38    File not open    eofErr    –39    No additional data in the format    fnfErr    –43    Edition container not found    flLckedErr    –45    Publisher writing to an edition    fBsyErr    –47    Section doing I/O    paramErr    –50    Invalid parameter    rfNumErr    –51    Bad edition reference number    permErr    –54    Not a subscriber    wrPermErr    –61    Not a publisher    noTypeErr    –102    Format not available    memFullErr    –108    Memory full    dirNFErr    –120    Directory not found    userCanceledErr    –128    User clicked Cancel in dialog box    editionMgrInitErr    –450    Manager not initialized or could not load package    badSectionErr    –451    Not a valid section type    notRegisteredSectionErr    –452    Not registered    badSubPartErr    –454    Bad edition container spec or invalid edition container    multiplePublisherWrn    –460    Already is a publisher    containerNotFoundWrn    –461    Alias was not resolved    notThePublisherWrn    –463    Not the publisher    Listing 3-0Table 3-0Introduction to Apple EventsContentsAbout Apple Events3-3Apple Events and Apple Event Objects3-6Apple Event Attributes and Parameters3-7Apple Event Attributes3-8Apple Event Parameters3-9Interpreting Apple Event Attributes and Parameters3-10Data Structures Within Apple Events3-12Descriptor Records3-12Keyword-Specified Descriptor Records3-15Descriptor Lists3-16Responding to Apple Events3-20Accepting and Processing Apple Events3-20About Apple Event Handlers3-23Extracting and Checking Data3-23Interacting With the User3-25Performing the Requested Action and Returning a Result3-25Creating and Sending Apple Events3-28Creating an Apple Event Record3-29Adding Apple Event Attributes and Parameters3-29Sending an Apple Event and Handling the Reply3-30Working With Object Specifier Records3-32Data Structures Within an Object Specifier Record3-34The Classification of Apple Event Objects3-39Object Classes3-39Properties and Elements3-42Finding Apple Event Objects3-46About the Apple Event Manager3-48Supporting Apple Events as a Server Application3-48Supporting Apple Events as a Client Application3-49Supporting Apple Event Objects3-49Supporting Apple Event Recording3-50Introduction to Apple EventsThis chapter introduces Apple events and the Apple Event Manager. Later chapters describe how your application can use the Apple Event Manager to respond to and send Apple events, locate Apple event objects, and record Apple events.The interapplication communication (IAC) architecture for Macintosh computers consists of five parts: the Edition Manager, the Open Scripting Architecture (OSA), the Apple Event Manager, the Event Manager, and the Program-to-Program Communications (PPC) Toolbox. The chapter “Introduction to Interapplication Communication” in this book provides an overview of the relationships among these parts. The Apple Event Registry: Standard Suites defines both the actions performed by the standard Apple events, or “verbs,” and the standard Apple event object classes, which can be used to create “noun phrases” describing objects on which Apple events act. If your application uses the Apple Event Manager to respond to some of these standard Apple events, you can make it scriptable—that is, capable of responding to scripts written in a scripting language such as AppleScript. In addition, your application can use the Apple Event Manager to create and send Apple events and to allow user actions in your application to be recorded as Apple events.Before you use this chapter or any of the other chapters about the Apple Event Manager, you should be familiar with the chapters “Event Manager” in Inside Macintosh: Macintosh Toolbox Essentials and “Process Manager” in Inside Macintosh: Processes. This chapter begins by describing Apple events and some of the data structures they contain. The rest of the chapter introduces the use of the Apple Event Manager ton    respond to Apple eventsn    send Apple events to request services or informationn    work with object specifier recordsn    classify Apple event objects n    locate Apple event objectsFinally, this chapter summarizes the tasks you can perform with the Apple Event Manager and explains where to locate information you need to perform those tasks.About Apple EventsAn Apple event is a high-level event that conforms to the Apple Event Interprocess Messaging Protocol. The Apple Event Manager uses the services of the Event Manager to send Apple events between applications on the same computer, between applications on remote computers, or from an application to itself.Applications typically use Apple events to request services and information from other applications or to provide services and information in response to such requests. Communication between two applications that support Apple events is initiated by a client application, which sends an Apple event to request a service or information. The application providing the service or the requested information is called a server application. The client and server applications can reside on the same local computer or on remote computers connected to a network. An application can also send Apple events to itself, thus acting as both client and server.   Figure 3-1 shows a common Apple event, the Open Documents event. The Finder is the client; it requests that the SurfWriter application open the documents named “Dec. Invoice” and “Nov. Invoice.” The SurfWriter application responds to the Finder’s request by opening windows for the specified documents.Figure 3-1    An Open Documents eventThe Finder is considered the client application for the Open Documents event shown in Figure 3-1 because the Finder initiates the request for a service. The Finder can also be considered the source application for the same Open Documents event. A source application for an Apple event is one that sends an Apple event to another application or to itself. Similarly, the SurfWriter application can be described as either the server application or the target application for the Open Documents event shown in Figure 3-1. A target application for an Apple event is the one addressed to receive the Apple event. The terms client application and source application are not always synonymous, nor are the terms server application and target application. Typically, an Apple event client application sends an Apple event requesting a service to an Apple event server application; in this case, the server application is the target application for the Apple event. A server application may return information to the client in a reply Apple event—in which case, the client application is the target application for the reply.  To perform the requested service—that is, to open the specified documents—the SurfWriter application shown in Figure 3-1 first uses the Apple Event Manager to identify the event (the Open Documents event) and to dispatch the event to SurfWriter’s handler for that Apple event. An Apple event handler is an application-defined function that extracts pertinent data from an Apple event, performs the requested action, and (usually) returns a result. In this case, SurfWriter’s Open Documents event handler examines the Apple event to determine which documents to open (Dec. Invoice and Nov. Invoice), then opens them as requested. To identify Apple events and respond appropriately, every application can rely on a vocabulary of standard Apple events that developers and Apple have established for all applications to use. These events are defined in the Apple Event Registry: Standard Suites. The standard suites, or groups of related Apple events that are usually implemented together, include the Required suite, the Core suite, and functional-area suites such as the Text suite and the Database suite. To function as a server application, your application should be able to respond to all the Apple events in the Required suite and any of those in the Core and functional-area suites that it is likely to receive. For example, most word-processing applications should be capable of responding to the Apple events in the Text suite, and most database applications should be capable of responding to those in the Database suite. If necessary, you can extend the definitions of the standard Apple events to match specific capabilities of your application. You can also define your own custom Apple events; however, before defining custom events, you should check with the Apple Event Registrar to find out whether you can adapt existing Apple event definitions or definitions still under development to the needs of your application. By supporting the standard Apple events in your application, you ensure that your application can communicate effectively with other applications that also support them. Instead of supporting many different custom events for a limited number of applications, you can support a relatively small number of standard Apple events that can be used by any number of applications. You can begin supporting Apple events by making your application a reliable server application: first for the required Apple events, then for the core and functional-area Apple events as appropriate. Once your application can respond to the appropriate standard Apple events, you can make it scriptable, or capable of responding to instructions written in a system-wide scripting language such as AppleScript. If necessary, your application can also send Apple events to itself or to other applications.“About the Apple Event Manager,” which begins on page 3-48, provides more information about the steps you need to take to support Apple events in your application. The next section, “Apple Events and Apple Event Objects,” describes how Apple events can describe data and other items within an application or its documents. Subsequent sections describe the basic organization of Apple events and the data structures from which they are constructed. Apple Events and Apple Event ObjectsThe Open Documents event shown in Figure 3-1, like the other three required events, specifies an action and the applications or documents to which that action applies. The Apple Event Registry: Standard Suites provides a vocabulary of actions for use by all applications. In addition to a vocabulary of actions, effective communication between applications requires a method of referring to windows, data (such as words or graphic elements), files, folders, volumes, zones, and other discrete items on which actions can be performed. The Apple Event Manager includes routines that allow any application to construct or interpret “noun phrases” that describe the objects on which Apple events act.Most of the Apple event definitions in the Apple Event Registry: Standard Suites include definitions of Apple event object classes, which are simply names for objects that can be acted upon by each kind of Apple event. An Apple event object is any distinct item supported by an application that can be described within an Apple event. Apple event objects can be anything that an application can locate on the basis of such a description, including items that a user can differentiate and manipulate while using an application, such as words, paragraphs, shapes, windows, or style formats. The definition for each Apple event object class in the Apple Event Registry: Standard Suites determines only how that kind of Apple event object should be described within an Apple event, not how it should be represented internally by an individual application. You do not have to write your application in an object-oriented programming language to support Apple event objects. Instead, you need to organize your application so that it can interpret a request for specific Apple event objects, locate the objects, and perform the requested action on them.Figure 3-2 shows a common Apple event, the Get Data event from the Core suite. In this example, the SurfCharter application is the client application; it requests data contained in a specific table in a SurfWriter document. To obtain the data it wants, the SurfCharter application must include a description of the data in the Get Data event it sends to SurfWriter. This description identifies the requested data as an Apple event object called a table. The table is named “Summary of Sales” and is located in a document named “Sales Report.” The SurfWriter application’s Get Data handler extracts information about the request, locates the specified table, and returns a result. The Apple Event Manager provides a reply Apple event to which the SurfWriter application adds the requested information in the form requested by the Get Data event. The Apple Event Manager sends the reply event back to the SurfCharter application, which can use the requested data in whatever way is appropriate—in this case, displaying it as a pie chart.Figure 3-2    A Get Data eventApple Event Attributes and ParametersWhen an application creates and sends an Apple event, the Apple Event Manager uses arguments passed to Apple Event Manager routines to construct the data structures that make up the Apple event. An Apple event consists of attributes (which identify the Apple event and denote its task) and, often, parameters (which contain information to be used by the target application). An Apple event attribute is a record that identifies the event class, event ID, target application, or some other characteristic of an Apple event. Taken together, the attributes of an Apple event denote the task to be performed on any data specified in the Apple event’s parameters. A client application can use Apple Event Manager routines to add attributes to an Apple event. After receiving an Apple event, a server application can use Apple Event Manager routines to extract and examine its attributes. An Apple event parameter is a record containing data that the target application uses. Unlike Apple event attributes (which contain information that can be used by both the Apple Event Manager and the target application), Apple event parameters contain data used only by the target application. For example, the Apple Event Manager uses the event class and event ID attributes to identify the server application’s handler for a specific Apple event, and the server application must have a handler to process the event identified by those attributes. By comparison, the list of documents contained in a parameter to an Open Documents event is used only by the server application. As with attributes, a client application can use Apple Event Manager routines to add parameters to an Apple event, and a server application can use Apple Event Manager routines to extract and examine the parameters of an Apple event it has received.Note that Apple event parameters are different from the parameters of Apple Event Manager functions. Apple event parameters are records used by the Apple Event Manager; function parameters are arguments you pass to the function or that the function returns to you. You can specify both Apple event parameters and Apple event attributes in parameters to Apple Event Manager functions. For example, the AEGetParamPtr function uses a buffer to return the data contained in an Apple event parameter. You can specify the Apple event parameter whose data you want in one of the parameters of the AEGetParamPtr function.Apple Event AttributesApple events are identified by their event class and event ID attributes. The event class is the attribute that identifies a group of related Apple events. The event class appears in the message field of the event record for an Apple event. For example, the four required Apple events have the value 'aevt' in the message fields of their event records. The value 'aevt' can also be represented by the kCoreEventClass constant. Several event classes are shown here:Event class    Value    Description    kCoreEventClass    'aevt'    A required Apple event    kAECoreSuite    'core'    A core Apple event    kAEFinderEvents    'FNDR'    An event that the Finder accepts    kSectionEventMsgClass    'sect'    An event sent by the Edition Manager    The event ID is the attribute that identifies the particular Apple event within its event class. In conjunction with the event class, the event ID uniquely identifies the Apple event and communicates what action the Apple event should perform. (The event IDs appear in the where field of the event record for an Apple event. For more information about event records, see the chapter “Event Manager” in Inside Macintosh: Macintosh Toolbox Essentials.) For example, the event ID of an Open Documents event has the value 'odoc' (which can also be represented by the kAEOpenDocuments constant). The kCoreEventClass constant in combination with the kAEOpenDocuments constant identifies the Open Documents event to the Apple Event Manager.Here are the event IDs for the four required Apple events:Event ID    Value    Description    kAEOpenApplication    'oapp'    Perform tasks required when a user opens your application without opening or printing any documents    kAEOpenDocuments    'odoc'    Open documents    kAEPrintDocuments    'pdoc'    Print documents    kAEQuitApplication    'quit'    Quit your application    In addition to the event class and event ID attributes, every Apple event must include an attribute that specifies the target application’s address. Remember that the target application is the one addressed to receive the Apple event. Your application can send an Apple event to itself or to another application (on the same computer or on a remote computer connected to the network).Every Apple event must include event class, event ID, and target address attributes. Some Apple events can include other attributes; see “Keyword-Specified Descriptor Records,” which begins on page 3-15, for a complete list.Apple Event ParametersAs with attributes, there are various kinds of Apple event parameters. A direct parameter usually specifies the data to be acted upon by the target application. For example, the direct parameter of the Print Documents event contains a list of documents. Some Apple events also take additional parameters, which the target application uses in addition to the data specified in the direct parameter. Thus, an Apple event for arithmetic operations might include additional parameters that specify operands in an equation. The Apple Event Registry: Standard Suites describes all parameters as either required or optional. A required parameter is one that must be present for the target application to carry out the task denoted by the Apple event. An optional parameter is a supplemental Apple Event parameter that also can be used to specify data to the target application. Optional parameters need not be included in an Apple event; default values for optional parameters are part of the event definition. The target application that handles the event must supply default values if the optional parameters are omitted.  Direct parameters are usually defined as required parameters in the Apple Event Registry: Standard Suites; additional parameters may be defined as either required or optional. However, the Apple Event Manager does not enforce the definitions of required and optional events. Instead, the source application specifies, when it sends the event, which Apple event parameters the target can treat as if they were optional.For more information about optional parameters, see “Specifying Optional Parameters for an Apple Event,” which begins on page 5-7.Interpreting Apple Event Attributes and ParametersFigure 3-3 shows the major Apple event attributes and direct parameter for the Open Documents event introduced in Figure 3-1.Figure 3-3    Major attributes and direct parameter of an Open Documents eventWhen the SurfWriter application receives any high-level event, it calls the AEProcessAppleEvent function to process the event. For an Apple event such as the Open Documents event shown in Figure 3-3, the AEProcessAppleEvent function uses the event class and event ID attributes to dispatch the event to the SurfWriter application’s Open Documents handler. In response, the Open Documents handler opens the documents specified in the direct parameter. The definition of a given Apple event in the Apple Event Registry: Standard Suites suggests how the source application can organize the data in the Apple event’s parameters and how the target application interprets that data. The data in an Apple event parameter may use standard or private data types and may include a description of an Apple event object. Each Apple event handler provided by an application should be written with the format of the expected data in mind.Apple events can use standard data types, such as strings of text, long integers, Boolean values, and alias records, for the corresponding data in Apple event parameters. For example, the Get Data event can contain an optional parameter specifying the form in which the requested data should be returned. This optional parameter always consists of a list of four-character codes denoting desired descriptor types in order of preference. Apple events can also use special data types defined by the Apple Event Manager. Apple event parameters often contain descriptions of Apple event objects. These descriptions make use of a standard classification scheme summarized in “The Classification of Apple Event Objects,” which begins on page 3-39.For example, every Get Data event includes a required parameter that describes the Apple event object containing the data requested by the client application. Thus, one application can send a Get Data event to another application, requesting, for instance, one paragraph of a document, the first and last paragraphs of a document, all pictures in the document, all paragraphs containing the word “sales,” or pages 10 through 12 of the document. Figure 3-4 shows the Apple event attributes and direct parameter for the Get Data event introduced in Figure 3-2. The direct parameter for the Get Data event sent by the SurfCharter application describes the requested Apple event object as a table called “Summary of Sales” in the document “Sales Report.” Both the table and the document are Apple event objects. The description of an Apple event object always includes a description of its location. In most cases, Apple event objects are located inside other Apple event objects.Figure 3-4    Major attributes and direct parameter of a Get Data eventTo process the information in the Get Data event, the SurfWriter application calls the AEProcessAppleEvent function. The AEProcessAppleEvent function uses the event class and event ID attributes to dispatch the event to the SurfWriter application’s handler for the Get Data Apple event. The SurfWriter application responds to the Get Data event by resolving the description of the Apple event object—that is, by using the AEResolve function, other Apple Event Manager routines, and its own application-defined functions to locate the table named “Summary of Sales.” After locating the table, SurfWriter adds a copy of the table’s data to the reply event, which the Apple Event Manager then sends to the SurfCharter application. The SurfCharter application then displays the data in its active window.  The next section, “Data Structures Within Apple Events,” describes the data structures the Apple Event Manager uses for Apple event attributes and parameters. Data Structures Within Apple EventsThe Apple Event Manager constructs its own internal data structures to contain the information in an Apple event. Neither the sender nor the receiver of an Apple event should manipulate data directly after it has been added to an Apple event; each should rely on Apple Event Manager functions to do so. This section describes the most important data structures used by the Apple event Manager to construct Apple events. The first structure described is the descriptor record, a data structure of type AEDesc. Applications may access the data in an individual descriptor record directly if it is not part of another Apple Event Manager data structure. In some cases it is convenient for the Apple Event Manager to describe descriptor records by data types that indicate their contents; thus, it also defines data structures such as type AEAddressDesc, AEDescList, and AERecord, which are descriptor records used to hold addresses, lists of other descriptor records, and Apple event parameters, respectively. These and most of the other data structures described in this section are formally defined as data structures of type AEDesc; they differ only in the purposes for which they are used.Descriptor RecordsDescriptor records are the building blocks used by the Apple Event Manager to construct Apple event attributes and parameters. A descriptor record is a data structure of type AEDesc; it consists of a handle to data and a descriptor type that identifies the type of the data to which the handle refers.TYPE AEDesc = RECORD                                            {descriptor record}    descriptorType:                        DescType;                {type of data}    dataHandle:                         Handle        ;        {handle to data}END;If a descriptor record exists separately from other Apple Event Manager data structures, it is possible to retrieve the data associated with its handle by dereferencing the handle twice. After a descriptor record has been added to any other Apple Event Manager data structure, you must use Apple Event Manager routines to extract data from the descriptor record.The descriptor type is a structure of type DescType, which in turn is of data type ResType—that is, a four-character code. Constants are usually used in place of these four-character codes when referring to descriptor types. Descriptor types represent various data types. Here are some of the major descriptor type constants, their values, and the kinds of data they identify.Descriptor type    Value    Description of data    typeBoolean    'bool'    1-byte Boolean value    typeChar    'TEXT'    Unterminated string    typeLongInteger    'long'    32-bit integer    typeShortInteger    'shor'    16-bit integer    typeMagnitude    'magn'    Unsigned 32-bit integer    typeAEList    'list'    List of descriptor records    typeAERecord    'reco'    List of keyword-specified descriptor records    typeAppleEvent    'aevt'    Apple event record    typeEnumerated    'enum'    Enumerated data    typeType    'type'    Four-character code     typeFSS    'fss '    File system specification    typeKeyword    'keyw'    Apple event keyword    typeNull    'null'    Nonexistent data (handle whose value is NIL)    For a complete list of the basic descriptor types used by the Apple Event Manager, see Table 4-2 on page 4-57.Figure 3-5 illustrates the logical arrangement of a descriptor record with a descriptor type of typeChar, which specifies that the data handle refers to an unterminated string (in this case, the text “Summary of Sales”).Figure 3-5    A descriptor record whose data handle refers to an unterminated stringFigure 3-6 illustrates the logical arrangement of a descriptor record with a descriptor type of typeType, which specifies that the data handle refers to a four-character code (in this case the constant kCoreEventClass, whose value is 'aevt'). This descriptor record can be used in an Apple event attribute that identifies the event class for any Apple event in the Core suite. Figure 3-6    A descriptor record whose data handle refers to event class dataEvery Apple event includes an attribute specifying the address of the target application. A descriptor record that contains an application’s address is called an address descriptor record.TYPE        AEAddressDesc = AEDesc;                                        {address descriptor record}The address in an address descriptor record can be specified as one of these four basic types (or as any other descriptor type you define that can be coerced to one of these types):Descriptor type    Value    Description    typeApplSignature    'sign'    Application signature    typeSessionID    'ssid'    Session reference number    typeTargetID    'targ'    Target ID record    typeProcessSerialNumber    'psn '    Process serial number    Like several of the other data structures defined by the Apple Event Manager for use in Apple event attributes and Apple event parameters, an address descriptor record is identical to a descriptor record of data type AEDesc; the only difference is that the data for an address descriptor record must always consist of an application’s address.   Keyword-Specified Descriptor RecordsAfter the Apple Event Manager has assembled the necessary descriptor records as the attributes and parameters of an Apple event, your application cannot examine the contents of the Apple event directly. Instead, your application must use Apple Event Manager routines to request each attribute and parameter by keyword. Keywords are arbitrary names used by the Apple Event Manager to keep track of various descriptor records. The AEKeyword data type is defined as a four-character code.TYPE        AEKeyword = PACKED ARRAY[1..4] OF Char;                                                     {keyword for a }                                                             { descriptor record}Constants are typically used for keywords. Here is a list of the keyword constants for Apple event attributes:Attribute keyword    Value    Description    keyAddressAttr     'addr'    Address of target or client application      keyEventClassAttr     'evcl'    Event class of Apple event     keyEventIDAttr    'evid'    Event ID of Apple event     keyEventSourceAttr    'esrc'    Nature of the source application    keyInteractLevelAttr    'inte'    Settings for allowing the Apple Event Manager to bring a server application to the foreground, if necessary, to interact with the user     keyMissedKeywordAttr    'miss'    Keyword for first required parameter remaining in an Apple event     keyOptionalKeywordAttr    'optk'    List of keywords for parameters of the Apple event that should be treated as optional by the target application    keyOriginalAddressAttr    'from'    Address of original source of Apple event if the event has been forwarded (available only in version 1.01 or later versions of the Apple Event Manager)      keyReturnIDAttr     'rtid'    Return ID for reply Apple event     keyTimeoutAttr    'timo'    Length of time, in ticks, that the client will wait for a reply or a result from the server     keyTransactionIDAttr    'tran'    Transaction ID identifying a series of Apple events      Here is a list of the keyword constants for commonly used Apple event parameters:Parameter keyword    Value    Description    keyDirectObject    '----'    Direct parameter     keyErrorNumber    'errn'    Error number parameter    keyErrorString    'errs'    Error string parameter    The Apple Event Registry: Standard Suites defines additional keyword constants for Apple event parameters that can be used with specific Apple events. The Apple Event Manager associates keywords with specific descriptor records by means of a keyword-specified descriptor record, a data structure of type AEKeyDesc that consists of a keyword and a descriptor record. TYPE        AEKeyDesc =     {keyword-specified descriptor record}RECORD    descKey:                    AEKeyword;                    {keyword}    descContent:                    AEDesc;                    {descriptor record}END;Figure 3-7 illustrates a keyword-specified descriptor record with the keyword keyEventClassAttr—the keyword that identifies an event class attribute. The figure shows the logical arrangement of the event class attribute for the Open Documents event shown in Figure 3-3 on page 3-10. The descriptor record in Figure 3-7 is identical to the one in Figure 3-6; its descriptor type is typeType, and the data to which its handle refers identifies the event class as kCoreEventClass. Figure 3-7    A keyword-specified descriptor record for the event class attribute of an Open Documents eventDescriptor ListsWhen extracting data from an Apple event, you use Apple Event Manager functions to copy data to a buffer specified by a pointer, or to return a descriptor record whose data handle refers to a copy of the data, or to return lists of descriptor records (called descriptor lists). As previously noted, the descriptor record (of data type AEDesc) is the fundamental structure in Apple events, and it consists of a descriptor type and a handle to data. A descriptor list is a data structure of type AEDescList defined by the data type AEDesc—that is, a descriptor list is a descriptor record whose data handle refers to a list of other descriptor records (unless it is an empty list).TYPE        AEDescList = AEDesc;                                    {list of descriptor records}Like several other Apple Event Manager data structures, a descriptor list is identical to a descriptor record of data type AEDesc; the only difference is that the data in a descriptor list must always consist of a list of other descriptor records. Figure 3-8 illustrates the logical arrangement of the descriptor list that specifies the direct parameter of the Open Documents event shown in Figure 3-3 on page 3-10. This descriptor list consists of a list of descriptor records that contain alias records to filenames. (See the chapter “Alias Manager” in Inside Macintosh: Files for a detailed description of alias records.)Figure 3-8    A descriptor list for a list of aliasesThe descriptor list in Figure 3-8 provides the data for a keyword-specified descriptor record. Keyword-specified descriptor records for Apple event parameters can in turn be combined in an AE record, which is a descriptor list of data type AERecord.TYPE        AERecord = AEDescList;                                        {list of keyword-specified }                                                { descriptor records}The handle for a descriptor list of data type AERecord refers to a list of keyword-specified descriptor records that can be used to construct Apple event parameters. The Apple Event Manager provides routines that allow your application to create AE records and extract data from them when creating or responding to Apple events. An AE record has the descriptor type typeAERecord and can be coerced to several other descriptor types. An Apple event record, which is different from an AE record, is another special descriptor list of data type AppleEvent and descriptor type typeAppleEvent.TYPE        AppleEvent = AERecord;                                        {list of attributes and     }                                                { parameters necessary for }                                                { an Apple event}An Apple event record describes a full-fledged Apple event. Like the data for an AE record, the data for an Apple event record consists of a list of keyword-specified descriptor records. Unlike an AE record, the data for an Apple event record is divided into two parts, one for attributes and one for parameters. This division within the Apple event record allows the Apple Event Manager to distinguish between an Apple event’s attributes and its parameters. Descriptor lists, AE records, and Apple event records are all descriptor records whose handles refer to a nested list of other descriptor records. The data associated with each data type may be organized differently and is used by the Apple Event Manager for different purposes. In each case, however, the data is identified by a handle in a descriptor record. This means that you can pass an Apple event record to any Apple Event Manager function that expects an AE record. Similarly, you can pass Apple event records and AE records, as well as descriptor lists and descriptor records, to any Apple Event Manager functions that expect records of data type AEDesc.When you use the AECreateAppleEvent function, the Apple Event Manager creates an Apple event record containing the attributes for an Apple event’s event class, event ID, target address, return ID, and transaction ID. You then use Apple Event Manager functions such as AEPutParamDesc and AEPutAttributeDesc to add or modify attributes and to add any necessary parameters to the Apple event. Figure 3-9 shows an example of a complete Apple event—a data structure of type AppleEvent containing a list of keyword-specified descriptor records that name the attributes and parameters of an Open Documents event. The figure includes the event class attribute shown in Figure 3-7 and the descriptor list shown in Figure 3-8, which forms the direct parameter—the keyword-specified descriptor record with the keyword keyDirectObject. The entire figure corresponds to the Open Documents event shown in Figure 3-3 on page 3-10.The next two sections, “Responding to Apple Events” and “Creating and Sending Apple Events,” provide a quick overview of the steps your application must take to respond to and send Apple events.Figure 3-9    Data structures within an Open Documents eventResponding to Apple EventsA client application typically uses the Apple Event Manager to create and send an Apple event requesting a service or information. A server application responds by using the Apple Event Manager to process the Apple event, extract data from the attributes and parameters of the Apple event, and if necessary add requested data to the reply event returned by the Apple Event Manager to the client application. The server usually provides its own Apple event handler for performing the action requested by the client’s Apple event. As its first step in supporting Apple events, your application should support the required Apple events sent by the Finder. If you plan to implement publish and subscribe capabilities, your application must also respond to the Apple events sent by the Edition Manager. Your application should also be able to respond to the standard Apple events that other applications are likely to send to it or that it can send to itself. This section provides a quick overview of the tasks your application must perform in responding to Apple events.To respond to Apple events, your application mustn    set the appropriate flags in its 'SIZE' resourcen    test for high-level events in its event loopn    provide Apple event handlers for the Apple events it supportsn    use the AEInstallEventHandler function to install its Apple event handlersn    use the AEProcessAppleEvent function to process Apple eventsBefore your application can respond to Apple events sent from remote computers, the user of your application must allow network users to link to your application. To do this, the user selects your application in the Finder, chooses Sharing from the File menu, and then clicks the Allow Remote Program Linking checkbox. If the user has not yet started program linking, the Sharing command offers to display the Sharing Setup control panel so that the user can start program linking. The user must also authorize remote users for program linking by using the Users & Groups control panel. Program linking and setting up authenticated sessions are described in the chapter “Program-to-Program Communications Toolbox” in this book.Accepting and Processing Apple EventsTo accept or send Apple events (or any other high-level events), you must set the appropriate flags in your application’s 'SIZE' resource and include code to handle high-level events in your application’s main event loop. Two flags in the 'SIZE' resource determine whether an application receives high-level events: n    The isHighLevelEventAware flag must be set for your application to receive any high-level events.n    The localAndRemoteHLEvents flag must be set for your application to receive high-level events sent from another computer on the network.An Apple event (like all high-level events) is identified by a message class of kHighLevelEvent in the what field of the event record. You test the what field of the event record to determine whether it contains the value represented by the kHighLevelEvent constant; if your application defines any high-level events other than Apple events, you should also test the message field of the event record to determine whether the high-level event is something other than an Apple event. If the high-level event is not one that you’ve defined for your application, assume that it is an Apple event. (You are encouraged to use Apple events instead of defining your own high-level events whenever possible.)After determining that an event is an Apple event, use the AEProcessAppleEvent function to let the Apple Event Manager identify the event. Figure 3-10 shows how the SurfWriter application accepts and begins to process an Apple event sent by the Finder.Figure 3-10    Accepting and processing an Open Documents eventThe AEProcessAppleEvent function first identifies the Apple event by examining the data in the event class and event ID attributes. The function then uses that data to call the Apple event handler that your application provides for that event. The Apple event handler extracts the pertinent data from the Apple event, performs the requested action, and returns a result. For example, if the event has an event class of kCoreEventClass and an event ID of kAEOpenDocuments, the AEProcessAppleEvent function calls your application’s handler for the Open Documents event. Before your application attempts to accept or process any Apple events, it must use the AEInstallEventHandler function to install Apple event handlers. This function installs handlers in an Apple event dispatch table for your application; the Apple Event Manager uses this table to map Apple events to handlers in your application. When your application calls the AEProcessAppleEvent function to process an Apple event, the Apple Event Manager checks the Apple event dispatch table and, if your application has installed a handler for that Apple event, calls that handler. Figure 3-11 shows how the flow of control passes from your application to the Apple Event Manager and back to your application.Figure 3-11    The Apple Event Manager calling the handler for an Open Documents eventAbout Apple Event HandlersYour Apple event handlers must generally perform the following tasks:n    extract the parameters and attributes from the Apple eventn    check that all the required parameters have been extractedn    locate any Apple event objects specified by object specifier records in the Apple event parametersn    if your application needs to interact with the user, use the AEInteractWithUser function to bring it to the foregroundn    perform the action requested by the Apple eventn    dispose of any copies of descriptor records that have been createdn    add information to the reply Apple event if requestedThis section describes how your application’s Apple event handlers can use the Apple Event Manager to accomplish some of these tasks. The chapter “Responding to Apple Events” in this book provides detailed information about handling Apple events and interacting with the user.Extracting and Checking DataYou must use Apple Event Manager functions to extract the data from Apple events. You can also use Apple Event Manager functions to extract data from descriptor records, descriptor lists, and AE records. Most of these routines are available in two forms: they either return a copy of the data in a buffer or return a copy of the descriptor record for the data, including a copy of the data. The following list shows the main functions you can use to access the data of an Apple event:Function    Description(continued)    AEGetParamPtr    Uses a buffer to return a copy of the data contained in an Apple event parameter. Usually used to extract data of fixed length or known maximum length; for example, to extract the result code from the keyErrorNumber parameter of a reply Apple event.    AEGetParamDesc    Returns a copy of the descriptor record or descriptor list for an Apple event parameter. Usually used to extract data of variable length; for example, to extract the descriptor list for a list of alias records specified in the direct parameter of the Open Documents event.    AEGetAttributePtr    Uses a buffer to return a copy of the data contained in an Apple event attribute. Used to extract data of fixed length or known maximum length; for example, to determine the source of an Apple event by extracting the data from the keyEventSourceAttr attribute.        continued    AEGetAttributeDesc    Returns a copy of the descriptor record for an attribute. Used to extract data of variable length; for example, to make a copy of a descriptor record containing the address of an application.    AECountItems    Returns the number of descriptor records in a descriptor list. Used, for example, to determine the number of alias records for documents specified in the direct parameter of the Open Documents event.    AEGetNthPtr    Uses a buffer to return a copy of the data for a descriptor record contained in a descriptor list. Used to extract data of fixed length or known maximum length; for example, to extract the name and location of a document from the descriptor list specified in the direct parameter of the Open Documents event.    AEGetNthDesc    Returns a copy of a descriptor record from a descriptor list. Used to extract data of variable length; for example, to get the descriptor record containing an alias record from the list specified in the direct parameter of the Open Documents event.    You can specify the descriptor type of the resulting data for these functions; if this type is different from the descriptor type of the attribute or parameter, the Apple Event Manager attempts to coerce it to the specified type. In the direct parameter of the Open Documents event, for example, each descriptor record in the descriptor list is an alias record; each alias record specifies a document to be opened. As explained in the chapter “Introduction to File Management” of Inside Macintosh: Files, all your application usually needs is the file system specification (FSSpec) record of the document. When you extract the descriptor record from the descriptor list, you can request that the Apple Event Manager return the data to your application as a file system specification record instead of an alias record.After extracting all known Apple event parameters, your handler should check that it retrieved all the parameters that the source application considered to be required. To do so, determine whether the keyMissedKeywordAttr attribute exists. If so, your handler has not retrieved all the required parameters, and it should return an error.Although the Apple Event Registry: Standard Suites defines Apple event parameters as either required or optional, the Apple Event Manager does not enforce the definitions of required and optional events. Instead, the source application specifies, when it sends the event, which Apple event parameters the target can treat as if they were optional. For more information about optional parameters, see “Specifying Optional Parameters for an Apple Event,” which begins on page 5-7.If any of the Apple event parameters include object specifier records, your handler should use the AEResolve function, other Apple Event Manager routines, and your own application-defined functions to locate the corresponding Apple event objects. For more information about locating Apple event objects, see “Working With Object Specifier Records,” which begins on page 3-32.Interacting With the UserIn some cases, the server may need to interact with the user when it handles an Apple event. For example, your handler for the Print Documents event may need to display a print options dialog box and get settings from the user before printing. By specifying flags to the AESetInteractionAllowed function, you can set preferences to allow user interaction with your application (a) only when your application is sending the Apple event to itself, (b) only when the client application is on the same computer as your application, or (c) for any event sent by any client application on any computer. In addition, your handler should always use the AEInteractWithUser function before displaying a dialog box or alert box or otherwise interacting with the user. The AEInteractWithUser function determines whether user interaction can occur and takes appropriate action depending on the circumstances.Both the client and server specify their preferences for user interaction: the client specifies whether the server should be allowed to interact with the user, and the server specifies when it allows user interaction while processing an Apple event. The Apple Event Manager does not allow a server application to interact with the user in response to a client application’s Apple event unless at least two conditions are met: First, the client application must set flags in the sendMode parameter of the AESend function indicating that user interaction is allowed. Second, the server application must either set no user interaction preferences, in which case AEInteractWithUser assumes that only interaction with a client on the local computer is allowed; or it must set flags to the AESetInteractionAllowed function indicating that user interaction is allowed. If these two conditions are met and if AEInteractWithUser determines that both the client and server applications allow user interaction under the current circumstances, AEInteractWithUser brings your application to the foreground if it isn’t already in the foreground. Your application can then display its dialog box or alert box or otherwise interact with the user. The AEInteractWithUser function brings your server application to the front either directly or after the user responds to a notification request.For detailed information about how to specify flags to the AESetInteractionAllowed function and how the Apple Event Manager determines whether user interaction is allowed, see the section “Interacting With the User,” which begins on page 4-45.Performing the Requested Action and Returning a ResultWhen your application responds to an Apple event, it should perform the standard action requested by that event. For example, your application should respond to the Open Documents event by opening the specified documents in titled windows just as if the user had selected each document from the Finder and then chosen Open from the File menu. Many Apple events can ask your application to return data. For instance, if your application is a spelling checker, the client application might expect your application to return data in the form of a list of misspelled words. Figure 3-14 on page 3-38 shows a similar example: a Get Data event that asks the server application to locate a specific Apple event object and return the data associated with it. If the client application requests a reply, the Apple Event Manager prepares a reply Apple event by passing a default reply Apple event to your handler. If the client application does not request a reply, the Apple Event Manager passes a null descriptor record—that is, a descriptor record of type typeNull whose data handle has the value NIL—to your handler instead of a default reply Apple event. The default reply Apple event has no parameters when it is passed to your handler, but your handler can add parameters to it. If your application is a spelling checker, for example, you can return a list of misspelled words in a parameter. However, your handler should check whether the reply Apple event exists before attempting to add any attributes or parameters to it. Any attempt to add an Apple event attribute or parameter to a null descriptor record generates an error. When you extract a descriptor record using the AEGetParamDesc, AEGetAttributeDesc, AEGetNthDesc, or AEGetKeyDesc function, the Apple Event Manager creates a copy of the descriptor record for you to use. When your handler is finished using a copy of a descriptor record, you should dispose of it—and thereby deallocate the memory used by its data—by calling the AEDisposeDesc function.NoteOutputs from functions such as AEGetKeyPtr and other routines whose names end in -Ptr use a buffer rather than a descriptor record to return data. Because these functions don’t require the use of AEDisposeDesc, it is preferable to use them for any data that is not identified by a handle.uYour Apple event handler should always set its function result either to noErr if it successfully handles the Apple event or to a nonzero result code if an error occurs. If your handler returns a nonzero result code, the Apple Event Manager adds a keyErrorNumber parameter to the reply Apple event (unless you have already added a keyErrorNumber parameter). This parameter contains the result code that your handler returns. The client should check whether the keyErrorNumber parameter exists to determine whether your handler performed the requested action. In addition to returning a result code, your handler can also return an error string in the keyErrorString parameter of the reply Apple event. The client can use this string in an error message to the user.If the client application requested a reply, the Apple Event Manager returns the reply Apple event, which is identified by the event class kCoreEventClass and by the event ID kAEAnswer. When the client has finished using the reply Apple event, it should dispose of both the reply event and the original event—and thereby deallocate the memory they use—by calling the AEDisposeDesc function. The Apple Event Manager takes care of disposing both the Apple event and the reply Apple event after a server application’s handler returns to AEProcessAppleEvent, but a server application is responsible for disposing of any Apple event data structures it creates while extracting data from the Apple event.Figure 3-12 shows the entire process of responding to an Apple event. Figure 3-12    Responding to an Open Documents event  When your handler returns a result code to the Apple Event Manager, you have finished your response to the client application’s Apple event.Creating and Sending Apple EventsYour application can use Apple events to request services or information from other applications, send information to other applications, or trigger actions within your application. For example, you can use the core Apple event Get Data to request specific data from another application’s documents. Similarly, you can use other Apple events to request services—for example, asking a spell-checking application to check the text in a document created by your application. Consult the Apple Event Registry: Standard Suites for the format and function of the standard Apple events that you want your application to send. To communicate with another application by sending an Apple event, your application mustn    set the appropriate flags in its 'SIZE' resourcen    create an Apple event record by calling the AECreateAppleEvent functionn    use Apple Event Manager functions to add parameters and any additional attributes to the Apple eventn    call the AESend function to send the Apple eventn    dispose of any copies of descriptor records that you have createdn    handle the reply Apple event (if necessary)The sections that follow describe how your application can use the Apple Event Manager to accomplish these tasks. The chapter “Creating and Sending Apple Events” in this book provides detailed information about creating and sending Apple events.To act as a server for your application, the target application must support high-level events and must be running. The server can be your own application, another application running on the user’s computer, or an application running on another user’s computer connected to the network. Your application should also allow the user to choose among the various applications available as servers. The PPCBrowser function allows users to select target applications on their own computers or on computers connected to the network. The PPCBrowser function presents a standard user interface for choosing a target application, much as the Standard File Package provides a standard user interface for opening and saving files. See the chapter “Program-to-Program Communications Toolbox” in this book for details on using the PPCBrowser function.If the server application is on a remote computer on a network, the user of that computer must allow program linking to the server application. The user of the server application does this by selecting the application icon in the Finder, choosing Sharing from the File menu, then clicking the Allow Remote Program Linking checkbox. If the user has not yet started program linking, the Sharing command offers to display the Sharing Setup control panel so that the user can start program linking. The user must also authorize remote users for program linking by using the Users & Groups control panel. Program linking and setting up authenticated sessions are described in the chapter “Program-to-Program Communications Toolbox” in this book.Creating an Apple Event RecordUse the AECreateAppleEvent function to create an Apple event record. Using the arguments you pass to the AECreateAppleEvent function, the Apple Event Manager constructs the data structures describing the event class, the event ID, and the target address attributes of an Apple event. The event class and event ID, of course, identify the particular event you wish to send. The target address identifies the intended recipient of the Apple event.You can specify two other attributes with the AECreateAppleEvent function: the reply ID and the transaction ID. For the reply ID attribute, you usually specify the kAutoGenerateReturnID constant to the AECreateAppleEvent function. This constant ensures that the Apple Event Manager generates a unique return ID for the reply Apple event returned from the server. For the transaction ID attribute, you usually specify the kAnyTransactionID constant, which indicates that this Apple event is not one of a series of interdependent Apple events.Adding Apple Event Attributes and ParametersThe Apple event record created with the AECreateAppleEvent function serves as a foundation for the Apple event you want to send. Descriptor records and descriptor lists are the building blocks from which the complete Apple event record is constructed. To create descriptor records and descriptor lists and add items to a descriptor list, use the following functions:Function    Description    AECreateDesc    Takes a descriptor type and a pointer to data and converts them into a descriptor record    AECreateList    Creates an empty descriptor list or AE record.    AEPutPtr    Takes a descriptor type and a pointer to data and adds the data to a descriptor list as a descriptor record; used, for example, to add to a descriptor list a number used as the parameter of an Apple event requesting a calculation.    AEPutDesc    Adds a descriptor record to a descriptor list; used, for example, to add to a descriptor list an alias record used as the direct parameter of an Apple event requesting file manipulation.    To add the remaining attributes and parameters necessary for your Apple event to the Apple event record, you can use these additional Apple Event Manager functions:Function    Description    AEPutParamPtr    Takes a keyword, descriptor type, and pointer to data and adds the data to an Apple event record as a parameter with the specified keyword (replacing any existing parameter with the same keyword); used, for example, to put numbers into the parameters of an Apple event that asks the server to perform a calculation.    AEPutParamDesc    Takes a keyword and a descriptor record and adds the descriptor record to an Apple event record as a parameter with the specified keyword (replacing any existing parameter with the same keyword); used, for example, to place a descriptor list containing alias records into the direct parameter of an Apple event that requests a server to manipulate files.    AEPutAttributePtr    Takes a keyword, descriptor type, and pointer to data and adds the descriptor record to an Apple event record as an attribute with the specified keyword (replacing any existing attribute with the same keyword); used, for example, to change the transaction ID of an Apple event record that is waiting to be sent.     AEPutAttributeDesc    Takes a keyword and a descriptor record and adds the descriptor record to an Apple event record as an attribute with the specified keyword (replacing any existing attribute with the same keyword); used, for example, to replace the descriptor record used for the target address attribute in an Apple event record waiting to be sent.    Apple event parameters for core events and functional-area events can include descriptions of Apple event objects in special descriptor records called object specifier records. For an overview of object specifier records, see “Working With Object Specifier Records,” which begins on page 3-32.Sending an Apple Event and Handling the ReplyAfter you add all the attributes and parameters required for the Apple event, use the AESend function to send the Apple event. The Apple Event Manager uses the Event Manager to transmit the Apple event to the server application.The AESend function requires that you specify whether your application should wait for a reply from the server. If you specify that you want a reply, the Apple Event Manager prepares a reply Apple event for your application by passing a default reply Apple event to the server. The Apple Event Manager returns any nonzero result code from the server’s handler in the keyErrorNumber parameter of the reply Apple event. The server can return an error string in the keyErrorString parameter of the reply Apple event. The server can also use the reply Apple event to return any data you requested—for example, the results of a numeric calculation or a list of misspelled words.You specify how your application should wait for a reply by using one of these flags in the sendMode parameter of the AESend function:Flag    Description    kAENoReply    Your application does not want a reply Apple event.    kAEQueueReply    Your application wants a reply Apple event; the reply appears in your event queue as soon as the server has the opportunity to process and respond to your Apple event.    kAEWaitReply    Your application wants a reply Apple event and is willing to give up the processor while waiting for the reply; for example, if the server application is on the same computer as your application, your application yields the processor to allow the server to respond to your Apple event.    If you specify the kAEWaitReply flag, you should provide an idle function. This function should process any non-high-level events that occur while your application is waiting for a reply. You supply a pointer to your idle function as a parameter to the AESend function. So that your application can process other Apple events while it is waiting for a reply, you can also specify an optional filter function to the AESend function.If you specify the kAENoReply flag, the reply Apple event prepared by the Apple Event Manager for the server application consists of a null descriptor record.If your Apple event may require the user to interact with the server application (for example, to specify print or file options), you can communicate your user interaction preferences to the server by specifying additional flags in the sendMode parameter of the AESend function. These flags specify the conditions, if any, under which the server application can interact with the user and, if interaction is allowed, whether the server should come directly to the foreground or post a notification request.The server application specifies its own preferences for user interaction by specifying flags to the AESetInteractionAllowed function, as described in the previous section. The interaction of the client and server applications’ preferences is explained in detail in “Interacting With the User,” which begins on page 4-45.After you send an Apple event, your application is responsible for disposing of the Apple event record—and thereby deallocating the memory its data uses—by calling the AEDisposeDesc function. If you create one descriptor record and add it to another, the Apple Event Manager adds a copy of the newly created one to the existing one and also makes a copy of the associated data. For example, you might use the AECreateDesc function to create a descriptor record that you wish to add to an Apple event. When you use the AEPutParamDesc function, it adds a copy of your newly created descriptor record, including its data, as a parameter to an existing Apple event. When you no longer need the original descriptor record, you should call AEDisposeDesc to dispose of it.Your application should dispose of all the descriptor records that are created for the purposes of adding parameters and attributes to an Apple event. You normally dispose of your Apple event and its reply after you receive a result from the AESend function. You should dispose of these even if AESend returns an error result. If you specify the kAEWaitReply flag, the reply Apple event is returned in a parameter you pass to the AESend function. If you specify the kAEQueueReply flag to the AESend function, the reply Apple event is returned in the event queue. In this case, the reply is identified by the event class kCoreEventClass and the event ID kAEAnswer. Your application processes reply events in its event queue in the same way that server applications process Apple events. Your application should check for the existence of the keyErrorNumber parameter of the reply Apple event to ensure that the server performed the requested action. The server can also return, in the keyErrorString parameter, any error messages you need to display to the user.Whenever a server application provides an error string, it should also provide an error number. However, you can’t count on all server applications to do so. The absence of the keyErrorNumber parameter doesn’t necessarily mean that there won’t an error string provided in the keyErrorString parameter. A client application should therefore check for both the keyErrorNumber and keyErrorString parameters before assuming that no error has occurred. If a string has been provided without an error number, an error has occurred. After extracting the information it needs from the reply event, your handler should dispose of the reply by calling the AEDisposeDesc function. Similarly, when your handler no longer needs descriptor records it has extracted from the reply, it should call AEDisposeDesc to dispose of them.The next section provides an overview of the way a source application identifies Apple event objects supported by a target application. If you are starting by supporting only the Required suite and the Apple events sent by the Edition Manager, you can skip the next section and go directly to “About the Apple Event Manager,” which begins on page 3-48. Working With Object Specifier RecordsMost of the standard Apple events allow the source application to refer, in an Apple event parameter, to Apple event objects within the target application or its documents. The Apple Event Manager allows applications to construct and interpret such references by means of a standard classification system for Apple event objects. This system, described in detail in the Apple Event Registry: Standard Suites, is summarized in “The Classification of Apple Event Objects,” which begins on page 3-39. A description in an Apple event parameter that uses this classification system takes the form of an object specifier record.An object specifier record is a descriptor record of descriptor type typeObjectSpecifier that describes the location of one or more Apple event objects: for example, the table “Summary of Sales” in the document “Sales Report,” or the third row in that table, or the last row of the column “Totals.” With the aid of application-defined functions, the Apple Event Manager can conduct a step-by-step search according to such instructions in an object specifier record, locating first the document, then the table, then other objects, and so on until the requested object has been identified. Object specifier records can specify many combinations of identifying characteristics that cannot be specified using one of the simple data types. This section introduces object specifier records and the organization of their data. You need to read this section (a) if you plan to support the Core suite or any of the standard functional-area suites and (b) if you want to make your application scriptable—that is, capable of responding to scripts written in a scripting language.IMPORTANTAn object specifier record identifies one or more Apple event objects among many; it contains a description of each object, not the object itself. An Apple event object described by an object specifier record exists only in the server application’s document or in the server application itself.sA client application cannot retrieve an Apple event object from a server application unless the server application can accurately locate it. Thus, to locate characters of a specific color, a server application must be able to identify a single character’s color; to locate a character in a cell, a server application must be able to locate both the table and the cell.A client application can create object specifier records for use as Apple event parameters. Scripting components can also create object specifier records as Apple event parameters for the Apple events they generate in the course of executing a script. A server application that receives an Apple event containing an object specifier record should resolve the object specifier record—that is, locate the requested Apple event objects. To respond to core and functional-area Apple events received by your application, you must first define a hierarchy of Apple event objects for your application that you want other applications or scripting languages to be able to describe. The Apple event objects for your application should be based as closely as possible on the standard object classes described by the Apple Event Registry: Standard Suites. After you have decided which of the standard Apple event objects make sense for your application, you can write functions that locate objects on the basis of information in an object specifier record. If you want your application to send specific Apple events to other applications, you must also write functions that can create object specifier records and add them to Apple events. Your application does not need to create object specifier records in order to be scriptable. However, to write functions that can help the Apple Event Manager resolve object specifier records, you need to know how they are constructed. “Finding Apple Event Objects,” which begins on page 3-46, provides an overview of the way the Apple Event Manager works with your application-defined functions to locate the Apple event objects described in an object specifier record. The chapter “Resolving and Creating Object Specifier Records” in this book describes in detail how to support object specifier records as a server or client application. Data Structures Within an Object Specifier RecordThe organization of the data for an object specifier record is nearly identical to that of the data for an AE record. An object specifier record is a structure of data type AEDesc whose data handle usually refers to four keyword-specified descriptor records describing one or more Apple event objects. An AE record is a structure of data type AERecord whose data handle refers to one or more Apple event parameters.The four keyword-specified descriptor records for an object specifier record provide information about the requested Apple event object or objects.Keyword    Description of data    keyAEDesiredClass    Four-character code indicating the object class ID    keyAEContainer    A description of the container for the requested object, usually in the form of another object specifier record    keyAEKeyForm    Four-character code for the key form, which indicates how to interpret the key data    keyAEKeyData    Key data, used to distinguish the desired Apple event object from other objects of the same object class in the same container    For example, the data for an object specifier record identifying a table named “Summary of Sales” in a document named “Sales Report” consists of four keyword-specified descriptor records that provide the following information:n    the object class ID for a tablen    another object specifier record identifying the document “Sales Report” as the container for the tablen    a key form constant indicating that the key data contains a namen    key data that consists of the string “Summary of Sales”The object class ID specifies the Apple event object class to which the object belongs. An Apple event object class is a category for Apple event objects that share specific characteristics (see “Apple Events and Apple Event Objects” on page 3-6). The characteristics of each object class are listed in the Apple Event Registry: Standard Suites. For example, the Core suite defines object classes for documents, paragraphs, words, windows, and floating windows. The first keyword-specified descriptor record in an object specifier record uses a four-character code or a constant to specify the object class ID. The object class for words, for example, can be identified by either the object class ID 'cwor' or the constant cWord. NoteThe object class ID identifies the object class of an Apple event object described in an object specifier record, whereas the event class and event ID identify an Apple event.uThe container for an Apple event object is usually another Apple event object. For example, the container for a document might be a window, and the container for characters, delimited items, or a word might be another word, a paragraph, or a document. The container is identified by the second keyword-specified descriptor record in an object specifier record; usually this is another object specifier record. The container can also be specified by a null descriptor record, which indicates a default container or a container already known to the Apple Event Manager.The descriptor record in an object specifier record that identifies an Apple event object’s container can in turn use another object specifier record to identify the container’s container, and so on until the Apple event object is fully specified. For example, an object specifier record identifying a paragraph might specify the paragraph’s container with another object specifier record that identifies a page. That object specifier record might in turn specify the page’s container with another object specifier record identifying a document. The ability to nest one object specifier record within another in this way makes it possible to identify elements such as “the first row in the table named ‘Summary of Sales’ in the document named ‘Sales Report.’” The key form and key data distinguish the desired Apple event object from other Apple event objects of the same object class. The key form describes the form the key data takes. The third keyword-specified descriptor record in an object specifier record usually specifies the key form with one of seven standard constants:Key form    Value    Corresponding key data    formPropertyID    'prop'    Property ID for an element’s property    formName    'name'    Element’s name    formUniqueID    'ID  '    A value that uniquely identifies an object within its container or across an application    formAbsolutePosition    'indx'    An integer or other constant indicating the position of one or more elements in relation to the beginning or end of their container    formRelativePosition    'rele'    A constant that specifies the element just before or after the container    formTest    'test'    Descriptor records that specify a test    formRange    'rang'    Descriptor records that specify a group of elements between two other elements     A key form of formPropertyID indicates key data that specifies a property. A property of an Apple event object is a specific characteristic of that object that can be identified by a constant. The properties associated with the object class for documents include the name of the document and a flag indicating whether the document has been modified since the last save. The properties associated with the object class for words include color, font, point size, and style.Figure 3-13 shows the structure of a typical object specifier record: four keyword-specified descriptor records that specify the class ID, the container, the key form, and the key data. These four keyword-specified descriptor records are the data for a descriptor record (AEDesc) of descriptor type typeObjectSpecifier. Note the similarities between the object specifier record shown in Figure 3-13 and the Apple event record shown in Figure 3-9 on page 3-19. Like an Apple event record or an AE record, an object specifier record consists of a list of keyword-specified descriptor records. Figure 3-13 shows the structure of a simple object specifier record that specifies the key form formPropertyID, formName, or formAbsolutePosition. For detailed information about the structure of object specifier records that specify the other key forms, see the chapter “Resolving and Creating Object Specifier Records” in this book. Figure 3-13    Data structures within a simple object specifier recordFigure 3-14 shows the object specifier record for the Get Data event previously illustrated in Figure 3-4 on page 3-11. The object class ID tells the SurfWriter application that the requested data is an element of class cTable. The container for the table is the document “Sales Report.” The key form is formName, which tells the server application that the key data identifies the Apple event object by name. The key data is the name of the table.Figure 3-14    An object specifier record in a Get Data eventTo add an object specifier record to an Apple event as one of its parameters, your application must first create the object specifier record. “Creating Object Specifier Records,” which begins on page 6-55, describes the Apple Event Manager routines for creating object specifier records.To respond to Apple events that include object specifier records, your application should use the standard classification system for Apple event objects and provide functions that can locate those objects within your application or its documents. The next section summarizes the classification of Apple event objects as defined in the Apple Event Registry: Standard Suites. The Classification of Apple Event ObjectsTo create or resolve object specifier records, your application should use the classification of Apple event objects defined by the Apple Event Registry: Standard Suites. This section summarizes the concepts that underlie that classification system. You should have a copy of the Apple Event Registry: Standard Suites available for reference purposes while you read this section.You do not need to write your application in an object-oriented programming language in order to support Apple event objects in your application. However, you must understand the classification system described in this section in order to classify Apple event objects in your application and to write routines that can locate them on the basis of information contained in object specifier records.Object ClassesExcept for the concept of inheritance, Apple event objects are different from the objects used in object-oriented programming languages. Apple event objects are distinct items in a server application or any of its documents that can be specified by an object specifier record in an Apple event sent by a client application. Apple event objects are often, but not always, items that a user can differentiate and manipulate within an application, such as words, paragraphs, shapes, windows, or style formats. Every Apple event object can be classified according to its object class, which defines both its characteristics and its behavior. The object classes listed in the Apple Event Registry: Standard Suites provide a method of describing Apple event objects that all applications can understand. Object classes permit more flexibility than simple descriptor types; for example, a word can be defined as a simple string, or it can be defined as an Apple event object with specific characteristics such as font or style.NoteThe definition of an object class only specifies conventions that determine how applications should handle Apple event objects that belong to that class. Your application must make sure that it uses the conventions correctly; they are not enforced by the Apple Event Manager.uEach object class is identified by a four-character object class ID, which can also be represented by a constant. Constants for object classes always begin with the letter c. The definition of an object class specifies its superclass, which is the object class from which a subclass (the class being defined) inherits some of its characteristics. Characteristics can also be inherited from special object classes, called abstract superclasses, that are used only in definitions of object classes and do not refer to real Apple event objects. The pattern of inheritance among object classes is called the object class inheritance hierarchy. Figure 3-15 shows a portion of this hierarchy. The abstract superclass cObject is at the top of the hierarchy and is therefore the only object class that has no superclass. At the next level are cText, which is a regular object class, and cOpenableObject, which is an abstract superclass. Both are subclasses of cObject and superclasses for their own subclasses. The object classes cWord, cItem, and cChar are all subclasses of cText. Similarly, cWindow, cDocument, and cFile are subclasses of cOpenableObject. Every object class inherits all the characteristics of its superclass and can also add characteristics of its own.Figure 3-15    Superclasses and subclassesHere are some of the object classes defined for the Core suite:Class    Class ID    Description    cChar    'cha '    Text characters    cDocument    'docu'    Macintosh documents    cFile    'cfil'    Macintosh files    cSelection    'csel'    User or application selections    cText    'ctxt'    Series of characters    cWindow    'cwin'    Standard Macintosh windows    Here are some of the object classes defined for the Text suite:Class    Class ID    Description    cChar    'cha '    Text characters    cLine    'clin'    Lines of text    cParagraph    'cpar'    Paragraphs    cText    'ctxt'    Series of characters    cTextFlow    'cflo'    Text flows    cWord    'cwor'    Words    As you can see, some object classes, such as cChar and cText, are defined in more than one suite. For example, the definition of the cText object class in the Text suite is an extension of the cText object class defined in the Core suite; it duplicates all the characteristics of the Core suite object class and adds some of its own. Like a word in a dictionary, one object class ID can have several related definitions. You can choose to support the definition that best suits your application; or, if necessary, you can create extensions of your own. The extension of an object class is different from inheritance between object classes. An extension of a standard object class provides additional ways of describing an Apple event object of that class, whereas the object class inheritance hierarchy determines the pattern of characteristics shared by different object classes. The definition of an object class always specifies a default descriptor type. Suppose, for example, that a client application sends a Get Data, Cut, or Copy event that specifies an Apple event object but does not specify a descriptor type for the returned data. In this case, the server application returns a descriptor record of the default descriptor type for the object class of the specified Apple event object. For example, the default descriptor type for Apple event objects of class cWord is typeIntlText, a descriptor type that specifies an undelimited string of characters in a specific language and script system. The client application can also request that the data be returned in a descriptor record of some other data type.The definition of an object class includes three lists of characteristics: properties, element classes, and Apple events that support the object class. (The next section describes properties and element classes.) Any or all of these characteristics may be inherited from a superclass. An Apple event is listed for an object class if its parameters can specify objects of that class. The definition for cWindow, for example, lists 12 Apple events, including the Open, Close, and Move events, whose parameters can include object specifier records that specify windows. The cWindow class inherits all of these Apple events from its abstract superclass, cOpenableObject.The Apple Event Registry: Standard Suites also defines primitive object classes, which describe Apple event objects that contain a single value. For example, the cBoolean, cLongInteger, and cAlias object classes are all primitive object classes. The object class ID for a primitive object class is the same as the four-character value of its descriptor type. Primitive object classes contain no properties; they contain only the value of the data.  Properties and ElementsThe properties listed for an object class can be used to identify characteristics of Apple event objects that belong to that class. Each property is identified by a four-character property ID, which can also be represented by a constant. Constants for properties always begin with the letter p.Here are constants and property IDs for some properties:Property    Property ID    Description    pName    'pnam'    Name of an Apple event object    pBounds    'pbnd'    Coordinates of a window    pVisible    'pvis'    Indicates whether a window is visible    pIsModal    'pmod'    Indicates whether a window is modal    pClass    'pcls'    Class ID of an Apple event object    pFont    'font'    Font    pTextStyle    'txst'    Text style    pColor    'colr'    Text color    pTextPointSize    'ptps'    Point size    pScriptTag    'psct'    Script system identifier    pFillColor    'flcl'    Fill color    The property of an Apple event object is itself defined as a single Apple event object whose container is the object to which the property belongs. For example, the pFont property of a word is defined by the name of a font, such as New York; the string that identifies the font is an Apple event object of class cText. The constant cProperty specifies the object class for any object specifier record that identifies a property. CONST cProperty = 'prop';An object specifier record for a property specifies cProperty as the object class ID, the Apple event object to which the property belongs as the container, formPropertyID as the key form, and a constant such as pFont as the key data.   The elements of a specific Apple event object are the other Apple event objects it contains, excluding those that define its properties. An object specifier record for an element specifies the Apple event object in which the element is located as the container and can specify any key form except formPropertyID. Each object class definition in the Apple Event Registry: Standard Suites includes a list of element classes, which are the object classes of the elements that an Apple event object can contain. An Apple event object contains exactly one of each of its properties, whereas it can contain no elements or many elements of the same element class. In general, a property of an object describes something about that object; a property can be examined or changed but never deleted. An element can be one or more discrete objects contained in another object and can usually be deleted. For example, because a paragraph can contain one or more words, one of the element classes listed for the object class cParagraph is the object class cWord. Individual words can be deleted from a paragraph. However, even though a word in a paragraph can be in a different font from the words around it, a paragraph can have only one pFont property. This property is defined as the font of the first character in the paragraph and consists of the name of a font. The paragraph’s pFont property can be changed but not removed.The properties and element classes listed for each object class definition in the Apple Event Registry: Standard Suites can be inherited from a superclass, or they can originate with a subclass. Figure 3-16 illustrates the object class inheritance hierarchy for the object class cWindow in the Core suite. Boldface terms in the figure represent those properties, element classes, or Apple events that are not inherited. The object class cWindow includes all the properties and Apple events of its superclass, cOpenableObject, which in turn includes all the properties and Apple events of its superclass, cObject. The object class cWindow also includes 11 properties and one element class that originate with cWindow and are not inherited. The pClass property—the property that specifies the four-character class ID—originates with cObject. Because the definitions of all object classes are ultimately derived from cObject, pClass is inherited by all object classes. The definition for cObject also lists ten Apple events, which include common events such as Get Data, Move, and Delete Element. Because cObject is at the top of the object class inheritance hierarchy, these ten Apple events can use object specifier records that describe Apple event objects of any object class as a direct parameter. Like all abstract superclasses, cObject does not correspond to a real Apple event object, so its definition does not list any element classes. Unlike any other object class, cObject is at the top of the object class inheritance hierarchy and therefore does not have a superclass. Figure 3-16    The object class inheritance hierarchy for the object class cWindowThe chain of containers that determine the location of one or more Apple event objects is called the container hierarchy. The container hierarchy, which specifies the location of real Apple event objects, is different from the object class inheritance hierarchy, which is an abstract concept that determines which properties, element classes, and Apple events an object class inherits from its superclass. For example, the container hierarchy for an Apple event object of class cWord can vary from one word to another, because various combinations of other Apple event objects, such as a document, a paragraph, a delimited string, or another word, can contain a word. Applications that support Apple event objects must be able to identify the order of several elements of the same class that are contained within another Apple event object. For example, each word in a paragraph should have an identifiable order, such as the 5th word or the 12th word. This allows other applications to identify Apple event objects by describing their absolute position within a container. Figure 3-17 shows an Apple event object of object class cWord—the word “Sales”—contained in another Apple event object of object class cParagraph. (Both these object classes are defined in the Text suite.) The figure shows only a portion of the container hierarchy for the word, since a complete description of the word would also include the containers that specify the location of the paragraph. Your application must take account of the definitions in the Apple Event Registry: Standard Suites for any object classes you want to support. For example, the definition for the object class cText lists paragraphs, lines, words, and characters as Apple event objects that can be contained in Apple event objects of class cText. To support Apple events that refer to elements of object class cText, your application should associate the cText object class with paragraphs, lines, words, and characters in its documents. The list of properties defined for class cText includes the properties pColor, pFont, pPointSize, pScriptTag, and pTextStyles. If you want to support Apple events that distinguish a boldface 12-point word of object class cText from an italic 14-point word, for example, your application must associate the point size and style of text in its documents with the properties pPointSize and pTextStyles defined for class cText. Figure 3-17    An Apple event object of class cWord contained in an Apple event object of class cParagraphFinding Apple Event ObjectsMost of the Apple events in the Core suite and the functional-area suites defined in the Apple Event Registry: Standard Suites can include parameters that consist of object specifier records. Your application’s handlers for these events can use the AEResolve function to resolve object specifier records: that is, to locate the Apple event objects they describe.The AEResolve function parses an object specifier record and performs related tasks that are the same for all object specifier records. When necessary, the AEResolve function calls application-defined functions to perform tasks that are unique to the application, such as locating a specific Apple event object in the application’s data structures.Your application can provide two kinds of application-defined functions for use by AEResolve. Object accessor functions locate Apple event objects. Every application that supports simple object specifier records must provide one or more object accessor functions. Object callback functions perform other tasks that only an application can perform, such as counting, comparing, or marking Apple event objects. Each time AEResolve calls one of your application’s object accessor functions successfully, the object accessor function returns a special descriptor record, called a token, that identifies either an element in a specified container or a property of a specified Apple event object. The token can be of any descriptor type, including descriptor types you define yourself. You install object accessor functions by using the AEInstallObjectAccessor function. Much like the AEInstallEventHandler function, AEInstallObjectAccessor uses an object accessor dispatch table to map requests for Apple event objects to the appropriate object accessor functions in your application. These requests refer to objects of a specified object class in containers identified by a token of a specified descriptor type.Responding to an Apple event that includes an object specifier record typically involves these steps:    1.    After determining that the event is an Apple event, your application calls AEProcessAppleEvent.    2.    The AEProcessAppleEvent function uses the Apple event dispatch table to dispatch the event to the your application’s handler for that event.    3.    The Apple event handler extracts the Apple event parameters, and passes the object specifier records they contain to AEResolve.    4.    The AEResolve function uses the object accessor dispatch table to call one or more object accessor functions, one at a time, that can identify the nested Apple event objects described by each object specifier record. Each object accessor function returns a token for the object it finds, which in turn helps to determine which object accessor function the AEResolve function will use to locate the next Apple event object.    5.    The AEResolve function returns the final token for the requested object to the application’s handler.The resolution of an object specifier record always begins with the outermost container it specifies. For example, to locate a table named “Summary of Sales” in the document named “Sales Report,” the AEResolve function first calls an object accessor function that can locate the document, then uses the token returned by that function to identify an object accessor function that can locate the table. It then returns the token for the table to the Apple event handler that called AEResolve.The chapter “Resolving and Creating Object Specifier Records” in this book describes in detail how to resolve object specifier records and how to write and install object accessor and object callback functions. About the Apple Event ManagerYou can use the Apple Event Manager ton    respond to Apple events as a server applicationn    create and send Apple events as a client applicationn    resolve and create object specifier recordsn    support Apple event recordingThis section briefly summarizes the steps involved in providing each kind of support and tells where to find the relevant information in this book.Supporting Apple Events as a Server ApplicationYou do not need to implement all Apple events at once. You can begin by supporting just the required events and, if necessary, the events sent by the Edition Manager. The beginning of the section “Handling Apple Events” on page 4-4 describes how to provide this minimal level of support.It is relatively easy to respond to the required events and the events sent by the Edition Manager. If, however, your application cannot respond to any other Apple events, other applications will not be able to request services that involve locating specific Apple event objects within your application or its documents, and users will not be able to control your application by executing scripts. To respond to Apple events it is likely to receive from other applications or from scripting components, your application must be able to respond to the appropriate core and functional-area Apple events. Once you have provided the basic level of support for the Required suite and for events sent by the Edition Manager, you shouldn    decide which other Apple event suites you want to supportn    define the hierarchy of Apple event objects within your application that you want scripting components or other applications to be able to identify—that is, which Apple event objects can be contained by other Apple event objects in your applicationn    write handlers for the Apple events you support, and install corresponding entries in your application’s Apple event dispatch tableTo decide which Apple event suites you want to support and how to define the hierarchy of Apple event objects in your application, consult the Apple Event Registry: Standard Suites and evaluate which Apple events and Apple event object classes make sense for your application. If necessary, you can extend the definitions of the standard Apple events and Apple events objects to cover special requirements of your application. It is better to extend the standard definitions rather than to define your own custom Apple events, because only those applications that choose to support your custom Apple events explicitly will be able to make use of them.The chapter “Responding to Apple Events” in this book describes how to write Apple event handlers and related routines. The chapter “Resolving and Creating Object Specifier Records” describes how to resolve object specifiers in an Apple event that describes Apple event objects in your application or its documents.If your application can respond to Apple events, you can make it scriptable simply by adding an 'aete' resource. Scripting components use your application’s 'aete' resource to obtain information about the Apple events and corresponding human-language terminology that your application supports. The chapter “Apple Event Terminology Resources” in this book describes how to optimize your implementation of Apple events for use by scripting components and how to create an 'aete' resource.Supporting Apple Events as a Client ApplicationBecause users can send Apple events to a variety of applications simply by executing a script, many applications have no need to send Apple events. However, if you want to factor your application for recording, or if you want your application to send Apple events directly to other applications, you can use Apple Event Manager routines to create and send Apple events. To send an Apple event, you mustn    create the Apple eventn    add parameters and attributesn    use the AESend function to send the eventThe chapter “Creating and Sending Apple Events” in this book describes how to perform these tasks.Supporting Apple Event ObjectsIf your application responds to core and functional-area Apple events, it must also be able to resolve object specifier records that describe the objects on which those Apple events can act. In addition to the tasks described in the chapter “Responding to Apple Events,” you must perform the following tasks to handle Apple events that contain object specifier records:n    Write object accessor functions that can locate the Apple event objects you support, and install corresponding entries in your application’s object accessor dispatch table.n    Write any object callback functions that you decide to provide. To handle object specifier records that specify a test, your application must provide at least two object callback functions: one that counts objects and one that compares them.n    Call AEResolve from your Apple event handlers whenever an Apple event parameter includes an object specifier record. The chapter “Resolving and Creating Object Specifier Records” describes how to perform these tasks. It also describes how applications that send Apple events to themselves or directly to other applications can create object specifier records.Supporting Apple Event RecordingIf you make your application scriptable, you may also want to make it recordable. Users of recordable applications can record their actions in the form of Apple events that a scripting component translates into a script. When a user executes a recorded script, the scripting component sends the same Apple events to the application in which they were recorded.To make your application recordable, you should use Apple events to report user actions to the Apple Event Manager in terms of Apple events. One way to do this is to separate the code that implements your application’s user interface from the code that actually performs work when the user manipulates the interface. This is called factoring your application. A factored application acts as both the client and server application for Apple events it sends to itself in response to user actions. When recording is turned on, the Apple Event Manager sends a copy of every event than an application sends to itself to the scripting component or other process that turned recording on.The chapter “Introduction to Scripting” in this book provides an overview of how to make your application both scriptable and recordable. The chapter “Recording Apple Events” describes how to factor your application for recording and explains the Apple Event Manager’s recording mechanism.Listing 4-0Table 4-0Responding to Apple EventsContentsHandling Apple Events4-4Accepting an Apple Event4-5Installing Entries in the Apple Event Dispatch Tables4-7Installing Entries for the Required Apple Events4-8Installing Entries for Apple Events Sent by the Edition Manager4-9How Apple Event Dispatching Works4-9Handling the Required Apple Events4-11Required Apple Events4-11Handling the Open Application Event4-14Handling the Open Documents Event4-15Handling the Print Documents Event4-17Handling the Quit Application Event4-19Handling Apple Events Sent by the Edition Manager4-20The Section Read, Section Write, and Section Scroll Events4-21Handling the Create Publisher Event4-22Getting Data Out of an Apple Event4-25Getting Data Out of an Apple Event Parameter4-26Getting Data Out of an Attribute4-28Getting Data Out of a Descriptor List4-31Writing Apple Event Handlers4-33Replying to an Apple Event4-36Disposing of Apple Event Data Structures4-39Writing and Installing Coercion Handlers4-41Interacting With the User4-45Setting the Client Application’s User Interaction Preferences4-46Setting the Server Application’s User Interaction Preferences4-48Requesting User Interaction4-49Reference to Responding to Apple Events4-56Data Structures Used by the Apple Event Manager4-56Descriptor Records and Related Data Structures4-56Apple Event Array Data Types4-60Routines for Responding to Apple Events4-61Creating and Managing the Apple Event Dispatch Tables4-61Dispatching Apple Events4-66Getting Data or Descriptor Records Out of Apple Event Parameters and Attributes4-68Counting the Items in Descriptor Lists4-74Getting Items From Descriptor Lists4-74Getting Data and Keyword-Specified Descriptor Records Out of AE Records4-78Requesting User Interaction4-81Requesting More Time to Respond to Apple Events4-84Suspending and Resuming Apple Event Handling4-85Getting the Sizes and Descriptor Types of Descriptor Records4-89Deleting Descriptor Records4-92Deallocating Memory for Descriptor Records4-93Coercing Descriptor Types4-94Creating and Managing the Coercion Handler Dispatch Tables4-96Creating and Managing the Special Handler Dispatch Tables4-99Getting Information About the Apple Event Manager4-103Application-Defined Routines4-104Summary of Responding to Apple Events4-108Pascal Summary4-108Constants4-108Data Types4-112Routines for Responding to Apple Events4-114Application-Defined Routines4-118C Summary4-118Constants4-118Data Types4-123Routines for Responding to Apple Events4-124Application-Defined Routines4-128Assembly-Language Summary4-128Trap Macros4-128Result Codes4-130Responding to Apple EventsThis chapter describes how your application can use the Apple Event Manager to respond to Apple events. Your application must be able to respond to the four required Apple events to take advantage of the launching and terminating mechanisms that are part of System 7 and later versions of system software. If your application provides publish and subscribe capabilities, it should also handle the events sent by the Edition Manager. To be scriptable, or capable of responding to Apple events sent by scripting components, your application should handle the appropriate core and functional-area Apple events.Before you read this chapter, you should be familiar with the chapters “Introduction to Interapplication Communication” and “Introduction to Apple Events” in this book. You should also have a copy of the Apple Event Registry: Standard Suites available for reference. Although the Apple events used by the Edition Manager are discussed in this chapter, you must refer to the chapter “Edition Manager” in this book for a full discussion of how to implement the Edition Manager’s publish and subscribe features.This chapter provides the basic information you need to make your application capable of responding to Apple events. To respond to core and functional-area Apple events, your application must also be able to resolve object specifier records. You should read the chapter “Resolving and Creating Object Specifier Records” before you write Apple event handlers for events that can contain object specifier records.The section “Handling Apple Events,” which begins on page 4-4, describes how ton    accept and process Apple eventsn    install entries in the Apple event dispatch tablesn    handle the required eventsn    handle events sent by the Edition Managern    get data out of an Apple eventn    write handlers that perform the action requested by an Apple eventn    reply to an Apple eventn    dispose of Apple event data structuresn    write and install coercion handlersThe section “Interacting With the User,” which begins on page 4-45, describes n    how a server application can interact with the user when processing an Apple eventn    how client applications set user interaction preferencesn    how the client application’s preferences and the server application’s preferences affect user interactionHandling Apple EventsYou do not need to implement all Apple events at once. If you want to begin by supporting only the required Apple events, you mustn    set bits in the 'SIZE' resource to indicate that your application supports high-level eventsn    include code to handle high-level events in your main event loopn    write routines that handle the required eventsn    install entries for the required Apple events in your application’s Apple event dispatch table The following sections explain how to perform these tasks: “Accepting an Apple Event,” which begins on page 4-5, “Installing Entries in the Apple Event Dispatch Tables,” which begins on page 4-7, and “Handling the Required Apple Events,” which begins on page 4-11.To respond to the Apple events sent by the Edition Manager in addition to the required events, you must install entries for the Section Read, Section Write, Section Scroll, and Create Publisher events in your application’s Apple event dispatch table and write the corresponding handlers, as described in “Handling Apple Events Sent by the Edition Manager” on page 4-20. To respond to core and functional-area Apple events, you must install entries and write handlers for those events. You must also make sure that your application can locate Apple event objects with the aid of the Apple Event Manager routines described in the chapter “Resolving and Creating Object Specifier Records.” These routines are currently available as the Object Support Library (OSL), which you must link with your application when you build it. The Apple Event Manager (excluding the OSL) is available only in System 7 and later versions of system software. Use the Gestalt function with the gestaltAppleEventsAttr selector to determine whether the Apple Event Manager is available. In the response parameter, the bit defined by the constant gestaltAppleEventsPresent is set if the Apple Event Manager is available.CONST        gestaltAppleEventsAttr  = 'evnt';                                                {Gestalt selector}        gestaltAppleEventsPresent = 0;                                                {if this bit is set, }                                                         { then the Apple Event }                                                        { Manager is available}To find out which version of the Apple Event Manager is available, you can use the AEManagerInfo function; for more information, see page 4-104.Accepting an Apple EventTo accept or send Apple events (or any other high-level events), you must set the appropriate flags in your application’s 'SIZE' resource and include code to handle high-level events in your application’s main event loop. Two flags in the 'SIZE' resource determine whether an application receives high-level events: n    The isHighLevelEventAware flag must be set for your application to receive any high-level events.n    The localAndRemoteHLEvents flag must be set for your application to receive high-level events sent from another computer on the network.Note that in order for your application to respond to Apple events sent from remote computers, the user of your application must also allow network users to link to your application. The user does this by selecting your application in the Finder, choosing Sharing from the File menu, and clicking the Allow Remote Program Linking checkbox. If the user has not yet started program linking, the Sharing command offers to display the Sharing Setup control panel so that the user can start program linking. The user must also authorize remote users for program linking by using the Users & Groups control panel. Program linking and setting up authenticated sessions are described in the chapter “Program-to-Program Communications Toolbox” in this book.For a complete description of the 'SIZE' resource, see the chapter “Event Manager” in Inside Macintosh: Macintosh Toolbox Essentials. Apple events (and other high-level events) are identified by a message class of kHighLevelEvent in the what field of the event record. You can test the what field of the event record to determine whether the event is a high-level event.Listing 4-1 is an example of a procedure called from an application’s main event loop to handle events, including high-level events. The procedure determines the type of event received and then calls another routine to take the appropriate action.Listing 4-1    A DoEvent procedurePROCEDURE DoEvent (event: EventRecord);BEGIN                    CASE event.what OF                                    {determine the type of event}        mouseDown:            DoMouseDown (event);        .        . {handle other kinds of events}        .        {handle high-level events, including Apple events}        kHighLevelEvent: DoHighLevelEvent (event);    END;END; Listing 4-2 is an example of a procedure that handles both Apple events and the high-level event identified by the event class mySpecialHLEventClass and the event ID mySpecialHLEventID. Note that, in most cases, you should use Apple events to communicate with other applications. Listing 4-2    A DoHighLevelEvent procedure for handling Apple events and other high-level eventsPROCEDURE DoHighLevelEvent (event: EventRecord);VAR    myErr: OSErr;BEGIN    IF (event.message = LongInt(mySpecialHLEventClass)) AND        (LongInt(event.where) = LongInt(mySpecialHLEventID))     THEN        {it's a high-level event that doesn't use AEIMP}        myErr := HandleMySpecialHLEvent(event)    ELSE        {otherwise, assume that the event is an Apple event}        myErr := AEProcessAppleEvent(event);        {check and handle error}    IF myErr <> noErr THEN DoError(myErr);END;If your application accepts high-level events that do not follow the Apple Event Interprocess Messaging Protocol (AEIMP), you must dispatch these high-level events before calling AEProcessAppleEvent. To dispatch high-level events that do not follow AEIMP, you should check the event class, the event ID, or both for each event to see whether your application can handle the event. After receiving a high-level event (and, if appropriate, checking whether it is a high-level event other than an Apple event), your application typically calls the AEProcessAppleEvent function. The AEProcessAppleEvent function determines the type of Apple event received, gets the event buffer that contains the parameters and attributes of the Apple event, and calls the corresponding Apple event handler in your application.You should provide an Apple event handler for each Apple event that your application supports. This handler is responsible for performing the action requested by the Apple event and if necessary can return data in the reply Apple event. If the client application requests a reply, the Apple Event Manager passes a default reply Apple event to your handler. If the client application does not request a reply, the Apple Event Manager passes a null descriptor record (a descriptor record of descriptor type typeNull and a data handle whose value is NIL) to your handler instead of a default reply Apple event.After your handler finishes processing the Apple event and adds any parameters to the reply Apple event, it must return a result code to AEProcessAppleEvent. If the client application is waiting for a reply, the Apple Event Manager returns the reply Apple event to the client.Installing Entries in the Apple Event Dispatch TablesWhen your application receives an Apple event, use the AEProcessAppleEvent function to retrieve the data buffer of the event and to route the Apple event to the appropriate Apple event handler in your application. Your application supplies an Apple event dispatch table to map the Apple events your application supports to the Apple event handlers provided by your application.To install entries in your application’s Apple event dispatch table, use the AEInstallEventHandler function. You usually install entries for all of the Apple events that your application accepts into your application’s Apple event dispatch table. To install an Apple event handler in your Apple event dispatch table, you must specifyn    the event class of the Apple eventn    the event ID of the Apple eventn    the address of the Apple event handler for the Apple eventn    a reference constantYou provide this information to the AEInstallEventHandler function. In addition, you indicate whether the entry should be added to your application’s Apple event dispatch table or to the system Apple event dispatch table. The system Apple event dispatch table is a table in the system heap that contains system Apple event handlers—handlers that are available to all applications and processes running on the same computer. The handlers in your application’s Apple event dispatch table are available only to your application. If AEProcessAppleEvent cannot find a handler for the Apple event in your application’s Apple event dispatch table, it looks in the system Apple event dispatch table for a handler (see “How Apple Event Dispatching Works” on page 4-9 for details). If it doesn’t find a handler for the event, it returns the errAEEventNotHandled result code. If you add a handler to the system Apple event dispatch table, the handler should reside in the system heap. If there was already an entry in the system Apple event dispatch table for the same event class and event ID, it is replaced unless you chain it to your system handler. See “Creating and Managing the Apple Event Dispatch Tables” on page 4-61 for details.Installing Entries for the Required Apple EventsListing 4-3 illustrates how to add entries for the required Apple events to your application’s Apple event dispatch table.Listing 4-3    Adding entries for the required Apple events to an application’s Apple event dispatch tablemyErr := AEInstallEventHandler(kCoreEventClass,                                          kAEOpenApplication,                                          @MyHandleOApp, 0, FALSE);IF myErr <> noErr THEN DoError(myErr);myErr := AEInstallEventHandler(kCoreEventClass,                                          kAEOpenDocuments,                                          @MyHandleODoc,0, FALSE);IF myErr <> noErr THEN DoError(myErr);myErr := AEInstallEventHandler(kCoreEventClass,                                          kAEPrintDocuments,                                          @MyHandlePDoc, 0, FALSE);IF myErr <> noErr THEN DoError(myErr);myErr := AEInstallEventHandler(kCoreEventClass,                                         kAEQuitApplication,                                         @MyHandleQuit, 0, FALSE); IF myErr <> noErr THEN DoError(myErr);  The code in Listing 4-3 creates entries for all four required Apple events in the Apple event dispatch table. (For examples of handlers that correspond to these entries, see “Handling the Required Apple Events,” which begins on page 4-11.) The first entry creates an entry for the Open Application event. The entry indicates the event class and event ID of the Open Application event, supplies the address of the handler for that event, and specifies 0 as the reference constant. The Apple Event Manager passes the reference constant to your handler each time your handler is called. Your application can use this reference constant for any purpose. If your application doesn’t use the reference constant, use 0 as the value. The last parameter to the AEInstallEventHandler function is a Boolean value that determines whether the entry is added to the system Apple event dispatch table or to your application’s Apple event dispatch table. To add the entry to your application’s Apple event dispatch table, use FALSE as the value of this parameter. If you specify TRUE, the entry is added to the system Apple event dispatch table. The code shown in Listing 4-3 adds entries to the application’s Apple event dispatch table.Installing Entries for Apple Events Sent by the Edition ManagerIf your application supports the Edition Manager, you should also add entries to your application’s Apple event dispatch table for the Apple events that your application receives from the Edition Manager. Listing 4-4 shows how to add these entries.Listing 4-4    Adding entries for Apple events sent by the Edition Manager to an application’s Apple event dispatch tablemyErr := AEInstallEventHandler(sectionEventMsgClass,                                          sectionReadMsgID,                                          @MyHandleSectionReadEvent,                                          0, FALSE);IF myErr <> noErr THEN DoError(myErr);myErr := AEInstallEventHandler(sectionEventMsgClass,                                          sectionWriteMsgID,                                          @MyHandleSectionWriteEvent,                                          0, FALSE);IF myErr <> noErr THEN DoError(myErr);myErr := AEInstallEventHandler(sectionEventMsgClass,                                            sectionScrollMsgID,                                          @MyHandleSectionScrollEvent,                                          0, FALSE);IF myErr <> noErr THEN DoError(myErr);See “Handling Apple Events Sent by the Edition Manager” on page 4-20 for the parameters associated with these events. See the chapter “Edition Manager” in this book for information on how your application should respond to the Apple events sent by the Edition Manager. How Apple Event Dispatching WorksIn addition to the Apple event handler dispatch tables, applications can add entries to a special handler dispatch table in either the application heap or the system heap. These dispatch tables are used for various specialized handlers; for more information, see “Creating and Managing the Special Handler Dispatch Tables,” which begins on page 4-99. When an application calls AEProcessAppleEvent, the function looks first in the application’s special handler dispatch table for an entry that was installed with the constant keyPreDispatch. If the application’s special handler dispatch table does not include such a handler or if the handler returns errAEEventNotHandled, the function looks in the application’s Apple event dispatch table for an entry that matches the event class and event ID of the specified Apple event. If the application’s Apple event dispatch table does not include such a handler or if the handler returns errAEEventNotHandled, the AEProcessAppleEvent function looks in the system special handler dispatch table for an entry that was installed with the constant keyPreDispatch. If the system special handler dispatch table does not include such a handler or if the handler returns errAEEventNotHandled, the function looks in the system Apple event dispatch table for an entry that matches the event class and event ID of the specified Apple event. If the system Apple event dispatch table does not include such a handler, the Apple Event Manager returns the result code errAEEventNotHandled to the server application and, if the client application is waiting for a reply, to the client application.sWARNINGBefore an application calls a system Apple event handler, system software has set up the A5 register for the calling application. For this reason, if you provide a system Apple event handler, it should never use A5 global variables or anything that depends on a particular context; otherwise, the application that calls the system handler may crash.sFor any entry in your Apple event dispatch table, you can specify a wildcard value for the event class, event ID, or both. You specify a wildcard by supplying the typeWildCard constant when installing an entry into the Apple event dispatch table. A wildcard value matches all possible values. Wildcards make it possible to supply one Apple event handler that dispatches several related Apple events. For example, if you specify an entry with the typeWildCard event class and the kAEOpenDocuments event ID, the Apple Event Manager dispatches Apple events of any event class with an event ID of kAEOpenDocuments to the handler for that entry. If you specify an entry with the kCoreEventClass event class and the typeWildCard event ID, the Apple Event Manager dispatches Apple events of the kCoreEventClass event class with any event ID to the handler for that entry. If you specify an entry with the typeWildCard event class and the typeWildCard event ID, the Apple Event Manager dispatches all Apple events of any event class and any event ID to the handler for that entry.If an Apple event dispatch table contains one entry for an event class and a specific event ID, and also contains another entry that is identical except that it specifies a wildcard value for either the event class or the event ID, the Apple Event Manager dispatches the more specific entry. For example, if an Apple event dispatch table includes one entry that specifies the event class as kAECoreSuite and the event ID as kAEDelete, and another entry that specifies the event class as kAECoreSuite and the event ID as typeWildCard, the Apple Event Manager will dispatch the Apple event handler associated with the entry that specifies the event ID as kAEDelete. IMPORTANTIMPORTANTIf your application sends Apple events to itself using a typeProcessSerialNumber address descriptor record with the lowLongOfPSN field set to kCurrentProcess, the Apple Event Manager jumps directly to the appropriate Apple event handler without going through the normal event-processing sequence. For this reason, your application will not appear to run more slowly when it sends Apple events to itself. For more information, see “Addressing an Apple Event for Direct Dispatching” on page 5-13.s Handling the Required Apple EventsThis section describes the required Apple events—the Apple events your application must support to be compatible with System 7 and later versions of system software—and the descriptor types for all parameters of the required Apple events. It also describes how to write the handlers for these events, and it provides sample code.To support the required Apple events, you must set the necessary flags in the 'SIZE' resource of your application, install entries in your application’s Apple event dispatch table, add code to the event loop of your application to recognize high-level events, and call the AEProcessAppleEvent function, as described in “Accepting an Apple Event,” which begins on page 4-5, and “Installing Entries in the Apple Event Dispatch Tables,” which begins on page 4-7. You must also write handlers for each Apple event; this section describes how to write these handlers.Required Apple EventsWhen a user opens or prints a file from the Finder, the Finder sets up the information your application uses to determine which files to open or print. In System 7 and later versions, if your application supports high-level events, the Finder communicates this information to your application through the required Apple events. The Finder sends these required Apple events to your application to request the corresponding actions:Apple event    Requested action    Open Application    Perform tasks your application normally performs when a user opens your application without opening or printing any documents    Open Documents    Open the specified documents     Print Documents    Print the specified documents    Quit Application    Perform tasks—such as releasing memory, requesting the user to save documents, and so on—associated with quitting before the Finder terminates your application    In System 7 and later versions, the Finder uses these events as part of the mechanisms for launching and terminating applications. When the Finder launches your application, the application receives the Open Application, Open Documents, or Print Documents event. When the Finder terminates your application, the application receives the Quit Application event. This method of communicating Finder information to your application replaces the mechanisms used in earlier versions of system software.Applications that do not support high-level events can still use the CountAppFiles, GetAppFiles, and ClrAppFiles procedures (or the GetAppParms procedure) to get the Finder information. See the chapter “Introduction to File Management” in Inside Macintosh: Files for information on these routines. To make your application compatible with System 7 and with earlier and later versions, you must support both the old and new mechanisms.Use the Gestalt function to determine whether the Apple Event Manager is present. If it is and the isHighLevelEventAware flag is set in your application’s 'SIZE' resource, your application receives the Finder information through the required Apple events. If your application accepts high-level events, it must be able to process the four required Apple events. Your application receives the required Apple events from the Finder in these situations:n    If your application is not open and the user opens your application from the Finder without opening or printing any documents, the Finder launches your application and sends it the Open Application event.n    If your application is not open and the user opens one of your application’s documents from the Finder, the Finder launches your application and sends it the Open Documents event.n    If your application is not open and the user prints one of your application’s documents from the Finder, the Finder launches your application and sends it the Print Documents event. Your application should print the selected documents and remain open until it receives a Quit Application event from the Finder.n    If your application is open and the user opens or prints any of your application’s documents from the Finder, the Finder sends your application the Open Documents or Print Documents event.n    If your application is open and the user chooses Restart or Shut Down from the Finder’s Special menu, the Finder sends your application the Quit Application event.Upon receiving any of the required Apple events, your application should perform the action requested by the event. Here is a summary of the contents of the required events and the actions they request applications to perform:Open Application—perform tasks associated with opening an application         Event class    kCoreEventClass    Event ID    kAEOpenApplication    Parameters    None    Requested action    Perform any tasks—such as opening an untitled document window—that you would normally perform when a user opens your application without opening or printing any documents.    Open Documents—open the specified documents            Event class        kCoreEventClass    Event ID        kAEOpenDocuments    Required parameter                Keyword:    keyDirectObject        Descriptor type:    typeAEList        Data:    A list of alias records for the documents to be opened    Requested action        Open the documents specified in the keyDirectObject parameter.    Print Documents—print the specified documents            Event class        kCoreEventClass    Event ID        kAEPrintDocuments    Required parameter                Keyword:    keyDirectObject        Descriptor type:    typeAEList        Data:    A list of alias records for the documents to be printed    Requested action        Print the documents specified in the keyDirectObject parameter without opening windows for the documents.     Quit Application—perform tasks associated with quitting(continued)        Event class    kCoreEventClass    Event ID    kAEQuitApplication    Parameters    None    Requested action    Perform any tasks that your application would normally perform when the user chooses Quit. Such tasks typically include asking the user whether to save documents that have been changed. When appropriate, the Finder sends this event to an application immediately after sending it a Print Documents event (unless the application was already open) or if the user chooses Restart or Shut Down from the Finder’s Special menu.    Your application needs to recognize only two descriptor types to handle the required Apple events: descriptor lists and alias records. The Open Documents event and Print Documents event use descriptor lists to store a list of documents to open. Each document is specified as an alias record in the descriptor list. You can retrieve the data that specifies the document to open as an alias record, or you can request that the Apple Event Manager coerce the alias record to a file system specification (FSSpec) record. The file system specification record provides a standard method of identifying files in System 7 and later versions. See Inside Macintosh: Files for a complete description of how to specify files using file system specification records.Handling the Open Application EventWhen the user opens your application, the Finder uses the Process Manager to launch your application. On startup, your application typically performs any needed initialization, and then begins to process events. If your application supports high-level events, and if the user opens your application without selecting any documents to open or print, your application receives the Open Application event.To handle the Open Application event, your application should do just what the user expects it to do when it is opened. For example, your application might open a new untitled window in response to an Open Application event.Listing 4-5 shows a handler that processes the Open Application event. This handler first calls an application-defined function called MyGotRequiredParams, which checks whether the Apple event contains any required parameters. If so, the handler returns an error, because by definition, the Open Application event should not contain any required parameters. Otherwise, the handler opens a new document window.Listing 4-5    A handler for the Open Application eventFUNCTION MyHandleOApp (theAppleEvent, reply: AppleEvent;                                handlerRefcon: LongInt): OSErr;VAR    myErr: OSErr;BEGIN    myErr := MyGotRequiredParams(theAppleEvent);    IF myErr = noErr THEN         DoNew;    MyHandleOApp := myErr;END;For a description of the MyGotRequiredParams function, see Listing 4-11 on page 4-35. For information about the reply and handlerRefcon parameters for an Apple event handler, see “Writing Apple Event Handlers” on page 4-33. Handling the Open Documents EventTo handle the Open Documents event, your application should open the documents that the Open Documents event specifies in its direct parameter. Your application extracts this information and then opens the specified documents. Listing 4-6 shows a handler for the Open Documents event. Listing 4-6    A handler for the Open Documents eventFUNCTION MyHandleODoc (theAppleEvent, reply: AppleEvent;                                  handlerRefcon: LongInt): OSErr;VAR    myFSS:                              FSSpec;    docList:                              AEDescList;    myErr, ignoreErr:                              OSErr;    index, itemsInList:                            LongInt;    actualSize:                              Size;    keywd:                              AEKeyword;    returnedType:                              DescType;BEGIN    {get the direct parameter--a descriptor list--and put it }    { into docList}    myErr := AEGetParamDesc(theAppleEvent, keyDirectObject,                                    typeAEList, docList);    IF myErr = noErr THEN     BEGIN        {check for missing required parameters}        myErr := MyGotRequiredParams(theAppleEvent);        IF myErr = noErr THEN         BEGIN            {count the number of descriptor records in the list}            myErr := AECountItems (docList, itemsInList);            IF myErr = noErr THEN                {now get each descriptor record from the list, }                { coerce the returned data to an FSSpec record, and }                { open the associated file}                FOR index := 1 TO itemsInList DO                BEGIN                    myErr := AEGetNthPtr(docList, index, typeFSS,                                                 keywd, returnedType, @myFSS,                                                 Sizeof(myFSS),actualSize);                    IF myErr = noErr THEN                    BEGIN                        myErr := MyOpenFile(@myFSS);                        IF myErr <> noErr THEN                             ; {handle error from MyOpenFile}                    END                    ELSE                        ; {handle error from AEGetNthPtr}                END; {of For index Do}        END        ELSE            ; {handle error from MyGotRequiredParams}        ignoreErr := AEDisposeDesc(docList);    END    ELSE        ; {failed to get direct parameter, handle error}    MyHandleODoc := myErr;END;The handler in Listing 4-6 first uses the AEGetParamDesc function to get the direct parameter (specified by the keyDirectObject keyword) out of the Apple event. The handler requests that AEGetParamDesc return a descriptor list in the docList variable. The handler then checks that it has retrieved all of the required parameters by calling the MyGotRequiredParams function. (See Listing 4-11 on page 4-35 for a description of this function.)Once the handler has retrieved the descriptor list from the Apple event, it uses AECountItems to count the number of descriptors in the list. Using the returned number as an index, the handler can get the data of each descriptor record in the list. This handler requests that the AEGetNthPtr function coerce the data in the descriptor record to a file system specification record. The handler can then use the file system specification record as a parameter to its own routine for opening files.For more information on the AEGetParamDesc function, see page 4-69. For more information on the AEGetNthPtr and AECountItems functions, see “Getting Data Out of a Descriptor List” on page 4-31.After extracting the file system specification record that describes the document to open, your application can use this record to open the file. For example, in Listing 4-6, the code passes the file system specification record to its routine for opening files, the MyOpenFile function. The MyOpenFile function should be designed so that it can be called in response to both the Open Documents event and to events generated by the user. For example, when the user chooses Open from the File menu, the code that handles the mouse-down event uses the StandardGetFile procedure to let the user choose a file; it then calls MyOpenFile, passing the file system specification record returned by StandardGetFile. By isolating code that performs a requested action from code that interacts with the user, you can easily adapt your application to handle Apple events that request the same action. Note the use of the AEDisposeDesc function to dispose of the descriptor list when your handler no longer requires the data in it. Your handler should also return a result code.Handling the Print Documents EventTo handle the Print Documents event, your application should extract information about the documents to be printed from the direct parameter, then print the specified documents. If your application can interact with the user, it should open windows for the documents, display a Print dialog box for the first document, and use the settings entered by the user for the first document to print all the documents. If user interaction is not allowed, your application may either return the error errAENoUserInteraction or print the documents using default settings. See “Interacting With the User,” which begins on page 4-45, for information about using the AEInteractWithUser function to interact with the user. Note that your application can remain open after processing the Print Documents event; when appropriate, the Finder sends your application a Quit Application event immediately after sending it a Print Documents event.The handler for the Print Documents event shown in Listing 4-7 is similar to the handler for the Open Documents event, except that it prints the documents referred to in the direct parameter.Listing 4-7    A handler for the Print Documents eventFUNCTION MyHandlePDoc (theAppleEvent, reply: AppleEvent;                               handlerRefcon: LongInt): OSErr;VAR    myFSS:                              FSSpec;    docList:                              AEDescList;    myErr, ignoreErr:                              OSErr;    index, itemsInList:                            LongInt;    actualSize:                              Size;    keywd:                              AEKeyword;    returnedType:                              DescType;BEGIN    {get the direct parameter--a descriptor list--and put it }    { into docList}    myErr := AEGetParamDesc(theAppleEvent, keyDirectObject,                                    typeAEList, docList);    IF myErr = noErr THEN     BEGIN        {check for missing required parameters}        myErr := MyGotRequiredParams(theAppleEvent);        IF myErr = noErr THEN         BEGIN            {count the number of descriptor records in the list}            myErr := AECountItems (docList, itemsInList);            IF myErr = noErr THEN                {now get each descriptor record from the list, }                { coerce the returned data to an FSSpec record, and }                { print the associated file}                FOR index := 1 TO itemsInList DO                BEGIN                    myErr := AEGetNthPtr(docList, index, typeFSS,                                                 keywd, returnedType, @myFSS,                                                 Sizeof(myFSS), actualSize);                    IF myErr = noErr THEN                    BEGIN                        myErr := MyPrintFile(@myFSS);                        IF myErr <> noErr THEN                             ; {handle error from MyOpenFile}                    END                    ELSE                        ; {handle error from AEGetNthPtr}                END; {of For index Do}        END        ELSE            ; {handle error from MyGotRequiredParams}        ignoreErr := AEDisposeDesc(docList);    END    ELSE        ; {failed to get direct parameter, handle error}    MyHandlePDoc := myErr;END;Handling the Quit Application EventTo handle the Quit Application event, your application should take any actions that are necessary before it is terminated (such as saving any open documents). Listing 4-8 shows an example of a handler for the Quit Application event.When appropriate, the Finder sends your application a Quit Application event immediately after a Print Documents event. The Finder also sends your application a Quit Application event if the user chooses Restart or Shut Down from the Finder’s Special menu. Listing 4-8    A handler for the Quit Application eventFUNCTION MyHandleQuit (theAppleEvent, reply: AppleEvent;                               handlerRefcon: LongInt): OSErr;VAR    myErr:                    OSErr;    userCanceled:                    Boolean;BEGIN    {check for missing required parameters}    myErr := MyGotRequiredParams(theAppleEvent);    IF myErr = noErr THEN     BEGIN        userCanceled := MyPrepareToTerminate;        IF userCanceled THEN            MyHandleQuit := kUserCanceled        ELSE            MyHandleQuit := noErr;    END    ELSE        MyHandleQuit := myErr;END;The handler in Listing 4-8 calls another function supplied by the application, the MyPrepareToTerminate function. This function saves the documents for any open windows and returns a Boolean value that indicates whether the user canceled the Quit operation. This is another example of isolating code for interacting with the user from the code that performs the requested action. By structuring your application in this way, you can use the same routine to respond to a user action (such as choosing the Quit command from the File menu) or to the corresponding Apple event. (For a description of the MyGotRequiredParams function, see “Writing Apple Event Handlers” on page 4-33.)IMPORTANTWhen your application is ready to quit, it should call the ExitToShell procedure from the main event loop, not from your handler for the Quit Application event. Your application should quit only after the handler returns noErr as its function result.sHandling Apple Events Sent by the Edition ManagerIf your application provides publish and subscribe capabilities, it should handle the Apple events sent by the Edition Manager in addition to the required Apple events. Your application should also handle the Create Publisher event, which is described in the “Handling the Create Publisher Event” section on page 4-22.The Edition Manager sends your application Apple events to communicate information about the publishers and subscribers in your application’s documents. Specifically, the Edition Manager uses Apple events to notify your application n    when the information in an edition is updatedn    when your application needs to write the data from a publisher to an editionn    when your application should locate a particular publisher and scroll through the document to that locationThe Section Read, Section Write, and Section Scroll EventsThe following descriptions identify the three Apple events sent by the Edition Manager—Section Read, Section Write, and Section Scroll—and the actions they tell applications to perform.Section Read—read information into the specified section (continued)            Event class        SectionEventMsgClass    Event ID        SectionReadMsgID    Required parameter                Keyword:    keyDirectObject        Descriptor type:    typeSectionH        Data:    A handle to the section record of the subscriber whose edition contains updated information    Requested action        Update the subscriber with the new information from the edition.    Section Write—write the specified section to an edition            Event class        SectionEventMsgClass    Event ID        SectionWriteMsgID    Required parameter                Keyword:    keyDirectObject        Descriptor type:    typeSectionH        Data:    A handle to the section record of the publisher    Requested action        Write the publisher’s data to its edition.    Section Scroll—scroll through the document to the specified section            Event class        SectionEventMsgClass    Event ID        SectionScrollMsgID    Required parameter                Keyword:    keyDirectObject        Descriptor type:    typeSectionH        Data:    A handle to the section record of the publisher to scroll to    Requested action        Scroll through the document to the publisher identified by the specified section record.     See the chapter “Edition Manager” in this book for details on how your application should respond to these events.Handling the Create Publisher EventIf your application supports publish and subscribe capabilities, it should also handle the Create Publisher event.Create Publisher—create a publisher            Event class        kAEMiscStdSuite    Event ID        kAECreatePublisher    Required parameter        None    Optional parameter                Keyword:    keyDirectObject        Descriptor type:    typeObjectSpecifier        Data:    An object specifier record that specifies the Apple event object or objects to publish. If this parameter is omitted, publish the current selection.    Optional parameter                Keyword:    keyAEEditionFileLoc        Descriptor type:    typeAlias        Data:    An alias record that contains the location of the edition container to create. If this parameter is omitted, use the default edition container.    Requested action        Create a publisher for the specified data using the specified loca-tion for the edition container. If the data isn’t specified, publish the current selection. If the location of the edition isn’t specified, use the default location.       When your application receives the Create Publisher event, it should create a publisher and write the publisher’s data to an edition. The data of the publisher, and the location and name of the edition, are defined by the Apple event. If the Create Publisher event includes a keyDirectObject parameter, then your application should publish the data contained in the parameter. If the keyDirectObject parameter is missing, then your application should publish the current selection. If the document doesn’t have a current selection, your handler for the event should return a nonzero result code.If the Create Publisher event includes a keyAEEditionFileLoc parameter, your application should use the location and name contained in the parameter as the default location and name of the edition. If the keyAEEditionFileLoc parameter is missing, your application should use the default location and name your application normally uses to specify the edition container.Listing 4-9 shows a handler for the Create Publisher event. This handler checks for the keyDirectObject parameter and the keyAEEditionFileLoc parameter. If either of these is not specified, the handler uses default values. The handler uses the application-defined function DoNewPublisher to create the publisher and its edition, create a section record, and update other data structures associated with the document. See the chapter “Edition Manager” in this book for an example of the DoNewPublisher function.Listing 4-9    A handler for the Create Publisher eventFUNCTION MyHandleCreatePublisherEvent (theAppleEvent,                                                    reply: AppleEvent;                                                     handlerRefcon: LongInt)                                                    : OSErr;VAR            myErr:                                 OSErr;    returnedType:                                DescType;    thePublisherDataDesc:                                AEDesc;    actualSize:                                 LongInt;    promptForDialog:                                Boolean;    thisDocument:                                 MyDocumentInfoPtr;    preview:                                 Handle;     previewFormat:                                 FormatType;     defaultLocation:                                 EditionContainerSpec;BEGIN    MyGetDocumentPtr(thisDocument);    myErr := AEGetParamDesc(theAppleEvent, keyDirectObject,                                     typeObjectSpecifier,                                     thePublisherDataDesc);    CASE myErr OF        errAEDescNotFound:         BEGIN            {use the current selection as the publisher and set up }            { info for later when DoNewPublisher displays preview}            preview := MyGetPreviewForSelection(thisDocument);            previewFormat := 'TEXT';        END;        noErr:             {use the data in keyDirectObject parameter as the }            { publisher (which is returned in the }            { thePublisherDataDesc variable), and set up info for }            { later when DoNewPublisher displays preview}            MySetInfoForPreview(thePublisherDataDesc, thisDocument,                                        preview, previewFormat);        OTHERWISE        BEGIN            MyHandleCreatePublisherEvent := myErr;            Exit(MyHandleCreatePublisherEvent);        END;     END;    myErr := AEDisposeDesc(thePublisherDataDesc);    myErr := AEGetParamPtr(theAppleEvent, keyAEEditionFileLoc,                                  typeFSS, returnedType,                                  @defaultLocation.theFile,                                 SizeOf(FSSpec), actualSize);    CASE myErr OF        errAEDescNotFound:             {use the default location as the edition container}                myErr := MyGetDefaultEditionSpec(thisDocument,                                                             defaultLocation);        noErr:         BEGIN                        {the keyAEEditionFileLoc parameter }                                { contains a default location}            defaultLocation.thePart := kPartsNotUsed;            defaultLocation.theFileScript := smSystemScript;        END;        OTHERWISE        BEGIN            MyHandleCreatePublisherEvent := myErr;            Exit(MyHandleCreatePublisherEvent);        END;     END;    myErr := MyGotRequiredParams(theAppleEvent);    IF myErr <> noErr THEN    BEGIN        MyHandleCreatePublisherEvent := myErr;        Exit(MyHandleCreatePublisherEvent);    END;    myErr := AEInteractWithUser(kAEDefaultTimeout, gMyNotifyRecPtr,                                             @MyIdleFunction);    IF myErr = noErr THEN promptForDialog := TRUE                          ELSE promptForDialog := FALSE;    myErr := DoNewPublisher(thisDocument, promptForDialog,                                     preview, previewFormat,                                     defaultLocation);    {add keyErrorNumber and keyErrorString parameters if desired}END;Note that the MyHandleCreatePublisherEvent handler in Listing 4-9 uses the AEInteractWithUser function to determine whether user interaction is allowed. If so, the handler sets the promptForDialog variable to TRUE, indicating that the DoNewPublisher function should display the publisher dialog box. If not, the handler sets the promptForDialog variable to FALSE, and the DoNewPublisher function does not prompt the user for the location or name of the edition. For more information about AEInteractWithUser, see “Interacting With the User,” which begins on page 4-45.  Getting Data Out of an Apple EventThe Apple Event Manager stores the parameters and attributes of an Apple event in a format that is internal to the Apple Event Manager. You use Apple Event Manager functions to retrieve the data from an Apple event and return it to your application in a format your application can use.Most of the functions that retrieve data from Apple event parameters and attributes are available in two forms: one that returns the desired data in a specified buffer and one that returns a descriptor record containing the same data. For example, the AEGetParamPtr function uses a specified buffer to return the data contained in an Apple event parameter, and the AEGetParamDesc function returns the descriptor record for a specified parameter. You can also use Apple Event Manager functions to get data out of descriptor records, descriptor lists, and AE records. You use similar functions to put data into descriptor records, descriptor lists, and AE records.When your handler receives an Apple event, you typically use the AEGetParamPtr, AEGetAttributePtr, AEGetParamDesc, or AEGetAttributeDesc function to get the data out of the Apple event.Some Apple Event Manager functions let your application request that the data be returned using any descriptor type, even if it is different from the original descriptor type. If the original data is of a different descriptor type, the Apple Event Manager attempts to coerce the data to the requested descriptor type. For example, the AEGetParamPtr function lets you specify the desired descriptor type of the resulting data as follows:VAR    theAppleEvent:                        AppleEvent;    returnedType:                         DescType;    multResult:                        LongInt;    actualSize:                         Size;    myErr:                         OSErr;myErr := AEGetParamPtr(theAppleEvent, keyMultResult,                               typeLongInteger, returnedType,                               @multResult, SizeOf(multResult),                              actualSize);In this example, the desired type is specified in the third parameter by the typeLongInteger descriptor type. This requests that the Apple Event Manager coerce the data to a long integer if it is not already of this type. To prevent coercion and ensure that the descriptor type of the result is of the same type as the original, specify typeWildCard for the third parameter.The Apple Event Manager returns, in the returnedType parameter, the descriptor type of the resulting data. This is useful information when you specify typeWildCard as the desired descriptor type; you can determine the descriptor type of the resulting data by examining this parameter.The Apple Event Manager can coerce many different types of data. For example, the Apple Event Manager can convert alias records to file system specification records, integers to Boolean data types, and characters to numeric data types, in addition to other data type conversions. For a complete list of the data types for which the Apple Event Manager provides coercion handling, see Table 4-1 on page 4-43.To perform data coercions that the Apple Event Manager doesn’t perform, you can provide your own coercion handlers. See “Writing and Installing Coercion Handlers,” which begins on page 4-41, for information on providing your own coercion handlers.Apple event parameters are keyword-specified descriptor records. You can use AEGetParamDesc to get the descriptor record of a parameter, or you can use AEGetParamPtr to get the data out of the descriptor record of a parameter. If an Apple event parameter consists of an object specifier record, you can use AEResolve and your own object accessor functions to resolve the object specifier record—that is, to locate the Apple event object it describes. For more information about AEResolve and object accessor functions, see “Writing Object Accessor Functions,” which begins on page 6-28. Attributes are also keyword-specified descriptor records, and you can use similar routines to get the descriptor record of an attribute or to get the data out of an attribute.The following sections show how to use the AEGetParamPtr, AEGetAttributePtr, AEGetParamDesc, or AEGetAttributeDesc function to get the data out of an Apple event.Getting Data Out of an Apple Event ParameterYou can use the AEGetParamPtr or AEGetParamDesc function to get the data out of an Apple event parameter. Use the AEGetParamPtr function (or the AEGetKeyPtr function, which works the same way) to return the data contained in a parameter. Use the AEGetParamDesc function when you need to get the descriptor record of a parameter or to extract the descriptor list from a parameter.For example, suppose you need to get the data out of a Section Read event. The Edition Manager sends your application a Section Read event to tell your application to read updated information from an edition into the specified subscriber. The direct parameter of the Apple event contains a handle to the section record of the subscriber. You can use the AEGetParamPtr function to get the data out of the Apple event.You specify the Apple event that contains the desired parameter, the keyword of the desired parameter, the descriptor type the function should use to return the data, a buffer to store the data, and the size of this buffer as parameters to the AEGetParamPtr function. The AEGetParamPtr function returns the descriptor type of the resulting data and the actual size of the data, and it places the requested data in the specified buffer.VAR    sectionH:                        SectionHandle;    theAppleEvent:                        AppleEvent;    returnedType:                         DescType;    actualSize:                         Size;    myErr:                         OSErr;myErr := AEGetParamPtr(theAppleEvent, keyDirectObject,                               typeSectionH, returnedType, @sectionH,                               SizeOf(sectionH), actualSize);In this example, the keyDirectObject keyword specifies that the AEGetParamPtr function should extract information from the direct parameter; AEGetParamPtr returns the data in the buffer specified by the sectionH variable. You can request that the Apple Event Manager return the data using the descriptor type of the original data or you can request that the Apple Event Manager coerce the data into a descriptor type that is different from the original. To prevent coercion, specify the desired descriptor type as typeWildCard.The typeSectionH descriptor type specifies that the returned data should be coerced to a handle to a section record. You can use the information returned in the sectionH variable to identify the subscriber and read in the information from the edition.In this example, the AEGetParamPtr function returns, in the returnedType variable, the descriptor type of the resulting data. The descriptor type of the resulting data matches the requested descriptor type unless the Apple Event Manager wasn’t able to coerce the data to the specified descriptor type or you specified the desired descriptor type as typeWildCard. If the coercion fails, the Apple Event Manager returns the errAECoercionFail result code.The AEGetParamPtr function returns, in the actualSize variable, the actual size of the data (that is, the size of coerced data, if any coercion was performed). If the value returned in this variable is greater than the amount your application allocated for the buffer to hold the returned data, your application can increase the size of its buffer to this amount, and get the data again. You can also choose to use the AEGetParamDesc function when your application doesn’t know the size of the data.In general, use the AEGetParamPtr function to extract data that is of fixed length or known maximum length, and the AEGetParamDesc function to extract data that is of variable length. The AEGetParamDesc function returns the descriptor record for an Apple event parameter. This function is useful, for example, for extracting a descriptor list from a parameter. You specify, as parameters to AEGetParamDesc, the Apple event that contains the desired parameter, the keyword of the desired parameter, the descriptor type the function should use to return the descriptor record, and a buffer to store the returned descriptor record. The AEGetParamDesc function returns the descriptor record using the specified descriptor type. For example, the direct parameter of the Open Documents event contains a descriptor list that specifies the documents to open. You can use the AEGetParamDesc function to get the descriptor list out of the direct parameter.VAR    docList:                        AEDescList;    theAppleEvent:                        AppleEvent;    myErr:                         OSErr;myErr := AEGetParamDesc(theAppleEvent, keyDirectObject,                                 typeAEList, docList);In this example, the Apple event specified by the variable theAppleEvent contains the desired parameter. The keyDirectObject keyword specifies that the AEGetParamDesc function should get the descriptor record of the direct parameter. The typeAEList descriptor type specifies that the descriptor record should be returned as a descriptor list. In this example, the AEGetParamDesc function returns a descriptor list in the docList variable.The descriptor list contains a list of descriptor records. To get the descriptor records and their data out of a descriptor list, use the AECountItems function to find the number of descriptor records in the list and then make repetitive calls to the AEGetNthPtr function to get the data out of each descriptor record. See “Getting Data Out of a Descriptor List” on page 4-31 for more information.Note that the AEGetParamDesc function copies the descriptor record from the parameter. When you’re done with a descriptor record that you obtained from AEGetParamDesc, you must dispose of it by calling the AEDisposeDesc function.If an Apple event parameter consists of an object specifier record, you can use AEResolve to resolve the object specifier record (that is, locate the Apple event object it describes), as explained in “Finding Apple Event Objects” on page 3-46.Getting Data Out of an AttributeYou can use the AEGetAttributePtr or AEGetAttributeDesc function to get the data out of the attributes of an Apple event. You specify, as parameters to AEGetAttributePtr, the Apple event that contains the desired attribute, the keyword of the desired attribute, the descriptor type the function should use to return the data, a buffer to store the data, and the size of this buffer. The AEGetAttributePtr function returns the descriptor type of the returned data and the actual size of the data and places the requested data in the specified buffer.For example, this code gets the data out of the keyEventSourceAttr attribute of an Apple event.VAR    theAppleEvent:                        AppleEvent;    returnedType:                         DescType;    sourceOfAE:                        Integer;    actualSize:                        Size;    myErr:                         OSErr;myErr := AEGetAttributePtr(theAppleEvent, keyEventSourceAttr,                                      typeShortInteger, returnedType,                                     @sourceOfAE, SizeOf(sourceOfAE),                                     actualSize); The keyEventSourceAttr keyword specifies the attribute from which to get the data. The typeShortInteger descriptor type specifies that the data should be returned as a short integer; the returnedType variable contains the actual descriptor type that is returned. You also must specify a buffer to hold the returned data and specify the size of this buffer. If the data is not already a short integer, the Apple Event Manager coerces it as necessary before returning it. The AEGetAttributePtr function returns, in the actualSize variable, the actual size of the returned data after coercion has taken place. You can check this value to make sure you got all the data.As with the AEGetParamPtr function, you can request that AEGetAttributePtr return the data using the descriptor type of the original data, or you can request that the Apple Event Manager coerce the data into a descriptor type that is different from the original. In this example, the AEGetAttributePtr function returns the requested data as a short integer in the sourceOfAE variable, and you can get information about the source of the Apple event by examining this value. You can test the returned value against the values defined by the data type AEEventSource.TYPE AEEventSource = (kAEUnknownSource, kAEDirectCall,                              kAESameProcess, kAELocalProcess,                              kAERemoteProcess);The constants defined by the data type AEEventSource have the following meanings:Constant     Meaning    kAEUnknownSource    Source of Apple event unknown    kAEDirectCall    A direct call that bypassed the PPC Toolbox    kAESameProcess    Target application is also the source application    kAELocalProcess    Source application is another process on the same computer as the target application    kAERemoteProcess    Source application is a process on a remote computer on the network    The next example shows how to use the AEGetAttributePtr function to get data out of the keyMissedKeywordAttr attribute. After your handler extracts all known parameters from an Apple event, it should check whether the keyMissedKeywordAttr attribute exists. If it does, then your handler did not get all of the required parameters.Note that if AEGetAttributePtr returns the errAEDescNotFound result code, then the keyMissedKeywordAttr attribute does not exist—that is, your application has extracted all of the required parameters. If AEGetAttributePtr returns noErr, then the keyMissedKeywordAttr attribute does exist—that is, your handler did not get all of the required parameters.myErr := AEGetAttributePtr(theAppleEvent, keyMissedKeywordAttr,                                     typeWildCard, returnedType, NIL, 0,                                     actualSize);The data in the keyMissedKeywordAttr attribute contains the keyword of the first required parameter, if any, that your handler didn’t retrieve. If you want this data returned, specify a buffer to hold it and specify the buffer size. Otherwise, as in this example, specify NIL as the buffer and 0 as the size of the buffer.This example shows how to use the AEGetAttributePtr function to get the address of the sender of an Apple event from the keyAddressAttr attribute of the Apple event:VAR    theAppleEvent:     AppleEvent;    returnedType:                     DescType;    addressOfAE:                     TargetID;    actualSize:                     Size;    myErr:                     OSErr;myErr := AEGetAttributePtr(theAppleEvent, keyAddressAttr,                                     typeTargetID, returnedType,                                     @addressOfAE, SizeOf(addressOfAE),                                     actualSize);The keyAddressAttr keyword specifies the attribute to get the data from. The typeTargetID descriptor type specifies that the data should be returned as a target ID record; the returnedType variable contains the actual descriptor type that is returned. You can examine the address returned in the addressOfAE variable to determine the sender of the Apple event.The target ID record returned in the addressOfAE variable contains the sender’s port name, port location, and session reference number. To get the process serial number for a process on the local machine, pass the port name returned in the target ID record to the GetProcessSerialNumberFromPortName function. You can then pass the process serial number to the GetProcessInformation function to find the creator signature for a given process. (For more information about these functions, see the chapter “Event Manager” in Inside Macintosh: Macintosh Toolbox Essentials.)For more information about target addresses, see “Specifying a Target Address” on page 5-10.Getting Data Out of a Descriptor ListYou can use the AECountItems function to count the number of items in a descriptor list, and you can use AEGetNthDesc or AEGetNthPtr to get a descriptor record or its data out of a descriptor list.The Open Documents event contains a direct parameter that specifies the list of documents to open. The list of documents is contained in a descriptor list. After extracting the descriptor list from the parameter, you can determine the number of items in the list and then extract each descriptor record from the descriptor list. See Figure 3-9 on page 3-19 for a depiction of the Open Documents event.For example, when your handler receives an Open Documents event, you can use the AEGetParamDesc function to return the direct parameter as a descriptor list. You can then use AECountItems to return the number of descriptor records in the list.VAR    theAppleEvent:                        AppleEvent;    docList:                        AEDescList;    itemsInList:                        LongInt;    myErr:                        OSErr;myErr := AEGetParamDesc(theAppleEvent, keyDirectObject,                                typeAEList, docList);myErr := AECountItems(docList, itemsInList);The AEGetParamDesc function returns, in the docList variable, a copy of the descriptor list from the direct parameter of the Open Documents event. You specify this list to the AECountItems function.You specify the descriptor list whose items you want to count in the first parameter to AECountItems. The Apple Event Manager returns, in the second parameter, the number of items in the list. When extracting the descriptor records from a list, you often use the number of items as a loop index. Here’s an example:FOR index := 1 TO itemsInList DO    BEGIN    {for each descriptor record in the list, get its data}    END;The format of the descriptor records in a descriptor list is private to the Apple Event Manager. You must use the AEGetNthPtr or AEGetNthDesc function to extract descriptor records from a descriptor list.  You specify the descriptor list that contains the desired descriptor records and an index as parameters to the AEGetNthPtr function. The index represents a specific descriptor record in the descriptor list. The AEGetNthPtr function returns the data for the descriptor record represented by the specified index. You also specify the descriptor type the function should use to return the data, a buffer to store the data, and the size of this buffer. If the specified descriptor record exists, the AEGetNthPtr function returns the keyword of the parameter, the descriptor type of the returned data, and the actual size of the data, and it places the requested data in the specified buffer.Here’s an example that uses the AEGetNthPtr function to extract an item from the descriptor list in the direct parameter of the Open Documents event:myErr := AEGetNthPtr(docList, index, typeFSS, keywd,                             returnedType, @myFSS, Sizeof(myFSS),                             actualSize);The docList variable specifies the descriptor list from the direct parameter of the Open Documents event. The index variable specifies the index of the descriptor record to extract. You can use the typeFSS descriptor type, as in this example, to specify that the data be returned as a file system specification record. The Apple Event Manager automatically coerces the original data type of the descriptor record from an alias record to a file system specification record. The AEGetNthPtr function returns the keyword of the parameter and the descriptor type of the resulting data in the keywd and returnedType variables, respectively. You also specify a buffer to hold the desired data and the size (in bytes) of the buffer. In this example, the myFSS variable specifies the buffer. The function returns the actual size of the data in the actualSize variable. If this size is larger than the size of the buffer you provided, you know that you didn’t get all of the data for the descriptor record.Listing 4-10 shows a more complete example of extracting the items from a descriptor list in the Open Documents event.Listing 4-10    Extracting items from a descriptor listVAR    index:                        LongInt;    itemsInList:                         LongInt;    docList:                        AEDescList;    keywd:                         AEKeyword;    returnedType:                         DescType;    myFSS:                        FSSpec;    actualSize:                         Size;    myErr:                         OSErr;FOR index := 1 TO itemsInList DO    BEGIN        myErr := AEGetNthPtr(docList, index, typeFSS, keywd,                                     returnedType, @myFSS, Sizeof(myFSS),                                     actualSize);        IF myErr <> noErr THEN DoError(myErr);        myErr := MyOpenFile(@myFSS);        IF myErr <> noErr THEN DoError(myErr);    END;myErr := AEDisposeDesc(docList);  Writing Apple Event HandlersFor each Apple event your application supports, you must provide a function called an Apple event handler. The AEProcessAppleEvent function calls one of your Apple event handlers when it processes an Apple event. Your Apple event handlers should perform any action requested by the Apple event, add parameters to the reply Apple event if appropriate, and return a result code.The Apple Event Manager uses dispatch tables to route Apple events to the appropriate Apple event handler. You must supply an Apple event handler for each entry in your application’s Apple event dispatch table. Each handler must be a function that uses this syntax:FUNCTION MyEventHandler (theAppleEvent: AppleEvent;                                  reply: AppleEvent;                                  handlerRefcon: LongInt): OSErr; The parameter theAppleEvent is the Apple event to handle. Your handler uses Apple Event Manager functions to extract any parameters and attributes from the Apple event and then performs the necessary processing. If any of the parameters include object specifier records, your handler should call AEResolve to resolve them—that is, to locate the Apple event objects they describe. For more information, see the chapter “Resolving and Creating Object Specifier Records” in this book.The reply parameter is the default reply provided by the Apple Event Manager. (“Replying to an Apple Event,” which begins on page 4-36, describes how to add parameters to the default reply.) The handlerRefcon parameter is the reference constant stored in the Apple event dispatch table entry for the Apple event. Your handler can check the reference constant, if necessary, for information about the Apple event.You can use the reference constant for anything you wish. For example, if you want to use the same handler for several Apple events, you can install entries for each event in your application’s Apple event dispatch table that specify the same handler but different reference constants. Your handler can then use the reference constant to distinguish the different Apple events it handles.To provide an Apple event handler in C, be sure to include the Pascal declaration before the handler declaration. This is the syntax for an Apple event handler in C: pascal OSErr MyEventHandler (const AppleEvent *theAppleEvent,                                       const AppleEvent *reply,                                       long handlerRefcon);After extracting all known parameters from the Apple event, every handler should determine whether the Apple event contains any further required parameters. Your handler can determine whether it retrieved all the required parameters by checking whether the keyMissedKeywordAttr attribute exists. If the attribute exists, then your handler has not retrieved all the required parameters and should immediately return an error. If the attribute does not exist, then the Apple event does not contain any more required parameters, although it may contain additional optional parameters.The Apple Event Manager determines which parameters are optional according to the keywords listed in the keyOptionalKeywordAttr attribute. The source application is responsible for adding these keywords to the keyOptionalKeywordAttr attribute, but is not required to do so, even if that parameter is listed in the Apple Event Registry: Standard Suites as an optional parameter. If the source application does not add the necessary keyword to the keyOptionalKeywordAttr attribute, the target application treats the parameter as required for that Apple event. If the target application supports the parameter, it should handle the Apple event as the source application expects. If the target application does not support the parameter and checks whether it has received all the required parameters, it finds that there’s another parameter that the client application considered required, and should return the result code errAEParamMissed without attempting to handle the event. Listing 4-11 shows a function that checks for a keyMissedKeywordAttr attribute. A handler calls this function after getting all the required parameters it knows about from an Apple event.Listing 4-11    A function that checks for a keyMissedKeywordAttr attributeFUNCTION MyGotRequiredParams (theAppleEvent: AppleEvent): OSErr;VAR    myErr:                        OSErr;    returnedType:                        DescType;    actualSize:                        Size;BEGIN    myErr := AEGetAttributePtr(theAppleEvent,                                          keyMissedKeywordAttr,                                            typeWildCard, returnedType,                                          NIL, 0, actualSize);    IF myErr = errAEDescNotFound THEN                                                     {you got all the required parameters}        MyGotRequiredParams := noErr    ELSE IF myErr = noErr THEN                                                      {you missed a required parameter}        MyGotRequiredParams := errAEParamMissed;END;The code in Listing 4-11 uses the AEGetAttributePtr function to get the keyMissedKeywordAttr attribute. This attribute contains the first required parameter, if any, that your handler didn’t retrieve. If AEGetAttributePtr returns the errAEDescNotFound result code, the Apple event doesn’t contain a keyMissedKeywordAttr attribute. If the Apple event doesn’t contain this attribute, then your handler has extracted all of the parameters that the client application considered required. If the AEGetAttributePtr function returns noErr as the result code, then the attribute does exist, meaning that your handler has not extracted all of the required parameters. In this case, your handler should return an error and not process the Apple event.The first remaining required parameter is specified by the data of the keyMissedKeywordAttr attribute. If you want this data returned, specify a buffer to hold the data. Otherwise, specify NIL as the buffer and 0 as the size of the buffer. If you specify a buffer to hold the data, you can check the value of the actualSize parameter to see if the data is larger than the buffer you allocated.For more information about specifying Apple event parameters as optional or required, see “Specifying Optional Parameters for an Apple Event” beginning on page 5-7. Replying to an Apple EventYour handler routine for a particular Apple event is responsible for performing the action requested by the Apple event, and can optionally return data in a reply Apple event. The Apple Event Manager passes a default reply Apple event to your handler. The default reply Apple event has no parameters when it is passed to your handler. Your handler can add parameters to the reply Apple event. If the client application requested a reply, the Apple Event Manager returns the reply Apple event to the client. The reply Apple event is identified by the kCoreEventClass event class and by the kAEAnswer event ID. If the client application specified the kAENoReply flag in the reply parameter of the AESend function, the Apple Event Manager passes a null descriptor record (a descriptor record of type typeNull whose data handle has the value NIL) to your handler instead of a default reply Apple event. Your handler should check the descriptor type of the reply Apple event before attempting to add any attributes or parameters to it. An attempt to add an Apple event attribute or parameter to a null descriptor record generates an error. If the client application requests a reply, the Apple Event Manager prepares a reply Apple event for the client by passing a default reply Apple event to your handler. The default reply Apple event has no parameters when it is passed to your handler. Your handler can add any parameters to the reply Apple event. If your application is a spelling checker, for example, you can return a list of misspelled words in a parameter. When your handler finishes processing an Apple event, it returns a result code to AEProcessAppleEvent, which returns this result code as its function result. If your handler returns a nonzero result code, and if you have not added your own keyErrorNumber parameter, the Apple Event Manager also returns this result code to the client application by putting the result code into a keyErrorNumber parameter for the reply Apple event. The client can check for the existence of this parameter to determine whether the handler performed the requested action.The client application specifies whether it wants a reply Apple event or not by specifying flags (represented by constants) in the sendMode parameter of the AESend function.If the client specifies the kAEWaitReply flag in the sendMode parameter, the AESend function does not return until the timeout specified by the timeoutInTicks parameter expires or the server application returns a reply. When the server application returns a reply, the reply parameter to AESend contains the reply Apple event that your handler returned to the AEProcessAppleEvent function. When the client application no longer needs the original Apple event and the reply event, it must dispose of them, but the Apple Event Manager disposes of both the Apple event and the reply event for the server application when the server’s handler returns to AEProcessAppleEvent.  If the client specified the kAEQueueReply flag, the client receives the reply event at a later time during its normal processing of other events. Your handler should always set its function result to noErr if it successfully handles the Apple event. If an error occurs, your handler should return either errAEEventNotHandled or some other nonzero result code. If the error occurs because your application cannot understand the event, return errAEEventNotHandled. This allows the Apple Event Manager to look for a handler in the system special handler or system Apple event dispatch tables that might be able to handle the event. If the error occurs because the event is impossible to handle as specified, return the result code returned by whatever function caused the failure, or whatever other result code is appropriate.For example, suppose your application receives a Get Data event requesting the name of the current printer, and your application cannot handle such an event. In this situation, you should return errAEEventNotHandled in case another handler available to the Apple Event Manager can handle the Get Data event. This strategy allows users to take advantage of system capabilities from within your application via system handlers. However, if your application cannot handle a Get Data event that requests the fifth paragraph in a document because the document contains only four paragraphs, you should return some other nonzero error, because further attempts to handle the event are pointless.If your Apple event handler calls the AEResolve function and AEResolve calls an object accessor function in the system object accessor dispatch table, your Apple event handler may not recognize the descriptor type of the token returned by the function. In this case, your handler should return the result code errAEUnknownObjectType. When your handler returns this result code, the Apple Event Manager attempts to locate a system Apple event handler that can recognize the token. For more information, see “Installing Entries in the Object Accessor Dispatch Tables,” which begins on page 6-21.The Apple Event Manager automatically adds any nonzero result code that your handler returns to a keyErrorNumber parameter in the reply Apple event. In addition to returning a result code, your handler can also return an error string in the keyErrorString parameter of the reply Apple event. Your handler should provide meaningful text in the keyErrorString parameter, so that the client can display this string to the user if desired. Listing 4-12 shows how to add the keyErrorString parameter to the reply Apple event. See “Adding Parameters to an Apple Event” on page 5-5 for a description of the AEPutParamPtr function.Listing 4-12    Adding the keyErrorString parameter to the reply Apple eventFUNCTION MyHandler (theAppleEvent: AppleEvent; reply: AppleEvent;                          handlerRefcon: LongInt): OSErr; VAR    myErr:                OSErr;    errStr:                Str255;BEGIN    {handle your Apple event here}    {if an error occurs when handling an Apple event, set the }    { function result and error string accordingly}    IF myErr <> noErr THEN    BEGIN        MyHandler := myErr;     {result code to be returned--the }                                    { Apple Event Manager adds this }                                    { result code to the reply Apple }                                    { event as the keyErrorNumber }                                    { parameter}        IF (reply.dataHandle <> NIL) THEN        {add error string parameter to the default reply}        BEGIN            {strings should normally be stored in resources}            errStr := 'Why error occurred';            myErr := AEPutParamPtr(reply, keyErrorString,                                             typeIntlText, @errStr[1],                                             length(errStr));        END;    END    ELSE        MyHandler := noErr;END;If your handler needs to return data to the client, it can add parameters to the reply Apple event. Listing 4-13 shows how a handler for the Multiply event (an imaginary Apple event that asks the server to multiply two numbers) might return the results of the multiplication to the client.Listing 4-13    Adding parameters to the reply Apple eventFUNCTION MyMultHandler (theAppleEvent: AppleEvent;                                 reply: AppleEvent;                                 handlerRefcon: LongInt): OSErr; VAR    myErr:                        OSErr;    number1,number2:                        LongInt;    replyResult:                        LongInt;    actualSize:                        Size;    returnedType:                        DescType;BEGIN    {get the numbers to multiply from the parameters of the }    { Apple event; put the numbers in the number1 and number2 }    { variables and then perform the requested multiplication}    myErr := MyDoMultiply(theAppleEvent, number1,                                     number2, replyResult);    IF myErr = noErr THEN         IF (reply.dataHandle <> NIL) THEN            {return result of the multiplication in the reply Apple }            { event}            myErr := AEPutParamPtr(reply, keyDirectObject,                                             typeLongInteger, @replyResult,                                             SizeOf(replyResult));    MyMultHandler := myErr;    {if an error occurs, set the error string }    { accordingly, as shown in Listing 4-12}END;Disposing of Apple Event Data StructuresWhenever a client application uses Apple Event Manager functions to create a descriptor record, descriptor list, or Apple event record, the Apple Event Manager allocates memory for these data structures in the client’s application heap. Likewise, when a server application extracts a descriptor record from an Apple event by using Apple Event Manager functions, the Apple Event Manager creates a copy of the descriptor record, including the data to which its handle refers, in the server’s application heap.Whenever you finish using a descriptor record or descriptor list that you have created or extracted from an Apple event, you should dispose of the descriptor record—and thereby deallocate the memory it uses—by calling the AEDisposeDesc function. If the descriptor record you pass to AEDisposeDesc (such as an Apple event record or an AE record) includes other nested descriptor records, one call to AEDisposeDesc will dispose of them all. When a client application adds a descriptor record to an Apple event (for example, when it creates a descriptor record by calling AECreateDesc and then puts a copy of it into a parameter of an Apple event by calling AEPutParamDesc), it is still responsible for disposing of the original descriptor record. After a client application has finished using both the Apple event specified in the AESend function and the reply Apple event, it should dispose of their descriptor records by calling AEDisposeDesc. The client application should dispose of them even if AESend returns a nonzero result code. The Apple event that a server application’s handler receives is a copy of the original event created by the client application. When a server application’s handler returns to AEProcessAppleEvent, the Apple Event Manager disposes of the server’s copy (in the server’s application heap) of both the Apple event and the reply event. The server application is responsible for disposing of any descriptor records created while extracting data from the Apple event or adding data to the reply event.In general, outputs from Apple Event Manager functions are your application’s responsibility. Once you finish using them, you should use AEDisposeDesc to dispose of any Apple event data structures created or returned by these functions:AECoerceDesc    AEDuplicateDesc    AECoercePtr    AEGetAttributeDesc    AECreateAppleEvent    AEGetKeyDesc    AECreateDesc    AEGetNthDesc    AECreateList    AEGetParamDesc    If you attempt to dispose of descriptor records returned by successful calls to these functions without using AEDisposeDesc, your application may not be compatible with future versions of the Apple Event Manager. However, if any of these functions return a nonzero result code, they return a null descriptor record, which does not need to be disposed of. Outputs from functions, such as AEGetKeyPtr, that use a buffer rather than a descriptor record to return data do not require the use of AEDisposeDesc. It is therefore preferable to use these functions for any data that is not identified by a handle. Some of the functions described in the chapter “Resolving and Creating Object Specifier Records” in this book also create descriptor records. If you set the disposeInputs parameter to FALSE for any of the following functions, you should dispose of any Apple event data structures that they create or return:CreateCompDescriptor    CreateObjSpecifier    CreateLogicalDescriptor    CreateRangeDescriptor     Your application is also responsible for disposing of some of the tokens it creates in the process of resolving an object specifier record. For information about token disposal, see “Defining Tokens” on page 6-39. Writing and Installing Coercion HandlersWhen your application extracts data from a parameter, it can request that the Apple Event Manager return the data using a descriptor type that is different from the original descriptor type. For example, when extracting data from the direct parameter of the Open Documents event, you can request that the alias records be returned as file system specification records. The Apple Event Manager can automatically coerce many different types of data from one to another. Table 4-1 on page 4-43 shows descriptor types and the kinds of coercion that the Apple Event Manager can perform.You can also provide your own routines, referred to as coercion handlers, to coerce data into any other descriptor type. To install your own coercion handlers, use the AEInstallCoercionHandler function. You specify as parameters to this functionn    the descriptor type of the data coerced by the handlern    the descriptor type of the resulting datan    the address of the coercion handler for this descriptor typen    a reference constantn    a Boolean value that indicates whether your coercion handler expects the data to be specified as a descriptor record or as a pointer to the actual datan    a Boolean value that indicates whether your coercion handler should be added to your application’s coercion dispatch table or the system coercion dispatch tableThe system coercion dispatch table is a table in the system heap that contains coercion handlers available to all applications and processes running on the same computer. The coercion handlers in your application’s coercion dispatch table are available only to your application. When attempting to coerce data, the Apple Event Manager first looks for a coercion handler in your application’s coercion dispatch table. If it cannot find a handler for the descriptor type, it looks in the system coercion dispatch table for a handler. If it doesn’t find a handler there, it attempts to use the default coercion handling described by Table 4-1 on page 4-43. If it can’t find an appropriate default coercion handler, it returns the errAECoercionFail result code. Any handler that you add to the system coercion dispatch table should reside in the system heap. If there was already an entry in the system coercion dispatch table for the same descriptor type, it is replaced. Therefore, if there is an entry in the system coercion dispatch table for the same descriptor type, you should chain it to your system coercion handler as explained in “Creating and Managing the Coercion Handler Dispatch Tables,” which begins on page 4-96.sWARNINGBefore an application calls a system coercion handler, system software has set up the A5 register for the calling application. For this reason, if you provide a system coercion handler, it should never use A5 global variables or anything that depends on a particular context; otherwise, the application that calls the system coercion handler may crash.sYou can provide a coercion handler that expects to receive the data in a descriptor record or a buffer referred to by a pointer. When you install your coercion handler, you specify how your handler wishes to receive the data. Whenever possible, you should write your coercion handler so that it can accept a pointer to the data, because it’s more efficient for the Apple Event Manager to provide your coercion handler with a pointer to the data.A coercion handler that accepts a pointer to data must be a function with the following syntax:FUNCTION MyCoercePtr (typeCode: DescType; dataPtr: Ptr;                              dataSize: Size; toType: DescType;                              handlerRefcon: LongInt;                             VAR result: AEDesc): OSErr; The typeCode parameter is the descriptor type of the original data. The dataPtr parameter is a pointer to the data to coerce; the dataSize parameter is the length, in bytes, of the data. The toType parameter is the desired descriptor type of the resulting data. The handlerRefcon parameter is a reference constant stored in the coercion table entry for the handler and passed to the handler by the Apple Event Manager whenever the handler is called. The result parameter is the descriptor record returned by your coercion handler.Your coercion handler should coerce the data to the desired descriptor type and return the data in the descriptor record specified by the result parameter. If your handler successfully performs the coercion, it should return the noErr result code; otherwise, it should return a nonzero result code.A coercion handler that accepts a descriptor record must be a function with the following syntax:FUNCTION MyCoerceDesc (theAEDesc: AEDesc; toType: DescType;                              handlerRefcon: LongInt;                              VAR result: AEDesc): OSErr;The parameter theAEDesc is the descriptor record that contains the data to be coerced. The toType parameter is the descriptor type of the resulting data. The handlerRefcon parameter is a reference constant stored in the coercion table entry for the handler and passed to the handler by the Apple Event Manager whenever the handler is called. The result parameter is the resulting descriptor record.Your coercion handler should coerce the data in the descriptor record to the desired descriptor type and return the data in the descriptor record specified by the result parameter. Your handler should return an appropriate result code.NoteTo ensure that no coercion is performed and that the descriptor type of the result is of the same descriptor type as the original, specify typeWildCard for the desired type.uTable 4-1 lists the descriptor types for which the Apple Event Manager provides coercion. Table 4-1    Coercion handling provided by the Apple Event Manager(continued)Original descriptor type of data to be coerced    Desired descriptor type    Description    typeChar    typeIntegertypeLongIntegertypeSMInttypeSMFloattypeShortIntegertypeFloattypeLongFloattypeShortFloattypeExtendedtypeComptypeMagnitude    Any string that is a valid representation of a number can be coerced into an equivalent numeric value.                                                                            typeIntegertypeLongInteger typeSMInttypeSMFloattypeShortIntegertypeFloattypeLongFloattypeShortFloattypeExtendedtypeComptypeMagnitude    typeChar    Any numeric descriptor type can be coerced into the equivalent text string.                                                                            typeIntegertypeLongInteger typeSMInttypeSMFloattypeShortInteger typeFloattypeLongFloattypeShortFloattypeExtendedtypeComptypeMagnitude    typeIntegertypeLongIntegertypeSMInttypeSMFloattypeShortIntegertypeFloattypeLongFloattypeShortFloattypeExtendedtypeComptypeMagnitude    Any numeric descriptor type can be coerced into any other numeric descriptor type.                                                                            typeChar    typeTypetypeEnumeratedtypeKeywordtypeProperty    Any four-character string can be coerced to one of these descriptor types.                                        typeEnumeratedtypeKeywordtypePropertytypeType    typeChar    Any of these descriptor types can be coerced to the equivalent text string.            continued    typeIntlText    typeChar    The result contains text only, without the script code or language code from the original descriptor record.    typeTrue    typeBoolean    The result is the Boolean value TRUE.    typeFalse    typeBoolean    The result is the Boolean value FALSE.    typeEnumerated    typeBoolean    The enumerated value 'true' becomes the Boolean value TRUE. The enumerated value 'fals' becomes the Boolean value FALSE.    typeBoolean    typeEnumerated    The Boolean value FALSE becomes the enumerated value 'fals'. The Boolean value TRUE becomes the enumerated value 'true'.    typeShortIntegertypeSMInt    typeBoolean    A value of 1 becomes the Boolean value TRUE. A value of 0 becomes the Boolean value FALSE.    typeBoolean    typeShortInteger typeSMInt    A value of FALSE becomes 0. A value of TRUE becomes 1.    typeAlias    typeFSS    An alias record is coerced into a file system specification record.    typeAppleEvent    typeAppParameters    An Apple event is coerced into a list of application parameters for the LaunchParamBlockRec parameter block.    any descriptor type    typeAEList    A descriptor record is coerced into a descriptor list containing a single item.    typeAEList    type of list item    A descriptor list containing a single descriptor record is coerced into a descriptor record.     NOTESome of the descriptor types listed in this table are synonyms; for example, the constants typeSMInt and typeShortInteger have the same four-character code, 'shor'.Interacting With the UserWhen your application receives an Apple event, it may need to interact with the user. For example, it may need to display a dialog box asking the user for additional information or confirmation. You must use the AEInteractWithUser function to make sure your application is in the foreground before it actually interacts with the user. Both the client application and the server application specify their preferences for user interaction. The AEInteractWithUser function checks the user interaction preferences set by each application. If both the client and the server allow user interaction, AEInteractWithUser usually posts a notification request, and the Notification Manager brings the server to the foreground after the user responds to the notification request. The AEInteractWithUser function can also bring the server application directly to the foreground, but only if the client application is the active application on the same computer and has set two flags in the sendMode parameter of the AESend function: the kAEWaitReply flag, which indicates that it is waiting for a reply, and the kAECanSwitchLayer flag, which indicates that it wants the server application to come directly to the foreground rather than posting a notification request.To specify its preferences for how the server application should interact with the user, the client application sets various flags in the sendMode parameter to AESend. The Apple Event Manager sets the corresponding flags in the keyInteractLevelAttr attribute of the Apple event.The server application sets its preferences with the AESetInteractionAllowed function. This function lets your application specify whether it allows interaction with the user as a result of receiving an Apple event from itself; from itself and other processes on the local computer; or from itself, local processes, and processes from another computer on the network.Your application calls the AEInteractWithUser function before interacting with the user. If AEInteractWithUser returns the noErr result code, then your application is currently in the front and free to interact with the user. If AEInteractWithUser returns the errAENoUserInteraction result code, the conditions didn’t allow user interaction and your application should not interact with the user.The rest of this section explains how to set user interactions for the client and server applications and the practical effect these settings have when a server needs to interact with a user.Setting the Client Application’s User Interaction PreferencesThe client application sets its user interaction preferences by setting flags in the sendMode parameter to the AESend function. The Apple Event Manager automatically adds the specified flags to the keyInteractLevelAttr attribute of the Apple event. These flags are represented by the following constants:Flag    Description    kAENeverInteract    The server application should never interact with the user in response to the Apple event. If this flag is set, AEInteractWithUser returns the errAENoUserInteraction result code. This flag is the default when an Apple event is sent to a remote application.    kAECanInteract    The server application can interact with the user in response to the Apple event—by convention, if the user needs to supply information to the server. If this flag is set and the server allows interaction, AEInteractWithUser either brings the server application to the foreground or posts a notification request. This flag is the default when an Apple event is sent to a local application.     kAEAlwaysInteract    The server application can interact with the user in response to the Apple event—by convention, whenever the server application normally asks a user to confirm a decision or interact in any other way, even if no additional information is needed from the user. If this flag is set and the server allows interaction, AEInteractWithUser either brings the server application to the foreground or posts a notification request.     For example, suppose a client application sends a Set Data event to a database application to change a customer’s address. The database application is configured to request user confirmation of changes to a customer’s record. In this case the client sets the kAECanInteract flag before sending the event. Thus, the database application attempts to interact with the user if interaction is allowed. If interaction is not allowed, the database makes the correction anyway without consulting the user. However, if the client application sends a Delete event to delete a customer’s record entirely and sets the kAEAlwaysInteract flag, the database application deletes the specified record only if it can interact with the user first and receives confirmation of the decision to delete a record. If interaction with the user is not allowed, the database application returns an error. By setting the kAEAlwaysInteract flag, the client application ensures that the entire record won’t be lost if the user sends the Delete event by mistake.If the client application doesn’t specify any of the three user interaction flags, the Apple Event Manager sets either the kAENeverInteract or the kAECanInteract flag in the keyInteractLevelAttr attribute of the Apple event, depending on the location of the server application. If the server application is on a remote computer, the Apple Event Manager sets the kAENeverInteract flag as the default. If the server application is on the local computer, the Apple Event Manager sets the kAECanInteract flag as the default.In addition to the three user interaction flags, the client application can set another flag in the sendMode parameter to AESend to request that the Apple Event Manager immediately bring the server application directly to the foreground instead of posting a notification request:Flag    Description    kAECanSwitchLayer    If both the client and server allow interaction, and if the client application is the active application on the local computer and is waiting for a reply (that is, it has set the kAEWaitReply flag), AEInteractWithUser brings the server directly to the foreground. Otherwise, AEInteractWithUser uses the Notification Manager to request that the user bring the server application to the foreground.      Note that although the kAECanSwitchLayer flag must be set for the Apple Event Manager to bring the server application directly to the foreground, setting it does not guarantee that the Apple Event Manager will bypass the notification request if user interaction is permitted. Another flag, the kAEWaitReply flag, must also be set in the sendMode parameter, and the client application must provide an idle function.The kAEWaitReply flag is one of three flags in the sendMode parameter that a client application can set to specify whether and how the client should wait for a reply. (For a description of these flags, see “Sending an Apple Event and Handling the Reply” on page 3-30.) If the client application is not waiting for a reply, the user may have continued with other work. An application switch at this point might be unexpected and would thus violate the principle of user control as described in Macintosh Human Interface Guidelines.If the client application sets the kAEWaitReply flag, it should also provide an idle function when it calls AESend so that it can handle events such as update events that it receives while waiting for the reply. Idle functions are described in “Writing an Idle Function,” which begins on page 5-21.When a server application calls AEInteractWithUser, the function first checks whether the kAENeverInteract flag in the keyInteractLevelAttr attribute of the Apple event is set. (The Apple Event Manager sets this attribute according to the flags specified in the sendMode parameter of AESend.) If the kAENeverInteract flag is set, AEInteractWithUser immediately returns the errAENoUserInteraction result code. If the client specified kAECanInteract or kAEAlwaysInteract, AEInteractWithUser checks the server’s preferences for user interaction. Setting the Server Application’s User Interaction PreferencesThe server sets its user interaction preferences by using the AESetInteractionAllowed function. This function specifies the conditions under which your application is willing to interact with the user.myErr := AESetInteractionAllowed(level);The level parameter is of type AEInteractAllowed. TYPE        AEInteractAllowed = (kAEInteractWithSelf,                                     kAEInteractWithLocal,                                     kAEInteractWithAll);You can specify one of these values for the interaction level:Flag    Description    kAEInteractWithSelf    Your server application can interact with the user in response to an Apple event only when your application is also the client application—that is, only when your application is sending the Apple event to itself.    kAEInteractWithLocal    Your server application can interact with the user in response to an Apple event only if the client application is on the same computer as your application. This is the default if the server application does not call the function AESetInteractionAllowed.    kAEInteractWithAll    Your server application can interact with the user in response to an Apple event sent by any client application on any computer.    If the server application does not set the user interaction level, AEInteractWithUser uses kAEInteractWithLocal as the value.If the application sends itself an Apple event (that is, if the application is both the client and the server) without setting the kAENeverInteract flag, AEInteractWithUser always allows user interaction. If the client application is a process on the local computer and specifies kAECanInteract or kAEAlwaysInteract, and if the server has set the interaction level to kAEInteractWithLocal or kAEInteractWithAll, then AEInteractWithUser allows user interaction. If the client is a process on a remote computer on the network and specifies kAECanInteract or kAEAlwaysInteract, AEInteractWithUser allows user interaction only if the server specified the kAEInteractWithAll flag for the interaction level. In all other cases, AEInteractWithUser does not allow user interaction.  Requesting User InteractionIf your server application needs to interact with the user for any reason, it must call the AEInteractWithUser function to make sure it is in the foreground before it actually interacts with the user. When AEInteractWithUser allows user interaction (based on the client’s and server’s preferences), AEInteractWithUser brings the server application to the foreground—either directly or after the user responds to a notification request—and then returns a noErr result code. If AEInteractWithUser brings the server to the foreground directly, the client returns to the foreground immediately after the server has finished interacting with the user. If AEInteractWithUser brings the server to the foreground after the user responds to a notification request, the server remains in the foreground after completing the user interaction.The AEInteractWithUser function specifies how long your handler is willing to wait for a response from the user. For example, if the timeout value is 900 ticks (15 seconds) and the Apple Event Manager posts a notification request, the Notification Manager begins to display a blinking icon in the upper-right corner of the screen, then removes the notification request (and the blinking icon) if the user does not respond within 15 seconds. (The discussion that follows describes some restrictions on the icons that can be displayed in this situation.)Note that the timeout value passed to the AEInteractWithUser function is separate from the timeout value passed to the AESend function, which specifies how long the client application is willing to wait for the reply or return receipt from the server application. If AEInteractWithUser does not receive a response from the user within the specified time, AEInteractWithUser returns errAETimeout. You may want to give the user a method of setting the interaction level. For example, some users may not want to be interrupted while background processing of an Apple event occurs, or they may not want to respond to dialog boxes when your application is handling Apple events sent from another computer.Listing 4-14 illustrates the use of the AEInteractWithUser function. You call this function before your application displays a dialog box or otherwise interacts with the user when processing an Apple event. You specify a timeout value, a pointer to a Notification Manager record, and the address of an idle function as parameters to AEInteractWithUser.Listing 4-14    Using the AEInteractWithUser functionmyErr := AEInteractWithUser(kAEDefaultTimeout, gMyNotifyRecPtr,                                      @MyIdleFunction);IF myErr <> noErr THEN    {the attempt to interact failed; do any error handling}    DoError(myErr)ELSE    {interact with the user by displaying a dialog box }    { or by interacting in any other way that is necessary}    DisplayMyDialogBox; You can set a timeout value, in ticks, in the first parameter to AEInteractWithUser. Use the kAEDefaultTimeout constant if you want the Apple Event Manager to use a default value for the timeout value. The Apple Event Manager uses a timeout value of about one minute if you specify this constant. You can also specify the kNoTimeOut constant if your application is willing to wait an indefinite amount of time for a response from the user. Usually you should provide a timeout value, so that your application can complete processing of the Apple event in a reasonable amount of time. If you specify NIL instead of a Notification Manager record in the second parameter of AEInteractWithUser, the Apple Event Manager looks for an application icon with the ID specified by the application’s bundle ('BNDL') resource and the application’s file reference ('FREF') resource. The Apple Event Manager first looks for an 'SICN' resource with the specified ID; if it can’t find an 'SICN' resource, it looks for the 'ICN#' resource and compresses the icon to fit in the menu bar. The Apple Event Manager won’t look for any members of an icon family other than the icon specified in the 'ICN#' resource.If the application doesn’t have 'SICN' or 'ICN#' resources, or if it doesn’t have a file reference resource, the Apple Event Manager passes NIL to the Notification Manager, and no icon appears in the upper-right corner of the screen. Therefore, if you want to display any icon other than those of type 'SICN' or 'ICN#', you must specify a notification record as the second parameter to the AEInteractWithUser function. NoteIf you want the Notification Manager to use a color icon when it posts a notification request, you should provide a Notification Manager record that specifies a 'cicn' resource.uThe AEInteractWithUser function posts a notification request only when user interaction is allowed and the kAECanSwitchLayer flag in the keyInteractLevelAttr attribute is not set.The last parameter to AEInteractWithUser specifies an idle function provided by your application. Your idle function should handle any update events, null events, operating-system events, or activate events while your application is waiting to be brought to the front. See “Writing an Idle Function” on page 5-21 for more information. Figure 4-1 illustrates a situation in which a client application (a forms application) might request a service from a server application (a database application). To perform this service, the server application must interact with the user.Figure 4-1    A document with a button that triggers a Get Data eventFigure 4-1 shows part of an electronic form used to enter information about an order received by telephone. If the customer has ordered from the company before, the user can quickly retrieve the customer’s address and telephone number by clicking the Retrieve Customer Info button. In response, the forms application sends a Get Data event to a database application (SurfDB) currently open on the same computer. The Get Data event sent by the forms application (the client application for the ensuing transaction) asks SurfDB (the server) to locate the customer’s name in a table of addresses and return the customer’s address. When the forms application receives the reply Apple event, it can add the address data to the appropriate fields in the order form.If SurfDB, as the server application, locates more than one entry for the specified customer name, it needs to interact with the user to determine which data to return in the reply Apple event. To interact with the user, the server application must be in the foreground, so that it can display a dialog box like the one shown in Figure 4-2.Figure 4-2    A server application displaying a dialog box that requests information from the userFigure 4-3, Figure 4-4, and Figure 4-5 illustrate two methods of dealing with this situation. Figure 4-3 shows the behavior of the server application that is common to both methods. In both cases, the server uses AESetInteractionAllowed to set its own interaction level to kAEInteractWithLocal. After calling AEResolve to locate the requested data, the server application discovers that two addresses match the name the user typed into the electronic form. The server then calls AEInteractWithUser with a timeout value of kAEDefaultTimeout so it can find out which address the user wants. Figure 4-3    Handling user interactionFigure 4-4 shows the circumstances in which the server application’s call to AEInteractWithUser shown in Figure 4-3 will cause the Apple Event Manager to bring the server application directly to the foreground. The client application sets the kAECanInteract, kAECanSwitchLayer, and kAEWaitReply flags in the sendMode parameter of the AESend function when it sends the Get Data event shown in the figure. These flags indicate that the client application expects the user to wait until the address appears in the appropriate fields of the electronic form before continuing with any other work. In this case, an automatic layer switch will not surprise the user and will avoid the additional user action required to respond to a notification request, so AEInteractWithUser brings the server application directly to the foreground and returns a noErr result code. The server application then displays the dialog box requesting that the user select the desired customer. After the user selects the desired customer and clicks OK, the server application’s Get Data event handler returns. The Apple Event Manager immediately brings the client application to the foreground, and the client application displays the requested customer information in the appropriate fields. Figure 4-4    Handling user interaction with the kAEWaitReply flag setFigure 4-5 shows the circumstances in which the server application’s call to AEInteractWithUser in Figure 4-3 will cause the Apple Event Manager to post a notification request rather than bringing the server application directly to the foreground. Figure 4-5    Handling user interaction with the kAEQueueReply flag set  The only difference between the Get Data event shown in Figure 4-4 and the Get Data event shown in Figure 4-5 is that the client application has set the kAEQueueReply flag instead of the kAEWaitReply flag in the sendMode parameter of AESend and has not set the kAECanSwitchLayer flag. This combination of flags indicates that the client application expects the user to continue filling in other parts of the form, such as the items being ordered; the address will just appear after a while, provided there is no duplicate name. In this case, an automatic layer switch would disrupt the user’s work. Instead of bringing the server application directly to the foreground, AEInteractWithUser uses the Notification Manager to post a notification request.After the user has responded to the request and has brought the server application to the foreground, AEInteractWithUser returns a noErr result code, and the server application displays the dialog box requesting that the user select the desired customer. When the user selects a customer and clicks OK, the server application’s Get Data event handler returns. Because the user brought the server to the foreground manually, the server remains in the foreground after the handler returns. Reference to Responding to Apple EventsThis section describes the basic Apple Event Manager data structures and routines that your application can use to respond to Apple events. It also describes the syntax for application-defined Apple event handlers and coercion handlers that your application can provide for use by the Apple Event Manager.For information about routines used to create and send Apple events, see the chapter “Creating and Sending Apple Events” in this book. For information about routines and data structures used with object specifier records, see the chapter “Resolving and Creating Object Specifier Records” in this book.Data Structures Used by the Apple Event ManagerThis section summarizes the major data structures used by the Apple Event Manager. For an overview of the relationships among these data structures, see “Data Structures Within Apple Events,” which begins on page 3-12.Descriptor Records and Related Data StructuresDescriptor records are the fundamental data structures from which Apple events are constructed. A descriptor record is a data structure of type AEDesc. TYPE AEDesc =     RECORD                                            {descriptor record}        descriptorType:                        DescType;                {type of data being passed}        dataHandle:                         Handle;                {handle to data being passed}    END;Field descriptionsdescriptorTypeA four-character string of type DescType that indicates the type of data being passed.dataHandle    A handle to the data being passed.The descriptor type is a structure of type DescType, which in turn is of data type ResType—that is, a four-character code. Constants, rather than these four-character codes, are usually used to refer to descriptor types. Table 4-2 lists the constants for the basic descriptor types used by the Apple Event Manager.Table 4-2    Descriptor types used by the Apple Event Manager (excluding those used with object specifier records)(continued)Descriptor type    Value    Description    typeBoolean    'bool'    Boolean value    typeChar    'TEXT'    Unterminated string    typeLongInteger    'long'    32-bit integer    typeInteger    'long'    32-bit integer    typeShortInteger    'shor'    16-bit integer    typeSMInt    'shor'    16-bit integer    typeLongFloat    'doub'    SANE double    typeFloat    'doub'    SANE double    typeShortFloat    'sing'    SANE single    typeSMFloat    'sing'    SANE single    typeExtended    'exte'    SANE extended    typeComp    'comp'    SANE comp    typeMagnitude    'magn'    Unsigned 32-bit integer    typeAEList    'list'    List of descriptor records    typeAERecord    'reco'    List of keyword-specified descriptor records    typeAppleEvent    'aevt'    Apple event record    typeTrue    'true'    TRUE Boolean value            continued    typeFalse    'fals'    FALSE Boolean value    typeAlias    'alis'    Alias record    typeEnumerated    'enum'    Enumerated data    typeType    'type'    Four-character code for event class or event ID    typeAppParameters    'appa'    Process Manager launch parameters    typeProperty    'prop'    Apple event property    typeFSS    'fss '    File system specification    typeKeyword    'keyw'    Apple event keyword    typeSectionH    'sect'    Handle to a section record    typeWildCard    '****'    Matches any type    typeApplSignature    'sign'    Application signature    typeSessionID    'ssid'    Session reference number    typeTargetID    'targ'    Target ID record    typeProcessSerialNumber    'psn '    Process serial number    typeNull    'null'    Nonexistent data (data handle is NIL)      For information about descriptor records and descriptor types used with object specifier records, see the chapter “Resolving and Creating Object Specifier Records” in this book. Apple event attributes, Apple event parameters, object specifier records, tokens, and most of the other data structures used by the Apple Event Manager are constructed from one or more descriptor records. The Apple Event Manager identifies the various parts of an Apple event by means of keywords associated with the corresponding descriptor records. The AEKeyword data type is defined as a four-character code.TYPE        AEKeyword = PACKED ARRAY[1..4] OF Char;Constants are typically used for keywords. A keyword combined with a descriptor record forms a keyword-specified descriptor record, which is defined by a data structure of type AEKeyDesc.TYPE        AEKeyDesc =         RECORD            descKey:                    AEKeyword;                    {keyword}            descContent:                    AEDesc;                    {descriptor record}        END;Field descriptionsField descriptionsdescKey    A four-character code of type AEKeyword that identifies the data in the descContent field.descContent    A descriptor record of type AEDesc.Every Apple event includes an attribute that contains the address of the target application. A descriptor record that contains an application’s address is called an address descriptor record.TYPE        AEAddressDesc = AEDesc;                                        {address descriptor record}Many Apple Event Manager functions take or return lists of descriptor records in a special descriptor record called a descriptor list. A descriptor list is a structure of data type AEDescList whose data consists of a list of other descriptor records.TYPE        AEDescList = AEDesc;                                        {list of descriptor records}Other Apple Event Manager functions take or return lists of keyword-specified descriptor records in the form of an AE record. An AE record is a structure of data type AERecord whose data handle refers to a list of keyword-specified descriptor records.TYPE        AERecord = AEDescList;                                        {list of keyword-specified }                                                { descriptor records}The handle for a descriptor list of data type AERecord refers to a list of keyword-specified descriptor records that specify Apple event parameters; they cannot specify Apple event attributes.Finally, a full-fledged Apple event, including both attributes and parameters, is an Apple event record, which is a structure of data type AppleEvent.TYPE        AppleEvent = AERecord;                                        {list of attributes and     }                                                { parameters for an Apple }                                                { event}The event class and event ID of an Apple event are specified in Apple Event Manager routines by structures of data types AEEventClass and AEEventID, respectively.TYPE AEEventClass = PACKED ARRAY[1..4] OF Char;TYPE AEEventID = PACKED ARRAY[1..4] OF Char;For more information about descriptor records and the other data structures described in this section, see “Data Structures Within Apple Events,” which begins on page 3-12. With the exception of array data records, which are described in the next section, the other Apple Event Manager data structures used in responding to Apple events are described in “Routines for Responding to Apple Events,” beginning on page 4-61, under the descriptions of the routines that use them.Apple Event Array Data TypesThe AEGetArray function (see page 4-77) creates a Pascal or C array that corresponds to an Apple event array in a descriptor list, and the AEPutArray function (see page 5-31) adds data specified in a buffer to a descriptor list as an Apple event array. You can use the data type AEArrayType to define the type of Apple event array you want to add to or obtain from a descriptor list.TYPE AEArrayType = (kAEDataArray, kAEPackedArray, kAEHandleArray,                          kAEDescArray, kAEKeyDescArray);When your application adds an Apple event array to a descriptor list, it provides the data for an Apple event array in an array data record, which is defined by the data type AEArrayData.TYPE AEArrayData =     RECORD                                        {data for an Apple event array}        CASE AEArrayType OF        kAEDataArray:            (AEDataArray:                         ARRAY[0..0] OF Integer);        kAEPackedArray:            (AEPackedArray:                         PACKED ARRAY[0..0] OF Char);        kAEHandleArray:            (AEHandleArray:                         ARRAY[0..0] OF Handle);        kAEDescArray:            (AEDescArray:                         ARRAY[0..0] OF AEDesc);        kAEKeyDescArray:            (AEKeyDescArray:                         ARRAY[0..0] OF AEKeyDesc);    END;The type of array depends on the data for the array:Array type    Description of Apple event array    kAEDataArray    Array items consist of data of the same size and same type, and are aligned on word boundaries.    kAEPackedArray    Array items consist of data of the same size and same type, and are packed without regard for word boundaries.    kAEHandleArray    Array items consist of handles to data of variable size and the same type.    kAEDescArray    Array items consist of descriptor records of different descriptor types with data of variable size.    kAEKeyDescArray    Array items consist of keyword-specified descriptor records with different keywords, different descriptor types, and data of variable size.    Array items in Apple event arrays of type kAEDataArray, kAEPackedArray, or kAEHandleArray must be factored—that is, contained in a factored descriptor list. Before adding array items to a factored descriptor list, you should provide both a pointer to the data that is common to all array items and the size of that common data when you first call AECreateList to create a factored descriptor list. When you call AEPutArray to add the array data to such a descriptor list, the Apple Event Manager automatically isolates the common data you specified in the call to AECreateList.When you call AEGetArray or AEPutArray, you specify a pointer of data type AEArrayDataPointer that points to a buffer containing the data for the array.TYPE AEArrayDataPointer = ^AEArrayData; For more information about using AECreateList to create factored descriptor lists for arrays, see page 5-28. For information about using AEGetArray and AEPutArray, see page 4-77 and page 5-31, respectively.  Routines for Responding to Apple EventsThis section describes the Apple Event Manager routines you can use to create and manage the Apple event dispatch tables, dispatch Apple events, extract information from Apple events, request user interaction, request more time to respond to Apple events, suspend and resume Apple event handling, delete descriptor records, deallocate memory for descriptor records, create and manage the coercion handler and special handler dispatch tables, and get information about the Apple Event Manager.Because the Apple Event Manager uses the services of the Event Manager, which in turn uses the services of the PPC Toolbox, the routines described in this section may return Event Manager and PPC Toolbox result codes in addition to the Apple Event Manager result codes listed.Creating and Managing the Apple Event Dispatch TablesAn Apple event dispatch table contains entries that specify the event class and event ID that refer to one or more Apple events, the address of the handler routine that handles those Apple events, and a reference constant. You can use the AEInstallEventHandler function to add entries to the Apple event dispatch table. This function sets up the initial mapping between the handlers in your application and the Apple events that they handle.To get the address of a handler currently in the Apple event dispatch table, use the AEGetEventHandler function. If you need to remove any of your Apple event handlers after the mapping between handlers and Apple events is established, you can use the AERemoveEventHandler function. AEInstallEventHandlerYou can use the AEInstallEventHandler function to add an entry to either your application’s Apple event dispatch table or the system Apple event dispatch table.FUNCTION AEInstallEventHandler (theAEEventClass: AEEventClass;                                          theAEEventID: AEEventID;                                           handler: EventHandlerProcPtr;                                           handlerRefcon: LongInt;                                          isSysHandler: Boolean): OSErr;theAEEventClassThe event class for the Apple event or events to be dispatched for this entry. The AEEventClass data type is defined as a four-character code:                TYPE AEEventClass = PACKED ARRAY[1..4] OF Char;theAEEventIDThe event ID for the Apple event or events to be dispatched for this entry. The AEEventID data type is defined as a four-character code:                TYPE AEEventID = PACKED ARRAY[1..4] OF Char;handler     A pointer to an Apple event handler for this dispatch table entry. Note that a handler in the system dispatch table must reside in the system heap; this means that if the value of the isSysHandler parameter is TRUE, the handler parameter should point to a location in the system heap. Otherwise, if you put your system handler code in your application heap, you must use AERemoveEventHandler to remove the handler before your application terminates.handlerRefcon A reference constant that is passed by the Apple Event Manager to the handler each time the handler is called. If your handler doesn’t use a reference constant, use 0 as the value of this parameter. isSysHandler Specifies the dispatch table to which you want to add the handler. If the value of isSysHandler is TRUE, the Apple Event Manager adds the handler to the system Apple event dispatch table. Entries in the system dispatch table are available to all applications. If the value of isSysHandler is FALSE, the Apple Event Manager adds the handler to your application’s Apple event dispatch table. The application’s dispatch table is searched first; the system dispatch table is searched only if the necessary handler is not found in your application’s dispatch table.DESCRIPTIONThe AEInstallEventHandler function creates an entry in the Apple event dispatch table. You must supply parameters that specify the event class, the event ID, the address of the handler that handles Apple events of the specified event class and event ID, and whether the handler is to be added to the system Apple event dispatch table or your application’s Apple event dispatch table. You can also specify a reference constant that the Apple Event Manager passes to your handler whenever your handler processes an Apple event.The parameters theAEEventClass and theAEEventID specify the event class and event ID of the Apple events to be handled by the handler for this dispatch table entry. For these parameters, you must provide one of the following combinations:n    the event class and event ID of a single Apple event to be dispatched to the handlern    the typeWildCard constant for theAEEventClass and an event ID for theAEEventID, which indicate that Apple events from all event classes whose event IDs match theAEEventID should be dispatched to the handlern    an event class for theAEEventClass and the typeWildCard constant for theAEEventID, which indicate that all events from the specified event class should be dispatched to the handlern    the typeWildCard constant for both the theAEEventClass and theAEEventID parameters, which indicates that all Apple events should be dispatched to the handler IMPORTANTIf you use the typeWildCard constant for either the theAEEventClass or the theAEEventID parameter (or for both parameters), the corresponding handler must return the error errAEEventNotHandled if it does not handle a particular event.sIf there was already an entry in the specified dispatch table for the same event class and event ID, it is replaced. Therefore, before installing a handler for a particular Apple event in the system dispatch table, use the AEGetEventHandler function (described next) to determine whether the table already contains a handler for that event. If an entry exists, AEGetEventHandler returns a reference constant and a pointer to that event handler. Chain the existing handler to your handler by providing pointers to the previous handler and its reference constant in the handlerRefcon parameter of AEInstallEventHandler. When your handler is done, use these pointers to call the previous handler. If you remove your system Apple event handler, be sure to reinstall the chained handler. SPECIAL CONSIDERATIONSBefore an application calls a system Apple event handler, system software has set up the A5 register for the calling application. For this reason, if you provide a system Apple event handler, it should never use A5 global variables or anything that depends on a particular context; otherwise, the application that calls the system handler may crash.RESULT CODESnoErr    0    No error    paramErr    –50    Parameter error (handler pointer is NIL or odd)    memFullErr    –108    Not enough room in heap zone    SEE ALSOFor more information about installing Apple event handlers, see “Installing Entries in the Apple Event Dispatch Tables,” which begins on page 4-7.AEGetEventHandlerYou can use the AEGetEventHandler function to get an entry from an Apple event dispatch table.FUNCTION AEGetEventHandler (theAEEventClass: AEEventClass;                                      theAEEventID: AEEventID;                                      VAR handler: EventHandlerProcPtr;                                         VAR handlerRefcon: LongInt;                                      isSysHandler: Boolean): OSErr;theAEEventClassThe value of the event class field of the dispatch table entry for the desired handler.theAEEventIDThe value of the event ID field of the dispatch table entry for the desired handler.handler    The AEGetEventHandler function returns, in this parameter, a pointer to the specified handler.handlerRefconThe AEGetEventHandler function returns, in this parameter, the reference constant from the dispatch table entry for the specified handler.isSysHandler Specifies the Apple event dispatch table from which to get the handler. If the value of isSysHandler is TRUE, the AEGetEventHandler function returns the handler from the system dispatch table. If the value is FALSE, AEGetEventHandler returns the handler from your application’s dispatch table.DESCRIPTIONThe AEGetEventHandler function returns, in the handler parameter, a pointer to the handler for the Apple event dispatch table entry you specify in the parameters theAEEventClass and theAEEventID. You can use the typeWildCard constant for either or both of these parameters; however, AEGetEventHandler returns an error unless an entry exists that specifies typeWildCard in exactly the same way. For example, if you specify typeWildCard in both the theAEEventClass parameter and the theAEEventID parameter, the Apple Event Manager will not return the first handler for any event class and event ID in the dispatch table; instead, the dispatch table must contain an entry that specifies type typeWildCard for both the event class and the event ID. RESULT CODESnoErr    0    No error    errAEHandlerNotFound    –1717    No handler found for an Apple event    SEE ALSOFor an explanation of wildcard values, see the description of the AEInstallEventHandler function on page 4-62.AERemoveEventHandlerYou can use the AERemoveEventHandler function to remove an entry from an Apple event dispatch table.FUNCTION AERemoveEventHandler (theAEEventClass: AEEventClass;                                          theAEEventID: AEEventID;                                          handler: EventHandlerProcPtr;                                          isSysHandler: Boolean): OSErr;theAEEventClassThe event class for the handler whose entry you want to remove from the dispatch table.theAEEventIDThe event ID for the handler whose entry you want to remove from the Apple event dispatch table.handler    A pointer to the handler to be removed. Although the parameters theAEEventClass and theAEEventID would be sufficient to identify the handler to be removed, providing the handler parameter is a recommended safeguard that ensures that you remove the correct handler. If the value of this parameter is NIL, the Apple Event Manager relies solely on the event class and event ID to identify the handler to be removed.isSysHandler Specifies the dispatch table from which to remove the handler. If the value of isSysHandler is TRUE, AERemoveEventHandler removes the handler from the system dispatch table. If the value is FALSE, AERemoveEventHandler removes the handler from your application’s dispatch table.DESCRIPTIONThe AERemoveEventHandler function removes the Apple event dispatch table entry you specify in the parameters theAEEventClass, theAEEventID, and handler. You can use the typeWildCard constant for the theAEEventClass or the theAEEventID parameter, or for both parameters; however, AERemoveEventHandler returns an error unless an entry exists that specifies typeWildCard in exactly the same way. For example, if you specify typeWildCard in both the theAEEventClass parameter and the theAEEventID parameter, the Apple Event Manager will not remove the first handler for any event class and event ID in the dispatch table; instead, the dispatch table must contain an entry that specifies type typeWildCard for both the event class and the event ID. RESULT CODESnoErr    0    No error    errAEHandlerNotFound    –1717    No handler found for an Apple event    SEE ALSOFor an explanation of wildcard values, see the description of the AEInstallEventHandler function on page 4-62.Dispatching Apple EventsAfter receiving a high-level event (and optionally determining whether it is a type of high-level event other than an Apple event that your application might support), your application typically calls the AEProcessAppleEvent function to determine the type of Apple event received and call the corresponding handler.AEProcessAppleEventYou can use the AEProcessAppleEvent function to call the appropriate handler for a specified Apple event.  FUNCTION AEProcessAppleEvent                                 (theEventRecord: EventRecord): OSErr;theEventRecordThe event record for the Apple event.DESCRIPTIONThe AEProcessAppleEvent function looks first in the application’s special handler dispatch table for an entry that was installed with the constant keyPreDispatch. If the application’s special handler dispatch table does not include such a handler or if the handler returns errAEEventNotHandled, the function looks in the application’s Apple event dispatch table for an entry that matches the event class and event ID of the specified Apple event. If the application’s Apple event dispatch table does not include such a handler or if the handler returns errAEEventNotHandled, the AEProcessAppleEvent function looks in the system special handler dispatch table for an entry that was installed with the constant keyPreDispatch. If the system special handler dispatch table does not include such a handler or if the handler returns errAEEventNotHandled, the function looks in the system Apple event dispatch table for an entry that matches the event class and event ID of the specified Apple event. If the system Apple event dispatch table does not include such a handler, the Apple Event Manager returns the result code errAEEventNotHandled to the server application and, if the client application is waiting for a reply, to the client application.If AEProcessAppleEvent finds an entry in one of the dispatch tables that matches the event class and event ID of the specified Apple event, it calls the corresponding handler.SPECIAL CONSIDERATIONSIf an Apple event dispatch table contains one entry for an event class and a specific event ID, and also contains another entry that is identical except that it specifies a wildcard value for either the event class or the event ID, the Apple Event Manager dispatches the more specific entry. For example, if an Apple event dispatch table includes one entry that specifies the event class as kAECoreSuite and the event ID as kAEDelete, and another entry that specifies the event class as kAECoreSuite and the event ID as typeWildCard, the Apple Event Manager dispatches the Apple event handler associated with the entry that specifies the event ID as kAEDelete.RESULT CODESnoErr    0    No error    memFullErr    –108    Not enough room in heap zone    bufferIsSmall    –607    Buffer is too small    noOutstandingHLE    –608    No outstanding high-level event    errAECorruptData    –1702    Data in an Apple event could not be read    errAENewerVersion    –1706    Need a newer version of the Apple Event Manager    errAEEventNotHandled    –1708    Event wasn’t handled by an Apple event handler     SEE ALSOFor an example of the use of AEProcessAppleEvent, see Listing 4-2 on page 4-6. For a description of an Apple event handler, see page 4-105. For more information about event processing, see the chapter “Event Manager” in Inside Macintosh: Macintosh Toolbox Essentials.   Getting Data or Descriptor Records Out of Apple Event Parameters and AttributesThe Apple Event Manager provides four functions that allow you to get data from Apple event parameters and attributes. The AEGetParamPtr and AEGetParamDesc functions get data from a specified Apple event parameter. The AEGetAttributePtr and AEGetAttributeDesc functions get data from a specified Apple event attribute. AEGetParamPtrYou can use the AEGetParamPtr function to get a pointer to a buffer that contains the data from a specified Apple event parameter.FUNCTION AEGetParamPtr (theAppleEvent: AppleEvent;                                     theAEKeyword: AEKeyword;                                desiredType: DescType;                                 VAR typeCode: DescType; dataPtr: Ptr;                                 maximumSize: Size;                                 VAR actualSize: Size): OSErr;theAppleEventThe Apple event containing the desired parameter.theAEKeyword The keyword that specifies the desired parameter.desiredTypeThe desired descriptor type for the data to be returned; if the requested Apple event parameter is not of this type, the Apple Event Manager attempts to coerce it to this type. If the value of desiredType is typeWildCard, no coercion is performed, and the descriptor type of the returned data is the same as the descriptor type of the Apple event parameter. typeCode     The descriptor type of the returned data.dataPtr     A pointer to the buffer in which the returned data is stored.maximumSize The maximum length, in bytes, of the data to be returned. You must allocate at least this amount of storage for the buffer specified by the dataPtr parameter. actualSizeThe length, in bytes, of the data for the specified Apple event parameter. If this value is larger than the value of the maximumSize parameter, not all of the data for the parameter was returned.DESCRIPTIONThe AEGetParamPtr function uses a buffer to return the data from a specified Apple event parameter, which it attempts to coerce to the descriptor type specified by the desiredType parameter. RESULT CODESnoErr    0    No error    memFullErr    –108    Not enough room in heap zone    errAECoercionFail     –1700    Data could not be coerced to the requested descriptor type    errAEDescNotFound     –1701    Descriptor record was not found    errAEWrongDataType    –1703    Wrong descriptor type    errAENotAEDesc    –1704    Not a valid descriptor record    errAEReplyNotArrived    –1718    Reply has not yet arrived    SEE ALSOFor examples of the use of AEGetParamPtr, see “Getting Data Out of an Apple Event,” which begins on page 4-25.AEGetParamDescYou can use the AEGetParamDesc function to get the descriptor record for a specified Apple event parameter.  FUNCTION AEGetParamDesc (theAppleEvent: AppleEvent;                                  theAEKeyword: AEKeyword;                                  desiredType: DescType;                                  VAR result: AEDesc): OSErr;theAppleEventThe Apple event containing the desired parameter.theAEKeyword The keyword that specifies the desired parameter.desiredType The desired descriptor type for the descriptor record to be returned; if the requested Apple event parameter is not of this type, the Apple Event Manager attempts to coerce it to this type. If the value of desiredType is typeWildCard, no coercion is performed, and the descriptor type of the returned data is the same as the descriptor type of the Apple event parameter. result     The descriptor record from the desired Apple event parameter coerced to the descriptor type specified in desiredType.DESCRIPTIONThe AEGetParamDesc function returns, in the result parameter, the descriptor record for a specified Apple event parameter, which it attempts to coerce to the descriptor type specified by the desiredType parameter. Your application should call the AEDisposeDesc function to dispose of the resulting descriptor record after your application has finished using it.If AEGetParamDesc returns a nonzero result code, it returns a null descriptor record unless the Apple Event Manager is not available because of limited memory.RESULT CODESnoErr    0    No error    memFullErr    –108    Not enough room in heap zone    errAECoercionFail     –1700    Data could not be coerced to the requested descriptor type    errAEDescNotFound     –1701    Descriptor record was not found    errAENotAEDesc    –1704    Not a valid descriptor record    errAEReplyNotArrived    –1718    Reply has not yet arrived    SEE ALSOFor an example of the use of AEGetParamDesc, see “Getting Data Out of an Apple Event Parameter,” which begins on page 4-26.   AEGetAttributePtrYou can use the AEGetAttributePtr function to get a pointer to a buffer that contains the data from a specified Apple event attribute.FUNCTION AEGetAttributePtr (theAppleEvent: AppleEvent;                                      theAEKeyword: AEKeyword;                                      desiredType: DescType;                                         VAR typeCode: DescType; dataPtr: Ptr;                                         maximumSize: Size;                                      VAR actualSize: Size): OSErr;theAppleEventThe Apple event containing the desired attribute.theAEKeywordThe keyword that specifies the desired attribute.    TYPE AEKeyword = PACKED ARRAY[1..4] OF Char;    The keyword can be any of the constants listed in the description that follows.desiredTypeThe desired descriptor type for the data to be returned; if the requested Apple event attribute is not of this type, the Apple Event Manager attempts to coerce it to this type. If the value of desiredType is typeWildCard, no coercion is performed, and the descriptor type of the returned data is the same as the descriptor type of the Apple event attribute. typeCode    The descriptor type of the returned data.dataPtr     A pointer to the buffer in which the returned data is stored.maximumSize The maximum length, in bytes, of the data to be returned. You must allocate at least this amount of storage for the buffer specified by the dataPtr parameter. actualSizeThe length, in bytes, of the data for the specified Apple event attribute. If this value is larger than the value of the maximumSize parameter, not all of the data for the attribute was returned.DESCRIPTIONThe AEGetAttributePtr function uses a buffer to return the data from an Apple event attribute with the specified keyword, which it attempts to coerce to the descriptor type specified by the desiredType parameter. You can specify the parameter theAEKeyWord using any of these constants:CONST    keyAddressAttr                                 = 'addr'; {address of target or }                                                 { client application}    keyEventClassAttr                                 = 'evcl'; {event class}    keyEventIDAttr                                = 'evid'; {event ID}    keyEventSourceAttr                                = 'esrc'; {nature of source }                                                 { application}    keyInteractLevelAttr                                = 'inte'; {settings to allow the }                                                 { Apple Event Manager to }                                                 { bring server application }                                                 { to the foreground}    keyMissedKeywordAttr                                = 'miss'; {first required parameter }                                                 { remaining in Apple event}    keyOptionalKeywordAttr                                = 'optk'; {list of optional }                                                 { parameters for Apple }                                                 { event}    keyOriginalAddressAttr                                = 'from';             {address of original source }                                                 { of Apple event; available }                                                 { beginning with version }                                                 { 1.01 of Apple Event }                                                 { Manager}         keyReturnIDAttr                                 = 'rtid'; {return ID for reply Apple }                                                 { event}    keyTimeoutAttr                                = 'timo'; {length of time in ticks }                                                 { that client will wait }                                                 { for reply or result from }                                                  { the server}    keyTransactionIDAttr                                = 'tran'; {transaction ID identifying }                                                 { a series of Apple events}RESULT CODESnoErr    0    No error    memFullErr    –108    Not enough room in heap zone    errAECoercionFail     –1700    Data could not be coerced to the requested descriptor type    errAEDescNotFound     –1701    Descriptor record was not found    errAENotAEDesc    –1704    Not a valid descriptor record    errAEReplyNotArrived    –1718    Reply has not yet arrived    SEE ALSOFor an example of the use of the AEGetAttributePtr function, see “Getting Data Out of an Attribute” and “Writing Apple Event Handlers,” which begin on page 4-28 and page 4-33, respectively.AEGetAttributeDescYou can use the AEGetAttributeDesc function to get the descriptor record for a specified Apple event attribute.   FUNCTION AEGetAttributeDesc (theAppleEvent: AppleEvent;                                       theAEKeyword: AEKeyword;                                       desiredType: DescType;                                           VAR result: AEDesc): OSErr;theAppleEventThe Apple event containing the desired attribute.theAEKeyword The keyword that specifies the desired attribute.    TYPE AEKeyword = PACKED ARRAY[1..4] OF Char;    The keyword can be any of the constants listed in the description of AEGetAttributePtr on page 4-71.desiredTypeThe desired descriptor type for the descriptor record to be returned; if the requested Apple event attribute is not of this type, the Apple Event Manager attempts to coerce it to this type. If the value of desiredType is typeWildCard, no coercion is performed, and the descriptor type of the returned data is the same as the descriptor type of the Apple event attribute. result     A copy of the descriptor record from the desired attribute coerced to the descriptor type specified by the desiredType parameter.DESCRIPTIONThe AEGetAttributeDesc function returns, in the result parameter, the descriptor record for the Apple event attribute with the specified keyword. Your application should call the AEDisposeDesc function to dispose of the resulting descriptor record after your application has finished using it.If AEGetAttributeDesc returns a nonzero result code, it returns a null descriptor record unless the Apple Event Manager is not available because of limited memory. RESULT CODESnoErr    0    No error    memFullErr    –108    Not enough room in heap zone    errAECoercionFail    –1700    Data could not be coerced to the requested descriptor type    errAEDescNotFound    –1701    Descriptor record was not found    errAENotAEDesc    –1704    Not a valid descriptor record    errAEReplyNotArrived    –1718    Reply has not yet arrived    Counting the Items in Descriptor ListsThe AECountItems function counts the number of descriptor records in any descriptor list, including an Apple event record.AECountItemsYou can use the AECountItems function to count the number of descriptor records in any descriptor list.FUNCTION AECountItems (theAEDescList: AEDescList;                               VAR theCount: LongInt): OSErr;theAEDescListThe descriptor list to be counted.theCount    The AECountItems function returns the number of descriptor records in the specified descriptor list in this parameter.RESULT CODESnoErr    0    No error    errAENotAEDesc    –1704    Not a valid descriptor record     SEE ALSOFor an example of the use of AECountItems, see “Getting Data Out of a Descriptor List,” which begins on page 4-31.Getting Items From Descriptor ListsThe Apple Event Manager provides three functions that allow you to get items from any descriptor list, including an Apple event record. The AEGetNthPtr and AEGetNthDesc functions give you access to the data in a descriptor list. The AEGetArray function gets data from an array contained in a descriptor list.AEGetNthPtrYou can use the AEGetNthPtr function to get a pointer to a buffer that contains a copy of a descriptor record from any descriptor list.FUNCTION AEGetNthPtr (theAEDescList: AEDescList; index: LongInt;                              desiredType: DescType;                              VAR theAEKeyword: AEKeyword;                              VAR typeCode: DescType; dataPtr: Ptr;                              maximumSize: Size;                              VAR actualSize: Size): OSErr;theAEDescListThe descriptor list containing the desired descriptor record.index    The position of the desired descriptor record in the list (for example, 2 specifies the second descriptor record).desiredTypeThe desired descriptor type for the copy of the descriptor record to be returned; if the desired descriptor record is not of this type, the Apple Event Manager attempts to coerce it to this type. If the value of desiredType is typeWildCard, no coercion is performed, and the descriptor type of the copied descriptor record is the same as the descriptor type of the original descriptor record.theAEKeywordThe keyword of the specified descriptor record, if you are getting data from a list of keyword-specified descriptor records; otherwise, AEGetNthPtr returns the value typeWildCard. typeCode    The descriptor type of the returned descriptor record.dataPtr     A pointer to the buffer in which the returned descriptor record is stored.maximumSizeThe maximum length, in bytes, of the data to be returned. You must allocate at least this amount of storage for the buffer specified by the dataPtr parameter.actualSizeThe length, in bytes, of the data for the specified descriptor record. If this value is larger than the value of the maximumSize parameter, not all of the data for the descriptor record was returned.DESCRIPTIONThe AEGetNthPtr function uses a buffer to return a specified descriptor record from a specified descriptor list; the function attempts to coerce the descriptor record to the descriptor type specified by the desiredType parameter.RESULT CODESnoErr    0    No error    memFullErr    –108    Not enough room in heap zone    errAECoercionFail     –1700    Data could not be coerced to the requested descriptor type    errAEDescNotFound     –1701    Descriptor record was not found    errAEWrongDataType    –1703    Wrong descriptor type    errAENotAEDesc    –1704    Not a valid descriptor record    errAEReplyNotArrived    –1718    Reply has not yet arrived    SEE ALSOFor an example of the use of AEGetNthPtr, see Listing 4-10 on page 4-33.AEGetNthDescYou can use the AEGetNthDesc function to get a copy of a descriptor record from any descriptor list. FUNCTION AEGetNthDesc (theAEDescList: AEDescList; index: LongInt;                               desiredType: DescType;                               VAR theAEKeyword: AEKeyword;                               VAR result: AEDesc): OSErr;theAEDescList The descriptor list containing the desired descriptor record.index     The position of the desired descriptor record in the list (for example, 2 specifies the second descriptor record).desiredType The desired descriptor type for the copy of the descriptor record to be returned; if the desired descriptor record is not of this type, the Apple Event Manager attempts to coerce it to this type. If the value of desiredType is typeWildCard, no coercion is performed, and the descriptor type of the copied descriptor record is the same as the descriptor type of the original descriptor record.theAEKeywordThe keyword of the specified descriptor record, if you are getting data from a list of keyword-specified descriptor records; otherwise, AEGetNthDesc returns the value typeWildCard. result    A copy of the desired descriptor record coerced to the descriptor type specified by the desiredType parameter.DESCRIPTIONThe AEGetNthDesc function returns a specified descriptor record from a specified descriptor list.Your application should call the AEDisposeDesc function to dispose of the resulting descriptor record after your application has finished using it.If AEGetNthDesc returns a nonzero result code, it returns a descriptor record of descriptor type typeNull. A descriptor record of this type does not contain any data.RESULT CODESnoErr    0    No error    memFullErr    –108    Not enough room in heap zone    errAECoercionFail     –1700    Data could not be coerced to the requested descriptor type    errAEDescNotFound     –1701    Descriptor record was not found    errAENotAEDesc    –1704    Not a valid descriptor record    errAEReplyNotArrived    –1718    Reply has not yet arrived     AEGetArrayYou can use the AEGetArray function to convert an Apple event array (an array created with the AEPutArray function and stored in a descriptor list) to the corresponding Pascal or C array and place the converted array in a buffer for which you have provided a pointer.FUNCTION AEGetArray (theAEDescList: AEDescList;                             arrayType: AEArrayType;                             arrayPtr: AEArrayDataPointer;                             maximumSize: Size;                             VAR itemType: DescType; VAR itemSize: Size;                             VAR itemCount: LongInt): OSErr;theAEDescList A descriptor list containing the desired array. If the array is of type kAEDataArray, kAEPackedArray, or kAEHandleArray, the descriptor list must be factored. arrayType     The Apple event array type to be converted. This is specified by one of the following constants: kAEDataArray, kAEPackedArray, kAEHandleArray, kAEDescArray, or kAEKeyDescArray.arrayPtr     A pointer to the buffer for storing the array.maximumSize The maximum length, in bytes, of the buffer for storing the array.itemType    For arrays of type kAEDataArray, kAEPackedArray, or kAEHandleArray, the AEGetArray function returns the descriptor type of the returned array items in this parameter. itemSize    For arrays of type kAEDataArray or kAEPackedArray, the AEGetArray function returns the size (in bytes) of the returned array items in this parameter.itemCount     The AEGetArray function returns the number of items in the resulting array in this parameter.DESCRIPTIONThe AEGetArray function uses a buffer identified by the pointer in the arrayPtr parameter to return the converted data for the Apple event array specified by the theAEDescList parameter. Even if the descriptor list that contains the array is factored, the converted data for each array item includes the data common to all the descriptor records in the list. The Apple Event Manager automatically reconstructs the common data for each item when you call AEGetArray.RESULT CODESnoErr    0    No error    memFullErr    –108    Not enough room in heap zone    errAEWrongDataType    –1703    Wrong descriptor type    errAENotAEDesc    –1704    Not a valid descriptor record    errAEReplyNotArrived    –1718    Reply has not yet arrived    SEE ALSOFor more information about data types and constants used with AEGetArray, see “Apple Event Array Data Types” on page 4-60.For information about creating and factoring descriptor lists for Apple event arrays, see the description of AECreateList on page 5-28. For information about adding an Apple event array to a descriptor list, see the description of AEPutArray on page 5-31.Getting Data and Keyword-Specified Descriptor Records Out of AE RecordsThe Apple Event Manager provides two functions, AEGetKeyPtr and AEGetKeyDesc, that allow you to get data and descriptor records out of an AE record or an Apple event record.AEGetKeyPtrYou can use the AEGetKeyPtr function to get a pointer to a buffer that contains the data from a keyword-specified descriptor record. You can use this function to get data from an AE record or an Apple event record.FUNCTION AEGetKeyPtr (theAERecord: AERecord;                              theAEKeyword: AEKeyword;                              desiredType: DescType;                              VAR typeCode: DescType;                              dataPtr: Ptr; maximumSize: Size;                              VAR actualSize: Size): OSErr;theAERecord The AE record containing the desired data.theAEKeywordThe keyword that specifies the desired descriptor record.desiredTypeThe desired descriptor type for the data to be returned; if the requested data is not of this type, the Apple Event Manager attempts to coerce it to this type. If the value of desiredType is typeWildCard, no coercion is performed, and the descriptor type of returned data is the same as the descriptor type of the original data. typeCode    The descriptor type of the returned data.dataPtr     A pointer to the buffer for storing the data.maximumSize The maximum length, in bytes, of the data to be returned. You must allocate at least this amount of storage for the buffer specified by the dataPtr parameter.actualSizeThe length, in bytes, of the data for the keyword-specified descriptor record. If this value is larger than the value of the maximumSize parameter, not all of the data for the parameter was returned.DESCRIPTIONThe AEGetKeyPtr function uses a buffer to return the data from a keyword-specified Apple event parameter, which the function attempts to coerce to the descriptor type specified by the desiredType parameter. RESULT CODESnoErr    0    No error    memFullErr    –108    Not enough room in heap zone    errAECoercionFail     –1700    Data could not be coerced to the requested descriptor type    errAEDescNotFound     –1701    Descriptor record was not found    errAEWrongDataType    –1703    Wrong descriptor type    errAENotAEDesc    –1704    Not a valid descriptor record    errAEReplyNotArrived    –1718    Reply has not yet arrived    AEGetKeyDescYou can use the AEGetKeyDesc function to get the descriptor record for a keyword-specified descriptor record. You can use this function to get a descriptor record out of an AE record or an Apple event record.FUNCTION AEGetKeyDesc (theAERecord: AERecord;                               theAEKeyword: AEKeyword;                                  desiredType: DescType;                               VAR result: AEDesc): OSErr;theAERecord The AE record containing the desired descriptor record.theAEKeywordThe keyword that specifies the desired descriptor record.desiredTypeThe desired descriptor type for the descriptor record to be returned; if the requested descriptor record is not of this type, the Apple Event Manager attempts to coerce it to this type. If the value of desiredType is typeWildCard, no coercion is performed, and the descriptor type of the returned descriptor record is the same as the descriptor type of the original descriptor record.result    A copy of the keyword-specified descriptor record, coerced to the descriptor type specified in the desiredType parameter. DESCRIPTIONThe AEGetKeyDesc function returns a copy of the descriptor record for a keyword-specified descriptor record. Your application should call the AEDisposeDesc function to dispose of the resulting descriptor record after your application has finished using it. If AEGetKeyDesc returns a nonzero result code, it returns a descriptor record of descriptor type typeNull. A descriptor record of this type does not contain any data.RESULT CODESnoErr    0    No error    memFullErr    –108    Not enough room in heap zone    errAECoercionFail    –1700    Data could not be coerced to the requested descriptor type    errAEDescNotFound    –1701    Descriptor record was not found    errAENotAEDesc    –1704    Not a valid descriptor record    errAEReplyNotArrived    –1718    Reply has not yet arrived     Requesting User InteractionThe Apple Event Manager provides three functions that allow you to set or request user interaction levels and to initiate user interaction when your application is the server application. The AESetInteractionAllowed and AEGetInteractionAllowed functions specify and return, respectively, the current user interaction preferences. Your application should call the AEInteractWithUser function before actually interacting with the user in response to an Apple event. AESetInteractionAllowedYou can use the AESetInteractionAllowed function to specify your application’s user interaction preferences for responding to an Apple event.FUNCTION AESetInteractionAllowed                                         (level: AEInteractAllowed): OSErr;level    The user interaction level to be set.DESCRIPTIONThe AESetInteractionAllowed function sets the user interaction level for a server application’s response to an Apple event. The level parameter must be one of three flags: kAEInteractWithSelf, kAEInteractWithLocal, or kAEInteractWithAll. Specifying the kAEInteractWithSelf flag allows the server application to interact with the user in response to an Apple event only when the client application and server application are the same—that is, only when the application is sending the Apple event to itself.Specifying the kAEInteractWithLocal flag allows the server application to interact with the user in response to an Apple event only if the client application is on the same computer as the server application; this is the default if the AESetInteractionAllowed function is not used.Specifying the kAEInteractWithAll flag allows the server application to interact with the user in response to an Apple event sent from any client application on any computer.RESULT CODEnoErr    0    No error    SEE ALSOFor more information about setting user preferences for a server application, see “Setting the Server Application’s User Interaction Preferences” on page 4-48.AEGetInteractionAllowedYou can use the AEGetInteractionAllowed function to get the current user interaction preferences for responding to an Apple event.FUNCTION AEGetInteractionAllowed                                 (VAR level: AEInteractAllowed): OSErr;level    The current user interaction level, using the data type AEInteractAllowed.    TYPE AEInteractAllowed = (kAEInteractWithSelf,                           kAEInteractWithLocal,                           kAEInteractWithAll);DESCRIPTIONThe AEGetInteractionAllowed function returns, in the level parameter, a value that indicates the user interaction preferences for responding to an Apple event. The value, set by a previous call to AESetInteractionAllowed, is one of the following flags: kAEInteractWithSelf, kAEInteractWithLocal, or kAEInteractWithAll. The default value of kAEInteractWithLocal is returned if your application has not used AESetInteractionAllowed to set the interaction level explicitly. The kAEInteractWithSelf flag indicates that the server application may interact with the user in response to an Apple event only when the client application and server application are the same—that is, only when the application is sending the Apple event to itself.The kAEInteractWithLocal flag indicates that the server application may interact with the user in response to an Apple event only if the client application is on the same computer as the server application. This is the default if your application has not used the AESetInteractionAllowed function to set the interaction level explicitly.The kAEInteractWithAll flag indicates that the server application may interact with the user in response to an Apple event sent from any client application on any computer.RESULT CODEnoErr    0    No error    AEInteractWithUserYou can use the AEInteractWithUser function to initiate interaction with the user when your application is a server application responding to an Apple event.FUNCTION AEInteractWithUser (timeOutInTicks: LongInt;                                       nmReqPtr: NMRecPtr;                                       idleProc: IdleProcPtr): OSErr;timeOutInTicks The amount of time (in ticks) that your handler is willing to wait for a response from the user. You can specify a number of ticks or use one of the following constants:    CONST kAEDefaultTimeout = -1; {value determined }                                                      { by AEM}      kNoTimeOut        = -2; {wait until reply }                              { comes back}nmReqPtr     A pointer to a Notification Manager record provided by your application. You can specify NIL for this parameter to get the default notification handling provided by the Apple Event Manager.idleProc     A pointer to your application’s idle function, which handles events while waiting for the Apple Event Manager to return control. DESCRIPTIONYour application should call the AEInteractWithUser function before displaying a dialog box or alert box or otherwise interacting with the user in response to an Apple event. If the user interaction preference settings permit the application to come to the foreground, this function brings your application to the front, either directly or by posting a notification request.Your application should normally pass a notification record in the nmReqPtr parameter rather than specifying NIL for default notification handling. If you specify NIL, the Apple Event Manager looks for an application icon with the ID specified by the application’s bundle ('BNDL') resource and the application’s file reference ('FREF') resource. The Apple Event Manager first looks for an 'SICN' resource with the specified ID; if it can’t find an 'SICN' resource, it looks for the 'ICN#' resource and compresses the icon to fit in the menu bar. The Apple Event Manager won’t look for any members of an icon family other than the icon specified in the 'ICN#' resource.If the application doesn’t have 'SICN' or 'ICN#' resources, or if it doesn’t have a file reference resource, the Apple Event Manager passes NIL to the Notification Manager, and no icon appears in the upper-right corner of the screen. Therefore, if you want to display any icon other than those of type 'SICN' or 'ICN#', you must specify a notification record as the second parameter to the AEInteractWithUser function.NoteNoteIf you want the Notification Manager to use a color icon when it posts a notification request, you should provide a Notification Manager record that specifies a 'cicn' resource.uThe AEInteractWithUser function checks whether the client application set the kAENeverInteract flag for the Apple event and, if so, returns an error. If not, then the AEInteractWithUser function checks the server application’s preference set by the AESetInteractionAllowed function and compares it against the source of the Apple event—that is, whether it came from the same application, another process on the same computer, or a process running on another computer. The AEInteractWithUser function returns the errAENoUserInteraction result code if the user interaction preferences don’t allow user interaction. If user interaction is allowed, the Apple Event Manager brings your application to the front, either directly or by posting a notification request. If AEInteractWithUser returns the noErr result code, then your application is in the foreground and is free to interact with the user.RESULT CODESnoErr    0    No error    errAETimeout    –1712    Apple event timed out    errAENoUserInteraction    –1713    No user interaction allowed    SEE ALSOFor information about idle functions, see “Writing an Idle Function” on page 5-21.For examples of the use of the AEInteractWithUser function, see “Interacting With the User,” which begins on page 4-45.Requesting More Time to Respond to Apple EventsThe AEResetTimer function resets the timeout value for an Apple event to its starting value. A server application can call this function when it knows it cannot fulfill a client application’s request (either by returning a result or by sending back a reply Apple event) before the client application is due to time out.AEResetTimerYou can use the AEResetTimer function to reset the timeout value for an Apple event to its starting value.FUNCTION AEResetTimer (reply: AppleEvent): OSErr;reply    The default reply for an Apple event, provided by the Apple Event Manager.DESCRIPTIONWhen your application calls AEResetTimer, the Apple Event Manager for the server application uses the default reply to send a Reset Timer event to the client application; the Apple Event Manager for the client application’s computer intercepts this Apple event and resets the client application’s timer for the Apple event. (The Reset Timer event is never dispatched to a handler, so the client application does not need a handler for it.)RESULT CODEnoErr    0    No error    errAEReplyNotValid    –1709    AEResetTimer was passed an invalid reply     Suspending and Resuming Apple Event HandlingWhen your application calls AEProcessAppleEvent and one of your event handlers is invoked, the Apple Event Manager normally assumes that your application has finished handling the event when the event handler returns. At this point, the Apple Event Manager disposes of the event. However, some applications, such as multi-session servers or any applications that implement their own internal event queueing, may need to defer handling of the event.The AESuspendTheCurrentEvent, AEResumeTheCurrentEvent, AESetTheCurrentEvent, and AEGetTheCurrentEvent functions described in this section allow you to suspend and resume Apple event handling, specify the Apple event to be handled, and identify an Apple event that is currently being handled. AESuspendTheCurrentEventYou can use the AESuspendTheCurrentEvent function to suspend the processing of the Apple event that is currently being handled. FUNCTION AESuspendTheCurrentEvent                                     (theAppleEvent: AppleEvent): OSErr;theAppleEventThe Apple event whose handling is to be suspended. Although the Apple Event Manager doesn’t need this parameter to identify the Apple event currently being handled, providing it is a safeguard that you are suspending the correct Apple event.DESCRIPTIONAfter a server application makes a successful call to the AESuspendTheCurrentEvent function, it is no longer required to return a result or a reply for the Apple event that was being handled. It can, however, return a result if it later calls the AEResumeTheCurrentEvent function to resume event processing.The Apple Event Manager does not automatically dispose of Apple events that have been suspended or their default replies. (The Apple Event Manager does, however, automatically dispose of a previously suspended Apple event and its default reply if the server later resumes processing of the Apple event by calling the AEResumeTheCurrentEvent function.) If your server application does not resume processing of a suspended Apple event, it is responsible for using the AEDisposeDesc function to dispose of both the Apple event and its default reply when your application has finished using them.SPECIAL CONSIDERATIONSIf your application suspends handling of an Apple event it sends to itself, the Apple Event Manager immediately returns from the AESend call with the error code errAETimeout, regardless of whether the kAEQueueReply, kAEWaitReply, or kAENoReply flags were set, even if the timeout parameter is set to kNoTimeOut. The routine calling AESend should take the timeout error as confirmation that the event was sent.As with other calls to AESend that return a timeout error, the handler continues to process the event nevertheless. The handler’s reply, if any, is provided in the reply event when the handling is completed. The Apple Event Manager provides no notification that the reply is ready. If no data has yet been placed in the reply event, the Apple Event Manager returns errAEReplyNotArrived when your application attempts to extract data from the reply.RESULT CODEnoErr    0    No error    AEResumeTheCurrentEventYou can use the AEResumeTheCurrentEvent function to inform the Apple Event Manager that your application wants to resume the handling of a previously suspended Apple event or that it has completed the handling of the Apple event.FUNCTION AEResumeTheCurrentEvent                                     (theAppleEvent, reply: AppleEvent;                                      dispatcher: EventHandlerProcPtr;                                      handlerRefcon: LongInt): OSErr;theAppleEventThe Apple event to be resumed.reply     The default reply provided by the Apple Event Manager for the Apple event.dispatcherOne of the following:n    a pointer to a routine for handling the eventn    the kAEUseStandardDispatch constant, which tells the Apple Event Manager to dispatch the resumed event using the standard dispatching scheme it uses for other Apple eventsn    the kAENoDispatch constant, which tells the Apple Event Manager that the Apple event has been completely processed and need not be dispatchedhandlerRefcon If the value of the dispatcher parameter is not kAEUseStandardDispatch, this parameter is the reference constant passed to the handler when the handler is called. If the value of the dispatcher parameter is kAEUseStandardDispatch, the Apple Event Manager ignores the handlerRefcon parameter and instead passes the reference constant stored in the Apple event dispatch table entry for the Apple event. (You may wish to pass the same reference constant that is stored in the Apple event dispatch table. If so, call the AEGetEventHandler function.)DESCRIPTIONWhen your application calls the AEResumeTheCurrentEvent function, the Apple Event Manager resumes handling the specified Apple event using the handler specified in the dispatcher parameter, if any. If kAENoDispatch is specified in the dispatcher parameter, AEResumeTheCurrentEvent simply informs the Apple Event Manager that the specified event has been handled.SPECIAL CONSIDERATIONSAn Apple event handler that suspends an event should not immediately call AEResumeTheCurrentEvent, or else the handler will generate an error. Instead, the handler should return just after suspending the event.When your application calls AEResumeTheCurrentEvent for an event that was not directly dispatched, the Apple Event Manager disposes of the event and the reply, just as it normally does, after the event handler returns to AEProcessAppleEvent. Make sure all processing involving the event or the reply has been completed before your application calls AEResumeTheCurrentEvent. Do not call AEResumeTheCurrentEvent for an event that was not suspended.When your application calls AEResumeTheCurrentEvent for an event that was directly dispatched, your application is responsible for disposing of the original event and the reply, since it is acts as both the server and the client.RESULT CODEnoErr    0    No error    AESetTheCurrentEventYou can use the AESetTheCurrentEvent function to specify the Apple event to be handled.FUNCTION AESetTheCurrentEvent (theAppleEvent: AppleEvent): OSErr;theAppleEventThe Apple event to be handled.DESCRIPTIONThere is usually no reason for your application to use the AESetTheCurrentEvent function. Instead of calling this function, your application should let the Apple Event Manager set the current Apple event through the dispatch tables.If you need to avoid the dispatch tables, you must use the AESetTheCurrentEvent function only in the following way:    1.    Your application suspends handling of an Apple event by calling the AESuspendTheCurrentEvent function.    2.    Your application calls the AESetTheCurrentEvent function. This informs the Apple Event Manager that your application is handling the suspended Apple event. In this way, any routines that call the AEGetTheCurrentEvent function can ascertain which event is currently being handled.    3.    When your application finishes handling the Apple event, it calls the AEResumeTheCurrentEvent function with the value kAENoDispatch to tell the Apple Event Manager that the event has been processed and need not be dispatched.RESULT CODEnoErr    0    No error    AEGetTheCurrentEventYou can use the AEGetTheCurrentEvent function to get the Apple event that is currently being handled. FUNCTION AEGetTheCurrentEvent                                 (VAR theAppleEvent: AppleEvent): OSErr;theAppleEventThe Apple event that is currently being handled; if no Apple event is currently being handled, AEGetTheCurrentEvent returns a null descriptor record in this parameter.DESCRIPTIONIn many applications, the handling of an Apple event involves one or more long chains of calls to internal routines. The AEGetTheCurrentEvent function makes it unnecessary for these calls to include the current Apple event as a parameter; the routines can simply call AEGetTheCurrentEvent to get the current Apple event when it is needed.You can also use the AEGetTheCurrentEvent function to make sure that no Apple event is currently being handled. For example, suppose your application always uses an application-defined routine to delete a file. That routine can first call AEGetTheCurrentEvent and delete the file only if AEGetTheCurrentEvent returns a null descriptor record (that is, only if no Apple event is currently being handled).RESULT CODEnoErr    0    No error    Getting the Sizes and Descriptor Types of Descriptor RecordsThe Apple Event Manager provides four routines that allow you to get the sizes and descriptor types of descriptor records that are not part of an Apple event record. The AESizeOfNthItem function returns the size and descriptor type of a descriptor record in a descriptor list.The AESizeOfKeyDesc function returns the size and descriptor type of a keyword-specified descriptor record in an AE record. You can get the size and descriptor type of an Apple event parameter or Apple event attribute using the AESizeOfParam and AESizeOfAttribute functions.AESizeOfNthItemYou can use the AESizeOfNthItem function to get the size and descriptor type of a descriptor record in a descriptor list. FUNCTION AESizeOfNthItem (theAEDescList: AEDescList;                                   index: LongInt; VAR typeCode: DescType;                                   VAR dataSize: Size): OSErr;theAEDescListThe descriptor list containing the descriptor record.index    The position of the descriptor record in the list (for example, 2 specifies the second descriptor record).typeCode     The descriptor type of the descriptor record.dataSize     The length (in bytes) of the data in the descriptor record.RESULT CODESnoErr    0    No error    errAEDescNotFound     –1701    Descriptor record was not found    errAEReplyNotArrived    –1718    Reply has not yet arrived     AESizeOfKeyDescYou can use the AESizeOfKeyDesc function to get the size and descriptor type of a keyword-specified descriptor record in an AE record. FUNCTION AESizeOfKeyDesc (theAERecord: AERecord;                                   theAEKeyword: AEKeyword;                                   VAR typeCode: DescType;                                   VAR dataSize: Size): OSErr;theAERecordThe AE record containing the desired keyword-specified descriptor record.theAEKeywordThe keyword that specifies the desired descriptor record.typeCode     The descriptor type of the keyword-specified descriptor record.dataSize     The length, in bytes of the data in the keyword-specified descriptor record.RESULT CODESnoErr    0    No error    errAEDescNotFound    –1701    Descriptor record was not found    errAENotAEDesc    –1704    Not a valid descriptor record    errAEReplyNotArrived    –1718    Reply has not yet arrived    AESizeOfParamYou can use the AESizeOfParam function to get the size and descriptor type of an Apple event parameter. FUNCTION AESizeOfParam (theAppleEvent: AppleEvent; theAEKeyword:                                 AEKeyword; VAR typeCode: DescType;                                 VAR dataSize: Size): OSErr;theAppleEventThe Apple event containing the parameter.theAEKeywordThe keyword that specifies the desired parameter.typeCode     The descriptor type of the Apple event parameter.dataSize     The length, in bytes, of the data in the Apple event parameter.RESULT CODESnoErr    0    No error    errAEDescNotFound    –1701    Descriptor record was not found    errAENotAEDesc    –1704    Not a valid descriptor record    errAEReplyNotArrived    –1718    Reply has not yet arrived    AESizeOfAttributeYou can use the AESizeOfAttribute function to get the size and descriptor type of an Apple event attribute.FUNCTION AESizeOfAttribute (theAppleEvent: AppleEvent;                                      theAEKeyword: AEKeyword;                                      VAR typeCode: DescType;                                      VAR dataSize: Size): OSErr;theAppleEventThe Apple event containing the desired attribute.theAEKeywordThe keyword that specifies the attribute.typeCode     The descriptor type of the attribute.dataSize     The length, in bytes, of the data in the attribute.RESULT CODESnoErr    0    No error    errAEDescNotFound    –1701    Descriptor record was not found    errAENotAEDesc    –1704    Not a valid descriptor record    errAEReplyNotArrived    –1718    Reply has not yet arrived       Deleting Descriptor RecordsThe Apple Event Manager provides three functions that allow you to delete descriptor records. The AEDeleteItem, AEDeleteKeyDesc, and AEDeleteParam functions allow you to delete descriptor records from a descriptor list, an AE record, and an Apple event parameter, respectively. AEDeleteItemYou can use the AEDeleteItem function to delete a descriptor record from a descriptor list. All subsequent descriptor records will then move up one place. FUNCTION AEDeleteItem (theAEDescList: AEDescList;                               index: LongInt): OSErr;theAEDescListThe descriptor list containing the descriptor record to be deleted.index    The position of the descriptor record to delete (for example, 2 specifies the second item).RESULT CODESnoErr    0    No error    errAEDescNotFound    –1701    Descriptor record was not found    errAENotAEDesc    –1704    Not a valid descriptor record    errAEBadListItem    –1705    Operation involving a list item failed    AEDeleteKeyDescYou can use the AEDeleteKeyDesc function to delete a keyword-specified descriptor record from an AE record.FUNCTION AEDeleteKeyDesc (theAERecord: AERecord;                                   theAEKeyword: AEKeyword): OSErr;theAERecordThe AE record containing the keyword-specified descriptor record to be deleted.theAEKeywordThe keyword that specifies the descriptor record to be deleted.RESULT CODESnoErr    0    No error    errAEDescNotFound    –1701    Descriptor record was not found    errAENotAEDesc    –1704    Not a valid descriptor record    errAEBadListItem    –1705    Operation involving a list item failed    AEDeleteParamYou can use the AEDeleteParam function to delete an Apple event parameter.FUNCTION AEDeleteParam (theAppleEvent: AppleEvent;                                 theAEKeyword: AEKeyword): OSErr;theAppleEventThe Apple event containing the parameter to be deleted.theAEKeywordThe keyword that specifies the parameter to be deleted.RESULT CODESnoErr    0    No error    errAEDescNotFound    –1701    Descriptor record was not found    errAENotAEDesc    –1704    Not a valid descriptor record    errAEBadListItem    –1705    Operation involving a list item failed    Deallocating Memory for Descriptor RecordsThe AEDisposeDesc function deallocates the memory used by a descriptor record. Because all Apple event structures (except for keyword-specified descriptor records) are descriptor records, you can use AEDisposeDesc for any of them.AEDisposeDescYou can use the AEDisposeDesc function to deallocate the memory used by a descriptor record. FUNCTION AEDisposeDesc (VAR theAEDesc: AEDesc): OSErr;theAEDesc     The descriptor record to deallocate. The function returns a null descriptor record in this parameter. If you pass a null descriptor record in this parameter, AEDisposeDesc returns noErr.RESULT CODEnoErr    0    No error    SEE ALSOFor more information about using AEDisposeDesc, see “Disposing of Apple Event Data Structures,” which begins on page 4-39.Coercing Descriptor TypesThe Apple Event Manager provides two functions that allow you to coerce descriptor types. The AECoercePtr function takes a pointer to data and a desired descriptor type and attempts to coerce the data to a descriptor record of the desired descriptor type. The AECoerceDesc function attempts to coerce the data in an existing descriptor record to another descriptor type. AECoercePtrYou can use the AECoercePtr function to coerce data to a desired descriptor type. If successful, it creates a descriptor record containing the newly coerced data. FUNCTION AECoercePtr (typeCode: DescType; dataPtr: Ptr;                              dataSize: Size; toType: DescType;                              VAR result: AEDesc): OSErr;typeCode     The descriptor type of the source data.dataPtr     A pointer to the data to be coerced.dataSize     The length, in bytes, of the data to be coerced.toType    The desired descriptor type of the resulting descriptor record.result    The resulting descriptor record. DESCRIPTIONThe AECoercePtr function creates a new descriptor record by coercing the specified data to a descriptor record of the specified descriptor type. You should use the AEDisposeDesc function to dispose of the resulting descriptor record once you are finished using it.If AECoercePtr returns a nonzero result code, it returns a null descriptor record unless the Apple Event Manager is not available because of limited memory. RESULT CODESnoErr    0    No error    memFullErr    –108    Not enough room in heap zone    errAECoercionFail     –1700    Data could not be coerced to the requested descriptor type    SEE ALSOFor a description of the AEDisposeDesc function, see page 4-94.AECoerceDescYou can use the AECoerceDesc function to coerce the data in a descriptor record to another descriptor type. FUNCTION AECoerceDesc (theAEDesc: AEDesc; toType: DescType;                               VAR result: AEDesc): OSErr;theAEDesc    The descriptor record whose data is to be coerced.toType    The desired descriptor type of the resulting descriptor record.result    The resulting descriptor record.DESCRIPTIONThe AECoerceDesc function attempts to create a new descriptor record by coercing the specified descriptor record. Your application is responsible for using the AEDisposeDesc function to dispose of the resulting descriptor record once you are finished using it.If AECoerceDesc returns a nonzero result code, it returns a null descriptor record (a descriptor record of type typeNull, which does not contain any data) unless the Apple Event Manager is not available because of limited memory.RESULT CODESnoErr    0    No error    memFullErr    –108    Not enough room in heap zone    errAECoercionFail    –1700    Data could not be coerced to requested descriptor type    SEE ALSOFor a list of the descriptor types for which the Apple Event Manager provides coercions, see Table 4-1, which begins on page 4-43.Creating and Managing the Coercion Handler Dispatch TablesThe Apple Event Manager provides three functions that allow you to create and manage the coercion handler dispatch tables. The AEInstallCoercionHandler function installs a coercion handler routine in either the application or system coercion dispatch table. The AEGetCoercionHandler function returns the handler for a specified descriptor type coercion. The AERemoveCoercionHandler function removes a coercion handler from either the application or system coercion table.AEInstallCoercionHandlerYou can use the AEInstallCoercionHandler function to install a coercion handler routine in either the application or system coercion handler dispatch table.FUNCTION AEInstallCoercionHandler (fromType: DescType;                                               toType: DescType;                                               handler: ProcPtr;                                               handlerRefcon: LongInt;                                               fromTypeIsDesc: Boolean;                                               isSysHandler: Boolean): OSErr;fromType     The descriptor type of the data coerced by the handler.toType     The descriptor type of the resulting data. If there was already an entry in the specified coercion handler table for the same source descriptor type and result descriptor type, the existing entry is replaced.handler     A pointer to the coercion handler. Note that a handler in the system coercion table must reside in the system heap; thus, if the value of the isSysHandler parameter is TRUE, the handler parameter should point to a location in the system heap. Otherwise, if you put your system handler code in your application heap, you should use AERemoveCoercionHandler to remove the handler when your application quits.handlerRefcon A reference constant passed by the Apple Event Manager to the handler each time the handler is called. If your handler doesn’t expect a reference constant, use 0 as the value of this parameter.fromTypeIsDesc Specifies the form of the data to be coerced. If the value of this parameter is TRUE, the coercion handler expects the data to be passed as a descriptor record. If the value is FALSE, the coercion handler expects a pointer to the data. Because it is more efficient for the Apple Event Manager to provide a pointer to data than to a descriptor record, all coercion routines should accept a pointer to data if possible.isSysHandler Specifies the coercion table to which the handler is added. If the value of this parameter is TRUE, the handler is added to the system coercion table and made available to all applications. If the value is FALSE, the handler is added to the application coercion table. Note that a handler in the system coercion table must reside in the system heap; thus, if the value of the isSysHandler parameter is TRUE, the handler parameter must point to a location in the system heap.DESCRIPTIONBefore using AEInstallCoercionHandler to install a handler for a particular descriptor type into the system coercion handler dispatch table, use the AEGetCoercionHandler function to determine whether the table already contains a coercion handler for that descriptor type. If an entry exists, AEGetCoercionHandler returns a reference constant and a pointer to that handler. Chain these to your coercion handler by providing, in the handlerRefcon parameter of AEInstallCoercionHandler, pointers to the previous handler and its reference constant. If your coercion handler returns the error errAECoercionFail, use these pointers to call the previous handler. If you remove your system coercion handler, be sure to reinstall the chained handlers.SPECIAL CONSIDERATIONSBefore an application calls a system coercion handler, system software has set up the A5 register for the calling application. For this reason, if you provide a system coercion handler, it should never use A5 global variables or anything that depends on a particular context; otherwise, the application that calls the system handler may crash.RESULT CODESnoErr    0    No error    memFullErr    –108    Not enough room in heap zone    AEGetCoercionHandlerYou can use the AEGetCoercionHandler function to get the handler for a specified descriptor type coercion.FUNCTION AEGetCoercionHandler (fromType: DescType;                                          toType: DescType;                                          VAR handler: ProcPtr;                                          VAR handlerRefcon: LongInt;                                           VAR fromTypeIsDesc: Boolean;                                           isSysHandler: Boolean): OSErr;fromType    The descriptor type of the data coerced by the handler.toType     The descriptor type of the resulting data.handler     A pointer to the desired coercion handler.handlerRefcon The reference constant for the desired handler. The Apple Event Manager passes this reference constant to the handler each time the handler is called.fromTypeIsDesc If the AEGetCoercionHandler function returns TRUE in this parameter, the coercion handler expects the data to be passed as a descriptor record. If the function returns FALSE, the coercion handler expects a pointer to the data.isSysHandler Specifies the coercion table from which to get the handler. If the value of this parameter is TRUE, the handler is taken from the system coercion table. If the value is FALSE, the handler is taken from the application coercion table.RESULT CODESnoErr    0    No error    memFullErr    –108    Not enough room in heap zone    errAEHandlerNotFound    –1717    No coercion handler found    AERemoveCoercionHandlerYou can use the AERemoveCoercionHandler function to remove a coercion handler from either the application or system coercion handler dispatch table.FUNCTION AERemoveCoercionHandler (fromType: DescType;                                              toType: DescType;                                              handler: ProcPtr;                                              isSysHandler: Boolean): OSErr;fromType     The descriptor type of the data coerced by the handler.toType     The descriptor type of the resulting data.handler    A pointer to the coercion handler. Although the fromType and toType parameters would be sufficient to identify the handler to be removed, providing the handler parameter is a safeguard to ensure that you remove the correct handler.isSysHandler The coercion table from which to remove the handler. If the value of this parameter is TRUE, the handler is removed from the system coercion table. If the value is FALSE, the handler is removed from the application coercion dispatch table.RESULT CODESnoErr    0    No error    memFullErr    –108    Not enough room in heap zone    errAEHandlerNotFound    –1717    No coercion handler found    Creating and Managing the Special Handler Dispatch TablesThe Apple Event Manager provides three functions that allow you to create and manage the special handler dispatch tables. The AEInstallSpecialHandler function installs an entry for a special handler in either the application or system special handler dispatch table. The AEGetSpecialHandler function returns the handler for a specified special handler. The AERemoveSpecialHandler function removes a special handler from either the application or system special handler dispatch table. You can also use the AEInstallSpecialHandler, AEGetSpecialHandler, and AERemoveSpecialHandler functions to install, get, and remove object callback functions—including system object callback functions, which cannot be installed with the AESetObjectCallbacks function. When calling any of these three functions, use one of the following constants as the value of the functionClass parameter to specify the object callback function:Object callback function    Constant    Object-counting function    keyAECountProc    Object-comparison function    keyAECompareProc    Token disposal function    keyDiposeTokenProc    Error callback function    keyAEGetErrDescProc    Mark token function    keyAEMarkTokenProc    Object-marking function    keyAEMarkProc    Mark-adjusting function    keyAEAdjustMarksProc    You can also use the AERemoveSpecialHandler function to disable all the Apple Event Manager routines that support object specifier records. To do this, specify the constant keySelectProc in the functionClass parameter as described on page 4-102. AEInstallSpecialHandlerYou can use the AEInstallSpecialHandler function to install a special handler in either the application or system special handler dispatch table.FUNCTION AEInstallSpecialHandler (functionClass: AEKeyword;                                              handler: ProcPtr;                                              isSysHandler: Boolean): OSErr;functionClass The keyword for the special handler that is installed. The keyPreDispatch constant identifies a handler with the same parameters as an Apple event handler called immediately before the Apple Event Manager dispatches an Apple event. Any of the constants for object callback functions listed above can also be specified in this parameter. If there was already an entry in the specified special handler dispatch table for the same value of functionClass, it is replaced.handler     A pointer to the special handler. Note that a handler in the system special handler dispatch table must reside in the system heap; thus, if the value of the isSysHandler parameter is TRUE, the handler parameter should point to a location in the system heap. Otherwise, if you put your system handler code in your application heap, use AERemoveSpecialHandler to remove the handler when your application quits.isSysHandler The special handler dispatch table to which to add the handler. If the value of this parameter is TRUE, the handler is added to the system handler dispatch table and made available to all applications. If the value is FALSE, the handler is added to the application handler table.DESCRIPTIONThe AEInstallSpecialHandler function creates an entry in either your application’s special handler dispatch table or the system special handler dispatch table. You must supply parameters that specify the keyword for the special handler that is installed, the handler routine, and whether the handler is to be added to the system special handler dispatch table or your application’s special handler dispatch table.SPECIAL CONSIDERATIONSBefore an application calls a system special handler, system software has set up the A5 register for the calling application. For this reason, a system special handler should never use A5 global variables or anything that depends on a particular context; otherwise, the application that calls the system handler may crash.RESULT CODESnoErr    0    No error    paramErr    –50    Parameter error (handler pointer is NIL or odd)    memFullErr    –108    Not enough room in heap zone    errAENotASpecialFunction    –1714    Wrong keyword for a special function    AEGetSpecialHandlerYou can use the AEGetSpecialHandler function to get a specified special handler.FUNCTION AEGetSpecialHandler (functionClass: AEKeyword;                                         VAR handler: ProcPtr;                                         isSysHandler: Boolean): OSErr;functionClass The keyword for the special handler that is installed. The keyPreDispatch constant identifies a handler with the same parameters as an Apple event handler that is called immediately before the Apple Event Manager dispatches an Apple event. Any of the constants for object callback functions listed on page 4-100 can also be specified in this parameter. handler     A pointer to the special handler.isSysHandlerSpecifies the special handler dispatch table from which to get the handler. If the value of this parameter is TRUE, the handler is taken from the system special handler dispatch table. If the value is FALSE, the handler is taken from the application’s special handler dispatch table.RESULT CODESnoErr    0    No error    memFullErr    –108    Not enough room in heap zone    errAENotASpecialFunction    –1714    Wrong keyword for a special handler    AERemoveSpecialHandlerYou can use the AERemoveSpecialHandler function to remove a handler from a special handler table.FUNCTION AERemoveSpecialHandler (functionClass: AEKeyword;                                             handler: ProcPtr;                                             isSysHandler: Boolean): OSErr;functionClass The keyword for the special handler to be removed. In addition to the constants for object callback functions listed on page 4-100, two other values are allowed for the functionClass parameter: keyPreDispatch and keySelectProc. The keyPreDispatch constant identifies a handler with the same parameters as an Apple event handler that is called immediately before the Apple Event Manager dispatches an Apple event. The keySelectProc constant indicates that you want to disable the Object Support Library—that is, all the routines described in the chapter “Resolving and Creating Object Specifier Records” in this book (see the description that follows for more information).handler     A pointer to the special handler to be removed. Although the functionClass parameter would be sufficient to identify the handler to be removed, providing the handler parameter is a safeguard that you remove the correct handler.isSysHandler Specifies the special handler dispatch table from which to remove the handler. If the value of this parameter is TRUE, the handler is taken from the system special handler dispatch table. If the value is FALSE, the handler is removed from the application special handler dispatch table.DESCRIPTIONIn addition to using the AERemoveSpecialHandler function to remove specific special handlers, you can use the function to disable, within your application only, all Apple Event Manager routines that support Apple event objects—that is, all the routines available to your application as a result of linking the Object Support Library (OSL) and calling the AEObjectInit function. An application that expects its copy of the OSL to move after it is installed—for example, an application that keeps it in a stand-alone code resource—would need to do this. When an application calls AEObjectInit to initialize the OSL, the OSL installs the addresses of its routines as extensions to the pack. If those routines move, the addresses become invalid.To disable the OSL, you should pass the keyword keySelectProc in the functionClass parameter, NIL in the handler parameter, and FALSE in the isSysHandler parameter. Once you have called the AERemoveSpecialHandler function with these parameters, subsequent calls by your application to any of the Apple Event Manager routines that support Apple event objects will return errors. To initialize the OSL after disabling it with the AERemoveSpecialHandler function, your application must call AEObjectInit again.If you expect to initialize the OSL and disable it several times, you should call AERemoveObjectAccessor to remove your application’s object accessor functions from your application’s object accessor dispatch table before you call AERemoveSpecialHandler. RESULT CODESnoErr    0    No error    memFullErr    –108    Not enough room in heap zone    errAENotASpecialFunction    –1714    Wrong keyword for a special function     Getting Information About the Apple Event ManagerThe AEManagerInfo routine allows you to get two kinds of information related to Apple events on the current computer: the number of processes currently recording Apple events and the version of the Apple Event Manager. If you decide to make your application recordable, this information may be useful when your application is responding to Apple events that it sends to itself.You can find out whether the Apple Event Manager is available in system software by using the Gestalt function. See page 4-4 for details.AEManagerInfoYou can use the AEManagerInfo function to obtain information about the version of the Apple Event Manager currently available or the number of processes that are currently recording Apple events. This function is available only in version 1.01 and later versions of the Apple Event Manager. FUNCTION AEManagerInfo (keyword: AEKeyword;                                 VAR result: LongInt): OSErr;keyword    A value that determines what kind of information AEManagerInfo returns. The value can be represented by one of these constants:    CONST keyAERecorderCount         = 'recr';                                       keyAEVersion                                   =     'vers'; result    If the value of the keyword parameter is keyAERecorderCount, this parameter is an integer that indicates the number of processes that are currently recording Apple events. If the value of the keyword parameter is keyAEVersion, this parameter is an integer that provides information about the version of the Apple Event Manager available on the current computer, using the same format as a 'vers' resource. RESULT CODEnoErr    0    No error    SEE ALSOFor information about using the AEManagerInfo function to check whether Apple event recording is on or not, see the chapter “Recording Apple Events” in this book.   For information about using Gestalt to determine whether the Apple Event Manager is available, see “Handling Apple Events” on page 4-4.For information about the 'vers' resource, see the chapter “Finder Interface” in Inside Macintosh: Macintosh Toolbox Essentials.Application-Defined RoutinesFor each Apple event your application supports, you must provide an Apple event handler. The AEProcessAppleEvent function calls one of your Apple event handlers when it processes an Apple event. An Apple event handler (MyEventHandler) should perform any action described by the Apple event, add parameters to the reply Apple event if appropriate, and return a result code.You can also provide your own coercion handlers to coerce data to descriptor types other than those for which the Apple Event Manager provides coercion handling. The MyCoercePtr function accepts a pointer to data and returns a descriptor record, and the MyCoerceDesc function accepts a descriptor record and returns a descriptor record.MyEventHandlerAn Apple event handler has the following syntax:FUNCTION MyEventHandler (theAppleEvent: AppleEvent;                                  reply: AppleEvent;                                  handlerRefcon: LongInt): OSErr;theAppleEventThe Apple event to handle.reply    The default reply Apple event provided by the Apple Event Manager.handlerRefconThe reference constant stored in the Apple event dispatch table for the Apple event.DESCRIPTIONAn Apple event handler should extract any parameters and attributes from the Apple event, perform the requested action, and add parameters to the reply Apple event if appropriate. Your handler should always set its function result to noErr if it successfully handles the Apple event. If an error occurs, your handler should return either errAEEventNotHandled or some other nonzero result code. If the error occurs because your application cannot understand the event, return errAEEventNotHandled, in case a handler in the system special handler or system Apple event dispatch tables might be able to handle the event. If the error occurs because the event is impossible to handle as specified, return the result code returned by whatever function caused the failure, or whatever other result code is appropriate.For example, suppose your application receives a Get Data event that requests the name of the current printer, and your application cannot handle such an event. In this situation, you should return errAEEventNotHandled in case another handler available to the Apple Event Manager can handle the event. This strategy allows users to take advantage of system capabilities from within your application via system handlers. However, if your application cannot handle a Get Data event that requests the fifth paragraph in a document because the document contains only four paragraphs, you should return some other nonzero error, because further attempts to handle the event are pointless.If your Apple event handler calls the AEResolve function and AEResolve calls an object accessor function in the system object accessor dispatch table, your Apple event handler may not recognize the descriptor type of the token returned by the function. In this case, your handler should return the result code errAEUnknownObjectType. When your handler returns this result code, the Apple Event Manager attempts to locate a system Apple event handler that can recognize the token. SEE ALSOFor more information about Apple event handlers, see “Writing Apple Event Handlers” on page 4-33.For a discussion of the dispatching of object accessor functions and the use of the result code errAEUnknownObjectType, see “Installing Entries in the Object Accessor Dispatch Tables,” which begins on page 6-21. MyCoercePtrA coercion handler that accepts a pointer to data has the following syntax:FUNCTION MyCoercePtr (typeCode: DescType; dataPtr: Ptr;                              dataSize: Size; toType: DescType;                              handlerRefcon: LongInt;                             VAR result: AEDesc): OSErr; typeCode    The descriptor type of the original data.dataPtr    A pointer to the data to coerce.dataSize    The length, in bytes, of the data to coerce.toType    The desired descriptor type for the resulting descriptor record.handlerRefconA reference constant that is stored in the coercion dispatch table entry for the handler and passed to the handler by the Apple Event Manager whenever the handler is called.result    The resulting descriptor record.DESCRIPTIONYour coercion handler should coerce the data to the desired descriptor type and return the resulting data in the descriptor record specified by the result parameter. Your handler should return the noErr result code if your handler successfully performs the coercion, and a nonzero result code otherwise.SEE ALSOFor more information, see “Writing and Installing Coercion Handlers” on page 4-41.MyCoerceDescA coercion handler that accepts a descriptor record has the following syntax:FUNCTION MyCoerceDesc (theAEDesc: AEDesc; toType: DescType;                                handlerRefcon: LongInt;                                 VAR result: AEDesc): OSErr;theAEDesc    The descriptor record that contains the data to be coerced.toType    The desired descriptor type for the resulting descriptor record.handlerRefconA reference constant that is stored in the coercion dispatch table entry for the handler and passed to the handler by the Apple Event Manager whenever the handler is called.result    The resulting descriptor record.DESCRIPTIONYour coercion handler should coerce the data in the descriptor record to the desired descriptor type and return the resulting data in the descriptor record specified by the result parameter. Your handler should return an appropriate result code.SEE ALSOFor more information, see “Writing and Installing Coercion Handlers” on page 4-41.Summary of Responding to Apple EventsPascal SummaryConstantsCONST            gestaltAppleEventsAttr                                    = 'evnt';                {selector for Apple events}    gestaltAppleEventsPresent                                    = 0;                {if this bit is set, then Apple }                                                        { Event Manager is available}    {Apple event descriptor types}    typeBoolean                                = 'bool';                    {1-byte Boolean value}    typeChar                                = 'TEXT';                    {unterminated string}    typeSMInt                                = 'shor';                    {16-bit integer}    typeInteger                                = 'long';                    {32-bit integer}    typeSMFloat                                = 'sing';                    {SANE single}    typeFloat                                = 'doub';                    {SANE double}    typeLongInteger                                = 'long';                    {32-bit integer}    typeShortInteger                                = 'shor';                    {16-bit integer}    typeLongFloat                                = 'doub';                    {SANE double}    typeShortFloat                                = 'sing';                    {SANE single}    typeExtended                                = 'exte';                    {SANE extended}    typeComp                                = 'comp';                    {SANE comp}    typeMagnitude                                = 'magn';                    {unsigned 32-bit integer}    typeAEList                                = 'list';                    {list of descriptor records}    typeAERecord                                = 'reco';                    {list of keyword-specified }                                                        { descriptor records}    typeAppleEvent                                = 'aevt';                    {Apple event record}    typeTrue                                = 'true';                    {TRUE Boolean value}    typeFalse                                = 'fals';                    {FALSE Boolean value}    typeAlias                                = 'alis';                    {alias record}    typeEnumerated                                = 'enum';                    {enumerated data}    typeType                                = 'type';                    {four-character code for }                                                        { event class or event ID}    typeAppParameters                                = 'appa';                    {Process Manager launch parameters}    typeProperty                                = 'prop';                    {Apple event property}    typeFSS                                = 'fss ';                    {file system specification}    typeKeyword                                = 'keyw';                    {Apple event keyword}    typeSectionH                                = 'sect';                    {handle to a section record}    typeWildCard                                = '****';                    {matches any type}    typeApplSignature                                = 'sign';                    {application signature}    typeSessionID                                = 'ssid';                    {session reference number}    typeTargetID                                = 'targ';                    {target ID record}    typeProcessSerialNumber                                = 'psn ';                    {process serial number}    typeNull                                = 'null';                    {NULL or nonexistent data}        {keywords for Apple event parameters}    keyDirectObject                                = '----';                    {direct parameter}    keyErrorNumber                                = 'errn';                    {error number parameter}    keyErrorString                                = 'errs';                    {error string parameter}    keyProcessSerialNumber                                = 'psn ';                    {process serial number param}    {keywords for Apple event attributes}    keyTransactionIDAttr                                = 'tran';                    {transaction ID}    keyReturnIDAttr                                = 'rtid';                    {return ID}    keyEventClassAttr                                 = 'evcl';                    {event class}    keyEventIDAttr                                = 'evid';                    {event ID}    keyAddressAttr                                = 'addr';                    {address of target or }                                                        { client application}    keyOptionalKeywordAttr                                = 'optk';                    {list of optional parameters }                                                        { for the Apple event}    keyTimeoutAttr                                = 'timo';                    {number of ticks the client }                                                        { will wait}    keyInteractLevelAttr                                 = 'inte';                    {settings to allow Apple Event }                                                        { Manager to bring server }                                                                            { to foreground}    keyEventSourceAttr                                = 'esrc';                    {nature of source }                                                        { application}    keyMissedKeywordAttr                                = 'miss';                    {first required parameter }                                                        { remaining in an Apple event}    keyOriginalAddressAttr                                = 'from';                    {address of original source; }                                                        { available only in version }                                                         { 1.01 and later versions of }                                                        { the Apple Event Manager}    {keywords for special handlers}    keyPreDispatch                                = 'phac';                    {identifies a handler routine }                                                        { called immediately before the }                                                        { Apple Event Manager dispatches }                                                        { an Apple event}    keySelectProc                                = 'selh';                     {selector used with }                                                        { AERemoveSpecialHandler to }                                                        { disable the OSL}    {keywords for use with AEManagerInfo; available only in version }    { 1.0.1 and later versions of the Apple Event Manager}    keyAERecorderCount                                 = 'recr';                    {keyword for recording info}    keyAEVersion                                 = 'vers';                    {keyword for version info}    {event class}    kCoreEventClass                                = 'aevt';                    {event class for required Apple }                                                        { events}    {event IDs for required Apple events}    kAEOpenApplication                                = 'oapp';                    {event ID for Open }                                                        { Application event}    kAEOpenDocuments                                = 'odoc';                    {event ID for Open Documents event}    kAEPrintDocuments                                = 'pdoc';                    {event ID for Print Documents }                                                        { event}    kAEQuitApplication                                = 'quit';                    {event ID for Quit Application }                                                        { event}    kAEAnswer                                = 'ansr';                    {event ID for Apple event replies}    kAEApplicationDied                                = 'obit';                    {event ID for Application Died }                                                        { event}    {constants for setting the sendMode parameter of AESend}    kAENoReply                                = $00000001;                    {client doesn't want reply}    kAEQueueReply                                = $00000002;                    {client wants server to }                                                        { reply in event queue}    kAEWaitReply                                = $00000003;                    {client wants a reply and }                                                        { will give up processor}    kAENeverInteract                                = $00000010;                    {server application should }                                                        { not interact with user }                                                        { for this Apple event}    kAECanInteract                                = $00000020;                    {server may interact with }                                                        { user for this Apple event }                                                        { to supply information}    kAEAlwaysInteract                                = $00000030;                    {server may interact with user }                                                        { for this Apple event even if }                                                        { no information is required}    kAECanSwitchLayer                                = $00000040;                    {server should come directly }                                                        { to foreground when appropriate}    kAEDontReconnect                                = $00000080;                    {don't reconnect if there }                                                        { is a PPC session closed error}    kAEWantReceipt                                = nReturnReceipt; {client wants return }                                                        { receipt}    kAEDontRecord                                = $00001000            ;        {don't record this event}    kAEDontExecute                                = $00002000;                    {don't excecute this event}    {constants for setting the sendPriority parameter of AESend}    kAENormalPriority                                = $00000000;                    {put event at the back of }                                                        { event queue}    kAEHighPriority                                = nAttnMsg;                    {put event at the front of }                                                        { the event queue}    {event IDs for recording events; available only in version 1.01 and }    { later versions of the Apple Event Manager}    kAEStartRecording                                = 'reca';                    {event ID for Start Recording }                                                        { event}    kAEStopRecording                                = 'recc';                    {event ID for Stop Recording }                                                        { event}    kAENotifyStartRecording                                = 'rec1';                    {event ID for Recording On event}    kAENotifyStopRecording                                = 'rec0';                    {event ID for Recording Off event}    kAENotifyRecording                                = 'recr';                    {event ID for Receive Recordable }                                                        { Event event}    {constant for the returnID parameter of AECreateAppleEvent}    kAutoGenerateReturnID                                = -1;                    {tells Apple Event Manager to }                                                        { generate a unique return ID}    {constant for transaction IDs}    kAnyTransactionID                                 = 0;                    {the Apple event is not }                                                        { part of a transaction}    {constants for timeout durations}    kAEDefaultTimeout                                = -1;                    {use default timeout value}    kNoTimeOut                                = -2;                    {never time out}    {constants for the dispatcher parameter of AEResumeTheCurrentEvent}    kAENoDispatch                                = 0;                    {don't redispatch the Apple event}    kAEUseStandardDispatch                                = -1;                    {redispatch the Apple event }                                                        { by using its entry in the }                                                        { Apple event dispatch table}Data TypesTYPE    AEEventClass =         PACKED ARRAY[1..4] OF Char;                                                    {event class for a high-level }                                                            { event}    AEEventID =         PACKED ARRAY[1..4] OF Char;                                                    {event ID for a high-level }                                                            { event}    AEKeyword =         PACKED ARRAY[1..4] OF Char;                                                    {keyword for a descriptor }                                                            { record}    DescType                                    = ResType;                    {descriptor type}    AEDesc =                                                         {descriptor record}    RECORD                descriptorType:                                 DescType;                    {type of data being passed}        dataHandle:                                 Handle;                    {handle to data being passed}    END;    AEKeyDesc =                                                         {keyword-specified }    RECORD                                                        { descriptor record}        descKey:                                AEKeyword;                    {keyword}        descContent:                                AEDesc    ;                {descriptor record}    END;    AEAddressDesc                                    = AEDesc;                    {address descriptor record}    AEDescList                                    = AEDesc;                    {list of descriptor records}    AERecord                                    = AEDescList;                    {list of keyword-specified }                                                            { descriptor records}    AppleEvent                                    = AERecord;                    {list of attributes and }                                                            { parameters necessary for }                                                            { an Apple event}    AESendMode                                    = LongInt;                    {flags that determine how }                                                            { an Apple event is sent}    AESendPriority                                    = Integer;                    {send priority of an Apple }                                                            { event}    AEInteractAllowed = (kAEInteractWithSelf, kAEInteractWithLocal,                                                   kAEInteractWithAll);                            {what processes may }                                                            { interact with the user}    AEEventSource = (kAEUnknownSource, kAEDirectCall, kAESameProcess,                                           kAELocalProcess, kAERemoteProcess);                                                            {the source of an Apple }                                                            { event}    AEArrayType = (kAEDataArray, kAEPackedArray, kAEHandleArray,                                     kAEDescArray, kAEKeyDescArray);                                                            {type of an Apple event array}    AEArrayData =     RECORD                                                        {data for an Apple event array}        CASE AEArrayType OF        kAEDataArray:            (AEDataArray:     ARRAY[0..0] OF Integer);        kAEPackedArray:            (AEPackedArray:     PACKED ARRAY[0..0] OF Char);        kAEHandleArray:            (AEHandleArray:     ARRAY[0..0] OF Handle);        kAEDescArray:            (AEDescArray:     ARRAY[0..0] OF AEDesc);        kAEKeyDescArray:            (AEKeyDescArray:     ARRAY[0..0] OF AEKeyDesc);    END;        AEArrayDataPointer = ^AEArrayData;    EventHandlerProcPtr = ProcPtr;                                                        {pointer to an Apple event }                                                            { handler}    IdleProcPtr = ProcPtr;                                                        {pointer to an application's }                                                            { idle function}    EventFilterProcPtr = ProcPtr;                                                        {pointer to an application's }                                                            { filter function}Routines for Responding to Apple EventsCreating and Managing the Apple Event Dispatch TablesFUNCTION AEInstallEventHandler(theAEEventClass: AEEventClass; theAEEventID: AEEventID; handler: EventHandlerProcPtr; handlerRefcon: LongInt; isSysHandler: Boolean): OSErr;FUNCTION AEGetEventHandler    (theAEEventClass: AEEventClass; theAEEventID: AEEventID; VAR handler: EventHandlerProcPtr; VAR handlerRefcon: LongInt; isSysHandler: Boolean): OSErr;FUNCTION AERemoveEventHandler(theAEEventClass: AEEventClass; theAEEventID: AEEventID; handler: EventHandlerProcPtr; isSysHandler: Boolean): OSErr;Dispatching Apple EventsFUNCTION AEProcessAppleEvent(theEventRecord: EventRecord): OSErr;Getting Data or Descriptor Records Out of Apple Event Parameters and AttributesFUNCTION AEGetParamPtr    (theAppleEvent: AppleEvent; theAEKeyword: AEKeyword; desiredType: DescType; VAR typeCode: DescType; dataPtr: Ptr; maximumSize: Size; VAR actualSize: Size): OSErr;FUNCTION AEGetParamDesc    (theAppleEvent: AppleEvent; theAEKeyword: AEKeyword; desiredType: DescType; VAR result: AEDesc): OSErr;FUNCTION AEGetAttributePtr    (theAppleEvent: AppleEvent; theAEKeyword: AEKeyword; desiredType: DescType; VAR typeCode: DescType; dataPtr: Ptr; maximumSize: Size; VAR actualSize: Size): OSErr;FUNCTION AEGetAttributeDesc    (theAppleEvent: AppleEvent; theAEKeyword: AEKeyword; desiredType: DescType; VAR result: AEDesc): OSErr;Counting the Items in Descriptor ListsFUNCTION AECountItems    (theAEDescList: AEDescList; VAR theCount: LongInt): OSErr;Getting Items From Descriptor ListsFUNCTION AEGetNthPtr    (theAEDescList: AEDescList; index: LongInt; desiredType: DescType; VAR theAEKeyword: AEKeyword; VAR typeCode: DescType; dataPtr: Ptr; maximumSize: Size; VAR actualSize: Size): OSErr;FUNCTION AEGetNthDesc    (theAEDescList: AEDescList; index: LongInt; desiredType: DescType; VAR theAEKeyword: AEKeyword; VAR result: AEDesc): OSErr;FUNCTION AEGetArray    (theAEDescList: AEDescList; arrayType: AEArrayType; arrayPtr: AEArrayDataPointer; maximumSize: Size; VAR itemType: DescType; VAR itemSize: Size; VAR itemCount: LongInt): OSErr;Getting Data and Keyword-Specified Descriptor Records Out of AE RecordsFUNCTION AEGetKeyPtr    (theAERecord: AERecord; theAEKeyword: AEKeyword; desiredType: DescType; VAR typeCode: DescType; dataPtr: Ptr; maximumSize: Size; VAR actualSize: Size): OSErr;FUNCTION AEGetKeyDesc    (theAERecord: AERecord; theAEKeyword: AEKeyword; desiredType: DescType; VAR result: AEDesc): OSErr;Requesting User InteractionFUNCTION AESetInteractionAllowed(level: AEInteractAllowed): OSErr;FUNCTION AEGetInteractionAllowed(VAR level: AEInteractAllowed): OSErr;FUNCTION AEInteractWithUser    (timeOutInTicks: LongInt; nmReqPtr: NMRecPtr; idleProc: IdleProcPtr): OSErr;Requesting More Time to Respond to Apple EventsFUNCTION AEResetTimer    (reply: AppleEvent): OSErr;Suspending and Resuming Apple Event HandlingFUNCTION AESuspendTheCurrentEvent    (theAppleEvent: AppleEvent): OSErr;FUNCTION AEResumeTheCurrentEvent(theAppleEvent, reply: AppleEvent;             dispatcher: EventHandlerProcPtr; handlerRefcon: LongInt): OSErr;FUNCTION AESetTheCurrentEvent(theAppleEvent: AppleEvent): OSErr;FUNCTION AEGetTheCurrentEvent(VAR theAppleEvent: AppleEvent): OSErr;Getting the Sizes and Descriptor Types of Descriptor RecordsFUNCTION AESizeOfNthItem    (theAEDescList: AEDescList; index: LongInt; VAR typeCode: DescType; VAR dataSize: Size): OSErr;FUNCTION AESizeOfKeyDesc    (theAERecord: AERecord; theAEKeyword: AEKeyword; VAR typeCode: DescType; VAR dataSize: Size): OSErr;FUNCTION AESizeOfParam    (theAppleEvent: AppleEvent; theAEKeyword: AEKeyword; VAR typeCode: DescType; VAR dataSize: Size): OSErr;FUNCTION AESizeOfAttribute    (theAppleEvent: AppleEvent; theAEKeyword: AEKeyword; VAR typeCode: DescType; VAR dataSize: Size): OSErr;Deleting Descriptor RecordsFUNCTION AEDeleteItem    (theAEDescList: AEDescList; index: LongInt): OSErr;FUNCTION AEDeleteKeyDesc    (theAERecord: AERecord; theAEKeyword: AEKeyword): OSErr;FUNCTION AEDeleteParam    (theAppleEvent: AppleEvent; theAEKeyword: AEKeyword): OSErr;Deallocating Memory for Descriptor RecordsFUNCTION AEDisposeDesc    (VAR theAEDesc: AEDesc): OSErr;Coercing Descriptor TypesFUNCTION AECoercePtr    (typeCode: DescType; dataPtr: Ptr; dataSize: Size; toType: DescType; VAR result: AEDesc): OSErr;FUNCTION AECoerceDesc    (theAEDesc: AEDesc; toType: DescType; VAR result: AEDesc): OSErr;Creating and Managing the Coercion Handler Dispatch TablesFUNCTION AEInstallCoercionHandler(fromType: DescType; toType: DescType; handler: ProcPtr; handlerRefcon: LongInt; fromTypeIsDesc: Boolean; isSysHandler: Boolean): OSErr;FUNCTION AEGetCoercionHandler(fromType: DescType; toType: DescType; VAR handler: ProcPtr; VAR handlerRefcon: LongInt; VAR fromTypeIsDesc: Boolean; isSysHandler: Boolean): OSErr;FUNCTION AERemoveCoercionHandler(fromType: DescType; toType: DescType; handler: ProcPtr; isSysHandler: Boolean): OSErr;Creating and Managing the Special Handler Dispatch TablesFUNCTION AEInstallSpecialHandler(functionClass: AEKeyword; handler: ProcPtr; isSysHandler: Boolean): OSErr;FUNCTION AEGetSpecialHandler(functionClass: AEKeyword; VAR handler: ProcPtr; isSysHandler: Boolean): OSErr;FUNCTION AERemoveSpecialHandler(functionClass: AEKeyword; handler: ProcPtr; isSysHandler: Boolean): OSErr;Getting Information About the Apple Event Manager{available only in version 1.01 and later versions of Apple Event Manager}FUNCTION AEManagerInfo     (keyword: AEKeyword; VAR result: LongInt): OSErr;Application-Defined RoutinesFUNCTION MyEventHandler    (theAppleEvent: AppleEvent; reply: AppleEvent; handlerRefcon: LongInt): OSErr; FUNCTION MyCoercePtr    (typeCode: DescType; dataPtr: Ptr; dataSize: Size; toType: DescType; handlerRefcon: LongInt; VAR result: AEDesc): OSErr; FUNCTION MyCoerceDesc    (theAEDesc: AEDesc; toType: DescType; handlerRefcon: LongInt; VAR result: AEDesc): OSErr;C SummaryConstantsenum {        #define gestaltAppleEventsAttr                                      'evnt'                /*selector for Apple events*/        gestaltAppleEventsPresent                                             = 0         /*if this bit is set, then */                                                            /* Apple Event Manager is */};                                                            /* available*/        /*Apple event descriptor types*/enum        {        typeBoolean                                = 'bool',                    /*1-byte Boolean value*/        typeChar                                = 'TEXT',                    /*unterminated string*/        typeSMInt                                = 'shor',                    /*16-bit integer*/        typeInteger                                = 'long',                    /*32-bit integer*/        typeSMFloat                                = 'sing',                    /*SANE single*/        typeFloat                                = 'doub',                    /*SANE double*/        typeLongInteger                                = 'long',                    /*32-bit integer*/        typeShortInteger                                = 'shor',                    /*16-bit integer*/        typeLongFloat                                = 'doub',                    /*SANE double*/        typeShortFloat                                = 'sing',                    /*SANE single*/        typeExtended                                = 'exte',                    /*SANE extended*/        typeComp                                = 'comp',                    /*SANE comp*/        typeMagnitude                                = 'magn',                    /*unsigned 32-bit integer*/        typeAEList                                = 'list',                    /*list of descriptor records*/        typeAERecord                                = 'reco',                    /*list of keyword-specified */                                                            /* descriptor records*/        typeAppleEvent                                = 'aevt',                    /*Apple event record*/        typeTrue                                = 'true',                    /*TRUE Boolean value*/        typeFalse                                = 'fals',                    /*FALSE Boolean value*/        typeAlias                                = 'alis',                    /*alias record*/        typeEnumerated                                = 'enum'                    /*enumerated data*/};enum {        typeType                                = 'type',                    /*four-character code for */                                                            /* event class or event ID*/        typeAppParameters                                = 'appa',                    /*Process Manager launch */                                                            /* parameters*/        typeProperty                                = 'prop',                    /*Apple event property*/        typeFSS                                = 'fss ',                    /*file system specification*/        typeKeyword                                = 'keyw',                    /*Apple event keyword*/        typeSectionH                                = 'sect',                    /*handle to a section record*/        typeWildCard                                = '****',                    /*matches any type*/        typeApplSignature                                = 'sign',                    /*application signature*/        typeSessionID                                = 'ssid',                    /*session ID*/        typeTargetID                                = 'targ',                    /*target ID record*/        typeProcessSerialNumber                                = 'psn ',                    /*process serial number*/        typeNull                                = 'null'                    /*NULL or nonexistent data*/};        /*keywords for Apple event parameters*/enum     {        keyDirectObject                                = '----',                    /*direct parameter*/        keyErrorNumber                                = 'errn',                    /*error number parameter*/        keyErrorString                                = 'errs',                    /*error string parameter*/        keyProcessSerialNumber                                = 'psn '                    /*process serial number param*/};        /*keywords for Apple event attributes*/enum     {        keyTransactionIDAttr                                = 'tran',                    /*transaction ID*/        keyReturnIDAttr                                = 'rtid',                    /*return ID*/        keyEventClassAttr                                 = 'evcl',                    /*event class*/        keyEventIDAttr                                = 'evid',                    /*event ID*/        keyAddressAttr                                = 'addr',                    /*address of target or */                                                            /* client application*/        keyOptionalKeywordAttr                                = 'optk',                    /*list of optional parameters */                                                            /* for the Apple event*/        keyTimeoutAttr                                = 'timo',                    /*number of ticks the client */                                                            /* will wait*/        keyInteractLevelAttr                                 = 'inte',                    /*settings to allow Apple */                                                            /* Event Mgr to bring */                                                                                /* server to foreground*/        keyEventSourceAttr                                = 'esrc',                    /*nature of source */                                                            /* application*/        keyMissedKeywordAttr                                = 'miss',                    /*first required parameter */                                                            /* remaining in an Apple */                                                            /* event*/        keyOriginalAddressAttr                                = 'from'                    /*address of original source; */                                                            /* available only in version */                                                             /* 1.01 and later versions of */                                                            /* the Apple Event Manager*/};                /*keywords for special handlers*/enum     {        keyPreDispatch                                = 'phac',                    /*identifies a handler */                                                            /* routine that is called */                                                            /* immediately before the */                                                            /* Apple Event Manager */                                                            /* dispatches an Apple event*/        keySelectProc                                = 'selh',                     /*selector used with */                                                            /* AERemoveSpecialHandler to */                                                            /* disable the OSL*/        /*keywords for use with AEManagerInfo, available only in version */        /* 1.0.1 and later versions of the Apple Event Manager*/        keyAERecorderCount                                 = 'recr',                    /*keyword for recording info*/        keyAEVersion                                 = 'vers',                    /*keyword for version info*/        /*event class*/        kCoreEventClass                                = 'aevt'                    /*event class for required */                                                            /* Apple events*/};        /*event IDs for required Apple events*/enum {        kAEOpenApplication                                = 'oapp',                    /*event ID for Open */                                                            /* Application event*/        kAEOpenDocuments                                = 'odoc',                    /*event ID for Open */                                                            /* Documents event*/        kAEPrintDocuments                                = 'pdoc',                    /*event ID for Print */                                                            /* Documents event*/        kAEQuitApplication                                = 'quit',                    /*event ID for Quit */                                                            /* Application event*/        kAEAnswer                                = 'ansr',                    /*event ID for Apple event */                                                            /* replies*/        kAEApplicationDied                                = 'obit'                    /*event ID for Application */                                                            /* Died event*/};        /*constants for setting the sendMode parameter of AESend*/enum {        kAENoReply                                = 0x00000001,                    /*client doesn't want reply*/        kAEQueueReply                                = 0x00000002,                    /*client wants server to */                                                            /* reply in event queue*/        kAEWaitReply                                = 0x00000003,                    /*client wants a reply and */                                                            /* will give up processor*/        kAENeverInteract                                = 0x00000010,                    /*server application should */                                                            /* not interact with user */                                                            /* for this Apple event*/        kAECanInteract                                = 0x00000020,                    /*server may interact with */                                                            /* user for this Apple event */                                                            /* to supply information*/        kAEAlwaysInteract                                = 0x00000030,                    /*server may interact with */                                                            /* user for this Apple event */                                                            /* even if no information */                                                            /* is required*/        kAECanSwitchLayer                                = 0x00000040,                    /*server should come */                                                            /* directly to foreground */                                                            /* when appropriate*/        kAEDontReconnect                                = 0x00000080,                    /*don't reconnect if there */                                                            /* is a PPC session closed */                                                            /* error*/        kAEWantReceipt                                = nReturnReceipt, /*client wants return */                                                            /* receipt*/        kAEDontRecord                                = 0x00001000,                    /*don't record this event*/        kAEDontExecute                                = 0x00002000,                    /*don't excecute this event*/        /*constants for setting the sendPriority parameter of AESend*/        kAENormalPriority                                = 0x00000000,                    /*post message at end of */                                                            /* event queue*/        kAEHighPriority                                = nAttnMsg                    /*post message at front of */                                                            /* event queue*/};        /*event IDs for recording events; available only in version 1.01 and */        /* later versions of the Apple Event Manager*/enum {        kAEStartRecording                                = 'reca'        ,            /*event ID for Start */                                                            /* Recording event*/        kAEStopRecording                                = 'recc',                    /*event ID for Stop */                                                            /* Recording event*/        kAENotifyStartRecording                                = 'rec1',                    /*event ID for Recording On*/                                                            /* event*/        kAENotifyStopRecording                                = 'rec0',                    /*event ID for Recording Off */                                                            /* event*/        kAENotifyRecording                                = 'recr'                    /*event ID for Receive */                                                            /* Recordable Event event*/};enum {        /*constant for the returnID parameter of AECreateAppleEvent*/        kAutoGenerateReturnID                                = -1,                    /*tells Apple Event Manager */                                                            /* to generate a unique */                                                            /* return ID*/        /*constant for transaction IDs*/        kAnyTransactionID                                 = 0,                    /*the Apple event is not */                                                            /* part of a transaction*/        /*constants for timeout durations*/        kAEDefaultTimeout                                = -1,                    /*use default timeout value*/        kNoTimeOut                                = -2    ,                /*never time out*/        /*constants for the dispatcher parameter of AEResumeTheCurrentEvent*/        kAENoDispatch                                = 0,                    /*don't redispatch the */                                                            /* Apple event*/        kAEUseStandardDispatch                                = -1                /*redispatch the Apple event */                                                            /* by using its entry in the */                                                            /* Apple event dispatch table*/};Data Typestypedef unsigned long AEEventClass;                                                            /*event class for a */                                                            /* high-level event*/typedef unsigned long AEEventID;                                                            /*event ID for a high-level */                                                            /* event*/typedef unsigned long AEKeyword;                                                            /*keyword for a descriptor */                                                            /* record*/typedef ResType DescType                                ;                            /*descriptor type*/struct AEDesc {                                                             /*descriptor record*/    DescType descriptorType;                                                         /*type of data being passed*/    Handle dataHandle;                                                        /*handle to data being passed*/};typedef struct AEDesc AEDesc;struct AEKeyDesc {                                                             /*keyword-specified */                                                            /* descriptor record*/    AEKeyword descKey;                                                        /*keyword*/    AEDesc descContent;                                                        /*descriptor record*/};typedef struct AEKeyDesc AEKeyDesc;typedef AEDesc AEAddressDesc;                                                            /*address descriptor record*/typedef AEDesc AEDescList;                                                            /*list of descriptor records*/typedef AEDescList AERecord;                                                            /*list of keyword-specified */                                                            /* descriptor records*/typedef AERecord AppleEvent;                                                            /*list of attributes and */                                                            /* parameters necessary for */                                                            /* an Apple event*/typedef long AESendMode;                                                            /*flags that determine how */                                                            /* an Apple event is sent*/typedef short AESendPriority;                                                            /*send priority of an Apple */                                                            /* event*/enum { kAEInteractWithSelf, kAEInteractWithLocal,         kAEInteractWithAll };                                                    /*what processes may */typedef unsigned char AEInteractAllowed;                                                            /* interact with the user*/enum { kAEUnknownSource, kAEDirectCall, kAESameProcess,             kAELocalProcess,          kAERemoteProcess };                                                    /*the source of an Apple */typedef unsigned char AEEventSource;                                                            /* event*/enum { kAEDataArray, kAEPackedArray, kAEHandleArray,        kAEDescArray, kAEKeyDescArray };                                                            /*type of an Apple event */typedef unsigned char AEArrayType;                                                            /* array*/union AEArrayData {                                                                 /*data for an Apple event */    short                kAEDataArray[1];                                            /* array*/    char                kAEPackedArray[1];    Handle                 kAEHandleArray[1];    AEDesc                 kAEDescArray[1];                            AEKeyDesc                kAEKeyDescArray[1];};typedef union AEArrayData AEArrayData;typedef AEArrayData *AEArrayDataPointer;typedef ProcPtr EventHandlerProcPtr;                                                            /*pointer to an Apple event */                                                            /* handler*/typedef ProcPtr IdleProcPtr;                                                            /*pointer to an application's */                                                            /* idle function*/typedef ProcPtr EventFilterProcPtr;                                                            /*pointer to an application's */                                                            /* filter function*/Routines for Responding to Apple EventsCreating and Managing the Apple Event Dispatch Tablespascal OSErr AEInstallEventHandler(AEEventClass theAEEventClass, AEEventID theAEEventID,EventHandlerProcPtr handler,long handlerRefcon, Boolean isSysHandler);pascal OSErr AEGetEventHandler(AEEventClass theAEEventClass,AEEventID theAEEventID,EventHandlerProcPtr *handler, long *handlerRefcon, Boolean isSysHandler);pascal OSErr AERemoveEventHandler(AEEventClass theAEEventClass,AEEventID theAEEventID,EventHandlerProcPtr handler, Boolean isSysHandler);Dispatching Apple Eventspascal  OSErr  AEProcessAppleEvent         (const EventRecord *theEventRecord);Getting Data or Descriptor Records Out of Apple Event Parameters and Attributespascal OSErr AEGetParamPtr    (const AppleEvent *theAppleEvent, AEKeyword theAEKeyword, DescType desiredType, DescType *typeCode, void* dataPtr, Size maximumSize, Size *actualSize);pascal OSErr AEGetParamDesc    (const AppleEvent *theAppleEvent, AEKeyword theAEKeyword, DescType desiredType, AEDesc *result);pascal OSErr AEGetAttributePtr(const AppleEvent *theAppleEvent, AEKeyword theAEKeyword, DescType desiredType, DescType *typeCode, void* dataPtr,Size maximumSize, Size *actualSize); pascal OSErr AEGetAttributeDesc(const AppleEvent *theAppleEvent, AEKeyword theAEKeyword, DescType desiredType, AEDesc *result);Counting the Items in Descriptor Listspascal OSErr AECountItems    (const AEDescList *theAEDescList, long *theCount);Getting Items From Descriptor Listspascal OSErr AEGetNthPtr    (const AEDescList *theAEDescList, long index, DescType desiredType, AEKeyword *theAEKeyword, DescType *typeCode, void* dataPtr,Size maximumSize, Size *actualSize);pascal OSErr AEGetNthDesc    (const AEDescList *theAEDescList, long index, DescType desiredType, AEKeyword *theAEKeyword, AEDesc *result);pascal OSErr AEGetArray    (const AEDescList *theAEDescList, AEArrayType arrayType, AEArrayDataPointer arrayPtr, Size maximumSize, DescType *itemType, Size *itemSize, long *itemCount);Getting Data and Keyword-Specified Descriptor Records Out of AE Recordspascal OSErr AEGetKeyPtr    (const AERecord *theAERecord, AEKeyword theAEKeyword, DescType desiredType, DescType *typeCode, void* dataPtr, Size maximumSize, Size *actualSize);pascal OSErr AEGetKeyDesc    (const AERecord *theAERecord, AEKeyword theAEKeyword, DescType desiredType, AEDesc *result);Requesting User Interactionpascal OSErr AESetInteractionAllowed(AEInteractAllowed level);pascal OSErr AEGetInteractionAllowed(AEInteractAllowed *level);pascal OSErr AEInteractWithUser(long timeOutInTicks, NMRecPtr nmReqPtr, IdleProcPtr idleProc);Requesting More Time to Respond to Apple Eventspascal OSErr AEResetTimer    (const AppleEvent *reply);Suspending and Resuming Apple Event Handlingpascal OSErr AESuspendTheCurrentEvent(const AppleEvent *theAppleEvent);pascal OSErr AEResumeTheCurrentEvent(const AppleEvent *theAppleEvent,const AppleEvent *reply,EventHandlerProcPtr dispatcher,long handlerRefcon);pascal OSErr AESetTheCurrentEvent(const AppleEvent *theAppleEvent);pascal OSErr AEGetTheCurrentEvent(AppleEvent *theAppleEvent);Getting the Sizes and Descriptor Types of Descriptor Recordspascal OSErr AESizeOfNthItem(const AEDescList *theAEDescList, long index, DescType *typeCode, Size *dataSize);pascal OSErr AESizeOfKeyDesc(const AERecord *theAERecord, AEKeyword theAEKeyword, DescType *typeCode, Size *dataSize);pascal OSErr AESizeOfParam    (const AppleEvent *theAppleEvent, AEKeyword theAEKeyword, DescType *typeCode, Size *dataSize);pascal OSErr AESizeOfAttribute(const AppleEvent *theAppleEvent, AEKeyword theAEKeyword, DescType *typeCode, Size *dataSize);Deleting Descriptor Recordspascal OSErr AEDeleteItem    (const AEDescList *theAEDescList, long index);pascal OSErr AEDeleteKeyDesc(const AERecord *theAERecord, AEKeyword theAEKeyword);pascal OSErr AEDeleteParam    (const AppleEvent *theAppleEvent, AEKeyword theAEKeyword);Deallocating Memory for Descriptor Recordspascal OSErr AEDisposeDesc    (AEDesc *theAEDesc);Coercing Descriptor Typespascal OSErr AECoercePtr    (DescType typeCode, const void* dataPtr, Size dataSize, DescType toType, AEDesc *result);pascal OSErr AECoerceDesc    (const AEDesc *theAEDesc, DescType toType, AEDesc *result);Creating and Managing the Coercion Handler Dispatch Tablespascal OSErr AEInstallCoercionHandler(DescType fromType, DescType toType, ProcPtr handler, long handlerRefcon, Boolean fromTypeIsDesc, Boolean isSysHandler);pascal OSErr AEGetCoercionHandler(DescType fromType, DescType toType, ProcPtr *handler, long *handlerRefcon, Boolean *fromTypeIsDesc, Boolean isSysHandler);pascal OSErr AERemoveCoercionHandler(DescType fromType, DescType toType, ProcPtr handler, Boolean isSysHandler);Creating and Managing the Special Handler Dispatch Tablespascal OSErr AEInstallSpecialHandler(AEKeyword functionClass, ProcPtr handler, Boolean isSysHandler);pascal OSErr AEGetSpecialHandler(AEKeyword functionClass, ProcPtr *handler, Boolean isSysHandler);pascal OSErr AERemoveSpecialHandler(AEKeyword functionClass, ProcPtr handler, Boolean isSysHandler);Getting Information About the Apple Event Manager/*available only in version 1.01 and later versions of Apple Event Manager*/pascal OSErr AEManagerInfo     (AEKeyword keyword, long *result);Application-Defined Routinespascal OSErr MyEventHandler    (const AppleEvent *theAppleEvent, const AppleEvent *reply, long handlerRefcon); pascal OSErr MyCoercePtr    (DescType typeCode, const void* dataPtr, Size dataSize, DescType toType, long handlerRefcon, AEDesc *result); pascal OSErr MyCoerceDesc    (const AEDesc *theAEDesc, DescType toType, long handlerRefcon, AEDesc *result);Assembly-Language SummaryTrap MacrosTrap Macros Requiring Routine Selectors_Pack8Selector    Routine    $011E    AESetInteractionAllowed    $0204    AEDisposeDesc    $0219    AEResetTimer    $021A    AEGetTheCurrentEvent    $021B    AEProcessAppleEvent    $021D    AEGetInteractionAllowed    $022B    AESuspendTheCurrentEvent    $022C    AESetTheCurrentEvent    $0407    AECountItems    $040E    AEDeleteItem    $0413    AEDeleteKeyDesc    $0413    AEDeleteParam    $0441    AEManagerInfo    $0500    AEInstallSpecialHandler    $0501    AERemoveSpecialHandler    $052D    AEGetSpecialHandler    $0603    AECoerceDesc    $061C    AEInteractWithUser    $0720    AERemoveEventHandler    $0723    AERemoveCoercionHandler    $0812    AEGetKeyDesc    $0812    AEGetParamDesc    $0818    AEResumeTheCurrentEvent    $0826    AEGetAttributeDesc    $0828    AESizeOfAttribute    $0829    AESizeOfKeyDesc    $0829    AESizeOfParam    $082A    AESizeOfNthItem    $091F    AEInstallEventHandler    $0921    AEGetEventHandler    $0A02    AECoercePtr    $0A22    AEInstallCoercionHandler    $0A0B    AEGetNthDesc    $0B24    AEGetCoercionHandler    $0D0C    AEGetArray    $0E11    AEGetKeyPtr    $0E11    AEGetParamPtr    $0E15    AEGetAttributePtr    $100A    AEGetNthPtr    Result CodesnoErr    0    No error    paramErr    –50    Parameter error (for example, value of handler pointer is NIL or odd)    eLenErr    –92    Buffer too big to send    memFullErr    –108    Not enough room in heap zone    userCanceledErr    –128    User canceled an operation    procNotFound    –600    No eligible process with specified process serial number    bufferIsSmall    –607    Buffer is too small    noOutstandingHLE    –608    No outstanding high-level event    connectionInvalid    –609    Nonexistent signature or session ID    noUserInteractionAllowed    –610    Background application sends event requiring authentication    noPortErr    –903    Client hasn’t set 'SIZE' resource to indicate awareness of high-level events    destPortErr    –906    Server hasn’t set 'SIZE' resource to indicate awareness of high-level events, or else is not present    sessClosedErr    –917    The kAEDontReconnect flag in the sendMode parameter was set, and the server quit and then restarted    errAECoercionFail    –1700    Data could not be coerced to the requested descriptor type    errAEDescNotFound    –1701    Descriptor record was not found    errAECorruptData    –1702    Data in an Apple event could not be read    errAEWrongDataType    –1703    Wrong descriptor type    errAENotAEDesc    –1704    Not a valid descriptor record    errAEBadListItem    –1705    Operation involving a list item failed    errAENewerVersion    –1706    Need a newer version of the Apple Event Manager    errAENotAppleEvent    –1707    Event is not an Apple event    errAEEventNotHandled    –1708    Event wasn’t handled by an Apple event handler    errAEReplyNotValid    –1709    AEResetTimer was passed an invalid reply    errAEUnknownSendMode    –1710    Invalid sending mode was passed    errAEWaitCanceled    –1711    User canceled out of wait loop for reply or receipt    errAETimeout    –1712    Apple event timed out    errAENoUserInteraction    –1713    No user interaction allowed    errAENotASpecialFunction    –1714    The keyword is not valid for a special function    errAEParamMissed    –1715    Handler cannot understand a parameter the client considers required    errAEUnknownAddressType    –1716    Unknown Apple event address type    errAEHandlerNotFound    –1717    No handler found for an Apple event or a coercion, or no object callback function found    errAEReplyNotArrived    –1718    Reply has not yet arrived    errAEIllegalIndex    –1719    Not a valid list index    errAEImpossibleRange    –1720    The range is not valid because it is impossible for a range to include the first and last objects that were specified; an example is a range in which the offset of the first object is greater than the offset of the last object    errAEWrongNumberArgs    –1721    The number of operands provided for the kAENot logical operator is not 1    errAEAccessorNotFound    –1723    There is no object accessor function for the specified object class and token descriptor type    errAENoSuchLogical    –1725    The logical operator in a logical descriptor record is not kAEAnd, kAEOr, or kAENot    errAEBadTestKey    –1726    The descriptor record in a test key is neither a comparison descriptor record nor a logical descriptor record    errAENotAnObjectSpec    –1727    The objSpecifier parameter of AEResolve is not an object specifier record    errAENoSuchObject    –1728     A run-time resolution error, for example: object specifier record asked for the third element, but there are only two    errAENegativeCount    –1729     Object-counting function returned negative value    errAEEmptyListContainer    –1730    The container for an Apple event object is specified by an empty list    errAEUnknownObjectType    –1731    Descriptor type of token returned by AEResolve is not known to server application     errAERecordingIsAlreadyOn    –1732    Attempt to turn recording on when it is already on    Listing 5-0Table 5-0Creating and Sending Apple EventsContentsCreating an Apple Event5-3Adding Parameters to an Apple Event5-5Specifying Optional Parameters for an Apple Event5-7Specifying a Target Address5-10Creating an Address Descriptor Record5-11Addressing an Apple Event for Direct Dispatching5-13Sending an Apple Event5-13Dealing With Timeouts5-20Writing an Idle Function5-21Writing a Reply Filter Function5-24Reference to Creating and Sending Apple Events5-24Routines for Creating and Sending Apple Events5-25Creating Apple Events5-25Creating and Duplicating Descriptor Records5-26Creating Descriptor Lists and AE Records5-28Adding Items to Descriptor Lists5-29Adding Data and Descriptor Records to AE Records5-32Adding Parameters and Attributes to Apple Events5-33Sending Apple Events5-37Application-Defined Routines5-41Summary of Creating and Sending Apple Events5-44Pascal Summary5-44Constants5-44Data Types5-48Routines for Creating and Sending Apple Events5-50Application-Defined Routines5-51C Summary5-51Constants5-51Data Types5-56Routines for Creating and Sending Apple Events5-57Application-Defined Routines5-59Assembly-Language Summary5-59Trap Macros5-59Result Codes5-60Creating and Sending Apple EventsThis chapter describes how your application can use the Apple Event Manager to create and send Apple events. If you want to factor your application for recording, or if you want your application to send Apple events directly to other applications, you can use Apple Event Manager routines to create and send Apple events. Before you read this chapter, you should be familiar with the chapters “Introduction to Interapplication Communication,” “Introduction to Apple Events,” and “Responding to Apple Events” in this book. If you are factoring your application, you should also be familiar with the chapter “Recording Apple Events” in this book.This chapter provides the basic information you need to create and send Apple events from your application. To send core and functional-area Apple events, your application must also be able to create object specifier records. For information about object specifier records, see the chapter “Resolving and Creating Object Specifier Records” in this book.To allow your application to send Apple events to applications on other computers, you may wish to use the PPCBrowser function, which is described in the chapter “Program-to-Program Communications Toolbox” in this book.The first section in this chapter, “Creating an Apple Event,” describes how ton    create an Apple eventn    add parameters to an Apple eventn    specify optional Apple event parametersn    specify a target addressThe section “Sending an Apple Event” describes how to n    send an Apple eventn    deal with timeoutsn    write an idle functionn    write a reply filter functionCreating an Apple EventYou create an Apple event by using the AECreateAppleEvent function. You supply parameters that specify the event class and event ID, the target address, the return ID, and the transaction ID, and a buffer for the returned Apple event. The AECreateAppleEvent function creates and returns, in the buffer you specify, an Apple event with the attributes set as your application requested. You should not directly manipulate the contents of the Apple event; rather, use Apple Event Manager functions to add additional attributes or parameters to it.The example that follows creates an imaginary Multiply event using the AECreateAppleEvent function.myErr := AECreateAppleEvent(kArithmeticClass, kMultEventID,                                     targetAddress, kAutoGenerateReturnID,                                     kAnyTransactionID, theAppleEvent);  The event class, specified by the kArithmeticClass constant, identifies this event as belonging to a class of Apple events for arithmetic operations. The event ID specifies the particular Apple event within the class—in this case, an Apple event that performs multiplication.You specify the target of the Apple event in the third parameter to AECreateAppleEvent. The target address can identify an application on the local computer or another computer on the network. You can specify the address using a target ID record or session reference number. For processes on the local computer, you can also use a process serial number or application signature to specify the address. See “Specifying a Target Address” on page 5-10 for more information. In the fourth parameter, you specify the return ID of the Apple event, which associates this Apple event with the server’s reply. The AECreateAppleEvent function assigns the specified return ID value to the keyReturnIDAttr attribute of the Apple event. If a server returns a standard reply Apple event (that is, an event of event class 'aevt' and event ID 'ansr') in response to this event, the Apple Event Manager assigns the reply event the same return ID. When you receive a reply Apple event, you can check the keyReturnIDAttr attribute to determine which outstanding Apple event the reply is responding to. You can use the kAutoGenerateReturnID constant to request that the Apple Event Manager generate a return ID that is unique to this session for the Apple event. Otherwise, you are responsible for making it unique. The fifth parameter specifies the transaction ID attribute of the Apple event. A transaction is a sequence of Apple events that are sent back and forth between the client and server applications, beginning with the client’s initial request for a service. All Apple events that are part of one transaction must have the same transaction ID.You can use a transaction ID to indicate that an Apple event is one of a sequence of Apple events related to a single transaction. The kAnyTransactionID constant indicates that the Apple event is not part of a transaction.The AECreateAppleEvent function creates an Apple event with only the specified attributes and no parameters. To add parameters or additional attributes, you can use other Apple Event Manager functions.Adding Parameters to an Apple EventYou can use the AEPutParamPtr or AEPutParamDesc function to add parameters to an Apple event. When you use either of these functions, the Apple Event Manager adds the specified parameter to the Apple event. Use the AEPutParamPtr function when you want to add data specified in a buffer as the parameter of an Apple event. You specify the Apple event, the keyword of the parameter to add, the descriptor type, a buffer that contains the data, and the size of this buffer as parameters to the AEPutParamPtr function. The AEPutParamPtr function adds the data to the Apple event as a parameter with the specified keyword.For example, this code adds a parameter to the Multiply event using the AEPutParamPtr function:CONST        keyOperand1 = 'OPN1';VAR    number1:                        LongInt;    theAppleEvent:                        AppleEvent;    myErr:                        OSErr;number1 := 10;myErr := AEPutParamPtr(theAppleEvent, keyOperand1,                               typeLongInteger, @number1,                              SizeOf(number1));In this example, the Apple Event Manager adds the parameter containing the first number to the specified Apple event. Use the AEPutParamDesc function to add a descriptor record to an Apple event. The descriptor record you specify must already exist. To create or get a descriptor record, you can use the AECreateDesc, AEDuplicateDesc, and other Apple Event Manager functions that return a descriptor record.When you create a descriptor record using the AECreateDesc function, you specify the descriptor type, a buffer that contains the data, and the size of this buffer as parameters. The AECreateDesc function returns the descriptor record that describes the data.This example creates a descriptor record for the second parameter of the Multiply event:VAR    number2:                         LongInt;    multParam2Desc:                        AEDesc;    myErr:                        OSErr;number2 := 8;myErr := AECreateDesc(typeLongInteger, @number2, SizeOf(number2),                             multParam2Desc); In this example, the AECreateDesc function creates a descriptor record with the typeLongInteger descriptor type and the data identified in the number2 variable.Once you have created a descriptor record, you can use AEPutParamDesc to add the data to an Apple event parameter. You specify the Apple event to add the parameter to, the keyword of the parameter, and the descriptor record of the parameter as parameters to the AEPutParamDesc function.This example adds a second parameter to the Multiply event using the AEPutParamDesc function:CONST        keyOperand2 = 'OPN2';myErr := AEPutParamDesc(theAppleEvent, keyOperand2,                                 multParam2Desc);This example adds the keyOperand2 keyword and the descriptor record created in the previous example as the second parameter to the specified Apple event. You can also create a descriptor record without using Apple Event Manager routines. For example, this example generates an alias descriptor record from an existing alias handle:WITH myAliasDesc DO    BEGIN        descriptorType := typeAlias;        dataHandle := myAliasHandle;    END;Whatever method you use to create a descriptor record, you can add it to an Apple event parameter by using AEPutParamDesc.After adding parameters to an Apple event, you can send the Apple event using the AESend function. See “Sending an Apple Event,” which begins on page 5-13, for information about using this function.Specifying Optional Parameters for an Apple EventThe parameters for a given Apple event are listed in the Apple Event Registry: Standard Suites as either required or optional. Your application does not usually have to include Apple event parameters that are listed as optional; the target application uses default values for parameters that are listed as optional if your application does not provide them. The Apple Event Registry: Standard Suites defines the default value a target application should use for each optional parameter of a specific Apple event. The guidelines listed in the Apple Event Registry: Standard Suites for which parameters should be considered optional and which should be considered required are not enforced by the Apple Event Manager. Instead, the source application indicates which Apple event parameters it considers optional by listing the keywords for those parameters in the keyOptionalKeywordAttr attribute. The keyOptionalKeywordAttr attribute does not contain the optional parameters; it simply lists the keywords of any parameters for the Apple event that the source application wants to identify as optional. Although the source application is responsible for providing this information in the keyOptionalKeywordAttr attribute of an Apple event, it is not required to provide this attribute.If a keyword for an Apple event parameter is not included in the keyOptionalKeywordAttr attribute, the source application expects the target application to understand the Apple event parameter identified by that keyword. If a target application cannot understand the parameter, it should return the result code errAEParamMissed and should not attempt to handle the event.If a keyword for an Apple event parameter is included in the keyOptionalKeywordAttr attribute, the source application does not require the target application to understand the Apple event parameter identified by that keyword. If the target application cannot understand a parameter whose keyword is included in the keyOptionalKeywordAttr attribute, it should ignore that parameter and attempt to handle the Apple event as it normally does.A source application can choose not to list the keyword for an Apple event parameter in the keyOptionalKeywordAttr attribute even if that parameter is listed in the Apple Event Registry: Standard Suites as an optional parameter. This has the effect of forcing the target application to treat the parameter as required for a particular Apple event. If the target application supports the parameter, it should handle the Apple event as the client application expects. If the target application does not support the parameter and calls an application-defined routine such as MyGotRequiredParams to check whether it has received all the required parameters, it finds that there’s another parameter that the client application considered required, and should return the result code errAEParamMissed. If a source application wants a target application to attempt to handle an Apple event regardless of whether the target application supports a particular Apple event parameter included in that Apple event, the source application should list the keyword for that parameter in the keyOptionalKeywordAttr attribute. It is up to the source application to decide whether to list a parameter that is described as optional in the Apple Event Registry: Standard Suites in the keyOptionalKeywordAttr attribute of an Apple event. For example, suppose a source application has extended the definition of the Print event to include an optional keyColorOrGrayscale parameter that specifies printing in color or gray scale rather than black and white. The source application might decide whether or not to list the keyword keyColorOrGrayscale in the keyOptionalKeywordAttr attribute according to the characteristics of the print request. If the source application requires the target application to print a document in color, the source application could choose not to add the keyword keyColorOrGrayscale to the keyOptionalKeywordAttr attribute; in this case, only target applications that supported the keyColorOrGrayscale parameter would attempt to handle the event. If the source application does not require the document printed in color, it could choose to add the keyword keyColorOrGrayscale to the keyOptionalKeywordAttr attribute; in this case, the target application will attempt to handle the event regardless of whether it supports the keyColorOrGrayscale parameter.Your application can add optional parameters to an Apple event the same way it adds required parameters, using the AECreateDesc, AEPutParamPtr, and AEPutParamDesc functions as described in the previous section, “Adding Parameters to an Apple Event.” If your application chooses to provide the keyOptionalKeywordAttr attribute for an Apple event, it should first create a descriptor list that specifies the keywords of the optional parameters, then add it to the Apple event as a keyOptionalKeywordAttr attribute. Listing 5-1 shows an application-defined routine, MyCreateOptionalKeyword, that creates the keyOptionalKeywordAttr attribute for the Create Publisher event.Listing 5-1    Creating the optional keyword for the Create Publisher eventFUNCTION MyCreateOptionalKeyword                                (VAR createPubAppleEvent: AppleEvent)                                 : OSErr;VAR    optionalList:                    AEDescList;    myOptKeyword1:                    AEKeyword;    myOptKeyword2:                    AEKeyword;    myErr:                    OSErr;    ignoreErr:                    OSErr;BEGIN                                    myOptKeyword1 := keyDirectObject;    {create an empty descriptor list}    myErr := AECreateList(NIL, 0, FALSE, optionalList);    IF myErr = noErr THEN     BEGIN        {add the keyword of the first optional parameter}        myErr := AEPutPtr(optionalList, 1, typeKeyword,                                 @myOptKeyword1, SizeOf(myOptKeyword1));        IF myErr = noErr THEN         BEGIN            {add the keyword of the next optional parameter}            myOptKeyword2 := keyAEEditionFileLoc;            myErr := AEPutPtr(optionalList, 2, typeKeyword,                                     @myOptKeyword2, SizeOf(myOptKeyword2));        END;        IF myErr = noErr THEN             {create the keyOptionalKeywordAttr attribute and add it }            { to the Create Publisher event}            myErr :=     AEPutAttributeDesc(createPubAppleEvent,                                                 keyOptionalKeywordAttr,                                                  optionalList);    END;    ignoreErr := AEDisposeDesc(optionalList);    MyCreateOptionalKeyword := myErr;END;The MyCreateOptionalKeyword function shown in Listing 5-1 adds to a descriptor list the keyword of each parameter that the source application considers optional. Each keyword is added as a descriptor record with the descriptor type typeKeyword. The function specifies that the target application can handle the Create Publisher event without supporting parameters identified by the keywords keyDirectObject and keyAEEditionFileLoc. (These are the parameters that specify the Apple event object to publish and the location of the edition container; if these parameters are missing, the target application creates a publisher for the current selection using the application’s default edition container.) After adding these keywords to the descriptor list, the function creates the keyOptionalKeywordAttr attribute using the AEPutAttributeDesc function.Typically a target application does not examine the keyOptionalKeywordAttr attribute directly. Instead, a target application that supports a parameter listed as optional in the Apple Event Registry: Standard Suites attempts to extract it from the Apple event (using AEGetParamDesc, for example). If it can’t extract the parameter, the target application uses the default value, if any, listed in the Apple Event Registry. A target application can use the keyMissedKeywordAttr attribute to return the first required parameter (that is, considered required by the source application), if any, that it did not retrieve from the Apple event. The keyMissedKeywordAttr attribute does not return any parameters whose keywords are listed in the keyOptionalKeywordAttr attribute of the Apple event.        Specifying a Target AddressWhen you create an Apple event, you must specify the address of the target. The target address identifies the particular application or process to which you want to send the Apple event. You can send Apple events to applications on the local computer or on remote computers on the network. These are the descriptor types that identify the four methods of addressing an Apple event:typeApplSignature    The application signature of the target    typeSessionID    The session reference number of the target    typeTargetID    The target ID record of the target    typeProcessSerialNumber    The process serial number of the target    To address an Apple event to a target on a remote computer on the network, you must use either the typeSessionID or typeTargetID descriptor type.   If your application sends an Apple event to itself, it should address the Apple event using a process serial number of kCurrentProcess. This is the fastest way for your application to send an Apple event to itself. For more information, see “Addressing an Apple Event for Direct Dispatching” on page 5-13.You can use any of the four address types when sending an Apple event to another application on the local computer. The chapter “Event Manager” in Inside Macintosh: Macintosh Toolbox Essentials describes all four types of addresses. Your application can also use another address type if it provides a coercion handler that coerces the address type into one of the four address types that the Apple Event Manager recognizes. See “Writing and Installing Coercion Handlers,” which begins on page 4-41, for more information.To allow the user to choose the target of an Apple event, use the PPCBrowser function. This function presents a standard user interface for choosing a target application, much as the Standard File Package provides a standard user interface for opening and saving files. The PPCBrowser function returns, in a target ID record, information about the application the user chose. Listing 5-3 on page 5-12 shows how to use the PPCBrowser function to let the user choose a target. Creating an Address Descriptor RecordYou specify the address using an address descriptor record (a descriptor record of data type AEAddressDesc). You must create a descriptor record of this type and then add it to the Apple event using the AECreateAppleEvent function.You can use the AECreateDesc function to create address descriptor records for any of the four types of target addresses. Listing 5-2 shows four possible ways to create an address, each using a different address type.Listing 5-2    Creating a target addressPROCEDURE MySetTargetAddresses(VAR targetAddress1,                                            targetAddress2, targetAddress3,                                          targetAddress4: AEAddressDesc;                                          toTargetID: TargetID;                                           thePSN: ProcessSerialNumber;                                          theSignature: OSType;                                          theSessionRef: PPCSessRefNum);VAR    myErr:             OSErr;BEGIN    myErr := AECreateDesc(typeTargetID, @toTargetID,                                 SizeOf(toTargetID), targetAddress1);    myErr := AECreateDesc(typeProcessSerialNumber, @thePSN,                                  SizeOf(thePSN), targetAddress2);    myErr := AECreateDesc(typeApplSignature, @theSignature,                                  SizeOf(theSignature), targetAddress3);    myErr := AECreateDesc(typeSessionID, @theSessionRef,                                  SizeOf(theSessionRef), targetAddress4);    {add your own error checking}END;To create an address descriptor record, specify the following as parameters to AECreateDesc: the descriptor type for the address, a pointer to the buffer containing the address, and the size of the buffer. The AECreateDesc function returns an address descriptor record with the specified characteristics.After creating an address, you can specify it as a parameter to the AECreateAppleEvent function. See “Creating an Apple Event,” which begins on page 5-3, for an example using the AECreateAppleEvent function. When you specify an address to the AECreateAppleEvent function, the Apple Event Manager stores the address in the keyAddressAttr attribute of the Apple event. If you use the PPCBrowser function to allow the user to choose an Apple event’s target, your application must create a target ID record based on the user’s choice. Listing 5-3 shows how to create a target ID record using the information returned from the PPCBrowser function and create an address descriptor record using the AECreateDesc function.Listing 5-3    Specifying a target address in an Apple event by using the PPCBrowser functionFUNCTION MyGetTargetAddress (myPrompt: Str255; myAppStr: Str255;                                        VAR myPortInfo: PortInfoRec;                                         VAR targetAddress: AEAddressDesc;                                         VAR toTargetID: targetID): OSErr;VAR    myErr:            OSErr;BEGIN                            {use PPCBrowser to let user choose the target}    myErr := PPCBrowser(myPrompt, myAppStr, FALSE,                                 toTargetID.location,                                 myPortInfo, NIL, '');    MyGetTargetAddress := myErr;    IF myErr <> noErr THEN Exit(MyGetTargetAddress);    toTargetID.name := myPortInfo.name;    {create the descriptor record for the target address}    MyGetTargetAddress := AECreateDesc(typeTargetID, @toTargetID,                                                      SizeOf(toTargetID),                                                     targetAddress);END;See the chapter “Program-to-Program Communications Toolbox” in this book for more information on using the PPCBrowser function.Addressing an Apple Event for Direct DispatchingAs described in the chapter “Recording Apple Events” in this book, a recordable application must send itself Apple events in response to user actions. Your application can send itself Apple events by using an address descriptor record of descriptor type typeProcessSerialNumber with the lowLongOfPSN field set to kCurrentProcess and the highLongOfPSN set to 0. The Apple Event Manager processes such Apple events immediately, executing the appropriate Apple event handler directly without going through the normal event-processing sequence. For this reason, your application will not appear to run more slowly when it sends Apple events to itself.  Apple events your application sends to itself this way do not appear in your application’s high-level event queue. This not only speeds up delivery of the event but also avoids situations in which an Apple event sent in response to a user action arrives in the event queue after some other event that really occurred later than the user action. For example, suppose a user chooses Cut from the Edit menu and then clicks in another window. If the Cut event arrives in the queue after the window activate event, a selection in the wrong window might be cut.Your application can send events to itself using other forms of addressing, such as the true process serial number returned by GetCurrentProcess. Because direct dispatching avoids event sequence problems, applications should generally send events to themselves by using an address descriptor record of descriptor type typeProcessSerialNumber with the kCurrentProcess constant rather than using a true process serial number or an application signature. IMPORTANTWhen Apple event recording has been turned on, the Apple Event Manager records every event that your application sends to itself unless you specify the kAEDontRecord flag in the sendMode parameter of the AESend function.s Sending an Apple EventTo send an Apple event, you first create an Apple event, add parameters and attributes to it, and then use the AESend function to send it. When you send an Apple event, you specify various options to indicate how the server should handle the Apple event. You request a user interaction level from the server and specify whether the server can switch directly to the foreground if user interaction is needed, whether your application is willing to wait for a reply Apple event, whether reconnection is allowed, and whether your application wants a return receipt for the Apple event. You specify these options by setting flags in the sendMode parameter for AESend. Here are the constants that represent these flags:CONST         kAENoReply                        = $00000001;                {client doesn't want reply}        kAEQueueReply                        = $00000002;    {client wants Apple Event }                                                 { Manager to return }                                                { reply in event queue}        kAEWaitReply                        = $00000003;        {client wants a reply and }                                                { will give up processor}        kAENeverInteract                        = $00000010;        {server application }                                                { should not interact }                                                { with user for this }                                                { Apple event}        kAECanInteract                        = $00000020;    {server may interact with }                                                { user for this Apple }                                                { event to supply }                                                 { information}        kAEAlwaysInteract                        = $00000030;    {server may interact with }                                                { user for this Apple }                                                { event even if no }                                                { information                 is required}        kAECanSwitchLayer                        = $00000040;    {server should come }                                                { directly to foreground }                                                { when appropriate}        kAEDontReconnect                        = $00000080;    {don't reconnect if there }                                                { is a PPC session closed }                                                { error}        kAEWantReceipt                        = nReturnReceipt;                {client wants return }                                                      { receipt}        kAEDontRecord                        = $00001000;                {don’t record this event}        kAEDontExecute                        = $00002000;    {don’t execute this event}If you want your application to receive a reply Apple event, specify the kAEQueueReply or kAEWaitReply flag. If you want your application to receive the reply Apple event in its event queue, use kAEQueueReply. If you want your application to receive the reply Apple event in the reply parameter for AESend and you are willing to give up the processor while it is waiting for the reply, use kAEWaitReply. If you don’t want your application to receive a reply Apple event and your application doesn’t need to wait for the server to handle the Apple event, specify kAENoReply. NoteNoteBefore the Apple Event Manager sends a reply event back to the client application, the keyAddressAttr attribute contains the address of the client application. After the client receives the reply event, the keyAddressAttr attribute contains the address of the server application.uIf you specify kAENoReply or kAEQueueReply, the AESend function returns immediately after using the Event Manager to send the event. In this case, a noErr result code from AESend indicates that the Event Manager sent the Apple event; it does not mean that the server accepted or handled the Apple event. When AESend returns, the reply parameter does not contain valid data if your application specifies kAENoReply or kAEQueueReply. The kAENoReply flag indicates that the Apple Event Manager will not return the reply Apple event to your application. The kAEQueueReply flag indicates that you want your application to receive the reply via its event queue rather than the reply parameter of AESend. If you specify kAEQueueReply, you must install a handler for the reply Apple event (event class kCoreEventClass and event ID kAEAnswer). If you specify kAEWaitReply, the Apple Event Manager uses the Event Manager to send the event. The Apple Event Manager then calls the WaitNextEvent function on behalf of your application, causing your application to yield the processor and giving the server application a chance to receive and handle the Apple event. Your application continues to yield the processor until the server handles the Apple event or the request times out. If you specify kAEWaitReply, you must provide an idle function. This function should process any update events, null events, operating-system events, or activate events that occur while your application is waiting for a reply. See “Writing an Idle Function,” which begins on page 5-21, for sample code that shows an idle function. You use one of the three flags—kAENeverInteract, kAECanInteract, and kAEAlwaysInteract—to specify whether the server should interact with the user when handling the Apple event. Specify kAENeverInteract if the server should not interact with the user when handling the Apple event. You might specify this constant if you don’t want the user to be interrupted while the server is handling the Apple event.Use the kAECanInteract flag if the server should interact with the user when the user needs to supply information to the server. Use the kAEAlwaysInteract flag if the server should interact with the user whenever the server normally asks a user to confirm a decision or interact in any other way, even if no additional information is needed from the user. Note that it is the responsibility of the server and client applications to agree on how to interpret the kAEAlwaysInteract flag. If the client application does not set any one of the user interaction flags, the Apple Event Manager sets a default, depending on the location of the target of the Apple event. If the server application is on a remote computer, the Apple Event Manager sets the kAENeverInteract flag as the default. If the target of the Apple event is on the local computer, the Apple Event Manager sets the kAECanInteract flag as the default.The server application should call AEInteractWithUser if it needs to interact with the user. If both the client and the server allow user interaction, the Apple Event Manager attempts to bring the server to the foreground if it is not already the foreground process. If both the kAECanSwitchLayer and the kAEWaitReply flags are set, and if the client application is the active application on the local computer, the Apple Event Manager brings the server application directly to the front. Otherwise, the Apple Event Manager posts a notification request asking the user to bring the server application to the front, regardless of whether the kAECanSwitchLayer flag is set. This ensures that the user will not be interrupted by an unexpected application switch. You should specify the kAECanSwitchLayer flag only when the client and server applications reside on the same computer. In general, you should not set this flag if it would be confusing or inconvenient to the user for the server application to come to the front unexpectedly. This flag is ignored if you are sending an Apple event to a remote computer.Specify the kAEDontReconnect flag if the Apple Event Manager should not reconnect if it receives a session closed error from the PPC Toolbox. If you don’t set this flag, the Apple Event Manager automatically attempts to reconnect and reestablish the session.Specify the kAEWantReceipt flag if your application wants notification that the server application has accepted the Apple event. If you specify this flag, your application receives a return receipt as a high-level event.If you specify the kAEWantReceipt flag and the server application does not accept the Apple event within the time specified by the timeOutInTicks parameter to AESend, the AESend function returns a timeout error. Note that AESend also returns a timeout error if your application sets the kAEWaitReply flag and does not receive the reply Apple event within the time specified by the timeOutInTicks parameter.Specify the kAEDontRecord flag if your application is sending an Apple event to itself that you don’t want to be recorded. When Apple event recording has been turned on, every event that your application sends to itself will be automatically recorded by the Apple Event Manager except those sent with the kAEDontRecord flag set.Specify the kAEDontExecute flag if your application is sending an Apple event to itself for recording purposes only—that is, if you want the Apple Event Manager to send a copy of the event to the recording process but you do not want your application actually to receive the event. (For more information about when to use the kAEDontExecute flag, see the chapter “Recording Apple Events” in this book.)Listing 5-4 illustrates how to send a Multiply event (an imaginary Apple event for multiplying two long integers). It first creates an Apple event, adds parameters containing the numbers to multiply, then sends it, specifying various options. It also illustrates how to handle the reply Apple event that contains the result.NoteNoteIf you want to send Apple events, your application must set flags in its 'SIZE' resource indicating that it can handle high-level events, and it must provide handlers for the required Apple events. See “Accepting an Apple Event” on page 4-5 for information on setting the appropriate flags in the 'SIZE' resource and “Handling the Required Apple Events” on page 4-11 for information on supporting the required Apple events.uListing 5-4    Sending an Apple eventFUNCTION MySendMultiplyEvent (serverAddress: AEAddressDesc;                                        firstOperand: LongInt; secondOperand:                     LongInt;                                        VAR replyResultLongInt: LongInt): OSErr;CONST    kArithmeticClass                         =    'ARTH';             {event class for arithmetic }                                            { Apple events}    kMultiplyEventID                         =    'MULT';             {event ID for Multiply event}    keyMultOperand1                        =     'OPN1';            {keyword for first parameter}    keyMultOperand2                        =     'OPN2';             {keyword for second parameter}VAR    theAppleEvent:                         AppleEvent;    reply:                         AppleEvent;    returnedType:                        DescType;    actualSize:                         LongInt;    myErr:                        OSErr;    ignoreErr:                        OSErr;     errStr:                        Str255;    errNumber:                        LongInt;BEGIN    myErr := AECreateAppleEvent(kArithmeticClass, kMultiplyEventID,                                          serverAddress, kAutoGenerateReturnID,                                         kAnyTransactionID, theAppleEvent);    IF myErr = noErr THEN         {add the first operand}        myErr := AEPutParamPtr(theAppleEvent, keyMultOperand1,                                       typeLongInteger, @firstOperand,                                         SizeOf(firstOperand));    {add the second operand with the proper keyword}    IF myErr = noErr THEN        myErr := AEPutParamPtr(theAppleEvent, keyMultOperand2,                                       typeLongInteger, @secondOperand,                                       SizeOf(secondOperand));    IF myErr = noErr THEN        myErr := AESend(theAppleEvent, reply, kAEWaitReply +             kAENeverInteract,                          kAENormalPriority, 120, @MyIdleFunction, NIL);    IF myErr = noErr THEN {Apple event successfully sent}    BEGIN              {Check whether it was successfully handled-- }               { get result code returned by the server's handler}        myErr := AEGetParamPtr(reply, keyErrorNumber, typeLongInteger,                                       returnedType, @errNumber, SizeOf(errNumber),                                       actualSize);        IF (myErr = errAEDescNotFound) OR (errNumber = noErr) THEN        {if keyErrorNumber doesn't exist or server returned noErr }        { then the Apple event was successfully handled--the reply Apple }        { event contains the result in the direct parameter}            myErr := AEGetParamPtr(reply, keyDirectObject, typeLongInteger,                                           returnedType, @replyResultLongInt,                                          SizeOf(replyResultLongInt), actualSize)        ELSE        BEGIN            {server returned an error, so get error string}            myErr := AEGetParamPtr(reply, keyErrorString, typeChar,                                             returnedType, @errStr[1], SizeOf(errStr)-1,                                           actualSize);            IF myErr = noErr THEN            BEGIN                IF actualSize > 255 THEN                    actualSize := 255;                errStr[0] := chr(actualSize);                MyDisplayError(errStr);            END;        END;    ignoreErr := AEDisposeDesc(reply);    END    ELSE    BEGIN        {the Apple event wasn't successfully dispatched, }        { the request timed out, the user canceled, or other error}     END;    ignoreErr := AEDisposeDesc(theAppleEvent);    MySendMultiplyEvent := myErr;END;The code in Listing 5-4 first creates an Apple event with kArithmeticClass as the event class and kMultiplyEventID as the event ID. It also specifies the server of the Apple event. See “Specifying a Target Address” on page 5-10 for information on specifying a target address and “Creating an Apple Event,” which begins on page 5-3, for more information on creating an Apple event.The Multiply event shown in Listing 5-4 contains two parameters, each specifying a number to multiply. See “Adding Parameters to an Apple Event” on page 5-5 for examples of how to specify the parameters for the AEPutParamPtr function. After adding the parameters to the event, the code uses AESend to send the event. The first parameter to AESend specifies the Apple event to send—in this example, the Multiply event. The next parameter specifies the reply Apple event. This example specifies kAEWaitReply in the third parameter, indicating that the client is willing to yield the processor for the specified timeout value (120 ticks, or 2 seconds). The kAENeverInteract flag indicates that the server should not interact with the user when processing the Apple event. The fourth parameter specifies that the Multiply event is to be sent using normal priority (that is, placed at the end of the event queue). You can specify the kAEHighPriority flag to place the event in the front of the event queue, but this is not usually recommended.The next to last parameter specifies the address of an idle function. If you specify kAEWaitReply, you must provide an idle function. This function should process any update events, null events, operating-system events, or activate events that occur while your application is waiting for a reply. See “Writing an Idle Function,” which begins on page 5-21, for sample code that shows an idle function. The last parameter to AESend specifies a filter function. You can supply a filter function to filter high-level events that your application may receive while waiting for a reply Apple event. You can specify NIL for this parameter if you do not need to filter high-level events while waiting for a reply. See “Writing a Reply Filter Function” on page 5-24 for more information. If you specify kAEWaitReply, a noErr result code from AESend indicates that the Apple event was sent successfully, not that the server has completed the requested action successfully. Therefore, you should find out whether a result code was returned from the handler by checking the reply Apple event for the existence of either the keyErrorNumber or keyErrorString parameter. If the keyErrorNumber parameter does not exist or contains the noErr result code, you can use AEGetParamPtr to get the parameter you’re interested in from the reply Apple event. The MySendMultiplyEvent function in Listing 5-4 checks the function result of AESend. If it is noErr, MySendMultiplyEvent checks the keyErrorNumber parameter of the reply Apple event to determine whether the server successfully handled the Apple event. If this parameter exists and indicates that an error occurred, MySendMultiplyEvent gets the error string out of the keyErrorString parameter. Otherwise, the server performed the request, and the reply Apple event contains the answer to the multiplication request.When you have finished using the Apple event specified in the AESend function and no longer need the reply Apple event, you must dispose of both the original event and the reply by calling the AEDisposeDesc function.IMPORTANTIf your application sends Apple events to itself using a typeProcessSerialNumber address descriptor record with the lowLongOfPSN field set to kCurrentProcess, the Apple Event Manager jumps directly to the appropriate Apple event handler without going through the normal event-processing sequence. For this reason, your application will not appear to run more slowly when it sends Apple events to itself. For more information, see “Addressing an Apple Event for Direct Dispatching” on page 5-13.s Dealing With TimeoutsWhen your application calls AESend and chooses to wait for the server application to handle the Apple event, it can also specify the maximum amount of time it is willing to wait for a response. You can specify a timeout value in the timeOutInTicks parameter to AESend. You can either specify a particular length of time, in ticks, that your application is willing to wait, or you can specify the kNoTimeOut constant or the kAEDefaultTimeout constant. Use the kNoTimeOut constant to indicate that your application is willing to wait forever for a response from the server. You should use this value only if you are sure that the server will respond in a reasonable amount of time. You should also implement a method of checking whether the user wants to cancel. The idle function that you specify as a parameter to AESend should check the event queue for any instances of Command-period and immediately return TRUE as its function result if it finds a request to cancel in the event queue.Use the kAEDefaultTimeout constant if you want the Apple Event Manager to use a default timeout value. The Apple Event Manager uses a timeout value of about one minute if you specify this constant.If you set the kAEWaitReply flag and the server doesn’t have a handler for the Apple event, the server immediately returns the errAEEventNotHandled result code. If the server doesn’t respond within the length of time specified by the timeout value, AESend returns the errAETimeout result code and a reply Apple event that contains no data. This result code does not necessarily mean that the server failed to perform the requested action; it means only that the server did not complete processing within the specified time. The server might still be processing the Apple event, and it might still send a reply.If the server finishes processing the Apple event sometime after the time specified in the keyTimeoutAttr attribute has expired, it returns a reply Apple event to AEProcessAppleEvent. The Apple Event Manager then adds the actual data to the reply. Thus, your application can continue to check the reply Apple event to see if the server has responded, even after the time expires. If the server has not yet sent the reply when the client attempts to extract data from the reply Apple event, the Apple Event Manager functions return the errAEReplyNotArrived result code. After the reply Apple event returns from the server, the client can extract the data in the reply.Additionally, the server can examine the keyTimeoutAttr attribute of the Apple event to determine the timeout value specified by the client. You can use the value of this attribute as a rough estimate of how much time your handler has to respond. You can assume that your handler has less time to respond than the timeout value, because transmitting the Apple event uses some of the available time, as does transmitting the reply Apple event back to the client, and the event may have been in the queue for a while already.If you set the kAENoReply or kAEQueueReply flag, the Apple Event Manager ignores any timeout value you specify, because your application is not waiting for the reply. An attempt by the server to examine the keyTimeoutAttr attribute in this situation generates the error errAEDescNotFound.If your handler needs more time than is specified in the keyTimeoutAttr attribute, you can reset the timer by using the AEResetTimer function. This function resets the timeout value of an Apple event to its starting value.Writing an Idle FunctionThis section describes how to write an idle function for use with the AESend or AEInteractWithUser function.When your application sends an Apple event, you can set one of three flags in the sendMode parameter to AESend that specify how you want to deal with the reply: kAENoReply if you don’t want your application to receive a reply, kAEQueueReply if you want it to receive the reply in its event queue, or kAEWaitReply if you want the reply returned in the reply parameter of AESend and you are willing to give up the processor while your application is waiting for the reply.If you specify kAENoReply or kAEQueueReply, the AESend function returns immediately after using the Event Manager to send the event. If you specify kAEWaitReply, the AESend function does not return until either the server application finishes handling the Apple event or a specified amount of time expires. In this case the AESend function calls WaitNextEvent on behalf of your application. This yields the processor to other processes, so that the server has an opportunity to receive and process the Apple event sent by your application. While your application is waiting for a reply, it cannot receive events unless it provides an idle function.If you provide a pointer to an idle function as a parameter to the AESend function, AESend calls your idle function whenever an update event, null event, operating-system event, or activate event is received for your application. To allow your application to process high-level events that it receives while waiting for a reply, provide a reply filter function. See the next section, “Writing a Reply Filter Function,” for more information.Your application can yield the processor in a similar manner when it calls the AEInteractWithUser function. If AEInteractWithUser needs to post a notification request to bring your application to the front, your application yields the processor until the user brings your application to the front. To receive events while waiting for the user to bring your application to the front, you must provide an idle function.If you provide a pointer to an idle function as a parameter to the AEInteractWithUser function, AEInteractWithUser calls your idle function whenever an update event, null event, operating-system event, or activate event is received for your application.An idle function must use this syntax:FUNCTION MyIdleFunction (VAR event: EventRecord;                                 VAR sleepTime: LongInt;                                 VAR mouseRgn: RgnHandle): Boolean;The event parameter is the event record of the event to process. The sleepTime parameter and mouseRgn parameter are values that your idle function sets the first time it is called; thereafter they contain the values your function set. Your idle function should return a Boolean value that indicates whether your application wishes to continue waiting. Set the function result to TRUE if your application is no longer willing to wait for a reply from the server or for the user to bring the application to the front. Set the function result to FALSE if your application is still willing to wait.You use the sleepTime and mouseRgn parameters in the same way as the sleep and mouseRgn parameters of the WaitNextEvent function. Specify in the sleepTime parameter the amount of time (in ticks) during which your application agrees to relinquish the processor if no events are pending for it. In the mouseRgn parameter, you specify a screen region that determines the conditions under which your application is to receive notice of mouse-moved events. Your idle function receives mouse-moved events only if your application is the front application and the cursor strays outside the region you specify.Your idle function receives only update events, null events, operating-system events, and activate events. When your idle function receives a null event, it can use the idle time to update a status dialog box, animate cursors, or perform similar tasks. If your idle function receives any of the other events, it should handle the event as it normally would if received in its event loop.Listing 5-5 shows an example of an idle function for use with AESend or AEInteractWithUser. The idle function processes update events, null events, operating-system events, and activate events. The first time the function is called it receives a null event. At this time, it sets the sleepTime and mouseRgn parameters. The function continues to process events until the server finishes handling the Apple event or the user brings the application to the front.Your application should implement a method of checking whether the user wants to cancel. The MyCancelInQueue function in Listing 5-5 checks the event queue for any instances of Command-period and immediately returns TRUE as its function result if it finds a request to cancel in the event queue.Listing 5-5    An idle functionFUNCTION MyIdleFunction (VAR event: EventRecord;                                  VAR sleeptime: LongInt;                                  VAR mouseRgn: RgnHandle): Boolean;BEGIN    MyIdleFunction := FALSE;    {the MyCancelInQueue function checks for Command-period}    IF MyCancelInQueue THEN        BEGIN                                        MyIdleFunction := TRUE;            Exit(MyIdleFunction);        END;    CASE event.what OF        updateEvt,        activateEvt,                    {every idle function should handle }        osEvt:                    { these kinds of events}            BEGIN                MyAdjustCursor(event.where, gCursorRgn);                    DoEvent(event);            END;        nullEvent:            BEGIN                {set the sleepTime and mouseRgn parameters}                mouseRgn := gCursorRgn;                sleeptime := 10;                        {use the correct value for your }                                        { app}                                            DoIdle;                        {the application's idle handling}            END;    END; {of CASE}END;Writing a Reply Filter FunctionIf your application calls AESend and chooses to yield the processor to other processes while waiting for a reply, you can provide an idle function to process update, null, operating-system, and activate events, and you can provide a reply filter function to process high-level events. The previous section describes how an idle function processes events.Your reply filter function can process any high-level events that it is willing to handle while waiting for a reply Apple event. For example, your application can choose to handle Apple events from other processes while waiting. Note, however, that your application must maintain any necessary state information. Your reply filter function must not accept any Apple events that can change the state of your application and make it impossible to return to its previous state.A reply filter function must use this syntax:FUNCTION MyReplyFilter (VAR event: EventRecord;                                   returnID: LongInt;                                 transactionID: LongInt;                                sender: AEAddressDesc): Boolean;The event parameter is the event record for a high-level event. The next three parameters contain valid information only if the event is an Apple event. The returnID parameter is the return ID for the Apple event. The transactionID parameter is the transaction ID for the Apple event. The sender parameter contains the address of the application or process that sent the Apple event.Your reply filter function should return TRUE as the function result if you want to accept the Apple event; otherwise, it should return FALSE. If your filter function returns TRUE, the Apple Event Manager calls the AEProcessAppleEvent function on behalf of your application, and your handler routine is called to process the Apple event. In this case, make sure your handler is not called while it is still being used by an earlier call.Reference to Creating and Sending Apple EventsThis section describes the basic Apple Event Manager routines that your application can use to create and send Apple events. It also describes application-defined idle functions and reply filter functions that your application can provide for use by the Apple Event Manager. For information about data structures used with the routines described in this chapter, see the section “Data Structures Used by the Apple Event Manager,” which begins on page 4-56. Routines for Creating and Sending Apple EventsThis section describes the Apple Event Manager routines you can use to create Apple events, create and duplicate descriptor records, create and add items to descriptor lists and AE records, add parameters and attributes to Apple events, and send Apple events. The section “Routines for Responding to Apple Events,” which begins on page 4-61, describes other Apple Event Manager routines used for both responding to and creating Apple events. Creating Apple EventsThe AECreateAppleEvent function allows you to create an Apple event. AECreateAppleEventYou can use the AECreateAppleEvent function to create an Apple event with several important attributes but no parameters. You add parameters to the Apple event after you create it.FUNCTION AECreateAppleEvent (theAEEventClass: AEEventClass;                                       theAEEventID: AEEventID;                                       target: AEAddressDesc;                                       returnID: Integer;                                       transactionID: LongInt;                                       VAR result: AppleEvent): OSErr;theAEEventClass The event class of the Apple event to be created.theAEEventID The event ID of the Apple event to be created.target     The address of the server application. returnID    The return ID for the Apple event; if you specify kAutoGenerateReturnID, the Apple Event Manager assigns a return ID that is unique to the current session.transactionIDThe transaction ID for this Apple event. A transaction is a sequence of Apple events that are sent back and forth between the client and server applications, beginning with the client’s initial request for a service. All Apple events that are part of a transaction must have the same transaction ID.result     The AECreateAppleEvent function returns, in this parameter, the Apple event that it creates.DESCRIPTIONThe AECreateAppleEvent function creates an Apple event.Your application is responsible for using the AEDisposeDesc function to dispose of the Apple event when you no longer need it.If AECreateAppleEvent returns a nonzero result code, it returns a null descriptor record unless the Apple Event Manager is not available because of limited memory. RESULT CODESnoErr    0    No error    memFullErr    –108    Not enough room in heap zone    SEE ALSOSee “Creating an Apple Event,” which begins on page 5-3, for more information on how to create an Apple event.See “Specifying a Target Address” on page 5-10 for information on how to address an Apple event. Creating and Duplicating Descriptor RecordsThe AECreateDesc function converts data into a descriptor record, and the AEDuplicateDesc function makes a copy of a descriptor record.AECreateDescYou can use the AECreateDesc function to convert data into a descriptor record.FUNCTION AECreateDesc (typeCode: DescType; dataPtr: Ptr;                               dataSize:             Size; VAR result: AEDesc): OSErr;typeCode    The descriptor type for the descriptor record.dataPtr    A pointer to the data for the descriptor record.dataSize     The length, in bytes, of the data for the descriptor record.result    The descriptor record that the AECreateDesc function creates. DESCRIPTIONThe AECreateDesc function creates a new descriptor record that incorporates the specified data. Your application is responsible for using the AEDisposeDesc function to dispose of the resulting descriptor record when you no longer need it. You normally do this after receiving a result code from the AESend function.If AECreateDesc returns a nonzero result code, it returns a null descriptor record unless the Apple Event Manager is not available because of limited memory. RESULT CODESnoErr    0    No error    memFullErr    –108    Not enough room in heap zone    SEE ALSOFor examples of the use of AECreateDesc, see “Adding Parameters to an Apple Event,” which begins on page 5-5, and Listing 5-2 on page 5-11.AEDuplicateDescYou can use the AEDuplicateDesc function to make a copy of a descriptor record.FUNCTION AEDuplicateDesc (theAEDesc: AEDesc;                                  VAR result: AEDesc): OSErr;theAEDesc     The descriptor record to be duplicated.result    The duplicate descriptor record. DESCRIPTIONThe AEDuplicateDesc function creates a new descriptor record by copying the descriptor record from the parameter theAEDesc. Your application is responsible for using the AEDisposeDesc function to dispose of the resulting descriptor record when you no longer need it. You normally do this after receiving a result code from the AESend function.If AEDuplicateDesc returns a nonzero result code, it returns a null descriptor record unless the Apple Event Manager is not available because of limited memory. It is common for applications to send Apple events that have one or more attributes or parameters in common. For example, if you send a series of Apple events to the same application, the address attribute is the same. In these cases, the most efficient way to create the necessary Apple events is to make a template Apple event that you can then copy—by calling the AEDuplicateDesc function—as needed. You then fill in or change the remaining parameters and attributes of the copy, send the copy by calling AESend, and dispose of the copy—by calling AEDisposeDesc—after AESend returns a result code.RESULT CODESnoErr    0    No error    memFullErr    –108    Not enough room in heap zone    Creating Descriptor Lists and AE RecordsThe AECreateList function allows you to create an empty descriptor list or AE record.AECreateListYou can use the AECreateList function to create an empty descriptor list or AE record.FUNCTION AECreateList (factoringPtr: Ptr; factoredSize: Size;                              isRecord: Boolean;                               VAR resultList: AEDescList): OSErr;factoringPtr A pointer to the data at the beginning of each descriptor that is the same for all descriptor records in the list. If there is no common data, or if you decide not to isolate the common data, specify NIL as the value of this parameter.factoredSizeThe size of the common data. If there is no common data, or if you decide not to isolate the common data, the value of factoredSize must be 0. (See the description that follows for more information.)isRecord     A Boolean value that specifies the kind of list to create. If you set it to TRUE, the Apple Event Manager creates an AE record. If you set it to FALSE, the Apple Event Manager creates a descriptor list.resultListThe descriptor list or AE record that the AECreateList function creates. DESCRIPTIONThe AECreateList function creates an empty descriptor list or AE record. Your application is responsible for using the AEDisposeDesc function to dispose of the resulting descriptor record when you no longer need it. You normally do this after receiving a result code from the AESend function.If you intend to use a descriptor list for a factored Apple event array, you must provide, in the factoringPtr parameter, a pointer to the data shared by all items in the array and, in the factoredSize parameter, the size of the common data. The common data must be 4, 8, or more than 8 bytes in length because it always consists of (a) the descriptor type (4 bytes); (b) the descriptor type (4 bytes) and the size of each item’s data (4 bytes); or (c) the descriptor type (4 bytes), the size of each item’s data (4 bytes), and some portion of the data itself (1 or more bytes).If AECreateList returns a nonzero result code, it returns a null descriptor record unless the Apple Event Manager is not available because of limited memory. RESULT CODESnoErr    0    No error    paramErr    –50    Parameter error (value of handler pointer is NIL or odd)    memFullErr    –108    Not enough room in heap zone    SEE ALSOFor an example of the use of AECreateList, see Listing 5-1 on page 5-9.For information about data types used with Apple event arrays, see “Apple Event Array Data Types” on page 4-60.Adding Items to Descriptor ListsThe Apple Event Manager provides three routines that allow you to add descriptor records to any descriptor list, including an Apple event record. The AEPutPtr function converts data specified in a buffer to a descriptor record and adds the descriptor record to a descriptor list. The AEPutDesc function adds a descriptor record to a descriptor list. The AEPutArray function puts the data for an Apple event array into a descriptor list. AEPutPtrYou can use the AEPutPtr routine to add data specified in a buffer to any descriptor list as a descriptor record.FUNCTION AEPutPtr (theAEDescList: AEDescList; index: LongInt;                         typeCode: DescType; dataPtr: Ptr;                          dataSize: Size): OSErr;theAEDescListThe descriptor list to which to add a descriptor record.index     The position of the descriptor record in the descriptor list. (For example, the value 2 specifies the second descriptor record in the list.) If there is already a descriptor record in the specified position, it is replaced. If the value of index is 0, the descriptor record is added to the end of the list.typeCode    The descriptor type for the resulting descriptor record.dataPtr     A pointer to the data for the descriptor record.dataSize    The length, in bytes, of the data for the descriptor record.RESULT CODESnoErr    0    No error    memFullErr    –108    Not enough room in heap zone    errAEWrongDataType    –1703    Wrong descriptor type    errAENotAEDesc    –1704    Not a valid descriptor record    errAEBadListItem    –1705    Operation involving a list item failed    errAEIllegalIndex    –1719    Not a valid list index    SEE ALSOFor an example of the use of AEPutPtr, see Listing 5-1 on page 5-9.AEPutDescYou can use the AEPutDesc function to add a descriptor record to any descriptor list.FUNCTION AEPutDesc (theAEDescList: AEDescList; index: LongInt;                           theAEDesc: AEDesc): OSErr;theAEDescListThe descriptor list to which to add a descriptor record.index     The position of the descriptor record in the descriptor list. (For example, the value 2 specifies the second descriptor record in the list.) If there is already a descriptor record in the specified position, it is replaced. If the value of index is 0, the descriptor record is added to the end of the list.theAEDesc     The descriptor record to be added to the list.RESULT CODESnoErr    0    No error    memFullErr    –108    Not enough room in heap zone    errAEWrongDataType    –1703    Wrong descriptor type    errAENotAEDesc    –1704    Not a valid descriptor record    errAEBadListItem    –1705    Operation involving a list item failed    errAEIllegalIndex    –1719    Not a valid list index    AEPutArrayYou can use the AEPutArray function to put the data for an Apple event array into any descriptor list.FUNCTION AEPutArray (theAEDescList: AEDescList;                             arrayType: AEArrayType;                              arrayPtr: AEArrayDataPointer;                             itemType: DescType;                              itemSize: Size; itemCount: LongInt): OSErr;theAEDescListThe descriptor list into which to put the Apple event array. If there are any items already in the descriptor list, they are replaced.arrayType    The Apple event array type to be created. This is specified by one of the following constants: kAEDataArray, kAEPackedArray, kAEHandleArray, kAEDescArray, or kAEKeyDescArray. arrayPtr     A pointer to the buffer containing the array.itemType     For arrays of type kAEDataArray, kAEPackedArray, or kAEHandleArray, the descriptor type of array items to be created. itemSize     For arrays of type kAEDataArray or kAEPackedArray, the size (in bytes) of the array items to be created.itemCount     The number of elements in the array.DESCRIPTIONWhen you use AEPutArray to put an array into a factored descriptor list, each array item must include the data that is common to all the descriptor records in the list. The Apple Event Manager automatically isolates the data you specified in the call to AECreateList that is common to all the elements of the array.RESULT CODESnoErr    0    No error    memFullErr    –108    Not enough room in heap zone    errAEWrongDataType    –1703    Wrong descriptor type    errAENotAEDesc    –1704    Not a valid descriptor record    SEE ALSOFor information about data types and constants used with AEPutArray, see “Apple Event Array Data Types” on page 4-60.For more information about creating descriptor lists for Apple event arrays, see the description of AECreateList on page 5-28. Adding Data and Descriptor Records to AE RecordsThe Apple Event Manager provides two routines that allow you to add data and descriptor records to AE records. The AEPutKeyPtr function takes a pointer to data, a descriptor type, and a keyword and converts them into a keyword-specified descriptor record that it adds to an AE record. The AEPutKeyDesc function takes a descriptor record and a keyword and converts them into a keyword-specified descriptor record that it adds to an AE record.   AEPutKeyPtrYou can use the AEPutKeyPtr function to add a pointer to data, a descriptor type, and a keyword to an AE record as a keyword-specified descriptor record. FUNCTION AEPutKeyPtr (theAERecord: AERecord;                              theAEKeyword: AEKeyword;                              typeCode: DescType; dataPtr: Ptr;                              dataSize: Size): OSErr;theAERecordThe AE record to which to add a keyword-specified descriptor record.theAEKeywordThe keyword that identifies the descriptor record. If the AE record already includes a descriptor record with this keyword, it is replaced.typeCode     The descriptor type for the keyword-specified descriptor record.dataPtr     A pointer to the data for the keyword-specified descriptor record.dataSize     The length, in bytes, of the data for the keyword-specified descriptor record.RESULT CODESnoErr    0    No error    memFullErr    –108    Not enough room in heap zone    errAEWrongDataType    –1703    Wrong descriptor type    errAENotAEDesc    –1704    Not a valid descriptor record    errAEBadListItem    –1705    Operation involving a list item failed    AEPutKeyDescYou can use the AEPutKeyDesc function to add a descriptor record and a keyword to an AE record as a keyword-specified descriptor record. FUNCTION AEPutKeyDesc (theAERecord: AERecord;                               theAEKeyword: AEKeyword;                               theAEDesc: AEDesc): OSErr;theAERecord The AE record to which to add the keyword-specified descriptor record.theAEKeyword The keyword specifying the descriptor record. If there was already a keyword-specified descriptor record with this keyword, it is replaced.theAEDesc     The descriptor record for the keyword-specified descriptor record.RESULT CODESnoErr    0    No error    memFullErr    –108    Not enough room in heap zone    errAEWrongDataType    –1703    Wrong descriptor type    errAENotAEDesc    –1704    Not a valid descriptor record    errAEBadListItem    –1705    Operation involving a list item failed    Adding Parameters and Attributes to Apple EventsThe Apple Event Manager provides four functions that allow you to add Apple event parameters and attributes to an Apple event. The AEPutParamPtr and AEPutParamDesc functions add parameters to a specified Apple event. The AEPutAttributePtr and AEPutAttributeDesc functions add attributes to a specified Apple event.AEPutParamPtrYou can use the AEPutParamPtr function to add a pointer to data, a descriptor type, and a keyword to an Apple event as an Apple event parameter.FUNCTION AEPutParamPtr (theAppleEvent: AppleEvent;                                 theAEKeyword: AEKeyword;                                 typeCode: DescType; dataPtr: Ptr;                                 dataSize: Size): OSErr;theAppleEventThe Apple event to which to add a parameter.theAEKeywordThe keyword for the parameter to be added. If the Apple event already included a parameter with this keyword, the parameter is replaced.typeCode    The descriptor type for the parameter.dataPtr    A pointer to the data for the parameter.dataSize    The length, in bytes, of the data for the parameter.RESULT CODESnoErr    0    No error    memFullErr    –108    Not enough room in heap zone    errAEWrongDataType    –1703    Wrong descriptor type    errAENotAEDesc    –1704    Not a valid descriptor record    errAEBadListItem    –1705    Operation involving a list item failed    SEE ALSOFor an example of the use of AEPutParamPtr, see “Adding Parameters to an Apple Event,” which begins on page 5-5.AEPutParamDescYou can use the AEPutParamDesc function to add a descriptor record and a keyword to an Apple event as an Apple event parameter.FUNCTION AEPutParamDesc (theAppleEvent: AppleEvent;                                  theAEKeyword: AEKeyword;                                  theAEDesc: AEDesc): OSErr;theAppleEventThe Apple event to which to add a parameter.theAEKeywordThe keyword for the parameter to be added. If the Apple event already included a parameter with this keyword, the parameter is replaced.theAEDesc     The descriptor record for the parameter.RESULT CODESnoErr    0    No error    memFullErr    –108    Not enough room in heap zone    errAEWrongDataType    –1703    Wrong descriptor type    errAENotAEDesc    –1704    Not a valid descriptor record    errAEBadListItem    –1705    Operation involving a list item failed    SEE ALSOFor an example of the use of AEPutParamDesc, see “Adding Parameters to an Apple Event,” which begins on page 5-5.AEPutAttributePtrYou can use the AEPutAttributePtr function to add a pointer to data, a descriptor type, and a keyword to an Apple event as an attribute.FUNCTION AEPutAttributePtr (theAppleEvent: AppleEvent;                                     theAEKeyword: AEKeyword;                                      typeCode: DescType;                                      dataPtr: Ptr; dataSize: Size): OSErr;theAppleEvent The Apple event to which to add an attribute.theAEKeywordThe keyword for the attribute to be added.     TYPE AEKeyword = PACKED ARRAY[1..4] OF Char;    The keyword can be any of the constants listed in the description that follows. If the Apple event already included an attribute with this keyword, the attribute is replaced. typeCode    The descriptor type for the attribute.dataPtr     A pointer to the buffer containing the data to be assigned to the attribute.dataSize    The length, in bytes, of the data to be assigned to the attribute.DESCRIPTIONThe AEPutAttributePtr function adds the specified pointer to data, descriptor type, and keyword to the specified Apple event as an attribute. You can specify the parameter theAEKeyWord using any of the following constants:CONST    keyAddressAttr                                 = 'addr'; {address of target }                                                 { application}    keyEventClassAttr                                 = 'evcl'; {event class}    keyEventIDAttr                                = 'evid'; {event ID}    keyEventSourceAttr                                = 'esrc'; {source application}    keyInteractLevelAttr                                = 'inte'; {settings to allow the }                                                 { Apple Event Manager to }                                                 { bring server application }                                                 { to the foreground}    keyMissedKeywordAttr                                = 'miss'; {first required parameter }                                                 { remaining in Apple event}    keyOptionalKeywordAttr                                = 'optk'; {list of optional }                                                 { parameters for Apple }                                                 { event}    keyOriginalAddressAttr                                = 'from';             {address of original source }                                                 { of Apple event}         keyReturnIDAttr                                 = 'rtid'; {return ID for reply Apple }                                                 { event}    keyTimeoutAttr                                = 'timo'; {length of time in ticks }                                                 { that client will wait }                                                 { for reply or result from }                                                  { the server}    keyTransactionIDAttr                                = 'tran'; {transaction ID identifying }                                                 { a series of Apple events}RESULT CODESnoErr    0    No error    memFullErr    –108    Not enough room in heap zone    errAECoercionFail    –1700    Data could not be coerced to the requested descriptor type    errAENotAEDesc    –1704    Not a valid descriptor record    AEPutAttributeDescYou can use the AEPutAttributeDesc function to add a descriptor record and a keyword to an Apple event as an attribute.FUNCTION AEPutAttributeDesc (theAppleEvent: AppleEvent;                                      theAEKeyword: AEKeyword;                                       theAEDesc: AEDesc): OSErr;theAppleEventThe Apple event to which you are adding an attribute.theAEKeywordThe keyword for the attribute to be added.     TYPE AEKeyword = PACKED ARRAY[1..4] OF Char;    The keyword can be any of the constants listed in the description of AEPutAttributePtr on page 5-35. If the Apple event already included an attribute with this keyword, the attribute is replaced. theAEDesc    The descriptor record to be assigned to the attribute. The descriptor type of the specified descriptor record should match the defined descriptor type for that attribute. For example, the keyEventSourceAttr attribute has the typeShortInteger descriptor type.DESCRIPTIONThe AEPutAttributeDesc function takes a descriptor record and a keyword and adds them to an Apple event as an attribute. If the descriptor type required for the attribute is different from the descriptor type of the descriptor record, the Apple Event Manager attempts to coerce the descriptor record into the required type, with one exception: the Apple Event Manager does not attempt to coerce the data for an address attribute, thereby allowing applications to use their own address types. RESULT CODESnoErr    0    No error    memFullErr    –108    Not enough room in heap zone    errAECoercionFail    –1700    Data could not be coerced to the requested descriptor type     errAENotAEDesc    –1704    Not a valid descriptor record    SEE ALSOFor an example of the use of AEPutAttributeDesc, see Listing 5-1 on page 5-9. Sending Apple EventsThe AESend function allows you to send an Apple event that you have previously created with the AECreateAppleEvent function.  AESendYou can use the AESend function to send an Apple event.FUNCTION AESend (theAppleEvent: AppleEvent;                       VAR reply: AppleEvent; sendMode: AESendMode;                       sendPriority: AESendPriority;                       timeOutInTicks: LongInt; idleProc: IdleProcPtr;                       filterProc: EventFilterProcPtr): OSErr;theAppleEvent The Apple event to be sent.reply     The reply Apple event returned by the AESend function if you specify the kAEWaitReply flag in the sendMode parameter. (If you specify the kAEQueueReply flag in the sendMode parameter, you receive the reply Apple event in your event queue.) If you specify kAENoReply flag, the reply Apple event returned by this function is a null descriptor record. If you specify kAEWaitReply in the sendMode parameter, your application is responsible for using the AEDisposeDesc function to dispose of the descriptor record returned in the reply parameter.sendMode    Specifies the following: the reply mode for the Apple event (set with one of the constants kAENoReply, kAEQueueReply, or kAEWaitReply); the interaction level (set with one of the constants kAENeverInteract, kAECanInteract, or kAEAlwaysInteract, which represent flags in the keyInteractLevelAttr attribute); the application switch mode (set with the kAECanSwitchLayer constant); the reconnection mode (set with the kAEDontReconnect constant); and the return receipt mode (set with the kAEWantReceipt constant). You obtain the value for this parameter by adding the appropriate constants. (The description that follows provides more details about the sendMode flags.)sendPriority An integer of data type AESendPriority that specifies whether the Apple event is put at the back of the event queue (indicated by the kAENormalPriority flag) or at the front of the queue (indicated by the kAEHighPriority flag).  timeOutInTicks If the reply mode specified in the sendMode parameter is kAEWaitReply, or if a return receipt is requested, this parameter specifies the length of time (in ticks) that the client application is willing to wait for the reply or return receipt from the server application before timing out. Most applications should use the kAEDefaultTimeout constant, which tells the Apple Event Manager to provide an appropriate timeout duration. If the value of this parameter is kNoTimeOut, the Apple event never times out.idleProc     A pointer to a function that handles events (such as update, operating-system, activate, and null events) that your application receives while waiting for a reply. Your application can also perform other tasks (such as displaying a wristwatch or spinning beachball cursor) while waiting for a reply or a return receipt. Your application must provide an idle function if it specifies the kAEWaitReply flag in the sendMode parameter.filterProcA pointer to a function that accepts certain incoming Apple events that are received while the handler waits for a reply or a return receipt and filters out the rest.DESCRIPTIONYou can use one of the following flags in the sendMode parameter to specify the reply mode for an Apple event. Only one of these flags may be set.Flag    Description    kAENoReply    Your application does not want a reply Apple event; the server processes your Apple event as soon as it has the opportunity.    kAEQueueReply    Your application wants a reply Apple event; the reply appears in your event queue as soon as the server has the opportunity to process and respond to your Apple event.    kAEWaitReply    Your application wants a reply Apple event and is willing to give up the processor while waiting for the reply; for example, if the server application is on the same computer as your application, your application yields the processor to allow the server to respond to your Apple event. If you specify kAEWaitReply, you should provide an idle function.     You can communicate your user interaction preferences to the server application by specifying one of the following flags in the sendMode parameter. Only one of these flags may be set.Flag    Description    kAENeverInteract    The server application should never interact with the user in response to the Apple event. If this flag is set, AEInteractWithUser returns the errAENoUserInteraction result code. This flag is the default when an Apple event is sent to a remote application.    kAECanInteract    The server application can interact with the user in response to the Apple event—by convention, if the user needs to supply information to the server. If this flag is set and the server allows interaction, AEInteractWithUser either brings the server application to the foreground or posts a notification request. This flag is the default when an Apple event is sent to a local application.    kAEAlwaysInteract    The server application can interact with the user in response to the Apple event—by convention, whenever the server application normally asks a user to confirm a decision or interact in any other way, even if no additional information is needed from the user. If this flag is set and the server allows interaction, AEInteractWithUser either brings the server application to the foreground or posts a notification request.    The flags in the following list specify the application switch mode, the reconnection mode, and the return receipt mode. Any of these flags may be set.Flag    Description    kAECanSwitchLayer    If both the client and server allow interaction, and if the client application is the active application on the local computer and is waiting for a reply (that is, it has set the kAEWaitReply flag), AEInteractWithUser brings the server directly to the foreground. Otherwise, AEInteractWithUser uses the Notification Manager to request that the user bring the server application to the foreground.    kAEDontReconnect    The Apple Event Manager must not automatically try to reconnect if it receives a sessClosedErr result code from the PPC Toolbox.    kAEWantReceipt    The sender wants to receive a return receipt for this Apple event from the Event Manager. (A return receipt means only that the receiving application accepted the Apple event; the Apple event may or may not be handled successfully after it is accepted.) If the receiving application does not send a return receipt before the request times out, AESend returns errAETimeout as its function result.    If the Apple Event Manager cannot find a handler for an Apple event in either the application or system Apple event dispatch table, it returns the result code errAEEventNotHandled to the server application (as the result of the AEProcessAppleEvent function). If the client application is waiting for a reply, the Apple Event Manager also returns this result code to the client.The AESend function returns noErr as its function result if the Apple event was successfully sent by the Event Manager. A noErr result from AESend does not indicate that the Apple event was handled successfully; it indicates only that the Apple event was successfully sent by the Event Manager. If the handler returns a result code other than noErr, and if the client is waiting for a reply, it is returned in the keyErrorNumber parameter of the reply Apple event.If your application is sending an event to itself, you can set one of these flags to prevent the event from being recorded or to ask the Apple Event Manager to record the event without your application actually receiving it. Only one of these flags may be set.Flag    Description    kAEDontRecord    Your application is sending an event to itself but does not want the event recorded. When Apple event recording is on, the Apple Event Manager records a copy of every event your application sends to itself except for those events for which this flag is set.     kAEDontExecute    Your application is sending an Apple event to itself for recording purposes only—that is, you want the Apple Event Manager to send a copy of the event to the recording process but you do not want your application actually to receive the event.     RESULT CODESnoErr    0    No error    eLenErr    –92    Buffer too big to send    memFullErr    –108    Not enough room in heap zone    userCanceledErr    –128    User canceled an operation    procNotFound    –600    No eligible process with specified process serial number    connectionInvalid    –609    Nonexistent signature or session ID    noUserInteractionAllowed    –610    Background application sends event requiring authentication    noPortErr    –903    Client hasn’t set 'SIZE' resource to indicate awareness of high-level events    destPortErr    –906    Server hasn’t set 'SIZE' resource to indicate awareness of high-level events, or else is not present    sessClosedErr    –917    The kAEDontReconnect flag in the sendMode parameter was set and the server quit, then restarted    errAEEventNotHandled    –1708    Event wasn’t handled by an Apple event handler    errAEUnknownSendMode    –1710    Invalid sending mode was passed    errAEWaitCanceled    –1711    User canceled out of wait loop for reply or receipt    errAETimeout    –1712    Apple event timed out    errAEUnknownAddressType    –1716    Unknown Apple event address type    SEE ALSOFor more information on sending Apple events, see “Sending an Apple Event,” which begins on page 5-13.For information on writing an idle function, see “Writing an Idle Function,” which begins on page 5-21.For information on writing a reply filter function, see “Writing a Reply Filter Function,” which begins on page 5-24. For information on when to use the kAEDontExecute flag, see the chapter “Recording Apple Events” in this book.Application-Defined RoutinesIf your application sends an Apple event using AESend and is waiting for a reply, or if it calls AEInteractWithUser, you can provide an idle function to handle update events, null events, operating-system events, and activate events. You can also provide a reply filter function that can handle any high-level events that you want your application to handle while it is waiting for a reply or for user interaction.MyIdleFunctionAn idle function has the following syntax:FUNCTION MyIdleFunction (VAR event: EventRecord;                                 VAR sleepTime:         LongInt;                                 VAR mouseRgn: RgnHandle): Boolean;event    The event record of the event to process.sleepTime    Amount of time (in ticks) during which your application agrees to relinquish the processor if no events are pending.mouseRgn    A screen region that determines the conditions under which your application is to receive notice of mouse-moved events. DESCRIPTIONIf your application provides a pointer to an idle function (MyIdleFunction) as a parameter to AESend or AEInteractWithUser, the Apple Event Manager will call the idle function to handle any update event, null event, operating-system event, or activate event received for your application while it is waiting for a reply.Set the function result to TRUE if your application is no longer willing to wait for a reply from the server or for the user to bring the application to the front. Set the function result to FALSE if your application is still willing to wait.SEE ALSOFor more information, see “Writing an Idle Function,” which begins on page 5-21.MyReplyFilterA reply filter function has the following syntax: FUNCTION MyReplyFilter (VAR event: EventRecord;                                returnID: LongInt;                                 transactionID: LongInt;                                sender: AEAddressDesc): Boolean;event    The event record for a high-level event. The next three parameters contain valid information only if the event is an Apple event.returnID    Return ID for the Apple event.transactionIDTransaction ID for the Apple event.sender    Address of process that sent the Apple event.DESCRIPTIONIf your application provides a pointer to a reply filter function as a parameter to the AESend function, the reply filter function can process any high-level events that it is willing to handle while your application is waiting for a reply. Your reply filter function should return TRUE as the function result if you want to accept the Apple event; otherwise, it should return FALSE.SEE ALSOFor more information, see “Writing a Reply Filter Function” on page 5-24. Summary of Creating and Sending Apple EventsPascal SummaryConstantsCONST            gestaltAppleEventsAttr                                    = 'evnt';                {selector for Apple events}    gestaltAppleEventsPresent                                    = 0;                {if this bit is set, then Apple }                                                        { Event Manager is available}    {Apple event descriptor types}    typeBoolean                                = 'bool';                    {1-byte Boolean value}    typeChar                                = 'TEXT';                    {unterminated string}    typeSMInt                                = 'shor';                    {16-bit integer}    typeInteger                                = 'long';                    {32-bit integer}    typeSMFloat                                = 'sing';                    {SANE single}    typeFloat                                = 'doub';                    {SANE double}    typeLongInteger                                = 'long';                    {32-bit integer}    typeShortInteger                                = 'shor';                    {16-bit integer}    typeLongFloat                                = 'doub';                    {SANE double}    typeShortFloat                                = 'sing';                    {SANE single}    typeExtended                                = 'exte';                    {SANE extended}    typeComp                                = 'comp';                    {SANE comp}    typeMagnitude                                = 'magn';                    {unsigned 32-bit integer}    typeAEList                                = 'list';                    {list of descriptor records}    typeAERecord                                = 'reco';                    {list of keyword-specified }                                                        { descriptor records}    typeAppleEvent                                = 'aevt';                    {Apple event record}    typeTrue                                = 'true';                    {TRUE Boolean value}    typeFalse                                = 'fals';                    {FALSE Boolean value}    typeAlias                                = 'alis';                    {alias record}    typeEnumerated                                = 'enum';                    {enumerated data}    typeType                                = 'type';                    {four-character code for }                                                        { event class or event ID}    typeAppParameters                                = 'appa';                    {Process Manager launch parameters}    typeProperty                                = 'prop';                    {Apple event property}    typeFSS                                = 'fss ';                    {file system specification}    typeKeyword                                = 'keyw';                    {Apple event keyword}    typeSectionH                                = 'sect';                    {handle to a section record}    typeWildCard                                = '****';                    {matches any type}    typeApplSignature                                = 'sign';                    {application signature}    typeSessionID                                = 'ssid';                    {session reference number}    typeTargetID                                = 'targ';                    {target ID record}    typeProcessSerialNumber                                = 'psn ';                    {process serial number}    typeNull                                = 'null';                    {NULL or nonexistent data}        {keywords for Apple event parameters}    keyDirectObject                                = '----';                    {direct parameter}    keyErrorNumber                                = 'errn';                    {error number parameter}    keyErrorString                                = 'errs';                    {error string parameter}    keyProcessSerialNumber                                = 'psn ';                    {process serial number param}    {keywords for Apple event attributes}    keyTransactionIDAttr                                = 'tran';                    {transaction ID}    keyReturnIDAttr                                = 'rtid';                    {return ID}    keyEventClassAttr                                 = 'evcl';                    {event class}    keyEventIDAttr                                = 'evid';                    {event ID}    keyAddressAttr                                = 'addr';                    {address of target or }                                                        { client application}    keyOptionalKeywordAttr                                = 'optk';                    {list of optional parameters }                                                        { for the Apple event}    keyTimeoutAttr                                = 'timo';                    {number of ticks the client }                                                        { will wait}    keyInteractLevelAttr                                 = 'inte';                    {settings to allow Apple Event }                                                        { Manager to bring server }                                                                            { to foreground}    keyEventSourceAttr                                = 'esrc';                    {nature of source }                                                        { application}    keyMissedKeywordAttr                                = 'miss';                    {first required parameter }                                                        { remaining in an Apple event}    keyOriginalAddressAttr                                = 'from';                    {address of original source; }                                                        { available only in version }                                                         { 1.01 and later versions of }                                                        { the Apple Event Manager}    {keywords for special handlers}    keyPreDispatch                                = 'phac';                    {identifies a handler routine }                                                        { called immediately before the }                                                        { Apple Event Manager dispatches }                                                        { an Apple event}    keySelectProc                                = 'selh';                     {selector used with }                                                        { AERemoveSpecialHandler to }                                                        { disable the OSL}    {keywords for use with AEManagerInfo; available only in version }    { 1.0.1 and later versions of the Apple Event Manager}    keyAERecorderCount                                 = 'recr';                    {keyword for recording info}    keyAEVersion                                 = 'vers';                    {keyword for version info}    {event class}    kCoreEventClass                                = 'aevt';                    {event class for required Apple }                                                        { events}    {event IDs for required Apple events}    kAEOpenApplication                                = 'oapp';                    {event ID for Open }                                                        { Application event}    kAEOpenDocuments                                = 'odoc';                    {event ID for Open Documents event}    kAEPrintDocuments                                = 'pdoc';                    {event ID for Print Documents }                                                        { event}    kAEQuitApplication                                = 'quit';                    {event ID for Quit Application }                                                        { event}    kAEAnswer                                = 'ansr';                    {event ID for Apple event replies}    kAEApplicationDied                                = 'obit';                    {event ID for Application Died }                                                        { event}    {constants for setting the sendMode parameter of AESend}    kAENoReply                                = $00000001;                    {client doesn't want reply}    kAEQueueReply                                = $00000002;                    {client wants server to }                                                        { reply in event queue}    kAEWaitReply                                = $00000003;                    {client wants a reply and }                                                        { will give up processor}    kAENeverInteract                                = $00000010;                    {server application should }                                                        { not interact with user }                                                        { for this Apple event}    kAECanInteract                                = $00000020;                    {server may interact with }                                                        { user for this Apple event }                                                        { to supply information}    kAEAlwaysInteract                                = $00000030;                    {server may interact with user }                                                        { for this Apple event even if }                                                        { no information is required}    kAECanSwitchLayer                                = $00000040;                    {server should come directly }                                                        { to foreground when appropriate}    kAEDontReconnect                                = $00000080;                    {don't reconnect if there }                                                        { is a PPC session closed error}    kAEWantReceipt                                = nReturnReceipt; {client wants return }                                                        { receipt}    kAEDontRecord                                = $00001000            ;        {don't record this event}    kAEDontExecute                                = $00002000;                    {don't excecute this event}    {constants for setting the sendPriority parameter of AESend}    kAENormalPriority                                = $00000000;                    {put event at back of }                                                        { event queue}    kAEHighPriority                                = nAttnMsg;                    {put event at front of }                                                        { the event queue}    {event IDs for recording events; available only in version 1.01 and }    { later versions of the Apple Event Manager}    kAEStartRecording                                = 'reca';                    {event ID for Start Recording }                                                        { event}    kAEStopRecording                                = 'recc';                    {event ID for Stop Recording }                                                        { event}    kAENotifyStartRecording                                = 'rec1';                    {event ID for Recording On event}    kAENotifyStopRecording                                = 'rec0';                    {event ID for Recording Off event}    kAENotifyRecording                                = 'recr';                    {event ID for Receive Recordable }                                                        { Event event}    {constant for the returnID parameter of AECreateAppleEvent}    kAutoGenerateReturnID                                = -1;                    {tells Apple Event Manager to }                                                        { generate a unique return ID}    {constant for transaction IDs}    kAnyTransactionID                                 = 0;                    {the Apple event is not }                                                        { part of a transaction}    {constants for timeout durations}    kAEDefaultTimeout                                = -1;                    {use default timeout value}    kNoTimeOut                                = -2;                    {never time out}    {constants for the dispatcher parameter of AEResumeTheCurrentEvent}    kAENoDispatch                                = 0;                    {don't redispatch the Apple event}    kAEUseStandardDispatch                                = -1;                    {redispatch the Apple event }                                                        { by using its entry in the }                                                        { Apple event dispatch table}Data TypesTYPE    AEEventClass =         PACKED ARRAY[1..4] OF Char;                                                    {event class for a high-level }                                                            { event}    AEEventID =         PACKED ARRAY[1..4] OF Char;                                                    {event ID for a high-level }                                                            { event}    AEKeyword =         PACKED ARRAY[1..4] OF Char;                                                    {keyword for a descriptor }                                                            { record}    DescType                                    = ResType;                    {descriptor type}    AEDesc =                                                         {descriptor record}    RECORD                descriptorType:                                 DescType;                    {type of data being passed}        dataHandle:                                 Handle;                    {handle to data being passed}    END;    AEKeyDesc =                                                         {keyword-specified }    RECORD                                                        { descriptor record}        descKey:                                AEKeyword;                    {keyword}        descContent:                                AEDesc    ;                {descriptor record}    END;    AEAddressDesc                                    = AEDesc;                    {address descriptor record}    AEDescList                                    = AEDesc;                    {list of descriptor records}    AERecord                                    = AEDescList;                    {list of keyword-specified }                                                            { descriptor records}    AppleEvent                                    = AERecord;                    {list of attributes and }                                                            { parameters necessary for }                                                            { an Apple event}    AESendMode                                    = LongInt;                    {flags that determine how }                                                            { an Apple event is sent}    AESendPriority                                    = Integer;                    {send priority of an Apple }                                                            { event}    AEInteractAllowed = (kAEInteractWithSelf, kAEInteractWithLocal,                                 kAEInteractWithAll);                            {what processes may }                                                            { interact with the user}    AEEventSource = (kAEUnknownSource, kAEDirectCall, kAESameProcess,                          kAELocalProcess, kAERemoteProcess);                                                            {the source of an Apple }                                                            { event}    AEArrayType = (kAEDataArray, kAEPackedArray, kAEHandleArray,                        kAEDescArray, kAEKeyDescArray);                                                            {type of an Apple event array}    AEArrayData =     RECORD                                                        {data for an Apple event array}        CASE AEArrayType OF        kAEDataArray:            (AEDataArray:     ARRAY[0..0] OF Integer);        kAEPackedArray:            (AEPackedArray:     Packed Array[0..0] OF Char);        kAEHandleArray:            (AEHandleArray:     Array[0..0] OF Handle);        kAEDescArray:            (AEDescArray:     Array[0..0] OF AEDesc);        kAEKeyDescArray:            (AEKeyDescArray:     Array[0..0] OF AEKeyDesc);    END;        AEArrayDataPointer = ^AEArrayData;    EventHandlerProcPtr = ProcPtr;                                                        {pointer to an Apple event }                                                            { handler}    IdleProcPtr = ProcPtr;                                                        {pointer to an application's }                                                            { idle function}    EventFilterProcPtr = ProcPtr;                                                        {pointer to an application's }                                                            { filter function}Routines for Creating and Sending Apple EventsCreating Apple EventsFUNCTION AECreateAppleEvent    (theAEEventClass: AEEventClass; theAEEventID: AEEventID; target: AEAddressDesc; returnID: Integer; transactionID: LongInt; VAR result: AppleEvent): OSErr;Creating and Duplicating Descriptor RecordsFUNCTION AECreateDesc    (typeCode: DescType; dataPtr: Ptr; dataSize: Size; VAR result: AEDesc): OSErr;FUNCTION AEDuplicateDesc    (theAEDesc: AEDesc; VAR result: AEDesc): OSErr;Creating Descriptor Lists and AE RecordsFUNCTION AECreateList    (factoringPtr: Ptr; factoredSize: Size; isRecord: Boolean; VAR resultList: AEDescList): OSErr;Adding Items to Descriptor ListsFUNCTION AEPutPtr    (theAEDescList: AEDescList; index: LongInt; typeCode: DescType; dataPtr: Ptr; dataSize: Size): OSErr;FUNCTION AEPutDesc    (theAEDescList: AEDescList; index: LongInt; theAEDesc: AEDesc): OSErr;FUNCTION AEPutArray    (theAEDescList: AEDescList; arrayType: AEArrayType; arrayPtr: AEArrayDataPointer; itemType: DescType; itemSize: Size; itemCount: LongInt): OSErr;Adding Data and Descriptor Records to AE RecordsFUNCTION AEPutKeyPtr    (theAERecord: AERecord; theAEKeyword: AEKeyword; typeCode: DescType; dataPtr: Ptr; dataSize: Size): OSErr;FUNCTION AEPutKeyDesc    (theAERecord: AERecord; theAEKeyword: AEKeyword; theAEDesc: AEDesc): OSErr;Adding Parameters and Attributes to Apple EventsFUNCTION AEPutParamPtr    (theAppleEvent: AppleEvent; theAEKeyword: AEKeyword; typeCode: DescType; dataPtr: Ptr; dataSize: Size): OSErr;FUNCTION AEPutParamDesc    (theAppleEvent: AppleEvent; theAEKeyword: AEKeyword; theAEDesc: AEDesc): OSErr;FUNCTION AEPutAttributePtr    (theAppleEvent: AppleEvent; theAEKeyword: AEKeyword; typeCode: DescType; dataPtr: Ptr; dataSize: Size): OSErr;FUNCTION AEPutAttributeDesc    (theAppleEvent: AppleEvent; theAEKeyword: AEKeyword; theAEDesc: AEDesc): OSErr;Sending Apple EventsFUNCTION AESend    (theAppleEvent: AppleEvent; VAR reply: AppleEvent; sendMode: AESendMode; sendPriority: AESendPriority; timeOutInTicks: LongInt; idleProc: IdleProcPtr; filterProc: EventFilterProcPtr): OSErr;Application-Defined RoutinesFUNCTION MyIdleFunction    (VAR event: EventRecord;VAR sleepTime: LongInt; VAR mouseRgn: RgnHandle): Boolean;FUNCTION MyReplyFilter    (VAR event: EventRecord; returnID: LongInt; transactionID: LongInt; sender: AEAddressDesc): Boolean;C SummaryConstantsenum {        #define         gestaltAppleEventsAttr                                      'evnt'            /*selector for Apple events*/        gestaltAppleEventsPresent                                             = 0        /*if this bit is set, then */                                                            /* Apple Event Manager is */};                                                            /* available*/        /*Apple event descriptor types*/enum        {        typeBoolean                                = 'bool',                    /*1-byte Boolean value*/        typeChar                                = 'TEXT',                    /*unterminated string*/        typeSMInt                                = 'shor',                    /*16-bit integer*/        typeInteger                                = 'long',                    /*32-bit integer*/        typeSMFloat                                = 'sing',                    /*SANE single*/        typeFloat                                = 'doub',                    /*SANE double*/        typeLongInteger                                = 'long',                    /*32-bit integer*/        typeShortInteger                                = 'shor',                    /*16-bit integer*/        typeLongFloat                                = 'doub',                    /*SANE double*/        typeShortFloat                                = 'sing',                    /*SANE single*/        typeExtended                                = 'exte',                    /*SANE extended*/        typeComp                                = 'comp',                    /*SANE comp*/        typeMagnitude                                = 'magn',                    /*unsigned 32-bit integer*/        typeAEList                                = 'list',                    /*list of descriptor records*/        typeAERecord                                = 'reco',                    /*list of keyword-specified */                                                            /* descriptor records*/        typeAppleEvent                                = 'aevt',                    /*Apple event record*/        typeTrue                                = 'true',                    /*TRUE Boolean value*/        typeFalse                                = 'fals',                    /*FALSE Boolean value*/        typeAlias                                = 'alis',                    /*alias record*/        typeEnumerated                                = 'enum'                    /*enumerated data*/};enum {        typeType                                = 'type',                    /*four-character code for */                                                            /* event class or event ID*/        typeAppParameters                                = 'appa',                    /*Process Manager launch */                                                            /* parameters*/        typeProperty                                = 'prop',                    /*Apple event property*/        typeFSS                                = 'fss ',                    /*file system specification*/        typeKeyword                                = 'keyw',                    /*Apple event keyword*/        typeSectionH                                = 'sect',                    /*handle to a section record*/        typeWildCard                                = '****',                    /*matches any type*/        typeApplSignature                                = 'sign',                    /*application signature*/        typeSessionID                                = 'ssid',                    /*session ID*/        typeTargetID                                = 'targ',                    /*target ID record*/        typeProcessSerialNumber                                = 'psn ',                    /*process serial number*/        typeNull                                = 'null'                    /*NULL or nonexistent data*/};        /*keywords for Apple event parameters*/enum     {        keyDirectObject                                = '----',                    /*direct parameter*/        keyErrorNumber                                = 'errn',                    /*error number parameter*/        keyErrorString                                = 'errs',                    /*error string parameter*/        keyProcessSerialNumber                                = 'psn '                    /*process serial number param*/};        /*keywords for Apple event attributes*/enum     {        keyTransactionIDAttr                                = 'tran',                    /*transaction ID*/        keyReturnIDAttr                                = 'rtid',                    /*return ID*/        keyEventClassAttr                                 = 'evcl',                    /*event class*/        keyEventIDAttr                                = 'evid',                    /*event ID*/        keyAddressAttr                                = 'addr',                    /*address of target or */                                                            /* client application*/        keyOptionalKeywordAttr                                = 'optk',                    /*list of optional parameters */                                                            /* for the Apple event*/        keyTimeoutAttr                                = 'timo',                    /*number of ticks the client */                                                            /* will wait*/        keyInteractLevelAttr                                 = 'inte',                    /*settings to allow Apple */                                                            /* Event Mgr to bring */                                                                                /* server to foreground*/        keyEventSourceAttr                                = 'esrc',                    /*nature of source */                                                            /* application*/        keyMissedKeywordAttr                                = 'miss',                    /*first required parameter */                                                            /* remaining in an Apple */                                                            /* event*/        keyOriginalAddressAttr                                = 'from'                    /*address of original source; */                                                            /* available only in version */                                                             /* 1.01 and later versions of */                                                            /* the Apple Event Manager*/};                /*keywords for special handlers*/enum     {        keyPreDispatch                                = 'phac',                    /*identifies a handler */                                                            /* routine that is called */                                                            /* immediately before the */                                                            /* Apple Event Manager */                                                            /* dispatches an Apple event*/        keySelectProc                                = 'selh',                     /*selector used with */                                                            /* AERemoveSpecialHandler to */                                                            /* disable the OSL*/        /*keywords for use with AEManagerInfo, available only in version */        /* 1.0.1 and later versions of the Apple Event Manager*/        keyAERecorderCount                                 = 'recr',                    /*keyword for recording info*/        keyAEVersion                                 = 'vers',                    /*keyword for version info*/        /*event class*/        kCoreEventClass                                = 'aevt'                    /*event class for required */                                                            /* Apple events*/};        /*event IDs for required Apple events*/enum {        kAEOpenApplication                                = 'oapp',                    /*event ID for Open */                                                            /* Application event*/        kAEOpenDocuments                                = 'odoc',                    /*event ID for Open */                                                            /* Documents event*/        kAEPrintDocuments                                = 'pdoc',                    /*event ID for Print */                                                            /* Documents event*/        kAEQuitApplication                                = 'quit',                    /*event ID for Quit */                                                            /* Application event*/        kAEAnswer                                = 'ansr',                    /*event ID for Apple event */                                                            /* replies*/        kAEApplicationDied                                = 'obit'                    /*event ID for Application */                                                            /* Died event*/};        /*constants for setting the sendMode parameter of AESend*/enum {        kAENoReply                                = 0x00000001,                    /*client doesn't want reply*/        kAEQueueReply                                = 0x00000002,                    /*client wants server to */                                                            /* reply in event queue*/        kAEWaitReply                                = 0x00000003,                    /*client wants a reply and */                                                            /* will give up processor*/        kAENeverInteract                                = 0x00000010,                    /*server application should */                                                            /* not interact with user */                                                            /* for this Apple event*/        kAECanInteract                                = 0x00000020,                    /*server may interact with */                                                            /* user for this Apple event */                                                            /* to supply information*/        kAEAlwaysInteract                                = 0x00000030,                    /*server may interact with */                                                            /* user for this Apple event */                                                            /* even if no information */                                                            /* is required*/        kAECanSwitchLayer                                = 0x00000040,                    /*server should come */                                                            /* directly to foreground */                                                            /* when appropriate*/        kAEDontReconnect                                = 0x00000080,                    /*don't reconnect if there */                                                            /* is a PPC session closed */                                                            /* error*/        kAEWantReceipt                                = nReturnReceipt, /*client wants return */                                                            /* receipt*/        kAEDontRecord                                = 0x00001000,                    /*don't record this event*/        kAEDontExecute                                = 0x00002000,                    /*don't excecute this event*/        /*constants for setting the sendPriority parameter of AESend*/        kAENormalPriority                                = 0x00000000,                    /*post message at end of */                                                            /* event queue*/        kAEHighPriority                                = nAttnMsg                    /*post message at front of */                                                            /* event queue*/};        /*event IDs for recording events; available only in version 1.01 and */        /* later versions of the Apple Event Manager*/enum {        kAEStartRecording                                = 'reca'        ,            /*event ID for Start */                                                            /* Recording event*/        kAEStopRecording                                = 'recc',                    /*event ID for Stop */                                                            /* Recording event*/        kAENotifyStartRecording                                = 'rec1',                    /*event ID for Recording On */                                                            /* event*/        kAENotifyStopRecording                                = 'rec0',                    /*event ID for Recording Off */                                                            /* event*/        kAENotifyRecording                                = 'recr'                    /*event ID for Receive */                                                            /* Recordable Event event*/};enum {        /*constant for the returnID parameter of AECreateAppleEvent*/        kAutoGenerateReturnID                                = -1,                    /*tells Apple Event Manager */                                                            /* to generate a unique */                                                            /* return ID*/        /*constant for transaction IDs*/        kAnyTransactionID                                 = 0,                    /*the Apple event is not */                                                            /* part of a transaction*/        /*constants for timeout durations*/        kAEDefaultTimeout                                = -1,                    /*use default timeout value*/        kNoTimeOut                                = -2    ,                /*never time out*/        /*constants for the dispatcher parameter of AEResumeTheCurrentEvent*/        kAENoDispatch                                = 0,                    /*don't redispatch the */                                                            /* Apple event*/        kAEUseStandardDispatch                                = -1                /*redispatch the Apple event */                                                            /* by using its entry in the */                                                            /* Apple event dispatch table*/};Data Typestypedef unsigned long AEEventClass;                                                            /*event class for a */                                                            /* high-level event*/typedef unsigned long AEEventID;                                                            /*event ID for a high-level */                                                            /* event*/typedef unsigned long AEKeyword;                                                            /*keyword for a descriptor */                                                            /* record*/typedef ResType DescType                                ;                            /*descriptor type*/struct AEDesc {                                                             /*descriptor record*/    DescType descriptorType;                                                         /*type of data being passed*/    Handle dataHandle;                                                        /*handle to data being passed*/};typedef struct AEDesc AEDesc;struct AEKeyDesc {                                                             /*keyword-specified */                                                            /* descriptor record*/    AEKeyword descKey;                                                        /*keyword*/    AEDesc descContent;                                                        /*descriptor record*/};typedef struct AEKeyDesc AEKeyDesc;typedef AEDesc AEAddressDesc;                                                            /*address descriptor record*/typedef AEDesc AEDescList;                                                            /*list of descriptor records*/typedef AEDescList AERecord;                                                            /*list of keyword-specified */                                                            /* descriptor records*/typedef AERecord AppleEvent;                                                            /*list of attributes and */                                                            /* parameters necessary for */                                                            /* an Apple event*/typedef long AESendMode;                                                            /*flags that determine how */                                                            /* an Apple event is sent*/typedef short AESendPriority;                                                            /*send priority of an Apple */                                                            /* event*/enum { kAEInteractWithSelf, kAEInteractWithLocal,         kAEInteractWithAll };                                                    /*what processes may */typedef unsigned char AEInteractAllowed;                                                            /* interact with the user*/enum { kAEUnknownSource, kAEDirectCall, kAESameProcess,             kAELocalProcess,          kAERemoteProcess };                                                    /*the source of an Apple */typedef unsigned char AEEventSource;                                                            /* event*/enum { kAEDataArray, kAEPackedArray, kAEHandleArray,          kAEDescArray, kAEKeyDescArray };                                                    /*type of an Apple event */typedef unsigned char AEArrayType;                                                            /* array*/union     AEArrayData {                                                         /*data for an Apple event */    short         kAEDataArray[1];                                                /* array*/    char     kAEPackedArray[1];    Handle         kAEHandleArray[1];    AEDesc         kAEDescArray[1];    AEKeyDesc kAEKeyDescArray[1];};typedef union AEArrayData AEArrayData;typedef AEArrayData *AEArrayDataPointer;typedef ProcPtr EventHandlerProcPtr;                                                            /*pointer to an Apple event */                                                            /* handler*/typedef ProcPtr IdleProcPtr;                                                            /*pointer to an application's */                                                            /* idle function*/typedef ProcPtr EventFilterProcPtr;                                                            /*pointer to an application's */                                                            /* filter function*/Routines for Creating and Sending Apple EventsCreating Apple Eventspascal OSErr AECreateAppleEvent(AEEventClass theAEEventClass, AEEventID theAEEventID, const AEAddressDesc *target, short returnID, long transactionID, AppleEvent *result);Creating and Duplicating Descriptor Recordspascal OSErr AECreateDesc    (DescType typeCode, const void* dataPtr, Size dataSize, AEDesc *result);pascal OSErr AEDuplicateDesc(const AEDesc *theAEDesc, AEDesc *result);Creating Descriptor Lists and AE Recordspascal OSErr AECreateList    (const void* factoringPtr, Size factoredSize, Boolean isRecord, AEDescList *resultList);Adding Items to Descriptor Listspascal OSErr AEPutPtr    (const AEDescList *theAEDescList, long index, DescType typeCode, const void* dataPtr, Size dataSize);pascal OSErr AEPutDesc    (const AEDescList *theAEDescList, long index, const AEDesc *theAEDesc);pascal OSErr AEPutArray    (const AEDescList *theAEDescList, AEArrayType arrayType, const AEArrayDataPointer *arrayPtr, DescType itemType, Size itemSize, long itemCount);Adding Data and Descriptor Records to AE Recordspascal OSErr AEPutKeyPtr    (const AERecord *theAERecord, AEKeyword theAEKeyword, DescType typeCode, const void* dataPtr, Size dataSize);pascal OSErr AEPutKeyDesc    (const AERecord *theAERecord, AEKeyword theAEKeyword, const AEDesc *theAEDesc);Adding Parameters and Attributes to Apple Eventspascal OSErr AEPutParamPtr    (const AppleEvent *theAppleEvent, AEKeyword theAEKeyword, DescType typeCode, const void* dataPtr, Size dataSize);pascal OSErr AEPutParamDesc    (const AppleEvent *theAppleEvent, AEKeyword theAEKeyword, const AEDesc *theAEDesc);pascal OSErr AEPutAttributePtr(const AppleEvent *theAppleEvent, AEKeyword theAEKeyword, DescType typeCode, const void* dataPtr, Size dataSize);pascal OSErr AEPutAttributeDesc(const AppleEvent *theAppleEvent, AEKeyword theAEKeyword, const AEDesc *theAEDesc);Sending Apple Eventspascal OSErr AESend    (const AppleEvent *theAppleEvent, AppleEvent *reply, AESendMode sendMode, AESendPriority sendPriority, long timeOutInTicks, IdleProcPtr idleProc, EventFilterProcPtr filterProc);Application-Defined Routinespascal Boolean MyIdleFunction(const EventRecord *event,long *sleepTime, RgnHandle *mouseRgn);pascal Boolean MyReplyFilter(const EventRecord *event, long returnID, long transactionID,AEAddressDesc sender);Assembly-Language SummaryTrap MacrosTrap Macros Requiring Routine Selectors_Pack8Selector    Routine    $0405    AEDuplicateDesc    $0609    AEPutDesc    $0610    AEPutKeyDesc    $0610    AEPutParamDesc    $0627    AEPutAttributeDesc    $0706    AECreateList    $0825    AECreateDesc    $0A08    AEPutPtr    $0A0F    AEPutKeyPtr    $0A0F    AEPutParamPtr    $0A16    AEPutAttributePtr    $0B0D    AEPutArray    $0B14    AECreateAppleEvent    $0D17    AESend    Result CodesnoErr    0    No error    paramErr    –50    Parameter error (for example, value of handler pointer is NIL or odd)    eLenErr    –92    Buffer too big to send    memFullErr    –108    Not enough room in heap zone    userCanceledErr    –128    User canceled an operation    procNotFound    –600    No eligible process with specified process serial number    bufferIsSmall    –607    Buffer is too small    noOutstandingHLE    –608    No outstanding high-level event    connectionInvalid    –609    Nonexistent signature or session ID    noUserInteractionAllowed    –610    Background application sends event requiring authentication    noPortErr    –903    Client hasn’t set 'SIZE' resource to indicate awareness of high-level events    destPortErr    –906    Server hasn’t set 'SIZE' resource to indicate awareness of high-level events, or else is not present    sessClosedErr    –917    The kAEDontReconnect flag in the sendMode parameter was set, and the server quit and then restarted    errAECoercionFail    –1700    Data could not be coerced to the requested descriptor type    errAEDescNotFound    –1701    Descriptor record was not found    errAECorruptData    –1702    Data in an Apple event could not be read    errAEWrongDataType    –1703    Wrong descriptor type    errAENotAEDesc    –1704    Not a valid descriptor record    errAEBadListItem    –1705    Operation involving a list item failed    errAENewerVersion    –1706    Need a newer version of the Apple Event Manager    errAENotAppleEvent    –1707    Event is not an Apple event    errAEEventNotHandled    –1708    Event wasn’t handled by an Apple event handler    errAEReplyNotValid    –1709    AEResetTimer was passed an invalid reply    errAEUnknownSendMode    –1710    Invalid sending mode was passed    errAEWaitCanceled    –1711    User canceled out of wait loop for reply or receipt    errAETimeout    –1712    Apple event timed out    errAENoUserInteraction    –1713    No user interaction allowed    errAENotASpecialFunction    –1714    The keyword is not valid for a special function    errAEParamMissed    –1715    Handler cannot understand a parameter the client considers required    errAEUnknownAddressType    –1716    Unknown Apple event address type    errAEHandlerNotFound    –1717    No handler found for an Apple event or a coercion, or no object callback function found    errAEReplyNotArrived    –1718    Reply has not yet arrived    errAEIllegalIndex    –1719    Not a valid list index    errAEImpossibleRange    –1720    The range is not valid because it is impossible for a range to include the first and last objects that were specified; an example is a range in which the offset of the first object is greater than the offset of the last object    errAEWrongNumberArgs    –1721    The number of operands provided for the kAENot logical operator is not 1    errAEAccessorNotFound    –1723    There is no object accessor function for the specified object class and token descriptor type    errAENoSuchLogical    –1725    The logical operator in a logical descriptor record is not kAEAnd, kAEOr, or kAENot    errAEBadTestKey    –1726    The descriptor record in a test key is neither a comparison descriptor record nor a logical descriptor record    errAENotAnObjectSpec    –1727    The objSpecifier parameter of AEResolve is not an object specifier record    errAENoSuchObject    –1728     A run-time resolution error, for example: object specifier record asked for the third element, but there are only two    errAENegativeCount    –1729     Object-counting function returned negative value    errAEEmptyListContainer    –1730    The container for an Apple event object is specified by an empty list    errAEUnknownObjectType    –1731    Descriptor type of token returned by AEResolve is not known to server application     errAERecordingIsAlreadyOn    –1732    Attempt to turn recording on when it is already on    Listing 6-0Table 6-0Resolving and Creating Object Specifier RecordsContentsResolving Object Specifier Records6-4Descriptor Records Used in Object Specifier Records6-8Object Class6-9Container6-9Key Form6-11Key Data6-12Key Data for a Property ID6-13Key Data for an Object’s Name6-14Key Data for a Unique ID6-14Key Data for Absolute Position6-14Key Data for Relative Position6-15Key Data for a Test6-15Key Data for a Range6-20Installing Entries in the Object Accessor Dispatch Tables6-21Installing Object Accessor Functions That Find Apple Event Objects6-23Installing Object Accessor Functions That Find Properties6-27Writing Object Accessor Functions6-28Writing Object Accessor Functions That Find Apple Event Objects6-29Writing Object Accessor Functions That Find Properties6-37Defining Tokens6-39Handling Whose Tests6-41Writing Object Callback Functions6-45Writing an Object-Counting Function6-48Writing an Object-Comparison Function6-50Writing Marking Callback Functions6-53Creating Object Specifier Records6-55Creating a Simple Object Specifier Record6-57Specifying the Container Hierarchy6-61Specifying a Property6-63Specifying a Relative Position6-64Creating a Complex Object Specifier Record6-64Specifying a Test6-64Specifying a Range6-72Reference to Resolving and Creating Object Specifier Records6-75Data Structures Used in Object Specifier Records6-75Routines for Resolving and Creating Object Specifier Records6-77Initializing the Object Support Library6-77Setting Object Accessor Functions and Object Callback Functions6-77Getting, Calling, and Removing Object Accessor Functions6-81Resolving Object Specifier Records6-85Deallocating Memory for Tokens6-87Creating Object Specifier Records6-88Application-Defined Routines6-94Object Accessor Functions6-94Object Callback Functions6-96Summary of Resolving and Creating Object Specifier Records6-104Pascal Summary6-104Constants6-104Data Types6-106Routines for Resolving and Creating Object Specifier Records6-106Application-Defined Routines6-108C Summary6-109Constants6-109Data Types6-111Routines for Resolving and Creating Object Specifier Records6-112Application-Defined Routines6-114Assembly-Language Summary6-115Trap Macros6-115Result Codes6-115Resolving and Creating Object Specifier RecordsThis chapter describes how your application can use the Apple Event Manager and application-defined functions to resolve object specifier records. Your application must be able to resolve object specifier records to respond to core and functional-area Apple events defined in the Apple Event Registry: Standard Suites. For example, after receiving a Get Data event that requests a table in a document, your application can use the Apple Event Manager and application-defined functions to parse the object specifier record in the direct parameter, locate the requested table, and send a reply Apple event containing the table’s data back to the application that requested it.This chapter also describes how your application can use the Apple Event Manager to create object specifier records. If you want to factor your application for Apple event recording, or if you want to send Apple events directly to other applications, you need to know how to create object specifier records.To use this chapter, you should be familiar with the chapters “Introduction to Apple Events” and “Responding to Apple Events” in this book. The section “Working With Object Specifier Records,” which begins on page 3-32, provides a general introduction to the subject.If you plan to create object specifier records, you should also be familiar with the chapter “Creating and Sending Apple Events.” If you are factoring your application, you should read the chapter “Recording Apple Events” before you write code for resolving or creating object specifier records.This chapter begins with an overview of the way your application works with the Apple Event Manager to resolve object specifier records. It then describesn    how the data in an object specifier record is organizedn    how to install entries in the object accessor tablesn    how to write object accessor and object callback functionsn    how to create an object specifier recordIMPORTANTVersions 1.0 and 1.01 of the Apple Event Manager do not include the routines for resolving and creating object specifier records described in this chapter. To use these routines with those versions of the Apple Event Manager, you must link the Object Support Library (OSL) with your application when you build it, and call the AEObjectInit function before calling any of the routines.s  Resolving Object Specifier RecordsIf an Apple event parameter consists of an object specifier record, your handler for the Apple event should resolve the object specifier record: that is, locate the Apple event objects it describes. The first step is to call the AEResolve function with the object specifier record as a parameter. The AEResolve function performs tasks that are required to resolve any object specifier record, such as parsing its contents, keeping track of the results of tests, and handling memory management. When necessary, AEResolve calls application-defined functions to perform tasks that are unique to the application, such as locating a specific Apple event object in the application’s data structures or counting the number of Apple event objects in a container.NoteObject specifier records are only valid while the Apple event that contains them is being handled. For example, if an application receives an Apple event asking it to cut row 5 of a table, what was row 6 then becomes row 5, and the original object specifier record that referred to row 5 no longer refers to the same row.uThe AEResolve function can call two kinds of application-defined functions. Object accessor functions locate Apple event objects. Object callback functions perform other tasks that only an application can perform, such as counting, comparing, or marking Apple event objects. This section provides an overview of the way AEResolve calls object accessor and object callback functions when it resolves object specifier records. Each time AEResolve calls one of your application’s object accessor functions successfully, the object accessor function should return a special descriptor record created by your application, called a token, that identifies either an element in a specified container or a property of a specified Apple event object. The Apple Event Manager examines the token’s descriptor type but does nothing with the token’s data. When it needs to refer to the object the token identifies, the Apple Event Manager simply passes the token back to your application. Each object accessor function provided by your application should either find elements of a given object class in a container identified by a token of a given descriptor type, or find properties of an Apple event object identified by a token of a specified descriptor type. The Apple Event Manager uses the object class ID and the descriptor type of the token that identifies the object’s container to determine which object accessor function to call.It is up to you to decide how many object accessor functions you need to write for your application. You can write one object accessor function that locates Apple event objects of several different object classes, or you can write separate object accessor functions for certain object classes. Similarly, you may want to use only one descriptor type for all the tokens returned by your object accessor functions, or you may want to use several descriptor types. The way you define your tokens depends on the needs of your application. You can use the AEInstallObjectAccessor function to create an object accessor dispatch table that the Apple Event Manager uses to map requests for Apple event objects to the appropriate object accessor function in your application. The Apple Event Manager uses the object class of each requested object and the descriptor type of the token that identifies the object’s container to determine which object accessor function to call. Depending on the container hierarchy for a given object specifier record and the way your application defines its object accessor functions, the Apple Event Manager may need to call a series of object accessor functions to resolve the nested object specifier records that describe an Apple event object’s container. For information about creating and using the object accessor dispatch table, see “Installing Entries in the Object Accessor Dispatch Tables,” which begins on page 6-21. Figure 6-1 illustrates the major steps involved in resolving an object specifier record. The SurfWriter application shown in Figure 6-1 receives a Get Data event whose direct parameter is an object specifier record for a table named “Summary of Sales” in a document named “Sales Report.” The SurfWriter application’s handler for the Get Data event calls the AEResolve function with the object specifier record as a parameter. The AEResolve function begins to parse the object specifier record. The first object accessor function that AEResolve calls is usually the function that can identify the Apple event object in the application’s default container—the outermost container in the container hierarchy. In Figure 6-1, the object specifier record for the document “Sales Report” specifies the default container, so the Apple Event Manager calls the object accessor function in the SurfWriter application that can locate a document in a container identified by a descriptor record of descriptor type typeNull. Figure 6-1    Resolving an object specifier record for a table in a documentAfter locating the document named “Sales Report,” the SurfWriter application returns a token to the Apple Event Manager—that is, a descriptor record that SurfWriter uses to identify the document. The Apple Event Manager examines the descriptor type of the token but does not need to know anything about the token’s data to continue parsing the object specifier record. Next, the Apple Event Manager calls the object accessor function that can identify a table in a container identified by a token of descriptor type typeMyDocToken. When the Apple Event Manager calls this object accessor function, it uses the token that describes the document to identify the table’s container. After the SurfWriter application has located the table named “Summary of Sales” in the document named “Sales Report,” it returns a token describing that table to the Apple Event Manager. After your application has successfully located an Apple event object, the Apple Event Manager disposes of all previous tokens returned during resolution of the object specifier record for the object. The Apple Event Manager disposes of tokens by calling either the AEDisposeDesc function or your application’s token disposal function, if you have provided one, which is an object callback function that disposes of a token. In Figure 6-1, the AEResolve function calls the SurfWriter application’s token disposal function to dispose of the token for the document after AEResolve receives the token for the table. After the SurfWriter application has disposed of the token for the document, the AEResolve function returns the result of the resolution—that is, the token for the requested table—to the handler in the SurfWriter application that originally called AEResolve. The Apple Event Manager can complete the cycle of parsing the object specifier record and calling the appropriate object accessor function to obtain a token as many times as necessary to identify every container in the container hierarchy and finish resolving an object specifier record, including disposing of the tokens for the containers. However, one token will always be left over—the token that identifies the requested Apple event object. After AEResolve returns this final token and your application performs the action requested by the Apple event, it is up to your application to dispose of the token. Your application can do so by calling the AEDisposeToken function, which in turn calls either AEDisposeDesc or your application’s token disposal function. You need to provide a token disposal function only if a call to AEDisposeDesc is not sufficient by itself to dispose of a token or if you provide marking callback functions, which are three object callback functions that allow your application to use its own marking scheme rather than tokens when identifying large groups of Apple event objects. Your application is not required to provide marking callback functions. To handle object specifier records that specify a test, your application must provide two object callback functions: (a) an object-counting function, which counts the number of elements of a given object class in a given container so that the Apple Event Manager can determine how many elements it must test to find the element or elements that meet a specified condition, and (b) an object-comparison function, which compares one element to another element or to a descriptor record and returns TRUE or FALSE. Your application may also provide an error callback function that can identify which descriptor record caused the resolution of an object specifier record to fail. Your application is not required to provide an error callback function.If your application resolves object specifier records without the help of the Apple Event Manager, it must extract the equivalent descriptor records and coerce them as necessary to get access to their data. The Apple Event Manager includes coercion handlers for these coercions; for information about this default coercion handling, see Table 4-1 on page 4-43.For more information about object accessor functions, see “Writing Object Accessor Functions,” which begins on page 6-28. For more information about object callback functions, see “Writing Object Callback Functions,” which begins on page 6-45.  The next section, “Descriptor Records Used in Object Specifier Records,” describes how the data in an object specifier record is interpreted by the Apple Event Manager.  Descriptor Records Used in Object Specifier RecordsAn object specifier record is a coerced AE record of descriptor type typeObjectSpecifier. The data to which its data handle refers consists of four keyword-specified descriptor records:Keyword    Value    Description of data    keyAEDesiredClass    'want'    A four-character code for the object class    keyAEContainer    'from'    An object specifier record (or in some cases a descriptor record with a handle whose value is NIL) that identifies the container for the requested objects    keyAEKeyForm    'form'    A four-character code for the key form    keyAEKeyData    'seld'    Data or nested descriptor records that specify a property, name, position, range, or test, depending on the key form    This section describes the descriptor types and data associated with each of these keywords. You need this information if your application resolves or creates object specifier records.For a summary of the descriptor types and key forms discussed in this section, see Table 6-11 on page 6-76. For an overview of object specifier records, see “Working With Object Specifier Records,” which begins on page 3-32.Object ClassThe object class of the requested objects is identified by an object class ID. The corresponding keyword-specified descriptor record takes this form: Keyword    Descriptor type    Data    keyAEDesiredClass    typeType    Object class ID    The Apple Event Registry: Standard Suites defines constants for the standard object class IDs.ContainerThe container for the requested objects is usually the object in which they are located. It can be identified in one of four ways:Keyword    Descriptor type    Data    keyAEContainer    typeObjectSpecifier    Object specifier record.        typeNull    Value of data handle is NIL. Specifies the default container at the top of the container hierarchy.        typeObjectBeingExamined    Value of data handle is NIL. Specifies the container for elements that are tested one at a time; used only within key data for key form formTest.        typeCurrentContainer    Value of data handle is NIL. Specifies a container for an element that demarcates one boundary in a range. Used only within key data for key form formRange.    The data that describes a container usually consists of another object specifier record. The ability to nest one object specifier record within another in this way makes it possible to identify a chain of containers that fully describes the location of one or more Apple event objects.For example, Figure 6-2 shows nested object specifier records that specify the first row of a table named “Summary of Sales” in a document named “Sales Report.” The container specified by the object specifier record at the bottom of the figure describes the outermost container in the container hierarchy—the container for the document “Sales Report.”  Because a container must be specified for each Apple event object in a container hierarchy, a null descriptor record (that is, a descriptor record whose descriptor type is typeNull and whose data handle has the value NIL) is used to specify the application’s default container—the outermost container for any container hierarchy in that application.    Figure 6-2    Nested object specifier records that specify a container hierarchyNoteThe format used in Figure 6-2 and similar figures throughout this chapter does not show the structure of the nested object specifier records as they exist within an Apple event. Instead, these figures show what you would obtain after calling AEGetKeyDesc repeatedly to extract the object specifier records from an Apple event record.When you call AEGetKeyDesc to extract a null descriptor record, the function returns a descriptor record of type AEDesc with a descriptor type of typeNull and a data handle whose value is 0.uThe object specifier data at the bottom of Figure 6-2 uses a null descriptor record to specify the document’s container—that is, the default container for the application. The object specifier record for the document identifies the document named “Sales Report”; the object specifier record for the table identifies the table named “Summary of Sales” in the document “Sales Report”; and the object specifier record for the row identifies the first row of the table named “Summary of Sales” in the document “Sales Report.”An object specifier record in an Apple event parameter almost always includes nested object specifier records that specify the container hierarchy for the requested Apple event object. For the nested object specifier records shown in Figure 6-2, the relationship between each Apple event object and its container is always simple containment: it is located inside its container. In other cases, the specified container may not actually contain the requested Apple event object. Instead, the relationship between a “container” and a specified object can be defined differently, depending on the key form. For example, the key form formRelativePosition indicates that the requested object is before or after its container. Object specifier records that specify the key form formTest or formRange require key data that consists of several nested descriptor records, including additional object specifier records that identify either a group of elements to be tested or the boundary elements that demarcate a range. These object specifier records use two special descriptor types to specify containers: typeObjectBeingExamined (see page 6-19), which specifies a container that changes as a group of elements are tested one at a time, and typeCurrentContainer (see page 6-20), which specifies the container for a boundary element in a range. Both of these descriptor types require a data handle whose value is NIL, since they act much like variables whose value is supplied by the Apple Event Manager according to other information provided in the container hierarchy. Key FormThe key form indicates how the key data should be interpreted. It can be specified by one of eight constants: Keyword    Descriptor type    Data    keyAEKeyForm    typeEnumerated    formPropertyIDformNameformUniqueIDformAbsolutePositionformRelativePositionformTestformWhoseformRange    The next section describes the key data that corresponds to each key form.Key DataThe nature of the information provided by the key data depends both on the specified key form and on the descriptor type of the descriptor record for the key data. Table 6-1 summarizes these relationships for the standard key forms. Table 6-1    Standard descriptor types used with keyAEKeyData(continued)Key form    Descriptor type    Data    formPropertyID     typeType    Property ID for an element’s property     formName    typeChar or other text type    Element’s name    formUniqueID    Any appropriate type    A value that uniquely identifies an object within its container or across an application     formAbsolutePosition    typeLongInteger    Offset from beginning (positive) or end (negative) of container        typeAbsoluteOrdinal    kAEFirstkAEMiddlekAELastkAEAnykAEAll    formRelativePosition    typeEnumerated    kAENextkAEPrevious    formTest    typeCompDescriptor    (see Table 6-2 on page 6-16)         typeLogicalDescriptor    (see Table 6-3 on page 6-17)    formRange    typeRangeDescriptor    (see Table 6-4 on page 6-20)     formWhose    typeWhoseDescriptor    (see Table 6-5 on page 6-42)     Most applications that resolve object specifier records need to support only the key forms formPropertyID, formName, formUniqueID, formAbsolutePosition, formRelativePosition, and formRange explicitly. You do not need to support these key forms for all object classes; for example, words usually do not have names, so most applications should return errAEEventNotHandled if they receive a request for a word by name. If your application provides an object-counting function and an object-comparison function in addition to the appropriate object accessor functions, the Apple Event Manager can handle formTest automatically.The Apple Event Manager uses the key form formWhose internally to optimize resolution of object specifier records that specify formTest. Applications that translate tests into their own query languages need to support formWhose explicitly. “Handling Whose Tests,” which begins on page 6-41, describes formWhose in detail.You can define custom key forms and the format for corresponding data for use by your own application if necessary. If you think you need to do this, check with the Apple Event Registrar first to find out whether existing key forms or others still under development can be adapted to the needs of your application. One simple kind of key form involves identifying an object on the basis of a specified property. For example, the corresponding data for key form formUniqueID (defined in the Apple Event Registry: Standard Suites) always consists of a unique ID for the requested object. This ID is stored as a property identified by the constant pID. The four-character code that corresponds to both formUniqueID and pID is 'ID  '. If you discover that you do need to define a custom key form based on a property, use the same four-character code for both the key form and the associated property. The rest of this section describes how the key data for the other key forms shown in Table 6-1 identifies Apple event objects.Key Data for a Property IDThe key data for formPropertyID is specified by a descriptor record of descriptor type typeType. The Apple Event Registry: Standard Suites defines constants for the standard property IDs.An object specifier record for a property specifies cProperty as the object class ID, an object specifier record for the object that contains the property as the container, formPropertyID as the key form, and a constant such as pFont as the key data. For example, if you were sending a Set Data event to change the font of a word to Palatino®, you could specify the data for the object specifier record in the direct parameter as follows:Keyword    Descriptor type    Data    keyAEDesiredClass    typeType    cProperty    keyAEContainer    typeObjectSpecifier    Object specifier record for word to which property belongs    keyAEKeyForm    typeEnumerated    formPropertyID    keyAEKeyData    typeType    pFont    In this example, the Set Data Apple event parameter identified by the keyword keyAETheData would specify Palatino as the value to which to set the specified property. The reply Apple event for a subsequent Get Data event that included an object specifier record for the same property would return Palatino in the parameter identified by the keyword keyAEResult.   Key Data for an Object’s NameThe key data for formName is specified by a descriptor record whose data consists of text, with a descriptor type such as typeChar or typeIntlText. Figure 6-2 on page 6-10 includes two object specifier records that specify formName.Key Data for a Unique IDThe key data for formUniqueID consists of a value that identifies an object. This ID must be unique either within the container, at a minimum, or unique across the application. A unique ID can be specified by a descriptor record of any appropriate type; for example, type typeInteger. Key Data for Absolute PositionThe key data for formAbsolutePosition consists of an integer that specifies either an offset or an ordinal position. For descriptor type typeLongInteger, the data is either a positive integer, indicating the offset of the requested element from the beginning of the container, or a negative integer, indicating its offset from the end of the container. The first object specifier record shown in Figure 6-2 on page 6-10 specifies formAbsolutePosition with key data that consists of the positive integer 1.For descriptor type typeAbsoluteOrdinal, the data consists of one of these constants: Constant    Meaning    kAEFirst    The first element in the specified container     kAEMiddle    The element in the middle of the specified container     kAELast    The last element in the specified container     kAEAny    A single element chosen at random from the specified container    kAEAll    All the elements in the specified container     If an object specifier record specifies kAEMiddle and the number of elements in the container is even, the Apple Event Manager rounds down; for example, the second word would be the “middle” word in a range of four words.Key Data for Relative PositionThe key data for formRelativePosition is specified by a descriptor record of type typeEnumerated whose data consists of one of these constants: Constant    Meaning    kAENext    The Apple event object after the specified container     kAEPrevious    The Apple event object before the specified container     The “container” can be a single Apple event object or a group of Apple event objects; the requested elements are located immediately before or immediately after it, not inside it. If your application can locate objects of the same class by absolute position, it can easily locate the same objects by relative position. For example, all applications that support formAbsolutePosition can easily locate the table immediately after a container specified as another table named “Summary of Sales.” Some applications may also be able to locate an object of one class before or after an object of another class. For example, a word processor might be able to locate the paragraph immediately after a container specified as a table named “Summary of Sales.”Key Data for a TestThe key data for formTest is specified by either a comparison descriptor record or a logical descriptor record. If your application provides an object-counting function and an object-comparison function in addition to the appropriate object accessor functions, the Apple Event Manager can handle formTest for you. Some applications may perform tests more efficiently by translating them into the application’s own query language. For information about handling tests yourself, see “Handling Whose Tests,” which begins on page 6-41.   The container for objects that pass a test can be one or more Apple event objects. The objects specified are those in the container that pass the test specified by the key data. For example, an object specifier record can describe “the first row in which the First Name column equals ‘John’ and the Last Name column equals ‘Chapman’ in the table ‘MyAddresses’ of the database ‘SurfDB.’” To resolve such an object specifier record, the Apple Event Manager must evaluate a logical expression that applies the logical operator AND to two separate comparisons for each row: a comparison of the First Name column to the word “John” and a comparison of the Last Name column to the word “Chapman.” The Apple Event Manager evaluates comparisons and logical expressions on the basis of the information in comparison descriptor records and logical descriptor records. A comparison descriptor record is a coerced AE record of type typeCompDescriptor that specifies an Apple event object and either another Apple event object or data for the Apple Event Manager to compare to the first object. The Apple Event Manager can also use the information in a comparison descriptor record to compare elements in a container, one at a time, either to an Apple event object or to data. The data for a comparison descriptor record consists of three keyword-specified descriptor records with the descriptor types and data shown in Table 6-2.Table 6-2    Keyword-specified descriptor records for typeCompDescriptorKeyword    Descriptor type    Data    keyAECompOperator    typeType    kAEGreaterThan kAEGreaterThanEqualskAEEqualskAELessThankAELessThanEqualskAEBeginsWithkAEEndsWithkAEContains    keyAEObject1    typeObjectSpecifier    Object specifier data         typeObjectBeingExamined    Value of data handle is NIL     keyAEObject2    typeObjectSpecifier    Object specifier data for object to be compared         typeObjectBeingExamined    Value of data handle is NIL        any other type (AEDesc)    Data to be compared     The keyword keyAEObject1 identifies a descriptor record for the element that is currently being compared to the object or data specified by the descriptor record for the keyword keyAEObject2. Either object can be described by a descriptor record of type typeObjectSpecifier or typeObjectBeingExamined. A descriptor record of typeObjectBeingExamined acts as a placeholder for each of the successive elements in a container when the Apple Event Manager tests those elements one at a time. The keyword keyAEObject2 can also be used with a descriptor record of any other descriptor type whose data is to be compared to each element in a container.You don’t have to support all the available comparison operators for all Apple event objects; for example, the “begins with” operator probably doesn’t make sense for objects of type cRectangle. It is up to you to decide which comparison operators are appropriate for your application to support, and how to interpret them. If necessary, you can define your own custom comparison operators. If you think you need to do this, check with the Apple Event Registrar first to find out whether existing definitions of comparison operators or definitions still under development can be adapted to the needs of your application.A logical descriptor record is a coerced AE record of type typeLogicalDescriptor that specifies a logical expression—that is, an expression that the Apple Event Manager evaluates to either TRUE or FALSE. The logical expression is constructed from a logical operator (one of the Boolean operators AND, OR, or NOT) and a list of logical terms to which the operator is applied. Each logical term in the list can be either another logical descriptor record or a comparison descriptor record. The Apple Event Manager short-circuits its evaluation of a logical expression as soon as one part of the expression fails a test. For example, if while testing a logical expression such as A AND B AND C the Apple Event Manager discovers that A AND B is not true, it will evaluate the expression to FALSE without testing C.The data for a logical descriptor record consists of two keyword-specified descriptor records with the descriptor types and data shown in Table 6-3.Table 6-3    Keyword-specified descriptor records for typeLogicalDescriptorKeyword    Descriptor type    Data    keyAELogicalOperator    typeEnumerated    kAEANDkAEORkAENOT    keyAELogicalTerms    typeAEList    One or more comparison or logical descriptor records    If the logical operator is AND or OR, the list can contain any number of logical terms, and the logical operator is applied to all the terms in the list. For example, the logical descriptor data shown in Figure 6-4 on page 6-19 consists of the logical operator AND and a list of logical terms that contains two comparison descriptor records. The entire logical descriptor record corresponds to the logical expression “the First Name column equals ‘John’ AND the Last Name column equals ‘Chapman.’” If the logical operator is NOT, the list must contain a single term. Figure 6-3 shows four object specifier records that specify the container hierarchy for the first row in the table “MyAddresses” of the database “SurfDB” that meets a test. The object specifier record at the top of Figure 6-3 specifies the first row contained in the set of rows that form its container. The container for the first row is specified by an object specifier record for a set of rows that meet a test. The two object specifier records at the bottom of Figure 6-3 specify the table named “MyAddresses,” which contains the rows to be tested, in the database named “SurfDB.” Figure 6-3    The container hierarchy for the first row in a table that meets a testThe object specifier record in Figure 6-3 for a set of rows that meet a test specifies formTest. The corresponding key data consists of the logical descriptor record shown in Figure 6-4, which applies the logical operator AND to two logical terms: a comparison descriptor record that specifies all the rows in the container (the table “MyAddresses”) in which the column named “First Name” equals “John,” and another comparison descriptor record that specifies all the rows in which the column named “Last Name” equals “Chapman.” A row in the table “MyAddresses” passes the test only if both comparison descriptor records evaluate as TRUE.Figure 6-4    A logical descriptor record that specifies a testThe keyword-specified descriptor records with the keyword keyAEObject1 in Figure 6-4 each consist of an object specifier record that identifies a column by name. The row for each column is specified by a descriptor record of typeObjectBeingExamined, which acts as a placeholder for each row as the Apple Event Manager tests successive rows in the table. The Apple event object specified by each of these object specifier records consists of a column in the row. The Apple Event Manager (with the help of an object-comparison function) compares the contents of the column in successive rows to the string identified by the keyword keyAEObject2 using the comparison operator identified by the keyword keyAECompOperator.  Key Data for a RangeThe key data for formRange is specified by a range descriptor record, which is a coerced AE record of type typeRangeDescriptor that identifies two Apple event objects marking the beginning and end of a range of elements. The data for a range descriptor record consists of two keyword-specified descriptor records with the descriptor types and data shown in Table 6-4. Table 6-4    Keyword-specified descriptor records in a descriptor record of type typeRangeDescriptorKeyword    Descriptor type    Data    keyAERangeStart    typeObjectSpecifier    An object specifier record for the first Apple event object in the desired range    keyAERangeStop    typeObjectSpecifier    An object specifier record for the last Apple event object in the desired range    The elements that identify the beginning and end of the range, which are known as boundary objects, do not have to belong to the same object class as the elements in the range itself. If the boundary objects belong to the same object class as the elements in the range, the boundary objects are included in the range. For example, the range of tables specified by boundary elements that are also tables would include the two boundary tables. The container for boundary objects is usually the same as the container for the entire range, in which case the container for a boundary object can be specified by a placeholder—that is, a descriptor record of type typeCurrentContainer whose data handle has the value NIL. When AEResolve calls an object accessor function to locate a range of objects, the Apple Event Manager replaces the descriptor record of type typeCurrentContainer with a token for the container of each boundary object. When using AEResolve to resolve the object specifier record, your application doesn’t need to examine the contents of this token, because the Apple Event Manager keeps track of it. If your application attempts to resolve some or all of the object specifier record without calling AEResolve, the application may need to examine the token before it can locate the boundary objects. The token provided by the Apple Event Manager for a boundary object’s container is a descriptor record of type typeToken whose data handle refers to a structure of type ccntTokenRecord.TYPE ccntTokenRecord = RECORD    tokenClass:                    DescType;                    {class ID of container }                                            { represented by token}    token:                    AEDesc;                    {token for current container}END;This data type is of interest only if you attempt to resolve an object specifier record for a range without calling AEResolve. Otherwise, the Apple Event Manager keeps track of the container.  Installing Entries in the Object Accessor Dispatch TablesIf the direct parameter for an Apple event consists of an object specifier record, your handler for the event should call the AEResolve function to resolve the object specifier record: that is, to find the Apple event objects or properties it describes. The AEResolve function resolves the object specifier record with the help of object accessor functions provided by your application. Your application installs entries for its object accessor functions in an object accessor dispatch table, which is used by the Apple Event Manager to map requests for Apple event objects or their properties to the appropriate object accessor functions. After being called by AEResolve, an object accessor function should return a token that identifies (in whatever manner is appropriate for your application) the specified Apple event object or property. An object accessor function also returns a result code that indicates whether it found the Apple event object or property. The token, which is a descriptor record of data type AEDesc, can be of any descriptor type, including descriptor types you define yourself. For an overview of the way AEResolve works with your application’s object accessor functions to locate Apple event objects, see “Resolving Object Specifier Records,” which begins on page 6-4.Each object accessor function provided by your application should either find elements of a specified object class contained in an Apple event object identified by a token of a specified descriptor type, or find properties of an Apple event object identified by a token of a specified descriptor type. To determine which object accessor function to dispatch, the Apple Event Manager uses the object class ID specified in an object specifier record and the descriptor type of the token that identifies the requested object’s container. For object accessor functions that find properties, you should specify the object class ID as the constant cProperty. To install entries in your application’s object accessor dispatch table, use the AEInstallObjectAccessor function. For each object class and property your application supports, you should install entries that specifyn    the object class of the requested Apple event object or propertyn    the descriptor type of the token used to identify the container for the requested Apple event object or propertyn    the address of the object accessor function that finds objects or properties of the specified object class in containers described by tokens of the specified descriptor typen    a reference constantYou provide this information in the first four parameters to the AEInstallObjectAccessor function. The fifth parameter allows you to indicate whether the entry should be added to your application’s object accessor dispatch table or the system object accessor dispatch table.The system object accessor dispatch table is a table in the system heap that contains object accessor functions available to all processes running on the same computer. The object accessor functions in your application’s object accessor dispatch table are available only to your application. If AEResolve cannot find an object accessor function for the Apple event object class in your application’s object accessor dispatch table, it looks in the system object accessor dispatch table. If it doesn’t find an object accessor function there either, it returns the result code errAEAccessorNotFound.  If AEResolve successfully calls the appropriate object accessor function in either the application object accessor dispatch table or the system object accessor dispatch table, the object accessor function returns a token and result code. The AEResolve function uses the token and result code to continue resolving the object specifier record. If, however, the token identifies the final Apple event object or property in the container hierarchy, AEResolve returns the token for the final resolution in the theToken parameter.If the AEResolve function calls an object accessor function in the system object accessor dispatch table, your Apple event handler may not recognize the descriptor type of the token returned by the function. If this happens, your handler should attempt to coerce the token to an appropriate descriptor type. If coercion fails, return the result code errAEUnknownObjectType. When your handler returns this result code, the Apple Event Manager attempts to locate a system Apple event handler that can recognize the token.It is up to you to decide how many object accessor functions you need to write and install for your application. You can install one object accessor function that locates Apple event objects of several different object classes, or you can write separate object accessor functions for certain object classes. Similarly, you may want to use only one descriptor type for all the tokens returned by your object accessor functions, or you may want to use several descriptor types. The sections that follow provide examples of alternative approaches.For more information about object accessor functions, see “Writing Object Accessor Functions,” which begins on page 6-28.Installing Object Accessor Functions That Find Apple Event ObjectsListing 6-1 demonstrates how to add entries to your application’s object accessor dispatch table for the object class cText and three of its element classes: the object classes cWord, cItem, and cChar. In this example, the container for each of these object classes is identified by a token that consists of a descriptor record of descriptor type typeMyText. Listing 6-1    Installing object accessor functions that find elements of different classes for container tokens of the same typemyErr := AEInstallObjectAccessor(cText, typeMyText,                                             @MyFindTextObjectAccessor,                                            0, FALSE);IF myErr <> noErr THEN DoError(myErr);myErr := AEInstallObjectAccessor(cWord, typeMyText,                                             @MyFindWordObjectAccessor,                                            0, FALSE);IF myErr <> noErr THEN DoError(myErr);myErr := AEInstallObjectAccessor(cItem, typeMyText,                                             @MyFindItemObjectAccessor,                                            0, FALSE);IF myErr <> noErr THEN DoError(myErr);myErr := AEInstallObjectAccessor(cChar, typeMyText,                                             @MyFindCharObjectAccessor,                                            0, FALSE);IF myErr <> noErr THEN DoError(myErr);    The first call to AEInstallObjectAccessor in Listing 6-1 adds an entry to the application’s object accessor dispatch table. This entry indicates that the AEResolve function should call the MyFindTextObjectAccessor function when resolving any Apple event object with the cText object class and a container identified by a token of descriptor type typeMyText. The other calls to AEInstallObjectAccessor in Listing 6-1 add entries for Apple event objects of object classes cWord, cItem, and cChar in a container identified by a token of descriptor type typeMyText. For example, because all the entries created by the code in Listing 6-1 specify the descriptor type typeMyText for the token that identifies the container, the AEResolve function calls the MyFindWordObjectAccessor function to locate a requested word regardless of whether the container for the word is a run of text, another word, a paragraph, or an item. The fourth parameter for the AEInstallObjectAccessor function specifies a reference constant passed to your handler by the Apple Event Manager each time AEResolve calls your object accessor function. Your application can use this reference constant for any purpose. If your application doesn’t use the reference constant, you can use 0 as the value, as shown in Listing 6-1. The last parameter for the AEInstallObjectAccessor function is a Boolean value that determines whether the entry is added to the system object accessor dispatch table (TRUE) or to your application’s object accessor dispatch table (FALSE). If you add an object accessor function to the system object accessor dispatch table, the function that you specify must reside in the system heap. If there was already an entry in the system object accessor dispatch table for the same object class and container descriptor type, that entry is replaced unless you chain it to your system handler. You can do this the same way you chain a previously installed system Apple event handler to your own system handler. See the description of AEInstallEventHandler on page 4-62 for details.sWARNINGBefore an application calls a system object accessor function, system software has set up the A5 register for the calling application. For this reason, if you provide a system object accessor function, it should never use A5 global variables or anything that depends on a particular context; otherwise, the application that calls the system object accessor function may crash.sThe code shown in Listing 6-1 installs a separate object accessor function for each object class, even though the code specifies the same descriptor type for tokens that identify the containers for Apple event objects of each class. Most word-processing applications can specify the same object accessor function as well as the same token descriptor type for Apple event objects of these four classes, in which case the code shown in Listing 6-1 can be altered as shown in Listing 6-2.Listing 6-2    Installing one object accessor function that finds elements of different classes for container tokens of one typemyErr := AEInstallObjectAccessor(cText, typeMyText,                                             @MyFindTextObjectAccessor,                                            0, FALSE);IF myErr <> noErr THEN DoError(myErr);myErr := AEInstallObjectAccessor(cWord, typeMyText,                                             @MyFindTextObjectAccessor,                                            0, FALSE);IF myErr <> noErr THEN DoError(myErr);myErr := AEInstallObjectAccessor(cItem, typeMyText,                                             @MyFindTextObjectAccessor,                                            0, FALSE);IF myErr <> noErr THEN DoError(myErr);myErr := AEInstallObjectAccessor(cChar, typeMyText,                                             @MyFindTextObjectAccessor,                                            0, FALSE);IF myErr <> noErr THEN DoError(myErr);In some situations you may want to write different object accessor functions to locate Apple event objects of the same object class in containers identified by tokens of different descriptor types. For example, the code in Listing 6-3 installs two different object accessor functions: one that finds a word in a container identified by a token of type typeMyTextToken, and one that finds a word in a container identified by a token of typeMyGraphicTextToken.Listing 6-3    Installing object accessor functions that find elements of the same class for container tokens of different typesmyErr := AEInstallObjectAccessor(cWord, typeMyTextToken,                                             @MyFindTextObjectAccessor,                                            0, FALSE);IF myErr <> noErr THEN DoError(myErr);myErr := AEInstallObjectAccessor(cWord, typeMyGraphicTextToken,                                             @MyFindGrphcTextObjectAccessor,                                            0, FALSE);IF myErr <> noErr THEN DoError(myErr);Every application must provide one or more object accessor functions that can find Apple event objects in the default container, which is always identified by a token of descriptor type typeNull. Listing 6-4 demonstrates how to add entries to your application’s object accessor dispatch table for the object classes cWindow and cDocument. The container for each of these classes is identified by a token of descriptor type typeNull, which specifies an application’s default container.Listing 6-4    Installing object accessor functions that locate elements of different classes in the default containermyErr := AEInstallObjectAccessor(cWindow, typeNull,                                             @MyFindWindowObjectAccessor,                                            0, FALSE);IF myErr <> noErr THEN DoError(myErr);myErr := AEInstallObjectAccessor(cDocument, typeNull,                                             @MyFindDocumentObjectAccessor,                                            0, FALSE);IF myErr <> noErr THEN DoError(myErr);For any entry in your object accessor dispatch table, you can specify a wildcard value for the object class, for the descriptor type of the token used to identify the container, or for both. You specify a wildcard by supplying the typeWildCard constant when installing an entry into the object accessor dispatch table. A wildcard value matches all possible values.   If an object accessor dispatch table contains one entry for a specific object class and a specific token descriptor type, and another entry that is identical except that it specifies a wildcard value for either the object class or the token descriptor type, the Apple Event Manager dispatches the more specific entry. For example, if an object accessor dispatch table includes one entry that specifies the object class as cWord and the token descriptor type as typeMyTextToken, and another entry that specifies the object class as cWord and the token descriptor type as typeWildCard, the Apple Event Manager dispatches the object accessor function associated with the entry that specifies typeMyTextToken.If you specify typeWildCard as the first parameter and typeMyToken as the second parameter for the AEInstallObjectAccessor function and no other entry in the dispatch table matches more exactly, the Apple Event Manager calls the object accessor function that you specify in the third parameter when resolving Apple event objects of any object class in containers identified by tokens of the typeMyToken descriptor type.If you specify cText as the first parameter and typeWildCard as the second parameter for the AEInstallObjectAccessor function and no other entry in the dispatch table matches more exactly, the Apple Event Manager calls the object accessor function that you specify in the third parameter when resolving Apple event objects of the object class cText in containers identified by tokens of any descriptor type. If you specify typeWildCard for both the first and second parameters of the AEInstallObjectAccessor function and no other entry in the dispatch table matches more exactly, the Apple Event Manager calls the object accessor function that you specify in the third parameter when resolving Apple event objects of any object class in containers identified by tokens of any descriptor type. Once the Apple Event Manager finds a matching entry, whether exact or involving type typeWildCard, that is the only object accessor function it calls for that object class and token descriptor type. If that function fails, the Apple Event Manager won’t look for another matching entry in the same table.Installing Object Accessor Functions That Find PropertiesThe Apple event object to which a property belongs is that property’s container. You should add entries to your application’s object accessor dispatch table that specify object accessor functions for finding properties in containers identified by tokens of various descriptor types. Object specifier records do not specify a property’s specific object class; instead, they specify the constant cProperty as the class ID for any property. Similarly, you should specify the constant cProperty as the object class for an object accessor function that can find any property of a container identified by a token of a given descriptor type. If you need to install different object accessor routines for finding properties of Apple event objects that belong to different object classes, you must use different descriptor types for the tokens that represent those Apple event objects. For example, to specify an object accessor function that locates properties of Apple event objects identified by tokens of descriptor type typeMyToken, you can add a single entry to the object accessor dispatch table:myErr := AEInstallObjectAccessor(cProperty, typeMyToken,                                            @MyFindPropertyObjectAccessor,                                            0, FALSE);IF myErr <> noErr THEN DoError(myErr);The code in this example adds an object accessor function to the application’s object accessor dispatch table that can find any property of any container identified by a token of descriptor type typeMyToken. If the second parameter were specified as typeWildCard, the MyFindPropertyObjectAccessor function would have to be capable of finding any property of any Apple event object in your application except for those found by handlers with more specific entries in the object accessor dispatch table. Writing Object Accessor FunctionsIf the direct parameter for an Apple event consists of an object specifier record, your handler for the event should call the AEResolve function to resolve the object specifier record: that is, to find the Apple event objects or properties it describe. The AEResolve function resolves object specifier records with the help of object accessor functions provided by your application. For an overview of the way AEResolve works with your application’s object accessor functions to locate Apple event objects, see “Resolving Object Specifier Records,” which begins on page 6-4. This section describes how to write object accessor functions. You need to read this section if your application supports the Core suite or any of the functional-area suites in the Apple Event Registry: Standard Suites.Your application should provide object accessor functions that can find Apple event objects and their properties for all object classes supported by your application, including their corresponding properties and element classes. Because the Apple Event Manager dispatches object accessor functions according to the class ID of the requested Apple event object and the descriptor type of the token that identifies its container, you have a great deal of flexibility in deciding what object accessor functions you need to write for your application. The installation and dispatching of object accessor functions are described in “Installing Entries in the Object Accessor Dispatch Tables,” which begins on page 6-21.For example, if your application is a word processor, one object accessor function will probably work equally well for Apple event objects of object classes cParagraph, cItem, and cWord located in containers identified by tokens of descriptor type myTextToken. If you use a single descriptor type for tokens that identify any containers in which objects of these three object classes can be found, you can dispatch requests for all such elements to the same object accessor function. However, the same word processor might use one descriptor type for tokens identifying containers of class cCell and another descriptor type for tokens identifying containers of class cColumn—in which case it would need an object accessor function for each descriptor type.For each object class that your application supports, your application should also provide one object accessor function that can find all the properties of that object class, or one object accessor function that can find all the properties of several object classes.Here’s the declaration for a sample object accessor function:FUNCTION MyObjectAccessor (desiredClass: DescType;                                     containerToken: AEDesc;                                     containerClass: DescType;                                    keyForm: DescType; keyData: AEDesc;                                    VAR theToken: AEDesc;                                     theRefCon: LongInt): OSErr;The AEResolve function passes the following information to your object accessor function: the object class ID of the requested Apple event objects, the object class of their container, a token that identifies the specific container in which to look for them, the key form and key data that specify how to locate them, and the reference constant associated with the object accessor function. Your object accessor function uses this information to locate the requested objects. Most applications that resolve object specifier records need to support only the key forms formPropertyID, formName, formUniqueID, formAbsolutePosition, formRelativePosition, and formRange explicitly. You do not need to support these key forms for all object classes; for example, words usually do not have names, so most applications should return errAEEventNotHandled if they receive a request for a word by name. If your application provides an object-counting function and an object-comparison function in addition to the appropriate object accessor functions, the Apple Event Manager can handle formTest automatically.The Apple Event Manager uses the key form formWhose internally to optimize resolution of object specifier records that specify formTest. Only applications that translate tests into their own query languages need to support formWhose explicitly. “Handling Whose Tests,” which begins on page 6-41, describes formWhose in detail.If your object accessor function successfully locates the requested Apple event objects, your application should return the noErr result code and a token that identifies them. The token can be of any descriptor type, as long as it is a descriptor record. For example, to identify a file, your application might use a descriptor record of descriptor type typeAlias or typeFSS. To identify an open document, your application might define its own descriptor type, such as typeMyDocToken, for a descriptor record whose data handle refers to a pointer to a document record. For more information about tokens, see “Defining Tokens” on page 6-39. IMPORTANTObject accessor functions must not have side effects that change the number or order of elements in a container while an object specifier record is being resolved. If the number of elements in a container is changed during the resolution of an object specifier record, the Apple Event Manager may not be able to locate all the elements.sWriting Object Accessor Functions That Find Apple Event ObjectsThe first three listings in this section demonstrate how to write three object accessor functions that might be called in the following situation: An application receives a Get Data event with a direct parameter that consists of an object specifier record for the first word in the third paragraph of a document. The application’s handler for the Get Data event calls the AEResolve function to resolve the object specifier record. The AEResolve function first calls the application’s object accessor function for objects of class cDocument in containers identified by a token of descriptor type typeNull. The AEResolve function passes these values to the MyFindDocumentObjectAccessor function shown in Listing 6-5: in the desiredClass parameter, the constant cDocument; in the containerToken parameter, a descriptor record of descriptor type typeNull with a data handle whose value is NIL; in the containerClass parameter, the constant typeNull; in the keyForm parameter, the constant formName; in the keyData parameter, a descriptor record of descriptor type typeText whose data consists of the string "MyDoc"; and the reference constant specified in the application’s object accessor dispatch table.Listing 6-5    An object accessor function that locates Apple event objects of object class cDocumentFUNCTION MyFindDocumentObjectAccessor                                         (desiredClass: DescType;                                          containerToken: AEDesc;                                          containerClass: DescType;                                         keyForm: DescType; keyData: AEDesc;                                         VAR token: AEDesc;                                          theRefCon: LongInt): OSErr;VAR    docName:                        Str255;    actSize:                        Size;    foundDoc:                        Boolean;    foundDocRecPtr:                        MyDocumentRecordPtr;BEGIN    IF keyform = formName THEN    BEGIN        {get the name of the document from the key data}        MyGetStringFromDesc(keyData, docName, actSize);        {look for a document with the given name by }        { searching all document records}        MySearchDocRecs(docName, foundDocRecPtr, foundDoc);        IF NOT foundDoc THEN            MyFindDocumentObjectAccessor := kObjectNotFound        ELSE     {create token that identifies the document}            MyFindDocumentObjectAccessor :=                     AECreateDesc(typeMyDocToken, @foundDocRecPtr,                                        SizeOf(foundDocRecPtr), token);    END    {handle the other key forms you support}    ELSE        MyFindDocumentObjectAccessor := kKeyFormNotSupported;END;The MyFindDocumentObjectAccessor function uses the information in the keyForm and keyData parameters to find the specified document. If it finds the Apple event object, MyFindDocumentObjectAccessor returns a token of descriptor type typeMyDocToken to AEResolve. The data handle for this token refers to a pointer to a document record (see Figure 6-5 on page 6-39). The MyFindDocumentObjectAccessor function returns this token and the noErr result code to the AEResolve function.In the Get Data example, the token returned to AEResolve by the MyFindDocumentObjectAccessor function identifies the document “MyDoc.” The AEResolve function then calls the application’s object accessor function for objects of class cParagraph in containers identified by a token of descriptor type typeMyDocToken. In this case, AEResolve passes these values to the MyFindParaObjectAccessor function shown in Listing 6-6: in the desiredClass parameter, the constant cParagraph; in the containerToken parameter, the token returned by the MyFindDocumentObjectAccessor function; in the containerClass parameter, the constant cDocument; in the keyForm parameter, the constant formAbsolutePosition; in the keyData parameter, a descriptor record with the typeLongInteger descriptor type and data that consists of the value 3 (indicating the third paragraph); and the reference constant specified in the application’s object accessor dispatch table.Listing 6-6    An object accessor function that locates Apple event objects of object class cParagraphFUNCTION MyFindParaObjectAccessor (desiredClass: DescType;                                                 containerToken:     AEDesc;                                                 containerClass: DescType;                                                keyForm: DescType;                                                 keyData: AEDesc;                                                 VAR token: AEDesc;                                                 theRefCon: LongInt): OSErr;VAR    index:                        LongInt;    {MyFoundTextRecord is an application-defined data type }     { consisting of three fields: start, ending, and docPtr}     foundParaRec:                        MyFoundTextRecord;    foundParaStart:                        LongInt;    foundParaEnd:                        LongInt;    foundDocRecPtr:                        MyDocumentRecordPtr;    success:                        Boolean;BEGIN    IF keyForm = formAbsolutePosition THEN    BEGIN        {get the index of the paragraph from the key data}        MyGetIndexFromDesc(keyData, index);        {get the desired paragraph by index}        success := MyGetPara(index, containerToken, foundParaStart,                                     foundParaEnd, foundDocRecPtr);        IF NOT success THEN            MyFindParaObjectAccessor := kObjectNotFound        ELSE     {create token that identifies the paragraph}        BEGIN            foundParaRec.start := foundParaStart;            foundParaRec.ending := foundParaEnd;            foundParaRec.docPtr := foundDocRecPtr;            MyFindParaObjectAccessor :=                     AECreateDesc(typeMyTextToken, @foundParaRec,                                        SizeOf(foundParaRec), token);        END;    END        {handle the other key forms you support}    ELSE         MyFindParaObjectAccessor := kKeyFormNotSupported;END;The MyFindParaObjectAccessor function uses another application-defined function, MyGetPara, to search the data structures associated with the document and find the desired paragraph. If it finds the paragraph, MyGetPara returns a value that identifies the beginning of the paragraph, a value that identifies the end of the paragraph, and a pointer to the document (which MyGetPara gets from the containerToken parameter). The MyFindParaObjectAccessor function returns an application-defined token that contains this information. This token is of descriptor type typeMyTextToken; it describes a range of characters that can be used to identify any range of text, including a paragraph or a word. The MyFindParaObjectAccessor function returns this token and the noErr result code to the AEResolve function. In the Get Data example, the token returned to AEResolve by the MyFindParaObjectAccessor function identifies the third paragraph in the document “MyDoc.” The AEResolve function then calls the application’s object accessor function for objects of class cWord in containers identified by a token of descriptor type typeMyTextToken. In this case, the AEResolve function passes these values to the MyFindWordObjectAccessor function shown in Listing 6-7: in the desiredClass parameter, the constant cWord; in the containerToken parameter, the token returned by the MyFindParaObjectAccessor function (a token of descriptor type typeMyTextToken that identifies a paragraph); in the containerClass parameter, the constant cParagraph; in the keyForm parameter, the constant formAbsolutePosition; in the keyData parameter, a descriptor record with the typeLongInteger descriptor type and data that consists of the value 1 (indicating the first word); and the reference constant specified in the application’s object accessor dispatch table.The MyFindWordObjectAccessor function uses another application-defined function, MyGetWord, to search the paragraph to find the desired word. If it finds the word, MyGetWord returns a value that identifies the beginning of the word, a value that identifies the end of the word, and a pointer to the document (which MyGetWord gets from the containerToken parameter). The MyFindWordObjectAccessor function returns a token that contains this information. This token is also of descriptor type typeMyTextToken; in this case, the token identifies a specific word. The MyFindWordObjectAccessor function returns this token and the noErr result code to the AEResolve function, which in turn returns the token to the Get Data event handler that originally called AEResolve. Listing 6-7    An object accessor function that locates Apple event objects of object class cWordFUNCTION MyFindWordObjectAccessor                                         (desiredClass: DescType;                                          containerToken: AEDesc;                                          containerClass: DescType;                                         keyForm: DescType; keyData: AEDesc;                                         VAR token: AEDesc;                                          theRefCon: LongInt): OSErr;VAR    index:                        LongInt;    foundWordRec:                        MyFoundTextRecord;    foundWordStart:                        LongInt;    foundWordEnd:                        LongInt;    foundDocRecPtr:                        MyDocumentRecPtr;    success:                        Boolean;BEGIN    IF keyForm = formAbsolutePosition THEN    BEGIN        {get the index of the word from the key data}        MyGetIndexFromDesc(keyData, index);        {get the desired word by index}        success := MyGetWord(index, containerToken, foundWordStart,                                     foundWordEnd, foundDocRecPtr);        IF NOT success THEN            MyFindWordObjectAccessor := kObjectNotFound        ELSE     {create token that identifies the paragraph}        BEGIN            foundWordRec.start := foundWordStart;            foundWordRec.ending := foundWordEnd;            foundWordRec.docPtr := foundDocRecPtr;            MyFindWordObjectAccessor :=                     AECreateDesc(typeMyTextToken, @foundWordRec,                                        SizeOf(foundWordRec), token);        END;    END    {handle the other key forms you support}    ELSE         MyFindWordObjectAccessor := kKeyFormNotSupported;END;Listing 6-5 on page 6-30 shows an object accessor function that locates a document in the default container. Every application must provide one or more object accessor functions that can find Apple event objects in the default container, which is always identified by a descriptor record of descriptor type typeNull. Listing 6-8 provides another example of an object accessor function that locates an Apple event object in the default container. If the MyFindWindowObjectAccessor function shown in Listing 6-8 were installed in an application’s object accessor dispatch table, the AEResolve function would call it as necessary to locate an object of class cWindow in a container identified by a token of descriptor type typeNull.Listing 6-8    An object accessor function that locates Apple event objects of object class cWindowFUNCTION MyFindWindowObjectAccessor (desiredClass: DescType;                                                  containerToken: AEDesc;                                                  containerClass: DescType;                                                 keyForm: DescType;                                                  keyData: AEDesc;                                                 VAR token: AEDesc;                                                  theRefCon: LongInt): OSErr;VAR    windowName:                    Str255;    actSize:                    Size;    windTitle:                    Str255;    window:                    WindowPtr;    index, iLoop:                    Integer;    found:                    Boolean;BEGIN    IF keyForm = formName THEN    BEGIN        {get the name of the window to find from the keyData }        { parameter. MyGetStringFromDesc gets data out of an }        { AEDesc and returns a string and the string's size}        MyGetStringFromDesc(keyData, windowName, actSize);        {look for a window with the given name}        window := FrontWindow;        found := FALSE;        WHILE ((window <> NIL) AND (found = FALSE)) DO         BEGIN            GetWTitle(window, windTitle);            found := EqualString(windTitle, windowName, FALSE, TRUE);             IF NOT found THEN                window := WindowPtr(WindowPeek(window)^.nextWindow);        END;             {of while}    END {of formName}    ELSE    IF keyForm = formAbsolutePosition THEN        {find the window given an index in key data}            BEGIN            {get the index from the key data}                                MyGetIndexFromDesc(keyData, index);            found := FALSE;            iLoop := 0;            window := FrontWindow;            WHILE (window <> NIL) AND (found <> TRUE) DO            BEGIN                iLoop := iLoop +1;                IF iLoop = index THEN                    found := TRUE                ELSE                window := WindowPtr(WindowPeek(window)^.nextWindow);            END; {of while}        END     {of formAbsolutePosition}    {handle the other key forms you support}    ELSE    BEGIN        MyFindWindowObjectAccessor := kKeyFormNotSupported;        Exit(MyFindWindowObjectAccessor);    END;    IF window = NIL THEN        MyFindWindowObjectAccessor := kObjectNotFound    ELSE     {create token that identifies the window}        MyFindWindowObjectAccessor :=                     AECreateDesc(typeMyWindow, @window,                                         SizeOf(window), token);END;The keyForm parameter of the MyFindWindowObjectAccessor function describes how the function should interpret the keyData parameter. If the key form is formName, then the key data contains the name of the window to locate. If the key form is formAbsolutePosition, the key data contains the position of the window to locate in the window list; for example, a value of 1 identifies the frontmost window.The MyFindWindowObjectAccessor function supports only the formName and formAbsolutePosition key forms. Your object accessor functions should support all key forms that make sense for the kinds of objects the functions can locate.For the formName keyword, the MyFindWindowObjectAccessor function starts with the frontmost window and compares the window’s title to the name specified by the keyData parameter. It continues this search until it reaches either the end of the window list or finds a match. If the MyFindWindowObjectAccessor function finds a match, it uses the AECreateDesc function to create a descriptor record for the token, specifying the application-defined typeMyWindow descriptor type and the data for this descriptor type as a window pointer. The MyFindWindowObjectAccessor function then sets its function result appropriately, and the AEResolve function either returns this function result and token, or uses the returned token to request the next Apple event object in the container hierarchy, such as a document in the window. Writing Object Accessor Functions That Find PropertiesThe Apple event object to which a property belongs is that property’s container. Your application should provide an object accessor function for finding properties in containers identified by tokens of various descriptor types. Your application does not need to be given a property’s specific object class in order to find that property; instead, you can specify the object class ID for any property with the constant cProperty. Thus, you can write a single object accessor function that can find any property of an object identified by a token of a given descriptor type. To install such an object accessor function, you can add a single entry to the object accessor dispatch table that specifies the desired object class as cProperty for a given token descriptor type. For example, Listing 6-9 shows an object accessor function that identifies any property of a window.Listing 6-9    An object accessor function that identifies any property of a windowFUNCTION MyFindPropertyOfWindowObjectAccessor                                         (desiredClass: DescType;                                         containerToken:     AEDesc;                                         containerClass: DescType;                                        keyForm: DescType; keyData: AEDesc;                                        VAR token: AEDesc;                                         theRefCon: LongInt): OSErr;VAR    theProperty: DescType;BEGIN    MyFindPropertyOfWindowObjectAccessor := noErr;    MyGetPropFromKeyData(keyData, theProperty);    IF keyForm = formPropertyID THEN    BEGIN        IF theProperty = pName THEN            {create token that identifies name property of the }            { window}            MyCreateToken(typeMyWindowProp, containerToken, pName,                                 token)        ELSE        IF theProperty = pBounds THEN            {create token that identifies bounds property of the }            { window}            MyCreateToken(typeMyWindowProp, containerToken, pBounds,                                 token)        {create tokens for other properties as appropriate}        ELSE            MyFindPropertyOfWindowObjectAccessor :=                                                         kErrorPropNotFound;    END    ELSE        MyFindPropertyOfWindowObjectAccessor :=                                                         kKeyFormNotSupported;END; The MyFindPropertyOfWindowObjectAccessor function takes a token that identifies a window and creates a token that identifies the requested property of that window. See Figure 6-6 on page 6-40 for an illustration of the logical organization of a token of descriptor type typeMyWindowProp.This simplified example merely translates information about the requested property and the window to which it belongs into the form of a token of type typeMyWindowProp. This token can then be used by Apple event handlers to identify the corresponding window and its property, so that a handler can either retrieve the value of the property (for example, a Get Data handler) or change the value of the property (for example, a Set Data handler). Like other tokens, a token that identifies a property should always contain a reference to the corresponding property and the object to which it belongs—not a copy of the data for that object’s property. Defining TokensIt is up to you to decide how many token descriptor types you need to define for your application. In many cases you may be able to define one token that can identify Apple event objects of several different object classes, such as a token of type typeMyTextToken that identifies Apple event objects of object classes cText, cWord, cItem, and cChar. In other cases you may need to define specific token descriptor types for specific object classes.For example, the MyFindDocumentObjectAccessor routine shown in Listing 6-5 on page 6-30 returns a token of descriptor type typeMyDocToken, which identifies a document record.CONST                                             {application-defined token}    typeMyDocToken                            = 'docr';             {identifies a document record}Figure 6-5 shows the logical arrangement of a descriptor record of descriptor type typeMyDocToken whose data is specified by a pointer to a document record.Figure 6-5    Descriptor record for an application-defined token that identifies a documentThe MyFindPropertyOfWindowObjectAccessor routine shown in Listing 6-9 returns a token of descriptor type typeMyWindowProp for every property that it can locate.CONST                                             {application-defined token}    typeMyWindowProp                            = 'wprp';             {a window pointer and a }                                             { property ID}Figure 6-6 shows the logical arrangement of a descriptor record of descriptor type typeMyWindowProp that identifies the bounds property of a window. Its data consists of a window pointer and the constant pBounds. The application can use this token either to return or to change the window’s bounds setting, depending on the Apple event that specified the property. If the token specified pName instead, the application could use it either to return the window’s name as a string or to change the window’s name.Figure 6-6    Descriptor record for an application-defined token that identifies the pbounds property of a windowA token’s data should always contain a reference to the corresponding Apple event objects—not a copy of the data for those objects. This allows the same token to be used for both reading and writing tokens.It’s often possible to use the same token type for objects of several object classes, or for both an object of a given class and one of its properties. A token’s data is private to your application and can be organized in any way that is convenient.When an object accessor function that supports key form formRange locates a range of Apple event objects, it should normally return a descriptor list (AEDescList) of tokens for the individual objects. A typical exception is an object accessor function that returns a range of objects of class cText, which should return a single token representing the entire range. For example, an object accessor function that finds “all the characters from char 1 to char 1024” should return a token that consists of a list of 1024 objects, each of class cChar, whereas an object specifier function that finds “all the text from char 1 to char 1024” should return a single token for a single item of class cText that is 1024 characters long. A token is valid only until the Apple Event Manager has located the requested element in the container the token represents and returned another token for the element. The Apple Event Manager disposes of intermediate tokens after it finishes resolving an object specifier record, but one token is always left over—the token that identifies the specified Apple event object or objects. Your application should dispose of this final token by calling the AEDisposeToken function, which in turn calls your application’s token disposal function (if one exists), an optional object callback function that disposes of a token. See page 6-99 for the declaration of a token disposal function. If your application does not provide a token disposal function, the Apple Event Manager uses the AEDisposeDesc function to dispose of tokens. This function does the job as long as disposing of tokens involves nothing more than simply disposing of a descriptor record. Otherwise, you need to provide a custom token disposal function. For example, suppose the data field of a token descriptor record contains a handle to a block that in turn contains references to memory for the Apple event object referred to by the token. In this case, the application should provide a token disposal function that performs the tasks required to dispose of the token and any associated structures.  Handling Whose TestsIf your application provides an object-counting function and an object-comparison function in addition to the appropriate object accessor functions, the Apple Event Manager can resolve object specifier records that specify formTest without any other assistance from your application. The Apple Event Manager translates object specifier records of key form formTest into object specifier records of key form formWhose. This involves collapsing the key form and key data from two object specifier records in a container hierarchy into one object specifier record with the key form formWhose. Some applications may find it more efficient to translate whose tests into their own query languages rather than letting the Apple Event Manager handle the tests. This is useful only for applications that can make use of a test combined with either an absolute position or a range to locate objects. If you want the Apple Event Manager to let your application handle whose tests, set the kAEIDoWhose flag in the callbackFlags parameter of the AEResolve function. If for any reason one of your application’s object accessor functions chooses not to handle a particular whose descriptor record, it should return errAEEventNotHandled as the result code, and the Apple Event Manager will try again using the original object specifier records, just as if the kAEIDoWhose flag were not set.The key data for formWhose is specified by a whose descriptor record, which is a coerced AE record of descriptor type typeWhoseDescriptor. The data for a whose descriptor record consists of the two keyword-specified descriptor records shown in Table 6-5.   Table 6-5    Keyword-specified descriptor records for typeWhoseDescriptorKeyword    Descriptor type    Data    keyAEIndex    typeLongInteger     Offset of requested element in group of elements that pass a test          typeAbsoluteOrdinal    kAEFirstkAEMiddlekAELastkAEAnykAEAll        typeWhoseRange    Whose range descriptor record    keyAETest    typeCompDescriptor    Comparison descriptor record         typeLogicalDescriptor    Logical descriptor record    A whose descriptor record is never created directly by an application. The Apple Event Manager creates a whose descriptor record whenever an object specifier record of key form formTest is used to describe the container for elements described by an object specifier record of key form formAbsolutePosition or formRange, with some exceptions as noted in this section. For example, Figure 6-3 on page 6-18 shows four object specifier records that show the container hierarchy for the first row that meets a test in the table “MyAddresses” of the database “SurfDB.” The top two object specifier records in that figure use the key forms formAbsolutePosition and formTest to describe elements in a container. When it receives these two object specifier records, the Apple Event Manager collapses them into one, as shown in Figure 6-7. It then calls the application’s object-counting function to find out how many objects of class cRow the table contains and the object-comparison function to test the rows in the table until it finds the first row that passes the test. Figure 6-7    A container hierarchy created by the Apple Event Manager using a whose descriptor recordIf the elements to be tested are described by an object specifier record of key form formAbsolutePosition or formRange but are not of the same object class as their container, the Apple Event Manager cannot collapse the existing object specifier records into a whose descriptor record. Instead, the Apple Event Manager creates a whose descriptor record as if a third object specifier record of key form formAbsolutePosition and kAEAll were inserted between the object specifier record for the container and that for the tested elements. For example, the Apple Event Manager would interpret a request for “character 1 of word whose first letter = ‘a’” as “character 1 of every word whose first letter = ‘a’”.When an object specifier record of key form formTest is used to describe the container for elements described by an object specifier record of key form formRange, the Apple Event Manager will, under certain conditions, coerce the corresponding range descriptor record to a whose range descriptor record, which is a coerced AE record of typeWhoseRange. The data for a whose range descriptor record consists of two keyword-specified descriptor records with the descriptor types and data shown in Table 6-6. Table 6-6    Keyword-specified descriptor records for typeWhoseRangeKeyword    Descriptor type    Data    keyAEWhoseRangeStart    typeLongInteger     Offset of beginning of range        typeAbsoluteOrdinal    kAEFirstkAEMiddlekAELastkAEAnykAEAll    keyAEWhoseRangeStop    typeLongInteger     Offset of end of range        typeAbsoluteOrdinal    kAEFirstkAEMiddlekAELastkAEAnykAEAll     A whose range descriptor record describes the absolute position of the boundary elements, within the set of all elements that pass a test, that identify the beginning and end of the desired range.The Apple Event Manager coerces a range descriptor record to a whose range descriptor record if the specified container and its elements are of the same class, if the container for the specified range of elements is a group of Apple event objects that pass a test, and if the boundary objects in the original range descriptor record meet these conditions: n    Both boundary objects are of the same object class as the Apple event objects in the range they specify.n    The object specifier record for each boundary object specifies its container with a descriptor record of descriptor type typeCurrentContainer.n    The object specifier record for each boundary object specifies a key form of formAbsolutePosition. If these conditions are not met, the Apple Event Manager doesn’t create a whose range descriptor record. Instead, as described earlier in this section, the Apple Event Manager creates a whose descriptor record as if the original request specified every element that passed the test.If your application sets the kAEIDoWhose flag in the callbackFlags parameter of AEResolve, you should provide object accessor functions that can handle formWhose. These functions should coerce the whose descriptor record specified as key data for an object specifier record to an AE record and extract the data from the AE record by calling the AEGetKeyPtr and AEGetKeyDesc functions. If the keyword-specified descriptor record with the keyword keyAEIndex specifies descriptor type typeWhoseRange, your object accessor function must also coerce that descriptor record to an AE record and extract the data. Your object accessor function should then attempt to locate the requested objects and, if successful, return a token that identifies them.If your application sets the kAEIDoWhose flag and attempts to resolve every whose descriptor record it receives, the Apple Event Manager does not attempt to resolve object specifier records of any key form. The object-counting and object-comparison functions are never called, and your application is solely responsible for determining the formats and types of all tokens.  Writing Object Callback FunctionsIf an Apple event parameter consists of an object specifier record, your handler for the Apple event typically calls AEResolve to begin the process of locating the requested Apple event object or objects. In turn, AEResolve calls object accessor functions and, if necessary, object callback functions provided by your application.Every application that supports Apple event objects should provide object accessor functions that can locate Apple event objects belonging to any of the supported object classes. For an overview of the way AEResolve calls object accessor functions to locate Apple event objects described by object specifier records, see “Resolving Object Specifier Records,” which begins on page 6-4.In addition to object accessor functions, your application can provide up to seven object callback functions:n    An object-counting function counts the number of elements of a specified class in a specified container, so that the Apple Event Manager can determine how many elements it must examine to find the element or elements that pass a test. Your application must provide one object-counting function to handle object specifier records that specify tests. (See “Writing an Object-Counting Function,” which begins on page 6-48.)n    An object-comparison function compares one element either to another element or to a descriptor record and returns either TRUE or FALSE. Your application must provide one object-comparison function to handle object specifier records that specify tests. (See “Writing an Object-Comparison Function” on page 6-50.)n    A token disposal function disposes of a token after your application calls the AEDisposeToken function. If your application doesn’t provide a token disposal function, the Apple Event Manager uses the AEDisposeDesc function instead. Your application must provide a token disposal function if it requires more than a call to AEDisposeDesc to dispose of one of its tokens. This is true, for example, if your application supports marking by modifying its own data structures. (See page 6-99 for the declaration of a token disposal function.)n    An error callback function gives the Apple Event Manager an address to which to write the descriptor record it is currently working with if an error occurs while AEResolve is attempting to resolve an object specifier record. Your application is not required to provide an error callback function. (See page 6-100 for the declaration of an error callback function.)n    Three marking callback functions are used by the Apple Event Manager to get a mark token from your application, to mark specific Apple event objects, and to pare down a group of marked Apple event objects. Your application must provide all three marking functions if it supports marking. (See “Writing Marking Callback Functions” on page 6-53.)To make your object callback functions available to the Apple Event Manager, use the AESetObjectCallbacks function: myErr := AESetObjectCallbacks (@MyCompareObjects,                                         @MyCountObjects, @MyDisposeToken,                                         @MyGetMarkToken, @MyMark,                                          @MyAdjustMarks, @MyGetErrDesc);Each parameter to the AESetObjectCallbacks function consists of either a pointer to the corresponding application-defined function or NIL if no function is provided. The AESetObjectCallbacks function sets object callback functions that are available only to your application. To set system object callback functions, which are available to all applications and processes running on the same computer, use the AEInstallSpecialHandler function as described on page 4-100.To handle object specifier records that specify tests, your application must provide an object-counting function and an object-comparison function. The Apple Event Manager calls your application’s object-counting function to determine the number of Apple event objects in a specified container that need to be tested. The Apple Event Manager calls your application’s object-comparison function when it needs to compare one Apple event object to either another Apple event object or to a value in a descriptor record.If your application does not provide a token disposal function, the Apple Event Manager uses the AEDisposeDesc function to dispose of tokens. This function does the job as long as disposing of tokens involves nothing more than simply disposing of a descriptor record. Otherwise, you need to provide custom token disposal function. For example, suppose the data field of a token descriptor record contains a handle to a block that in turn contains references to storage for the Apple event object referred to by the token. In this case, the application can provide a token disposal function that performs the tasks required to dispose of the token and any associated structures.  Whenever more than one Apple event object passes a test, AEResolve can either return a list of tokens or make use of a target application’s ability to mark its own objects. Sometimes a list of tokens can become unmanageably large. For example, if a Get Data event asks for the names and addresses of all customers with a specified zip code who have purchased a specified product, the object accessor function that locates all the customers with the specified zip code might return a list of many thousands of tokens; the elements identified by those tokens would then have to be tested for the specified product. However, if your application uses some method of marking objects, you can choose simply to mark the requested objects rather than returning a list of tokens. “Writing Marking Callback Functions” on page 6-53 describes how to do this. If your application supports marking by modifying its own data structures, you must provide a token disposal function. When one of your application’s Apple event handlers calls the AEResolve function, the handler should pass a value in the callbackFlags parameter that specifies whether your application supports whose descriptor records or provides marking callback functions. You can add the following constants, as appropriate, to provide a value for the callbackFlags parameter: CONST kAEIDoMinimum                            =    $0000; {does not handle whose tests or }                                            { provide marking callbacks}        kAEIDoWhose                    =    $0001; {supports key form formWhose}        kAEIDoMarking                    =    $0004; {provides marking functions}For example, this code instructs the Apple Event Manager to call any marking functions previously set with the AESetObjectCallbacks function while resolving the object specifier record in the objectSpecifier parameter:VAR    objectSpecifier:    AEDesc;    resultToken:        AEDesc;    myErr:              OSErr;myErr := AEResolve(objectSpecifier, kAEIDoMarking, resultToken); If any of the marking callback functions are not installed, AEResolve returns the error errAEHandlerNotFound.IMPORTANTIf your application doesn’t specify kAEIDoWhose, the Apple Event Manager attempts to resolve all object specifier records of key form formTest. To do so, the Apple Event Manager uses your application’s object-counting and object-comparison functions, and returns a token of type typeAEList.If your application does specify kAEIDoWhose, the Apple Event Manager does not attempt to resolve object specifier records of any key form. In this case, the object-counting and object-comparison functions are never called; your application determines the formats and types of all tokens; and your application must interpret whose descriptor records created by the Apple Event Manager during the resolution of object specifier records. For more information, see “Handling Whose Tests,” which begins on page 6-41.sWriting an Object-Counting FunctionTo handle object specifier records that specify tests, your application should provide an object-counting function (unless it specifies kAEIDoWhose as just described). Your object-counting function should be able to count the number of elements of a given object class in a given container. For example, if your application supports Apple event objects that belong to the object class cText in the Text suite, your application should provide an object-counting function that can count Apple event objects of each element class listed in the definition of cText in the Apple Event Registry: Standard Suites. In this case, your application should provide an object-counting function that can count the number of words, items, or characters in a text object.You specify your object-counting function with the AESetObjectCallbacks function. Whenever it is resolving an object specifier record and it requires a count of the number of elements in a given container, the Apple Event Manager calls your object-counting function.Here’s the declaration for a sample object-counting function:FUNCTION MyCountObjects (desiredClass: DescType;                                  containerClass: DescType;                                 containerToken: AEDesc;                                  VAR result: LongInt): OSErr;The Apple Event Manager passes the following information to your object-counting function: the object class ID of the Apple event objects to count, the object class of their container, and a token identifying their container. (The container class can be useful if you want to use one token type for several object classes.) Your object-counting function uses this information to count the number of Apple event objects of the specified object class in the specified container. After counting the Apple event objects, your application should return the noErr result code and, in the result parameter, the number of Apple event objects counted. Listing 6-10 shows an application-defined function, MyCountObjects, that counts the number of objects for any object class supported by the application. Listing 6-10    An object-counting functionFUNCTION MyCountObjects (desiredClass: DescType; containerClass: DescType;                                  containerToken: AEDesc; VAR result: LongInt): OSErr;VAR    window: WindowPtr;BEGIN    result := 0;    IF desiredClass = cWindow THEN    BEGIN        IF containerClass = typeNull THEN        BEGIN            {count the number of windows}            window := FrontWindow;            WHILE window <> NIL DO                 BEGIN                    result := result + 1;                    window := WindowPtr(WindowPeek(window)^.nextWindow);                END; {of while}        END;         MyCountObjects := noErr;    END {of cWindow}    ELSE        IF desiredClass = cWord THEN            {count the number of words in the container}            MyCountObjects := MyCountWords(containerClass, containerToken,                                                         result)    ELSE        IF desiredClass =     cParagraph THEN            {count the number of paragraphs in the container}            MyCountObjects := MyCountParas(containerClass, containerToken,                                                         result)    ELSE        {this app does not support any other object classes}        MyCountObjects := kObjectClassNotFound;END;  Writing an Object-Comparison FunctionTo handle object specifier records that specify tests, your application should provide an object-comparison function (unless it specifies kAEIDoWhose as described on page 6-48). Your object-comparison function should be able to compare one Apple event object to another Apple event object or to another descriptor record. You specify your object-comparison function with the AESetObjectCallbacks function. Whenever it is resolving object specifier records and needs to compare the value of an Apple event object with another object or with data, the Apple Event Manager calls your object-comparison function.Here’s the declaration for a sample object-comparison function:FUNCTION MyCompareObjects (comparisonOperator: DescType;                                     object: AEDesc;                                    objectOrDescToCompare: AEDesc;                                     VAR result: Boolean): OSErr;The Apple Event Manager passes the following information to your object-comparison function: a comparison operator that specifies how the two objects should be compared, a token for the first Apple event object, and either a token that describes the Apple event object to compare or a descriptor record.It is up to your application to interpret the comparison operators it receives. The meaning of comparison operators differs according to the Apple event objects being compared, and not all comparison operators apply to all object classes. After successfully comparing the Apple event objects, your object-comparison function should return the noErr result code and, in the result parameter, a Boolean value specifying TRUE if the result of the comparison is true and FALSE otherwise. If for any reason your comparison function is unable to compare the specified Apple event objects, it should return the result code errAEEventNotHandled; then the Apple Event Manager will try an alternative method of comparing the Apple event objects, such as calling the equivalent system object-comparison function, if one exists.Your object-comparison function should be able to compare an Apple event object belonging to any object class with another Apple event object. Your function should also be able to compare two Apple event objects with different object classes, if appropriate. For example, an object-comparison function for a word-processing application might be asked to compare the First Name column of a specified row in a table with the first word on a specified page—that is, to compare an Apple event object of object class cColumn with an Apple event object of object class cWord. You must decide what kinds of comparisons make sense for your application.The Apple Event Registry: Standard Suites defines standard comparison operators. Here is a list of the constants that correspond to these comparison operators:CONST     kAEGreaterThan                            = '>   ';    kAEGreaterThanEquals                            = '>=  ';    kAEEquals                            = '=   ';        kAELessThan                            = '<   ';    kAELessThanEquals                            = '<=  ';    kAEBeginsWith                            = 'bgwt';    kAEEndsWith                            = 'ends';     kAEContains                            = 'cont';         The comparison operators always relate the first operand to the second. For example, the constant kAEGreaterThan means that the object-comparison function should determine whether or not the value of the first operand is greater than the value of the second operand. For more information, see page 6-90.Listing 6-11 shows an application-defined function, MyCompareObjects, that compares two Apple event objects of any object class supported by the application. Listing 6-11    Object-comparison function that compares two Apple event objectsFUNCTION MyCompareObjects (comparisonOperator: DescType;                                     theObject: AEDesc;                                    objectOrDescToCompare: AEDesc;                                     VAR result: Boolean): OSErr;BEGIN    result := FALSE;    {compare two objects for equivalence}    IF comparisonOperator =                         kAEEquals THEN        MyCompareObjects := MyCompEquals(theObject,                                                     objectOrDescToCompare,                                                     result)    ELSE        {compare two objects for greater than}        IF comparisonOperator =                         kAEGreaterThan THEN            MyCompareObjects := MyCompGreaterThan(theObject,                                                         objectOrDescToCompare,                                                        result)    ELSE        {compare two objects for less than}        IF comparisonOperator =                         kAELessThan THEN            MyCompareObjects := MyCompLessThan(theObject,                                                         objectOrDescToCompare,                                                        result)    ELSE    {this app does not support any other comparison operators}        MyCompareObjects := errAEEventNotHandled;END;The MyCompareObjects function calls a separate application-defined routine for each comparison operator. In each case, the application-defined routine that actually performs the comparison can compare an Apple event object with either another Apple event object or with a descriptor record’s data. If for any reason the comparison cannot be performed, the MyCompareObjects function returns the result code errAEEventNotHandled.  Writing Marking Callback FunctionsMarking callback functions allow applications such as databases that can mark their own objects to take advantage of that capability when resolving object specifier records. Instead of returning a list of tokens for a group of Apple event objects that pass a test, your application can simply mark the Apple event objects and return a token that identifies how they have been marked. In this way, you can speed the resolution of complex object specifier records and reduce the amount of memory you need to allocate for tokens. The use of marking callback functions is optional and usually makes sense if (a) you can reasonably expect that the tokens created in the process of resolving some object specifier records might not all fit in memory at once or (b) your application already uses a marking mechanism. If you want the Apple Event Manager to use marking callback functions provided by your application, you must add the kAEIDoMarking constant to the value of the callbackFlags parameter for the AEResolve function. If for any reason your application cannot mark a requested set of Apple event objects, it should return errAEEventNotHandled as the result code, and the Apple Event Manager will attempt to continue resolving the object specifier record by some other method, such as using a system marking function, if one exists. If your application supports marking callback functions, it must provide three functions with declarations that match these examples:FUNCTION MyGetMarkToken (containerToken: AEDesc;                                  containerClass: DescType;                                  VAR Result: AEDesc): OSErr;FUNCTION MyMark (theToken: AEDesc; markToken: AEDesc;                       markCount: LongInt): OSErr;FUNCTION MyAdjustMarks (newStart, newStop: LongInt;                                 markToken: AEDesc): OSErr;For more detailed information about these sample declarations, see “Object Callback Functions,” which begins on page 6-96.To resolve a given object specifier record with the aid of the marking callback functions provided by your application, the Apple Event Manager first calls your application’s mark token function (MyGetMarkToken), passing a token that identifies the container of the elements to be marked in the containerToken parameter and the container’s object class in the containerClass parameter. The mark token function returns a mark token. A mark token, like other tokens, can be a descriptor record of any type; however, unlike other tokens, it identifies the way your application marks Apple event objects during the current session while resolving a single test. A mark token does not identify a specific Apple event object; rather, it allows your application to associate a group of objects with a marked set.After it receives the mark token, the Apple Event Manager can call your application’s object-marking function (MyMark) repeatedly to mark specific Apple event objects. The Apple Event Manager passes the following information to your marking function: in the theToken parameter, a token for the object to be marked (obtained from the appropriate object accessor function); in the markToken parameter, the current mark token; and in the markCount parameter, the mark count. The mark count indicates the number of times the Apple Event Manager has called the marking function for the current mark token. Your application should associate the mark count with each Apple event object it marks. When the Apple Event Manager needs to identify either a range of elements or the absolute position of an element in a group of Apple event objects that pass a test, it can use your application’s mark-adjusting function (MyAdjustMarks) to unmark objects that it has previously marked. For example, suppose an object specifier record specifies “any row in the table ‘MyCustomers’ for which the City column is ‘San Francisco.’” The Apple Event Manager first uses the appropriate object accessor routine to locate all the rows in the table for which the City column is “San Francisco” and calls the application’s marking function repeatedly to mark them. It then generates a random number between 1 and the number of rows it found that passed the test and calls the application’s mark-adjusting function to unmark all the rows whose mark count does not match the randomly generated number. If the randomly chosen row has a mark count value of 5, the Apple Event Manager passes the mark-adjusting function 5 in both the newStart parameter and the newStop parameter, and the current mark token in the markToken parameter. The newStart and newStop parameters identify the beginning and end of the new set of marked objects that the mark-adjusting function will create by unmarking those previously marked objects not included in the new set. When the Apple Event Manager calls your mark-adjusting function, your application must dispose of any data structures that it may have created to mark the previously marked objects. The Apple Event Manager calls your mark-adjusting function only once for a given mark token. A mark token is valid until the Apple Event Manager either disposes of it (by calling AEDisposeToken) or returns it as the result of the AEResolve function. If the final result of a call to the AEResolve function is a mark token, the Apple event objects currently marked for that mark token are those specified by the object specifier record passed to AEResolve, and your application can proceed to do whatever the Apple event has requested. Note that your application is responsible for disposing of a final mark token with a call to AEDisposeToken, just as for any other final token.If your application supports marking, it should also provide a token disposal function. When the Apple Event Manager calls AEDisposeToken to dispose of a mark token that is not the final result of a call to AEResolve, the subsequent call to your token disposal function lets you know that you can unmark the Apple event objects marked with that mark token. A call to AEDisposeDesc to dispose of a mark token (which would occur if you did not provide a token disposal function) would leave the objects marked.   Creating Object Specifier RecordsIf your application creates and sends Apple events that require the target application to locate Apple event objects, your application must create object specifier records for those events. This section describes how to use the four keyword-specified descriptor records described in “Descriptor Records Used in Object Specifier Records,” which begins on page 6-8, to specify the object class ID, container, key form, and key data for an object specifier record. Because the internal structure of an object specifier record is nearly identical to the internal structure of an AE record, it is possible to use AECreateList, AEPutPtr, and AEPutKeyDesc to add the four keyword-specified descriptor records to an AE record, then use AECoerceDesc to coerce the AE record to a descriptor record of type typeObjectSpecifier. However, it is usually preferable to use the CreateObjSpecifier function to accomplish the same goal. The CreateObjSpecifier function adds the keyword-specified descriptor records directly to an object specifier record, thus eliminating several steps that are required if you create an AE record first. The instructions that follow make use of CreateObjSpecifier. To specify the class ID for an object specifier record, your application can specify the appropriate class ID value as the desiredClass parameter for the CreateObjSpecifier function, which uses it to create a keyword-specified descriptor record with the keyword keyAEDesiredClass as part of an object specifier record. To specify the container for an object specifier record, your application must create a keyword-specified descriptor record with the keyword keyAEContainer that fully describes the container of the Apple event object. Because this container is usually another Apple event object, the container is usually specified by another object specifier record. To specify the complete container hierarchy of an Apple event object, your application must create a series of nested object specifier records, starting with the object specifier record for the Apple event object whose container is outermost. With the exception of this first object specifier record, each object specifier record specifies another object specifier record in the chain as a container. For example, Figure 6-2 on page 6-10 shows a series of nested object specifier records that specify the first row of a table named “Summary of Sales” in a document named “Sales Report.” The logical organization of the same object specifier records is summarized in Table 6-7.Table 6-7    Nested object specifier records that describe a container hierarchyKeyword    Descriptor type    Data    keyAEDesiredClass    typeType    cRow    keyAEContainer    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cTable    keyAEContainer    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cDocument    keyAEContainer    typeNull    Data handle is NIL    keyAEKeyForm    typeEnumerated    formName    keyAEKeyData    typeChar    "Sales Report"    keyAEKeyForm    typeEnumerated    formName    keyAEKeyData    typeChar    "Summary of Sales"    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    1    NoteThe format used in Table 6-7 and similar tables throughout this chapter does not show the structure of nested object specifier records as they exist within an Apple event. Instead, this format shows what you would obtain after calling AEGetKeyDesc repeatedly to extract the object specifier records from an Apple event record.When you call AEGetKeyDesc to extract a null descriptor record, AEGetKeyDesc returns a descriptor record of type AEDesc with a descriptor type of typeNull and a data handle whose value is 0.uTo specify the default container for an object specifier record (such as the container for the document in Table 6-7), you can use AECreateDesc to create a null descriptor record, which you can then pass in the theContainer parameter of the CreateObjSpecifier function. The CreateObjSpecifier function uses the null descriptor record to create a keyword-specified descriptor record with the keyword keyAEContainer as part of an object specifier record. The object specifier record that specifies the default container is always the first record you create in a series of nested object specifier records that specifies the complete container hierarchy for an Apple event object. Each one in the series uses the previously created object specifier record to specify its container. As with the null descriptor record, you can pass an object specifier record as the second parameter to the CreateObjSpecifier function, which uses it to create a keyword-specified descriptor record with the keyword keyAEContainer.To specify the key form for an object specifier record, your application can specify a key form constant as the third parameter to the CreateObjSpecifier function, which uses it to create a keyword-specified descriptor record with the keyword keyAEKeyForm as part of an object specifier record. The standard key forms for object specifier records are summarized in Table 6-1 on page 6-12.For example, the key form for the object specifier records in Table 6-7 that specify the document and the table is formName. In other words, the key data identifies the document and the table by their names. Similarly, the key form for the object specifier record in Table 6-7 that specifies the first row in the table is formAbsolutePosition. In other words, the key data identifies the position of the row compared to other rows in the same container.To specify the key data for an object specifier record, your application must create a keyword-specified descriptor record with the keyword keyAEKeyData whose data handle refers to the appropriate data for the specified key form. You can use AECreateDesc, CreateCompDescriptor, CreateLogicalDescriptor, and related functions to create the descriptor record, which you can then pass in the fourth parameter of the CreateObjSpecifier function. The CreateObjSpecifier function uses this descriptor record to create a keyword-specified descriptor record with the keyword keyAEKeyData as part of an object specifier record.Creating a Simple Object Specifier RecordThis section shows how to use the CreateObjSpecifier function to create the object specifier record shown in Table 6-7. The CreateObjSpecifier function creates the necessary keyword-specified descriptor records for the class ID, container, key form, and key data and returns the resulting object specifier record as a descriptor record of type typeObjectSpecifier.Listing 6-12 shows how the CreateObjSpecifier function creates an object specifier record from parameters that an application specifies.Listing 6-12    Creating an object specifier record using CreateObjSpecifierVAR    desiredClass:                             DescType;     myObjectContainer:                             AEDesc;     myKeyForm:                             DescType;     myKeyDataDesc:                             AEDesc;     disposeInputs:                             Boolean;     myObjSpecRec:                             AEDesc;    myErr:                            OSErr;desiredClass := cRow;myObjectContainer := MyGetContainer;myKeyForm := formAbsolutePosition;myKeyDataDesc := MyGetKeyData;disposeInputs := TRUE;{create an object specifier record}myErr := CreateObjSpecifier(desiredClass, myObjectContainer,                                         myKeyForm, myKeyDataDesc,                                         disposeInputs, myObjSpecRec);The code shown in Listing 6-12 demonstrates how an application might use the CreateObjSpecifier function to create four keyword-specified descriptor records as part of a descriptor record of type typeObjectSpecifier. The CreateObjSpecifier function returns a result code of noErr if the object specifier record was successfully created. The object specifier record returned in the myObjSpecRec parameter describes an Apple event object of the class specified by the desiredClass parameter, located in the container specified by the myObjectContainer parameter, with the key form specified by the myKeyForm parameter and key data specified by the myKeyDataDesc parameter. You can specify TRUE in the disposeInputs parameter if you want the CreateObjSpecifier function to dispose of the descriptor records you created for the myObjectContainer and myKeyDataDesc parameters. If you specify FALSE, then your application is responsible for disposing of these leftover descriptor records. Listing 6-13 shows an application-defined function that uses CreateObjSpecifier to create an object specifier record for the first row in the table named “Summary of Sales” in the document “Sales Report,” then uses the object specifier record returned in the myObjSpecRec parameter as the direct parameter for a Get Data event. Listing 6-13    Using CreateObjSpecifier in an application-defined functionFUNCTION MyRequestRowFromTarget (targetAddress: AEAddressDesc;                                             VAR reply: AppleEvent): OSErr;VAR    desiredClass:                                 DescType;    myKeyForm:                                DescType;    myObjectContainer:                                AEDesc;    myObjSpecRec:                                 AEDesc;    myKeyDataDesc:                                AEDesc;    keyData:                                LongInt;    theAppleEvent:                                AppleEvent;    myErr:                                OSErr;    ignoreErr:                                OSErr;BEGIN    {initialize (set to null descriptor records) the two descriptor records }     { that must eventually be disposed of}    MyInit2DescRecs(myObjSpecRec, theAppleEvent);    desiredClass := cRow;                                                        {specify the class}                                                            {specify container for the row}    myErr := MyCreateTableContainer(myObjectContainer,                                                 'Summary of Sales', 'Sales Report');    IF myErr = noErr THEN     BEGIN        myKeyForm := formAbsolutePosition;                                                    {specify the key form}        keyData := 1;                                                    {specify the key data for row}        myErr := AECreateDesc(typeLongInteger, @keyData, Sizeof(keyData),                                         myKeyDataDesc);        IF myErr = noErr THEN            {create the object specifier record}            myErr := CreateObjSpecifier(desiredClass, myObjectContainer,                                                     myKeyForm, myKeyDataDesc,                                                     TRUE, myObjSpecRec);        IF myErr = noErr THEN            {myObjSpecRec now describes an Apple event object, and will become }             { direct parameter of a Get Data event; first create Get Data event}            myErr := AECreateAppleEvent(kAECoreSuite, kAEGetData, targetAddress,                                                     kAutoGenerateReturnID,                                                     kAnyTransactionID, theAppleEvent);        IF myErr = noErr THEN            {add myObjSpecRec as the direct parameter of the Get Data event}            myErr := AEPutParamDesc(theAppleEvent, keyDirectObject,                                            myObjSpecRec);        IF myErr = noErr THEN            myErr := AESend(theAppleEvent, reply, kAEWaitReply +                                  kAENeverInteract, kAENormalPriority, 120,                                  @MyIdleFunction, NIL);    END;    ignoreErr := AEDisposeDesc(myObjSpecRec);    ignoreErr := AEDisposeDesc(theAppleEvent);    MyRequestRowFromTarget := myErr;END;The MyRequestRowFromTarget function shown in Listing 6-13 specifies the class ID as cRow, indicating that the desired Apple event object is a row in a table. It uses the application-defined function MyCreateTableContainer to create an object specifier record for the table that contains the row, passing “Summary of Sales” and “Sales Report” as the second and third parameters to identify the name of the table and the name of the document that contains the table. (The next section, “Specifying the Container Hierarchy,” explains how to construct the MyCreateTableContainer function.) It then specifies the key form as the constant formAbsolutePosition, which indicates that the key data specifies the position of the row within its container; sets the keyData variable to 1, indicating the first row, and uses AECreateDesc to create a descriptor record for the key data; and uses CreateObjSpecifier to create the object specifier record that describes the desired word.The desired row is now fully described by the myObjSpecRec variable, which contains a descriptor record of type typeObjectSpecifier that contains the three nested object specifier records shown in Table 6-7 on page 6-56. After using AECreateAppleEvent to create a Get Data event, the MyRequestRowFromTarget function uses the AEPutParamDesc function to add the myObjSpecRec variable to the Get Data event as a direct parameter, then uses AESend to send the Get Data event.Note that the MyRequestRowFromTarget function begins by using the application-defined function MyInit2DescRecs to set myObjSpecRec and theAppleEvent to null descriptor records. These two functions must be disposed of whether the function is successful or not. By setting them to null descriptor records, the function can dispose of them at the end regardless of where an error may have occurred.Specifying the Container HierarchyBecause the container for an object specifier record usually consists of a chain of other object specifier records that specify the container hierarchy, your application must create all the object specifier records in the chain, starting with the record for the outermost container. Listing 6-14 and Listing 6-15 demonstrate how to use the CreateObjSpecifier function to create the first two object specifier records in such a chain: the records for a document and a table. Listing 6-14    Specifying a document containerFUNCTION MyCreateDocContainer (VAR myDocContainer: AEDesc;                                         docName: Str255): OSErr;VAR    myDocDescRec:                    AEDesc;    nullDescRec:                     AEDesc;    myErr:                    OSErr;BEGIN    {create a descriptor record for the name of the document}    myErr := AECreateDesc(typeChar, @docName[1],                                      Length(docName), myDocDescRec);    IF myErr = noErr THEN        {create a null descriptor record}        myErr := AECreateDesc(typeNull, NIL, 0, nullDescRec);    IF myErr = noErr THEN        {create an object specifier record to specify the }        { document object}        myErr := CreateObjSpecifier(cDocument, nullDescRec,                                              formName, myDocDescRec, TRUE,                                              myDocContainer);    MyCreateDocContainer := myErr;END;The function MyCreateDocContainer in Listing 6-14 creates an object specifier record that identifies a document by name. It starts by using the AECreateDesc function to create two descriptor records: one of type typeChar for the name of the document, and one of type typeNull for the null descriptor record that specifies the default container (because the document is not contained in any other Apple event object). These two descriptor records can then be used as parameters for the CreateObjSpecifier function, which returns an object specifier record (that is, a descriptor record of type typeObjectSpecifier) in the myDocContainer variable. The object specifier record specifies an Apple event object of the object class cDocument in the container specified by the nullDescRec variable with a key form of formName and the key data specified by the myDocDescRec variable. This object specifier can be used by itself to specify a document, or it can be used to specify the container for another Apple event object.Listing 6-15 shows an application-defined function, MyCreateTableContainer, that creates an object specifier record describing a table contained in a document. Listing 6-15    Specifying a table containerFUNCTION MyCreateTableContainer (VAR myTableContainer: AEDesc;                                            tableName: Str255;                                            docName: Str255): OSErr;VAR    myDocDescRec:                            AEDesc;    myTableDescRec:                            AEDesc;    myErr:                            OSErr;BEGIN    {create a container for the document}    myErr := MyCreateDocContainer(myDocDescRec, docName);    IF myErr = noErr THEN    BEGIN        {create the table container, }        { first specify the descriptor record for the key data}        myErr := AECreateDesc(typeChar, @tableName[1],                                         Length(tableName), myTableDescRec);        IF myErr = noErr THEN            myErr := CreateObjSpecifier(cTable, myDocDescRec,                                                formName, myTableDescRec,                                                 TRUE, myTableContainer);    END;    MyCreateTableContainer := myErr;END;The function MyCreateTableContainer in Listing 6-15 starts by using the function MyCreateDocContainer from Listing 6-14 to create an object specifier record that identifies the table’s container—the document in which the table is located. Then it uses the AECreateDesc function to create a descriptor record for the key data—a name that, when combined with the key form formName, will identify the table in the document. The object specifier record for the document and the descriptor record specifying the table’s name are passed to the function CreateObjSpecifier. It returns an object specifier record in the myTableContainer parameter that specifies an Apple event object of the object class cTable in the container specified by the MyDocDescRec variable with a key form of formName and the key data specified by the myTableDescRec variable. This object specifier record can be used by itself to specify a table, or it can be used to specify the container for another Apple event object.Listing 6-13 uses the MyCreateTableContainer function shown in Listing 6-15 to specify the container hierarchy illustrated in Table 6-7 on page 6-56. The nested object specifier records shown in Table 6-7 use the key forms formName and formRelativePosition. You can create key data for the key forms formPropertyID, formUniqueID, and formRelativePosition using similar techniques.    Specifying a PropertyThe key form formPropertyID allows your application to specify key data identifying a property of the object specified as a container. For example, an object specifier record that identifies the font property of a word specifies cProperty as the class ID, an object specifier record for the word as the property’s container, formPropertyID as the key form, and the constant pFont as the key data. Note that an object specifier record that identifies a property does not include a value for the property, such as Palatino. The value of a property is returned or set as a parameter of an Apple event. For example, an application that sends a Get Data event to get the pFont property of a word receives a value such as Palatino in the keyAEResult parameter of the reply event, and an application that sends a Set Data event to change the pFont property of a word specifies a font in the keyAEData parameter of the Set Data event. To specify the key data for a key form of formPropertyID, your application must create a descriptor record of typeType whose data consists of a constant specifying a property. You can use AECreateDesc to create a descriptor record that specifies the constant for a property, then use CreateObjSpecifier to add the descriptor record to an object specifier record as a keyword-specified descriptor record with the keyword keyAEKeyData.For more information about object specifier records that specify a property, see “Key Data for a Property ID” on page 6-13.Specifying a Relative PositionThe key form formRelativePosition allows your application to specify key data identifying an element or a set of elements that are immediately before or after the specified container. For example, if the container is a table, you could use a key form of formRelativePosition to specify the paragraph before or after the table. To specify the key data for a key form of formRelativePosition, your application must create a descriptor record of typeEnumerated whose data consists of a constant specifying either the element after (kAENext) or the element before (kAEPrevious) the specified container.You can use AECreateDesc to create a descriptor record that specifies one of these constants, then use CreateObjectSpecifier to add it to an object specifier record as a keyword-specified descriptor record with the keyword keyAEKeyData.For more information about object specifier records that specify a relative position, see “Key Data for Relative Position” on page 6-15.   Creating a Complex Object Specifier RecordThis section describes how to create object specifier records that specify a test or a range. You can specify the object class ID for these object specifier records the same way you would for any other object specifier record. When you create the other three keyword-specified descriptor records, however, you can use additional Apple Event Manager routines and descriptor types to specify any combination of Apple event objects. Specifying a TestThe key form formTest allows your application to specify key data that identifies one or more elements in the specified container that pass a test. To do so, your application must construct several interconnected descriptor records that specify comparisons and, if necessary, logical expressions. For example, to specify “the first row in which the First Name column equals ‘John’ and the Last Name column equals ‘Chapman’ in the table ‘MyAddresses’ of the database ‘SurfDB,’” your application must construct an object specifier record whose key data describes a logical expression that applies the logical operator AND to two separate comparisons for each row: a comparison of the First Name column to the word “John” and a comparison of the Last Name column to the word “Chapman.” The logical organization of the data for the object specifier record that specifies this test is summarized in Table 6-8 and Table 6-9. (It is also illustrated in Figure 6-3 and Figure 6-4, beginning on page 6-18.) The listings in the remainder of this section demonstrate how to create this object specifier record. For general information about the organization of key data for a test, see “Key Data for a Test,” which begins on page 6-15.Table 6-8    Object specifier record for the first row that meets a test in the table named “MyAddresses”Keyword    Descriptor type    Data    keyAEDesiredClass    typeType    cRow    keyAEContainer    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cRow    keyAEContainer    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cTable    keyAEContainer    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cDatabase    keyAEContainer    typeNull    Data handle is NIL    keyAEKeyForm    typeEnumerated    formName    keyAEKeyData    typeChar    "SurfDB"    keyAEKeyForm    typeEnumerated    formName    keyAEKeyData    typeChar    "MyAddresses"    keyAEKeyForm    typeEnumerated    formTest    keyAEKeyData    typeLogicalDescriptor    (see Table 6-9)    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    1    Table 6-9    Logical descriptor record that specifies a testKeyword    Descriptor type    Data    keyAELogicalOperator    typeEnumerated    kAEAnd    keyAELogicalTerms    typeAEList    (see indented records)        typeCompDescriptor    (see indented record)    keyAECompOperator    typeType    kAEEquals    keyAEObject1    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cColumn    keyAEContainer    typeObjectBeingExamined    Data handle is NIL    keyAEKeyForm    typeEnumerated    formName    keyAEKeyData    typeChar    "First Name"    keyAEObject2    typeChar    "John"        typeCompDescriptor    (see indented record)    keyAECompOperator    typeType    kAEEquals    keyAEObject1    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cColumn    keyAEContainer    typeObjectBeingExamined    Data handle is NIL    keyAEKeyForm    typeEnumerated    formName    keyAEKeyData    typeChar    "Last Name"    keyAEObject2    typeChar    "Chapman"    Because both the database and the table shown in Table 6-8 are specified by name, it would be convenient to have an application-defined routine that creates an object specifier record that uses the key form formName. The MyCreateFormNameObjSpecifier function shown in Listing 6-16 can be used for this purpose.Listing 6-16    Creating an object specifier record with the key form formNameFUNCTION MyCreateFormNameObjSpecifier                                (class: DescType; container: AEDesc;                                  keyDataName: str255;                                  VAR resultObjSpecRec: AEDesc): OSErr;VAR    keyDataDescRec: AEDesc;    myErr:                      OSErr;BEGIN    myErr := AECreateDesc(typeChar, @keyDataName[1],                                      Length(keyDataName), keyDataDescRec);    IF myErr = noErr THEN        myErr := CreateObjSpecifier(class, container, formName,                                                keyDataDescRec, TRUE,                                                resultObjSpecRec);    MyCreateFormNameObjSpecifier := myErr;END;The MyCreateFormNameObjSpecifier function shown in Listing 6-16 returns, in the resultObjSpecRec parameter, an object specifier record that describes an Apple event object of the class specified by the class parameter, located in the container specified by the container parameter, with the key form formName and key data specified by the keyDataName parameter. This function is used in Listing 6-19 on page 6-70 to create object specifier records that use the key form formName for the database and the table. The nested object specifier records shown in Table 6-9 specify “the rows in which the First Name column equals ‘John’ and the Last Name column equals ‘Chapman.’” To identify the rows that pass this test, the Apple Event Manager needs to evaluate two comparisons: the comparison of each row of the First Name column to the word “John,” and the comparison of each row of the Last Name column to the word “Chapman.”The Apple Event Manager uses the information in comparison descriptor records to compare the specified elements in a container, one at a time, either to another Apple event object or to the data associated with a descriptor record. The two comparison descriptor records you need to create for this example are summarized in Table 6-9 on page 6-66. You can use the CreateCompDescriptor function to create a comparison descriptor record, or you can create an AE record and use AECoerceDesc to coerce it to a comparison descriptor record. Listing 6-17 shows an example of an application-defined routine that creates an object specifier record and a descriptor record of typeChar, then uses the CreateCompDescriptor function to add them to a comparison descriptor record. Listing 6-17    Creating a comparison descriptor recordFUNCTION MyCreateComparisonDescRec (VAR compDesc: AEDesc;                                                colName: str255;                                                 name: str255): OSErr;VAR    logicalContainer, colNameDesc, nameDesc:                                                         AEDesc;    myObjectExaminedContainer:                                                         AEDesc;    myErr:                                                        OSErr;BEGIN    {create the object specifier record for keyAEObject1; }    { first create container}    myErr := AECreateDesc(typeObjectBeingExamined, NIL, 0,                                    myObjectExaminedContainer);    {create key data}    IF myErr = noErr THEN        myErr := AECreateDesc(typeChar, @colName[1],                                     Length(colName), colNameDesc);    {now create the object specifier record}    IF myErr = noErr THEN        myErr := CreateObjSpecifier(cColumn,                                             myObjectExaminedContainer,                                              formName, colNameDesc, TRUE,                                             logicalContainer);    {create the descriptor record for keyAEObject2}    IF myErr = noErr THEN        myErr := AECreateDesc(typeChar, @name[1], Length(name),                                      nameDesc);    {create the first logical term (comp descriptor record)}    IF myErr = noErr THEN        myErr := CreateCompDescriptor(kAEEquals, logicalContainer,                                                nameDesc, TRUE, compDesc);    MyCreateComparisonDescRec := myErr;END; The MyCreateComparisonDescRec function takes two strings and uses them to create a comparison descriptor record. The string passed in the second parameter specifies the name of the column whose contents should be compared to the string passed in the third parameter. First, the MyCreateComparisonDescRec function uses AECreateDesc to create a descriptor record of typeObjectBeingExamined, which is returned in the variable myObjectExaminedContainer. Next, AECreateDesc creates a descriptor record of descriptor type typeChar, whose data consists of the string in the variable colName, and which is returned in the variable colNameDesc. The code then passes the variables myObjectExaminedContainer and colNameDesc to the CreateObjSpecifier function, which uses them to create an object specifier record, returned in the logicalContainer variable, that becomes the keyword-specified descriptor record with the keyword keyAEObject1.Next, the MyCreateComparisonDescRec function uses AECreateDesc and the name parameter to create the descriptor record for keyAEObject2, which AECreateDesc returns in the nameDesc variable. Finally, the code passes the constant kAEEquals, the variable logicalContainer, and the variable nameDesc to the CreateCompDescriptor function, which creates a comparison descriptor record that allows the Apple Event Manager (with the help of object-comparison functions provided by the server application) to determine whether the specified column in the row currently being checked equals the specified string. You can use the MyCreateComparisonDescRec function to create both the descriptor records of type typeCompDescriptor shown in Table 6-9 on page 6-66. These descriptor records provide two logical terms for a logical descriptor record. The entire logical descriptor record corresponds to the logical expression “the First Name column equals ‘John’ AND the Last Name column equals ‘Chapman.’”  You can use the CreateLogicalDescriptor function to create a logical descriptor record, or you can create an AE record and use the AECoerceDesc function to coerce it to a comparison descriptor record. Listing 6-18 shows an application-defined function that adds two comparison descriptor records to a descriptor list, then uses the CreateLogicalDescriptor function to create a logical descriptor record whose logical terms are the two comparison descriptor records.Listing 6-18    Creating a logical descriptor recordFUNCTION MyCreateLogicalDescRec (VAR compDesc1, compDesc2: AEDesc;                                            logicalOperator: DescType;                                            VAR logicalDesc: AEDesc): OSErr;VAR    logicalTermsList: AEDescList;    myErr:                         OSErr;BEGIN    {create a logical descriptor record that contains two }    { comparison descriptor records}    {first create a list}    myErr := AECreateList(NIL, 0, FALSE, logicalTermsList);    IF myErr = noErr THEN        myErr := AEPutDesc(logicalTermsList, 1, compDesc1);    IF myErr = noErr THEN        myErr := AEPutDesc(logicalTermsList, 2, compDesc2);    IF myErr = noErr THEN        myErr := AEDisposeDesc(compDesc1);    IF myErr = noErr THEN        myErr := AEDisposeDesc(compDesc2);    IF myErr = noErr THEN        myErr := CreateLogicalDescriptor(logicalTermsList,                                                    logicalOperator, TRUE,                                                    logicalDesc);    MyCreateLogicalDescRec := myErr;END;Listing 6-19 uses the application-defined functions shown in Listing 6-16, Listing 6-17, and Listing 6-18 to build the object specifier record illustrated in Table 6-8 and Table 6-9.  Listing 6-19    Creating a complex object specifier recordFUNCTION MyCreateObjSpecRec (VAR theResultObj: AEDesc): OSErr;VAR    nullContainer, databaseContainer, tableContainer:                                                                     AEDesc;    compDesc1, compDesc2:                                                                     AEDesc;    logicalTestDesc, rowTestContainer, rowOffset:                                                                     AEDesc;    myErr:                                                                     OSErr;BEGIN    {create a null container}    myErr := AECreateDesc(typeNull, NIL, 0, nullContainer);    {create a container for the database}    IF myErr = noErr THEN        myErr := MyCreateFormNameObjSpecifier(cDatabase, nullContainer,                                                          'SurfDB', databaseContainer);    {create a container for the table}    IF myErr = noErr THEN        myErr := MyCreateFormNameObjSpecifier(cTable, databaseContainer,                                                           'MyAddresses', tableContainer);    {create a container for the row--an object specifier record that }    { specifies a test (the row whose First Name column = 'John' and }    { Last Name column = 'Chapman')}    {create the first comparison descriptor record}    IF myErr = noErr THEN        myErr := MyCreateComparisonDescRec(compDesc1, 'First Name', 'John');     {create the second comparison descriptor record}    IF myErr = noErr THEN        myErr := MyCreateComparisonDescRec(compDesc2, 'Last Name', 'Chapman');     {create the logical descriptor record}    IF myErr = noErr THEN        myErr := MyCreateLogicalDescRec(compDesc1, compDesc2, kAEAND,                                                     logicalTestDesc);    {now create the object specifier record that specifies the test}    IF myErr = noErr THEN        myErr := CreateObjSpecifier(cRow, tableContainer, formTest,                                             logicalTestDesc, TRUE, rowTestContainer);    {create the object specifier record for the Apple event object}    {first, create the descriptor record for the key data}    IF myErr = noErr THEN        myErr := CreateOffsetDescriptor (1, rowOffset);    {now create the object specifier record}    IF myErr = noErr THEN        myErr := CreateObjSpecifier (cRow, rowTestContainer,                                                 formAbsolutePosition, rowOffset,                                                 TRUE, theResultObj);    MyCreateObjSpecRec := myErr;END;The MyCreateObjSpecRec function shown in Listing 6-19 begins by using AECreateDesc to create a null descriptor record, then uses the MyCreateFormNameObjSpecifier function (shown in Listing 6-16) to specify the default container for the database named “SurfDB.” The code then calls the MyCreateFormNameObjSpecifier function again, this time passing the object specifier record for SurfDB to specify the container for the table “MyAddresses.” The next two calls are both to the MyCreateComparisonDescRec function (shown in Listing 6-17), which creates the comparison descriptor records that allow the Apple Event Manager to compare the First Name column and Last Name column to the names “John” and “Chapman,” respectively. The next call passes these two comparison descriptor records to the MyCreateLogicalDescRec function (shown in Listing 6-18) in the compDesc1 and compDesc2 variables. Now all the components of the logical descriptor record are ready to assemble. The next call, to CreateObjSpecifier, specifies the logical descriptor record in the logicalTestDesc variable as the key data for the object specifier record that specifies the test. A call to the Apple Event Manager routine CreateOffsetDescriptor then creates an offset descriptor record that contains the integer 1. Finally, the code passes the offset descriptor record to the CreateObjSpecifier function in the rowOffset variable to create the final object specifier record, which describes the requested row as the first row that passes the test.The CreateOffsetDescriptor function creates a descriptor record of type typeLongInteger that can be used as the key data with a key form of formAbsolutePosition to indicate an element’s offset within its container. A positive integer indicates an offset from the beginning of the container (the first element has an offset of 1), and a negative integer indicates an offset from the end of the container (the last element has an offset of –1). Using CreateOffsetDescriptor accomplishes the same thing as setting a variable to an integer and passing the variable to AECreateDesc to create a descriptor record of type typeLongInteger.    Specifying a RangeThe key form formRange allows your application to specify key data that identifies a range of elements in the specified container. To do so, your application must first create a range descriptor record. The Apple Event Manager uses a range descriptor record to identify the two Apple event objects that specify the beginning and end of a range of elements. For example, an object specifier record for a range of text in a document could specify the table named “Summary of Sales” as the first boundary object and the figure named “Best-Selling Widgets for 1991” as the second boundary object for a range that consists of all the text between the table and the figure. Any word processor that keeps track of the relative positions of text, tables, and figures should be capable of supporting such a request. Table 6-10 summarizes the logical organization of the data for the object specifier record that specifies this range. For general information about the organization of data within a range descriptor record, see “Key Data for a Range” on page 6-20.Table 6-10    A range descriptor recordKeyword    Descriptor type    Data    keyAERangeStart    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cTable    keyAEContainer    typeCurrentContainer    Data handle is NIL    keyAEKeyForm    typeEnumerated    formName    keyAEKeyData    typeChar    "Summary of Sales"    keyAERangeStop    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cFigure    keyAEContainer    typeCurrentContainer    Data handle is NIL    keyAEKeyForm    typeEnumerated    formName    keyAEKeyData    typeChar    "Best-Selling Widgets for 1991"    You can use the CreateRangeDescriptor function to create a range descriptor record, or you can create an AE record and use AECoerceDesc to coerce it to a range descriptor record. Listing 6-20 provides an example of an application-defined routine that creates two object specifier records, then uses the CreateRangeDescriptor function to add them to a range descriptor record.The container for the boundary objects in the range descriptor record created by Listing 6-20 is the same as the container for the range itself. The object specifier record for the range’s container is added to an object specifier record of key form formRange at the same time that the range descriptor record is added as key data. The container for the two boundary objects can therefore be specified in the range descriptor record by a descriptor record of type typeCurrentContainer whose data handle has the value NIL. The Apple Event Manager interprets this as a placeholder for the range’s container when it is resolving the range descriptor record.Listing 6-20    Creating a range descriptor recordFUNCTION MyCreateRangeDescriptor (VAR rangeDescRec: AEDesc): OSErr;VAR    rangeStart:                             AEDesc;    rangeEnd:                            AEDesc;    currentContainer:                            AEDesc;    tableNameDescRec    :                        AEDesc;    figureNameDescRec    :                        AEDesc;    myErr:                            OSErr;BEGIN{create the object specifier record for the start of the range }{ (the table named 'Summary of Sales' in 'MyDoc' document)}    {create a descriptor record of type typeCurrentContainer}    myErr := AECreateDesc(typeCurrentContainer, NIL, 0, currentContainer);    {create the object specifier record}    IF myErr = noErr THEN        myErr := MyCreateNameDescRec(tableNameDescRec,                                                 'Summary of Sales');    IF myErr = noErr THEN    myErr := CreateObjSpecifier(cTable, currentContainer, formName,                                             tableNameDescRec, FALSE, rangeStart);        myErr := AEDisposeDesc(tableNameDescRec);    {create the object specifier record for the end of the range }    { (the figure named 'Best-Selling Widgets...' in 'MyDoc') }    IF myErr = noErr THEN        myErr := MyCreateNameDescRec(figureNameDescRec,                                                 'Best-Selling Widgets for 1991');    IF myErr = noErr THEN        myErr := CreateObjSpecifier(cFigure, currentContainer, formName,                                             figureNameDescRec, TRUE, rangeEnd);    {now create the range descriptor record}    IF myErr = noErr THEN        myErr := CreateRangeDescriptor(rangeStart, rangeEnd, TRUE,                                                     rangeDescRec);    MyCreateRangeDescriptor := myErr;END;After creating a descriptor record of type typeCurrentContainer and a descriptor record for the first table’s name, Listing 6-20 uses the CreateObjSpecifier function to create an object specifier record that identifies the beginning of the range. The parameters to CreateObjSpecifier specify that the beginning of the range is an Apple event object of the object class cTable in the current container, with a key form of formName and key data that identifies the table by name. A second call to CreateObjSpecifier creates the object specifier record that identifies the end of the range—an Apple event object of the cFigure object class in the current container, with a key form of formName and key data that identifies the figure by name. Finally, the code in Listing 6-20 uses the CreateRangeDescriptor function to create the range descriptor record, using the two previously created object specifier records to specify the beginning and end of the range.  Reference to Resolving and Creating Object Specifier RecordsThis section describes the Apple Event Manager routines your application can use to resolve and create object specifier records. It also describes application-defined object accessor functions and object callback functions that your application can provide for use by the Apple Event Manager in resolving object specifier records. The first section, “Data Structures Used in Object Specifier Records,” summarizes the descriptor types and associated data that can be used in an object specifier record. “Routines for Resolving and Creating Object Specifier Records,” which begins on page 6-77, describes the Apple Event Manager routines you use to initialize the Object Support Library, resolve object specifier records, set and manipulate object accessor functions, deallocate memory for tokens, and create object specifier records. “Application-Defined Routines,” which begins on page 6-94, describes the object accessor functions and object callback functions that a server application can provide.Data Structures Used in Object Specifier RecordsThe data for object specifier records can be specified using a variety of descriptor records and descriptor types. These are described in detail in “Descriptor Records Used in Object Specifier Records,” which begins on page 6-8, and summarized in Table 6-11.Table 6-11    Keyword-specified descriptor records for typeObjectSpecifier(continued)(continued)Keyword    Descriptor type    Data    keyAEDesiredClass    typeType    Object class ID    keyAEContainer    typeObjectSpecifier    Object specifier record        typeNull    Data handle is NIL. Specifies the default container at the top of the container hierarchy.        typeObjectBeingExamined    Data handle is NIL. Specifies the container for elements that are tested one at a time; used only with formTest.         typeCurrentContainer    Data handle is NIL. Specifies a container for an element that demarcates one boundary in a range. Used only with formRange.     keyAEKeyForm    typeEnumerated    formPropertyIDformNameformUniqueIDformAbsolutePositionformRelativePositionformTestformRangeformWhose     keyAEKeyData        (See indented key forms)    for formPropertyID    typeType    Property ID for an element’s property    for formName    typeChar or other text type    Element’s name    for formUniqueID    Any appropriate type    Element’s unique ID    for formAbsolutePosition    typeLongInteger    Offset from beginning (positive) or end (negative) of container        typeAbsoluteOrdinal    kAEFirst kAEMiddlekAELastkAEAnykAEAll    for formRelativePosition    typeEnumerated    kAENextkAEPrevious     for formTest    typeCompDescriptor    (See Table 6-2 on page 6-16)        typeLogicalDescriptor    (See Table 6-3 on page 6-17)    for formRange    typeRangeDescriptor    (See Table 6-4 on page 6-20)    for formWhose    typeWhoseDescriptor    (See Table 6-5 on page 6-42)    Routines for Resolving and Creating Object Specifier RecordsThis section describes routines for initializing the Object Support Library, resolving object specifier records, setting and manipulating object accessor functions, deallocating memory for tokens, and creating object specifier records.Initializing the Object Support LibraryYou should call the AEObjectInit function to initialize the Apple Event Manager routines that handle object specifier records and Apple event objects. To make these routines available to your application with version 1.01 and earlier versions of the Apple Event Manager, you must also link the Apple Event Object Support Library with your application when you build it.AEObjectInitYou use the AEObjectInit function to initialize the Object Support Library.FUNCTION AEObjectInit: OSErr; DESCRIPTIONYou must call this function before calling any of the Apple Event Manager routines that describe or manipulate Apple event objects.RESULT CODESnoErr    0    No error occurred    memFullErr    –108    Not enough room in heap zone    errAENewerVersion    –1706    Need a newer version of the Apple Event Manager    Setting Object Accessor Functions and Object Callback FunctionsThe Apple Event Manager provides two routines that allow you to specify the object accessor functions and object callback functions provided by your application. The AEInstallObjectAccessor function adds an entry for an object accessor function to either the application’s object accessor dispatch table or the system object accessor dispatch table. The AESetObjectCallbacks function allows you to specify the object callback functions to be called for your application. AEInstallObjectAccessorYou can use the AEInstallObjectAccessor function to add an entry for an object accessor function to either the application’s object accessor dispatch table or the system object accessor dispatch table.  FUNCTION AEInstallObjectAccessor (desiredClass: DescType;                                              containerType: DescType;                                              theAccessor: AccessorProcPtr;                                              accessorRefcon: LongInt;                                              isSysHandler: Boolean): OSErr;desiredClassThe object class of the Apple event objects to be located by the object accessor function for this table entry.containerTypeThe descriptor type of the token used to specify the container for the desired objects. The object accessor function finds objects in containers specified by tokens of this type.theAccessorA pointer to the object accessor function for this table entry. Note that an object accessor function listed in the system dispatch table must reside in the system heap; thus, if the value of the isSysHandler parameter is TRUE, the theAccessor parameter should point to a location in the system heap. Otherwise, if you put your system object accessor function in your application heap, you must call AERemoveObjectAccessor to remove the function before your application terminates.accessorRefconA reference constant passed by the Apple Event Manager to the object accessor function whenever the function is called. If your object accessor function doesn’t use a reference constant, use 0 as the value of this parameter. To change the value of the reference constant, you must call AEInstallObjectAccessor again.isSysHandlerA value that specifies the object accessor dispatch table to which the entry is added. If the value of isSysHandler is TRUE, the Apple Event Manager adds the entry to the system object accessor dispatch table. Entries in the system object accessor dispatch table are available to all applications running on the same computer. If the value is FALSE, the Apple Event Manager adds the entry to your application’s object accessor table. When searching for object accessor functions, the Apple Event Manager searches the application’s object accessor dispatch table first; it searches the system object accessor dispatch table only if the necessary function is not found in your application’s object accessor dispatch table.DESCRIPTIONThe AEInstallObjectAccessor function adds an entry to either the application or system object accessor dispatch table. You must supply parameters that specify the object class of the Apple event objects that the object accessor function can locate, the descriptor type of tokens for containers in which the object accessor function can locate objects, the address of the object accessor function for which you are adding an entry, and whether the entry is to be added to the system object accessor dispatch table or your application’s object accessor dispatch table. You can also specify a reference constant that the Apple Event Manager passes to your object accessor function each time the Apple Event Manager calls the function.RESULT CODESnoErr    0    No error occurred    paramErr    –50    The handler pointer is NIL or odd, or AEObjectInit was not called before this function    SEE ALSOFor more information about installing object accessor functions, see “Installing Entries in the Object Accessor Dispatch Tables,” which begins on page 6-21.  For a description of the AERemoveObjectAccessor function, see page 6-84.AESetObjectCallbacksYou can use the AESetObjectCallbacks function to specify the object callback functions to be called for your application.  FUNCTION AESetObjectCallbacks (myCompareProc, myCountProc,                                          myDisposeTokenProc,                                         myGetMarkTokenProc, myMarkProc,                                         myAdjustMarksProc,                                         myGetErrDescProc: ProcPtr): OSErr;myCompareProcEither a pointer to the object-comparison function provided by your application or NIL if no function is provided.myCountProcEither a pointer to the object-counting function provided by your application or NIL if no function is provided.myDisposeTokenProcEither a pointer to the token disposal function provided by your application or NIL if no function is provided.myGetMarkTokenProcEither a pointer to the function for returning a mark token provided by your application or NIL if no function is provided.myMarkProc    Either a pointer to the object-marking function provided by your application or NIL if no function is provided.myAdjustMarksProcEither a pointer to the mark-adjusting function provided by your application or NIL if no function is provided.myGetErrDescProcEither a pointer to the error callback function provided by your application or NIL if no function is provided.DESCRIPTIONYour application can provide only one each of the object callback functions specified by AESetObjectCallbacks: one object-comparison function, one object-counting function, and so on. As a result, each of these callback functions must perform the requested task (comparing, counting, and so on) for all the object classes that your application supports. In contrast, your application may provide many different object accessor functions if necessary, depending on the object classes and token types your application supports.To replace object callback routines that have been previously installed, you can make another call to AESetObjectCallbacks. Each additional call to AESetObjectCallbacks replaces any object callback functions installed by previous calls to AESetObjectCallbacks. You cannot use AESetObjectCallbacks to replace system object callback routines or object accessor functions. Only those routines you specify are replaced; to avoid replacing existing callback functions, specify a value of NIL for the functions you don’t want to replace.RESULT CODESnoErr    0    No error occurred    paramErr    –50    The handler pointer is NIL or odd, or AEObjectInit was not called before this function    memFullErr    –108    There is not enough room in heap zone    errAENotASpecialFunction    –1714    The keyword is not valid for a special function    SEE ALSOFor information about writing object callback functions, see “Application-Defined Routines,” which begins on page 6-94.To install system object callback functions, use the AEInstallSpecialHandler function described on page 4-100.  Getting, Calling, and Removing Object Accessor FunctionsThe Apple Event Manager provides three functions that allow you to get, call, and remove object accessor functions that you have installed in either the system or application object accessor dispatch table with the AEInstallObjectAccessor function. The AEGetObjectAccessor and AECallObjectAccessor functions get and call object accessor functions installed in the dispatch table you specify, and AERemoveObjectAccessor removes an installed function.AEGetObjectAccessorYou can use the AEGetObjectAccessor function to get a pointer to an object accessor function and the value of its reference constant. FUNCTION AEGetObjectAccessor (desiredClass: DescType;                                         containerType: DescType;                                        VAR theAccessor: AccessorProcPtr;                                        VAR accessorRefcon: LongInt;                                         isSysHandler: Boolean): OSErr;desiredClassThe object class of the Apple event objects located by the requested object accessor function. This parameter can also contain the constant typeWildCard or the constant cProperty.containerTypeThe descriptor type of the token that identifies the container for the objects located by the requested object accessor function. This parameter can also contain the constant typeWildCard.theAccessorThe AEGetObjectAccessor function returns a pointer to the requested object accessor function in this parameter.accessorRefconThe AEGetObjectAccessor function returns the reference constant from the object accessor dispatch table entry for the specified object accessor function in this parameter.isSysHandlerA value that specifies the object accessor table from which to get the object accessor function and its reference constant. If the value of isSysHandler is TRUE, AEGetObjectAccessor gets the function from the system object accessor dispatch table. If the value of isSysHandler is FALSE, AEGetObjectAccessor gets the function from the application’s object accessor dispatch table.DESCRIPTIONThe AEGetObjectAccessor function returns a pointer to the object accessor function installed for the object class specified in the desiredClass parameter and the descriptor type specified in the containerType parameter. It also returns the reference constant associated with the specified function. You must supply a value in the isSysHandler parameter that specifies which object accessor dispatch table you want to get the function from. Calling AEGetObjectAccessor does not remove the object accessor function from an object accessor dispatch table.To get an object accessor function whose entry in an object accessor dispatch table specifies typeWildCard as the object class, you must specify typeWildCard as the value of the desiredClass parameter. Similarly, to get an object accessor function whose entry in an object accessor dispatch table specifies typeWildCard as the descriptor type of the token used to specify the container, you must specify typeWildCard as the value of the containerType parameter.To get an object accessor function whose entry in an object accessor dispatch table specifies cProperty (a constant used to specify a property of any object class), you must specify cProperty as the desiredClass parameter. RESULT CODESnoErr    0    No error occurred    paramErr    –50    AEObjectInit was not called before this function was called    errAEAccessorNotFound    –1723    There is no object accessor function for the specified object class and container type      AECallObjectAccessorYou can use the AECallObjectAccessor function to invoke one of your application’s object accessor functions. FUNCTION AECallObjectAccessor (desiredClass: DescType;                                          containerToken: AEDesc;                                          containerClass: DescType;                                          keyForm: DescType;                                          keyData: AEDesc;                                          VAR theToken: AEDesc): OSErr;desiredClassThe object class of the desired Apple event objects.containerTokenThe token that identifies the container for the desired objects.containerClassThe object class of the container for the desired objects.keyForm    The key form specified by the object specifier record for the object or objects to be located.keyData    The key data specified by the object specifier record for the object or objects to be located.theToken    The object accessor function that is invoked returns a token specifying the desired object or objects in this parameter.DESCRIPTIONIf you want your application to do some of the Apple event object resolution normally performed by the AEResolve function, you can use AECallObjectAccessor to invoke an object accessor function. This might be useful, for example, if you have installed an object accessor function using typeWildCard for the AEInstallObjectAccessor function’s desiredClass parameter and typeAEList for the containerType parameter. To return a list of tokens for a request like “every line that ends in a period,” the object accessor function can create an empty list, then call AECallObjectAccessor for each requested element, adding tokens for each element to the list one at a time. The parameters of AECallObjectAccessor are identical to the parameters of an object accessor function, with one exception: the parameter that specifies the reference constant passed to the object accessor function whenever it is called is added by the Apple Event Manager when it calls the object accessor function.To call an object accessor function whose entry in an object accessor dispatch table specifies typeWildCard as the object class, you must specify typeWildCard as the value of the desiredClass parameter. To call an object accessor function whose entry in an object accessor dispatch table specifies cProperty, you must specify cProperty as the desiredClass parameter. RESULT CODESIn addition to the following result codes, AECallObjectAccessor returns any other result codes returned by the object accessor function that is called.noErr    0    No error occurred    paramErr    –50    AEObjectInit was not called before this function was called    errAEAccessorNotFound    –1723    No object accessor was found     AERemoveObjectAccessorYou can use the AERemoveObjectAccessor function to remove an object accessor function from an object accessor dispatch table.  FUNCTION AERemoveObjectAccessor (desiredClass: DescType;                                             containerType: DescType;                                             theAccessor: AccessorProcPtr;                                             isSysHandler: Boolean): OSErr;desiredClassThe object class of the Apple event objects located by the object accessor function. The desiredClass parameter can also contain the constant typeWildCard or the constant cProperty.containerTypeThe descriptor type of the token that identifies the container for the objects located by the object accessor function. The containerType parameter can also contain the constant typeWildCard.theAccessorA pointer to the object accessor function you want to remove. Although the parameters desiredClass and containerType would be sufficient to identify the function to be removed, providing the parameter theAccessor guarantees that you remove the correct function. If this parameter does not contain a pointer to the object accessor function you want to remove, its value should be NIL.isSysHandlerA value that specifies the object accessor dispatch table from which to remove the object accessor function. If the value of isSysHandler is TRUE, AEGetObjectAccessor removes the routine from the system object accessor dispatch table. If the value is FALSE, AEGetObjectAccessor removes the routine from the application object accessor dispatch table.DESCRIPTIONThe AERemoveObjectAccessor function removes the object accessor function you have installed for the object class specified in the desiredClass parameter and the descriptor type specified in the containerType parameter. To remove an object accessor function whose entry in an object accessor dispatch table specifies typeWildCard as the object class, you must specify typeWildCard as the value of the desiredClass parameter. Similarly, to remove an object accessor function whose entry in an object accessor dispatch table specifies typeWildCard as the descriptor type of the token used to specify the container for the desired objects, you must specify typeWildCard as the value of the containerType parameter.To remove an object accessor function whose entry in an object accessor dispatch table specifies cProperty (a constant used to specify a property of any object class), you must specify cProperty as the desiredClass parameter. RESULT CODESnoErr    0    No error occurred    paramErr    –50    AEObjectInit was not called before this function was called    errAEAccessorNotFound    –1723    There is no object accessor function for the specified object class and container type      Resolving Object Specifier RecordsIf an Apple event parameter consists of an object specifier record, your handler for the event typically calls the AEResolve function to begin the process of resolving the object specifier record. AEResolveYou can use the AEResolve function to resolve an object specifier record in an Apple event parameter.FUNCTION AEResolve (objectSpecifier: AEDesc;                           callbackFlags: Integer;                           VAR theToken: AEDesc): OSErr;objectSpecifierThe object specifier record to be resolved.callbackFlagsA value that determines what additional assistance, if any, your application can give the Apple Event Manager when it parses the object specifier record. The value is specified by adding the following constants, as appropriate:                CONST            kAEIDoMinimum                    = $0000;                {supports minimum }                                                                { callbacks only}                            kAEIDoWhose                    = $0001;                {supports formWhose}                            kAEIDoMarking                    = $0004;                {provides marking }                                                                { functions} theToken    The AEResolve function returns, in this parameter, a token that identifies the Apple event objects specified by the objectSpecifier parameter. Your object accessor functions may need to create many tokens to resolve a single object specifier record; this parameter contains only the final token that identifies the requested Apple event object. If an error occurs, AEResolve returns a null descriptor record.DESCRIPTIONThe AEResolve function resolves the object specifier record passed in the objectSpecifier parameter with the help of the object accessor functions and object callback functions provided by your application. RESULT CODESnoErr    0    No error occurred    paramErr    –50    AEObjectInit was not called before   this function was called    errAEHandlerNotFound    –1717    The necessary object callback function was not found (this result is returned only for object callback functions; errAEAccessorNotFound [–1723] is returned when an object accessor function is not found)    errAEImpossibleRange    –1720    The range is not valid because it is impossible for a range to include the first and last objects that were specified; an example is a range in which the offset of the first object is greater than the offset of the last object    errAEWrongNumberArgs    –1721    The number of operands provided for the kAENOT logical operator is not 1    errAEAccessorNotFound    –1723    There is no object accessor function for the specified object class and token descriptor type    errAENoSuchLogical    –1725    The logical operator in a logical descriptor record is not kAEAND, kAEOR, or kAENOT    errAEBadTestKey    –1726    The descriptor record in a test key is neither a comparison descriptor record nor a logical descriptor record    errAENotAnObjectSpec    –1727    The objSpecifier parameter of AEResolve is not an object specifier record    errAENegativeCount    –1729    An object-counting function returned a negative result    errAEEmptyListContainer    –1730    The container for an Apple event object is specified by an empty list    In addition to the result codes listed here, AEResolve also returns any result code returned by one of your application’s object accessor functions or object callback functions. For example, an object accessor function can return errAENoSuchObject (–1728) when it can’t find an Apple event object, or it can return more specific result codes.If any object accessor function or object callback function returns a result code other than noErr or errAEEventNotHandled, AEResolve immediately disposes of any existing tokens and returns. The result code it returns in this case is the result code returned by the object accessor function or the object callback function. SEE ALSOFor an overview of the way AEResolve works with object accessor functions, see “Resolving Object Specifier Records,” which begins on page 6-4.Deallocating Memory for TokensWhenever the AEResolve function returns a final token to your event handler as the result of the resolution of an object specifier record passed to AEResolve, your application can call the AEDisposeToken function to deallocate the memory used by the token. AEDisposeTokenYou can use the AEDisposeToken function to deallocate the memory used by a token.FUNCTION AEDisposeToken (VAR theToken: AEDesc): OSErr;theToken    The token to be disposed of.DESCRIPTIONWhen your application calls the AEDisposeToken function, the Apple Event Manager first calls your application’s token disposal function, if you have provided one. If you haven’t provided a token disposal function, or if your application’s token disposal function returns errAEEventNotHandled as the function result, the Apple Event Manager calls the system token disposal function if one is available. If there is no system token disposal function or the function returns errAEEventNotHandled as the function result, the Apple Event Manager calls the AEDisposeDesc function to dispose of the token.RESULT CODESIn addition to the following result codes, AEDisposeToken also returns result codes returned by the token disposal function that disposed of the token.noErr    0    No error occurred    paramErr    –50    AEObjectInit was not called before this function was called    notASpecialFunction    –1714    The keyword is not valid for a special function    SEE ALSOFor information about writing a token disposal function, see page 6-99. Creating Object Specifier RecordsThe Apple Event Manager provides five functions that you can use to create some of the components of an object specifier record or to assemble an object specifier record: n    The CreateOffsetDescriptor function creates an offset descriptor record, which specifies the position of an element in relation to the beginning or end of its container.n    The CreateCompDescriptor function creates a comparison descriptor record, which specifies how to compare one or more Apple event objects with either another Apple event object or a descriptor record.n    The CreateLogicalDescriptor function creates a logical descriptor record, which specifies a logical operator and one or more logical terms for the Apple Event Manager to evaluate.n    The CreateRangeDescriptor function creates a range descriptor record, which specifies a series of consecutive elements in the same container.n    The CreateObjSpecifier function assembles an object specifier record, which identifies one or more Apple event objects, from other descriptor records.Instead of using these functions, you can create the corresponding descriptor records yourself using the AECreateDesc function, add them to an AE record using other Apple Event Manager routines, and coerce the AE record to a descriptor record of type typeObjectSpecifier. However, in most cases it is easier to use the functions listed in this section. All of these functions except for CreateOffsetDescriptor include a disposeInputs parameter. If the value of this parameter is TRUE, the function automatically disposes of any descriptor records you have provided as parameters to the function. If the value is FALSE, the application must dispose of the records itself. A value of FALSE may be more efficient for some applications because it allows them to reuse descriptor records.For more information about these functions and examples of their use, see “Creating Object Specifier Records,” which begins on page 6-55.CreateOffsetDescriptorYou can use the CreateOffsetDescriptor function to create an offset descriptor record. FUNCTION CreateOffsetDescriptor (theOffset: LongInt;                                             VAR theDescriptor: AEDesc)                                             : OSErr;theOffset    A positive integer that specifies the offset from the beginning of the container (the first element has an offset of 1), or a negative integer that specifies the offset from the end (the last element has an offset of –1).theDescriptorThe offset descriptor record created by CreateOffsetDescriptor.DESCRIPTIONThe CreateOffsetDescriptor function creates an offset descriptor record that specifies the position of an element in relation to the beginning or end of its container.RESULT CODESnoErr    0    No error occurred    memFullErr    –108    Not enough room in heap zone     CreateCompDescriptorYou can use the CreateCompDescriptor function to create a comparison descriptor record.FUNCTION CreateCompDescriptor (comparisonOperator: DescType;                                         VAR operand1: AEDesc;                                          VAR operand2: AEDesc;                                          disposeInputs: Boolean;                                          VAR theDescriptor: AEDesc)                                         : OSErr;comparisonOperatorThe comparison operator for comparing the descriptor records in the operand1 and operand2 parameters. The operator is specified by the constants listed in the description that follows.operand1    An object specifier record.operand2    A descriptor record (which can be an object specifier record or any other descriptor record) whose value is to be compared to the value of operand1.disposeInputsA Boolean value indicating whether the function (TRUE) or your application (FALSE) should dispose of the descriptor records for the two operands.theDescriptorThe comparison descriptor record created by CreateCompDescriptor.DESCRIPTIONThe CreateCompDescriptor function creates a comparison descriptor record, which specifies how to compare one or more Apple event objects with either another Apple event object or a descriptor record.The actual comparison of the two operands is performed by the object-comparison function provided by the client application. The way a comparison operator is interpreted is up to each application.These are the currently defined standard comparison operators:Constant    Meaning    kAEGreaterThan    The value of operand1 is greater than the value of operand2.    kAEGreaterThanEquals    The value of operand1 is greater than or equal to the value of operand2.    kAEEquals    The value of operand1 is equal to the value of operand2.    kAELessThan    The value of operand1 is less than the value of operand2.    kAELessThanEquals    The value of operand1 is less than or equal to the value of operand2.    kAEBeginsWith    The value of operand1 begins with the value of operand2 (for example, the string "operand" begins with the string "opera").    kAEEndsWith    The value of operand1 ends with the value of operand2 (for example, the string "operand" ends with the string "and").    kAEContains    The value of operand1 contains the value of operand2 (for example, the string "operand" contains the string "era").    RESULT CODESnoErr    0    No error occurred    paramErr    –50    Error in parameter list    memFullErr    –108    Not enough room in heap zone    errAECoercionFail     –1700    Data could not be coerced to the requested Apple event data type    errAEWrongDataType    –1703    Wrong Apple event data type    errAENotAEDesc    –1704    Not a valid descriptor record    errAEBadListItem    –1705    Operation involving a list item failed    SEE ALSOFor an example of how to use the CreateCompDescriptor function to create a comparison descriptor record, see “Specifying a Test,” which begins on page 6-64. CreateLogicalDescriptorYou can use the CreateLogicalDescriptor function to create a logical descriptor record. FUNCTION CreateLogicalDescriptor                                         (VAR theLogicalTerms: AEDescList;                                          theLogicOperator: DescType;                                          disposeInputs: Boolean;                                          VAR theDescriptor: AEDesc): OSErr;theLogicalTermsA list containing comparison descriptor records, logical descriptor records, or both. If the value of the parameter theLogicOperator is kAEAND or kAEOR, the list can contain any number of descriptors. If the value of the parameter theLogicOperator is kAENOT, logically this list should contain a single descriptor record. However, the function will not return an error if the list contains more than one descriptor record for a logical operator of kAENOT.theLogicOperatorA logical operator represented by one of the following constants:                 CONST            kAEAND         = 'AND ';                            kAEOR         = 'OR  ';                            kAENOT         = 'NOT ';disposeInputsA Boolean value indicating whether the function (TRUE) or your application (FALSE) should dispose of the descriptor records in the other parameters.theDescriptorThe logical descriptor record created by CreateLogicalDescriptor.DESCRIPTIONThe CreateLogicalDescriptor function creates a logical descriptor record, which specifies a logical operator and one or more logical terms for the Apple Event Manager to evaluate.RESULT CODESnoErr    0    No error occurred    paramErr    –50    Error in parameter list    memFullErr    –108    Not enough room in heap zone    errAECoercionFail    –1700    Data could not be coerced to requested Apple event data type    errAEWrongDataType    –1703    Wrong Apple event data type    errAENotAEDesc    –1704    Not a valid descriptor record    errAEBadListItem    –1705    Operation involving a list item failed    SEE ALSOFor an example of how to use the CreateLogicalDescriptor function to create a logical descriptor record, see “Specifying a Test,” which begins on page 6-64. CreateRangeDescriptorYou can use the CreateRangeDescriptor function to create a range descriptor record. FUNCTION CreateRangeDescriptor (VAR rangeStart: AEDesc;                                           VAR rangeStop: AEDesc;                                           disposeInputs: Boolean;                                           VAR theDescriptor: AEDesc): OSErr;rangeStartAn object specifier record that identifies the first Apple event object in the range.rangeStop    An object specifier record that identifies the last Apple event object in the range.disposeInputsA Boolean value indicating whether the function (TRUE) or your application (FALSE) should dispose of the descriptor records for the rangeStart and rangeStop parameters. theDescriptorThe range descriptor record created by CreateRangeDescriptor.DESCRIPTIONThe CreateRangeDescriptor function creates a range descriptor record, which specifies a series of consecutive elements in the same container. Although the rangeStart and rangeStop parameters can be any object specifier records—including object specifier records that specify more than one Apple event object—most applications expect these parameters to specify single Apple event objects.RESULT CODESnoErr    0    No error occurred    paramErr    –50    Error in parameter list    memFullErr    –108    Not enough room in heap zone    errAECoercionFail    –1700    Data could not be coerced to the requested Apple event data type    errAEWrongDataType    –1703    Wrong Apple event data type    errAENotAEDesc    –1704    Not a valid descriptor record    errAEBadListItem    –1705    Operation involving a list item failed    SEE ALSOFor an example of how to use the CreateRangeDescriptor function to create a range descriptor record, see “Specifying a Range” on page 6-72. CreateObjSpecifierYou can use the CreateObjSpecifier function to create an object specifier record.FUNCTION CreateObjSpecifier (desiredClass: DescType;                                       VAR theContainer: AEDesc;                                       keyForm: DescType;                                       VAR keyData: AEDesc;                                       disposeInputs: Boolean;                                       VAR objSpecifier: AEDesc): OSErr;desiredClassThe object class of the desired Apple event objects.theContainerA description of the container for the requested object, usually in the form of another object specifier record.keyForm    The key form for the object specifier record.keyData    The key data for the object specifier record.disposeInputsA Boolean value indicating whether the function (TRUE) or your application (FALSE) should dispose of the descriptor records for the other parameters.objSpecifierThe object specifier record created by the CreateObjSpecifier function.DESCRIPTIONThe CreateObjSpecifier function assembles an object specifier record from the specified constants and other descriptor records.RESULT CODESnoErr    0    No error occurred    paramErr    –50    Error in parameter list    memFullErr    –108    Not enough room in heap zone    errAECoercionFail     –1700    Data could not be coerced to the requested Apple event data type    errAEWrongDataType    –1703    Wrong Apple event data type    errAENotAEDesc    –1704    Not a valid descriptor record    errAEBadListItem    –1705    Operation involving a list item failed    SEE ALSOFor information about how to assemble the components of an object specifier record with the CreateObjSpecifier function, see “Creating Object Specifier Records,” which begins on page 6-55.   Application-Defined RoutinesThe AEResolve function performs tasks that are required to resolve any object specifier record, such as parsing its contents, keeping track of the results of tests, and handling memory management. When necessary, AEResolve calls application-defined functions to perform tasks that are unique to the application, such as locating a specific Apple event object in the application’s data structures or counting the number of Apple event objects in a container. AEResolve can call two kinds of application-defined functions:n    Object accessor functions locate Apple event objects. Every application that supports simple object specifier records must provide one or more object accessor functions. n    Object callback functions perform other tasks that only an application can perform, such as counting, comparing, or marking Apple event objects. You can provide up to seven object callback functions, depending on the needs of your application.This section provides model declarations for the object accessor functions and object callback functions that your application can provide.Object Accessor FunctionsYou must provide one or more object accessor functions that can locate all the element classes and properties listed in the Apple Event Registry: Standard Suites for the object classes supported by your application. This section provides the routine declaration for an object accessor function.MyObjectAccessorObject accessor functions locate Apple event objects of a specified object class in a container identified by a token of a specified descriptor type. FUNCTION MyObjectAccessor (desiredClass: DescType;                                     containerToken: AEDesc;                                     containerClass: DescType;                                     keyForm: DescType; keyData: AEDesc;                                     VAR theToken: AEDesc;                                     theRefcon: LongInt): OSErr;desiredClassThe object class of the desired Apple event objects.containerTokenA token that specifies the container of the desired Apple event objects.containerClassThe object class of the container.keyForm    The key form specified by the object specifier record being resolved.keyData    The key data specified by the object specifier record being resolved.theToken    The token returned by the MyObjectAccessor function.theRefcon    A reference constant that the Apple Event Manager passes to the object accessor function each time it is called.DESCRIPTIONEach object accessor function provided by your application should either find elements of a specified object class or find properties of an Apple event object. The AEResolve function uses the object class ID of the specified Apple event object and the descriptor type of the token that identifies the object’s container to determine which object accessor function to call. To install an object accessor function either in your application’s object accessor dispatch table or in the system object accessor dispatch table, use the AEInstallObjectAccessor function, which is described on page 6-78. SPECIAL CONSIDERATIONSIf the Apple Event Manager receives the result code errAEEventNotHandled after calling an object accessor function, it attempts to use other methods of locating the requested objects, such as calling an equivalent system object accessor function. Thus, an object accessor function that can’t locate a requested object should return errAEEventNotHandled. This allows the Apple Event Manager to try other object accessor functions that may be available.RESULT CODESnoErr    0    No error occurred    errAEEventNotHandled    –1708    The object accessor function is unable to locate the requested Apple event object or objects    SEE ALSOFor information about installing object accessor functions, see “Installing Entries in the Object Accessor Dispatch Tables,” which begins on page 6-21.For information about writing object accessor functions, see “Writing Object Accessor Functions,” which begins on page 6-28. Object Callback FunctionsIf an Apple event parameter consists of an object specifier record, your handler for the Apple event typically calls AEResolve to begin the process of locating the requested Apple event objects. The AEResolve function in turn calls object accessor functions and, if necessary, object callback functions provided by your application when it needs the information they can provide.This section provides declarations for the seven object callback functions that your application can provide: the object-counting function (MyCountObjects), object-comparison function (MyCompareObjects), token disposal function (MyDisposeToken), error callback function (MyGetErrorDesc), mark token function (MyGetMarkToken), object-marking function (MyMark), and mark-adjusting function (MyAdjustMarks).For information about writing and installing object callback functions, see “Writing Object Callback Functions,” which begins on page 6-45. MyCountObjectsIf you want the Apple Event Manager to help your application resolve object specifier records of key form formTest (and if your application doesn’t specify kAEIDoWhose as described on page 6-48), you should provide an object-counting function and an object-comparison function. An object-counting function counts the number of Apple event objects of a specified class in a specified container. FUNCTION MyCountObjects (desiredClass: DescType;                                  containerClass: DescType;                                  theContainer: AEDesc;                                  VAR result: LongInt): OSErr;desiredClassThe object class of the Apple event objects to be counted.containerClassThe object class of the container for the Apple event objects to be counted.theContainerA token that identifies the container for the Apple event objects to be counted.result    Your object-counting function should return in this parameter the number of Apple objects of the specified class in the specified container.DESCRIPTIONThe Apple Event Manager calls your object-counting function when, in the course of resolving an object specifier record, the manager requires a count of the number of Apple event objects of a given class in a given container. SPECIAL CONSIDERATIONSIf the Apple Event Manager receives the result code errAEEventNotHandled after calling an object-counting function, it attempts to use other methods of counting the specified objects, such as calling an equivalent system object-counting function. Thus, an object-counting function that can’t count the specified objects should return errAEEventNotHandled. This allows the Apple Event Manager to try other object-counting functions that may be available.RESULT CODESnoErr    0    No error occurred    errAEEventNotHandled    –1708    The object-counting function is unable to count the specified Apple event objects    SEE ALSOFor more information, see “Writing an Object-Counting Function” on page 6-48. MyCompareObjectsIf you want the Apple Event Manager to help your application resolve object specifier records of key form formTest (and if your application doesn’t specify kAEIDoWhose as described on page 6-48), you should provide an object-counting function and an object-comparison function. After comparing one Apple event object to another or to the data for a descriptor record, an object-comparison function should return TRUE or FALSE in the result parameter. FUNCTION MyCompareObjects (comparisonOperator: DescType;                                     object: AEDesc;                                     objectOrDescToCompare: AEDesc;                                     VAR result: Boolean): OSErr;comparisonOperatorThe comparison operator. See the description of CreateCompDescriptor on page 6-89 for standard comparison operators at the time of publication of this book. The current version of the Apple Event Registry: Standard Suites lists all the constants for comparison operators.object    A token.objectOrDescToCompareA token or some other descriptor record that specifies either an Apple event object or a value to compare to the Apple event object specified by the object parameter.result    Your object-comparison function should return, in this parameter, a Boolean value that indicates whether the values of the object and objectOrDescToCompare parameters have the relationship specified by the comparisonOperator parameter (TRUE) or not (FALSE).DESCRIPTIONThe Apple Event Manager calls your object-comparison function when, in the course of resolving an object specifier record, the manager needs to compare an Apple event object with another or with a value.It is up to your application to interpret the comparison operators it receives. The meaning of comparison operators differs according to the Apple event objects being compared, and not all comparison operators apply to all object classes. SPECIAL CONSIDERATIONSIf the Apple Event Manager receives the result code errAEEventNotHandled after calling an object-comparison function, it attempts to use other methods of comparison, such as calling an equivalent system object-comparison function. Thus, an object-comparison function that can’t perform a requested comparison should return errAEEventNotHandled. This allows the Apple Event Manager to try other object-comparison functions that may be available.RESULT CODESnoErr    0    No error occurred    errAEEventNotHandled    –1708    The object-comparison function is unable to compare the specified Apple event objects    SEE ALSOFor more information, see “Writing an Object-Comparison Function” on page 6-50.MyDisposeTokenIf your application requires more than a call to the AEDisposeDesc function to dispose of a token, or if it supports marking callback functions, you must provide one token disposal function. A token disposal function disposes of a specified token. FUNCTION MyDisposeToken (VAR unneededToken: AEDesc): OSErr;unneededTokenThe token to dispose of.DESCRIPTIONThe Apple Event Manager calls your token disposal function whenever it needs to dispose of a token. It also calls your disposal function when your application calls the AEDisposeToken function. If your application does not provide a token disposal function, the Apple Event Manager calls AEDisposeDesc instead.Your token disposal function must be able to dispose of all of the token types used by your application. If your application supports marking, a call to MyDisposeToken to dispose of a mark token lets your application know that it can unmark the objects marked with that mark token. SPECIAL CONSIDERATIONSIf the Apple Event Manager receives the result code errAEEventNotHandled after calling a token disposal function, it attempts to dispose of the token by some other method, such as calling an equivalent system token disposal function if one is available or, if that fails, by calling AEDisposeDesc. Thus, a token disposal function that can’t dispose of a token should return errAEEventNotHandled. This allows the Apple Event Manager to try other token disposal functions that may be available.RESULT CODESnoErr    0    No error occurred    errAEEventNotHandled    –1708    The token disposal function is unable to dispose of the token    MyGetErrorDescIf you want to find out which descriptor record is responsible for an error that occurs during a call to the AEResolve function, you can provide an error callback function. An error callback function returns a pointer to an address. The Apple Event Manager uses this address to store the descriptor record it is currently working with if an error occurs during a call to AEResolve.FUNCTION MyGetErrorDesc (VAR errDescPtr: DescPtr): OSErr;errDescPtrA pointer to an address.DESCRIPTIONYour error callback function simply returns an address. Shortly after your application calls AEResolve, the Apple Event Manager calls your error callback function and writes a null descriptor record to the address returned, overwriting whatever was there previously. If an error occurs during the resolution of the object specifier record, the Apple Event Manager calls your error callback function again and writes the descriptor record—often an object specifier record—to the address returned. If AEResolve returns an error during the resolution of an object specifier record, this address contains the descriptor record responsible for the error.Normally you should maintain a single global variable of type AEDesc whose address your error callback function returns no matter how many times it is called. Be careful if you use any other method. When recovering from an error, the Apple Event Manager never writes to the address you provide unless it already contains a null descriptor record. Thus, if you don’t maintain a single global variable as just described, you should write null descriptor records to any addresses passed by your error callback function that are different from the addresses returned the first time your function is called after a given call to AEResolve.If the result code returned by the MyGetErrorDesc function has a nonzero value, the Apple Event Manager continues to resolve the object specifier record as if it had never called the error callback function.RESULT CODEnoErr    0    No error occurred     MyGetMarkTokenIf your application supports marking, you must provide one mark token function. A mark token function returns a mark token. FUNCTION MyGetMarkToken (containerToken: AEDesc;                                  containerClass: DescType;                                  VAR result: AEDesc): OSErr;containerTokenThe Apple event object that contains the elements to be marked with the mark token.containerClassThe object class of the container that contains the objects to be marked.result    Your mark token function should return a mark token in this parameter.DESCRIPTIONTo get a mark token, the Apple Event Manager calls your mark token function. Like other tokens, the mark token returned can be a descriptor record of any type; however, unlike other tokens, a mark token identifies the way your application will mark Apple event objects during the current session while resolving a single object specifier record that specifies the key form formTest. A mark token is valid until the Apple Event Manager either disposes of it (by calling AEDisposeToken) or returns it as the result of the AEResolve function. If the final result of a call to AEResolve is a mark token, the Apple event objects currently marked for that mark token are those specified by the object specifier record passed to AEResolve, and your application can proceed to do whatever the Apple event has requested. Note that your application is responsible for disposing of a final mark token with a call to AEDisposeToken, just as for any other final token.If your application supports marking, it should also provide a token disposal function modeled after the token disposal function described on page 6-99. When the Apple Event Manager calls AEDisposeToken to dispose of a mark token that is not the final result of a call to AEResolve, the subsequent call to your token disposal function lets you know that you can unmark the Apple event objects marked with that mark token. A call to AEDisposeDesc to dispose of a mark token (which would occur if you did not provide a token disposal function) would go unnoticed. RESULT CODESnoErr    0    No error occurred    errAEEventNotHandled    –1708    The mark token function is unable to return a mark token; if the Apple Event Manager gets this result, it attempts to get a mark token by calling the equivalent system marking callback function    SEE ALSOFor more information, see “Writing Marking Callback Functions,” which begins on page 6-53. MyMarkIf your application supports marking, you must provide one object-marking function. An object-marking function marks a specific Apple event object. FUNCTION MyMark (theToken: AEDesc; markToken: AEDesc;                       markCount: LongInt): OSErr;theToken    The token for the Apple event object to be marked.markToken    The mark token used to mark the Apple event object.markCount    The number of times MyMark has been called for the current mark token (that is, the number of Apple event objects that have so far passed the test, including the element to be marked).DESCRIPTIONTo mark an Apple event object using the current mark token, the Apple Event Manager calls the object-marking function provided by your application. In addition to marking the specified object, your MyMark function should record the mark count for each object that it marks. The mark count recorded for each marked object allows your application to determine which of a set of marked tokens pass a test, as described in the next section for the MyAdjustMarks function.RESULT CODESnoErr    0    No error occurred    errAEEventNotHandled    –1708    The MyMark function is unable to mark the specified Apple event object; if the Apple Event Manager gets this result, it attempts to mark the object by calling the equivalent system object-marking function    SEE ALSOFor more information, see “Writing Marking Callback Functions,” which begins on page 6-53.MyAdjustMarksIf your application supports marking, you must provide one mark-adjusting function. A mark-adjusting function adjusts the marks made with the current mark token. FUNCTION MyAdjustMarks (newStart, newStop: LongInt;                                 markToken: AEDesc): OSErr;newStart    The mark count value (provided when the MyMark callback routine was called to mark the object) for the first object in the new set of marked objects.newStop    The mark count value (provided when the MyMark callback routine was called to mark the object) for the last object in the new set of marked objects.markToken    The mark token for the marked objects.DESCRIPTIONWhen the Apple Event Manager needs to identify either a range of elements or the absolute position of an element in a group of Apple event objects that pass a test, it can use your application’s mark-adjusting function to unmark objects previously marked by a call to your marking function. For example, suppose an object specifier record specifies “any row in the table ‘MyCustomers’ for which the City column is ‘San Francisco.’” The Apple Event Manager first uses the appropriate object accessor function to locate all the rows in the table for which the City column is “San Francisco” and calls the application’s marking function repeatedly to mark them. It then generates a random number between 1 and the number of rows it found that passed the test and calls the application’s mark-adjusting function to unmark all the rows whose mark count does not match the randomly generated number. If the randomly chosen row has a mark count value of 5, the Apple Event Manager passes the value 5 to the mark-adjusting function in both the newStart parameter and the newStop parameter, and passes the current mark token in the markToken parameter. When the Apple Event Manager calls your MyAdjustMarks function, your application must dispose of any data structures that it created to mark the previously marked objects.RESULT CODESnoErr    0    No error occurred    errAEEventNotHandled    –1708    The MyAdjustMarks function is unable to adjust the marks as requested; if the Apple Event Manager gets this result, it attempts to adjust the marks by calling the equivalent system mark-adjusting function    SEE ALSOFor more information, see “Writing Marking Callback Functions” on page 6-53.  Summary of Resolving and Creating Object Specifier RecordsPascal SummaryConstantsCONST            gestaltAppleEventsAttr                                    = 'evnt';                {selector for Apple events}    gestaltAppleEventsPresent                                    = 0;                {if this bit is set, Apple }                                                        { Event Manager is available}    {logical operators for descriptor records with keyword }     { keyAELogicalOperator}    kAEAND                                =    'AND ';                    kAEOR                                =    'OR  ';    kAENOT                                =    'NOT ';    {absolute ordinals used as key data in an object specifier }     { record with key form formAbsolutePosition}    kAEFirst                                =    'firs';    kAELast                                =    'last';    kAEMiddle                                =    'midd';    kAEAny                                =    'any ';    kAEAll                                =    'all ';    {relative ordinals used as key data in an object specifier record }    { with key form formRelativePosition}    kAENext                                =    'next';    kAEPrevious                                =    'prev';        {keywords for object specifier records}     keyAEDesiredClass                                =    'want'; {object class ID}    keyAEContainer                                =    'from'; {description of container}    keyAEKeyForm                                =    'form'; {key form}    keyAEKeyData                                 =     'seld'; {key data for specified key form}    {keywords for range descriptor records}    keyAERangeStart                                =    'star';                {beginning of range}    keyAERangeStop                                =    'stop';                {end of range}        {values for the keyAEKeyForm field of an object specifier record}                             formAbsolutePosition                                 =    'indx'        ;        {for example, 1 = first }                                                        { element in container, -2 = }                                                        { second from end of container}    formRelativePosition                                =    'rele';                {key data specifies element }                                                        { before or after container}    formTest                                =    'test';                {key data specifies a test}    formRange                                =    'rang';                {key data specifies a range}    formPropertyID                                =    'prop';                {key data is property ID}    formName                                =    'name';                {key data is element's name}    {descriptor types used to identify Apple event objects}    typeObjectSpecifier                                 =     'obj ';                {object specifier record, often }                                                        { used as keyAEContainer}    typeObjectBeingExamined =                                  'exmn';                    {used as keyAEContainer}    typeCurrentContainer                                =    'ccnt';                {used as keyAEContainer}    typeToken                                =    'toke';                {substituted for 'ccnt' }                                                        { before accessor called}    typeAbsoluteOrdinal                                 =    'abso';                {formAbsolutePosition}    typeRangeDescriptor                                 =     'rang';                {formRange}    typeLogicalDescriptor                                =     'logi';                {formTest}    typeCompDescriptor                                =    'cmpd';                {formTest}    {various relevant keywords}    keyAECompOperator                                =    'relo';                {operator for comparison: }                                                        { '=', '<=', etc.}    keyAELogicalTerms                                =    'term';                {an AEList of terms to be }                                                        { related by 'logc' below}    keyAELogicalOperator                                =    'logc';                {kAEAND, kAEOR, or kAENOT}    keyAEObject1                                =    'obj1';                {first of two objects being }                                                        { compared; must be object }                                                        { specifier record}    keyAEObject2                                =    'obj2';                {the other object; may be }                                                        { simple descriptor record }                                                        { or object specifier record}    {special handler selectors used with AESetObjectCallbacks}    keyDisposeTokenProc                                =    'xtok';    keyAECompareProc                                 =     'cmpr';    keyAECountProc                                 =     'cont';    keyAEMarkTokenProc                                 =     'mkid';    keyAEMarkProc                                 =     'mark';    keyAEAdjustMarksProc                                 =     'adjm';    keyAEGetErrDescProc                                 =     'indc';    {additive values for callbackFlags parameter to AEResolve}    kAEIDoMinimum                                =    $0000;            {server does not support whose }                                                    { descriptor records or marking}    kAEIDoWhose                                =    $0001;            {server supports whose }                                                    { descriptor records}    kAEIDoMarking                                =    $0004;            {server supports marking}    {constants for whose descriptor records}    typeWhoseDescriptor                                =    'whos';            {whose descriptor record}    formWhose                                =    'whos';            {key form for key data of descriptor }                                                    { type typeWhoseDescriptor}    typeWhoseRange                                =    'wrng';             {whose range descriptor record}    keyAEWhoseRangeStart                                =    'wstr';            {beginning of range}    keyAEWhoseRangeStop                                =    'wstp';            {end of range}    keyAEIndex                                =    'kidx';            {index for whose descriptor record}    keyAETest                                =    'ktst';            {test for whose descriptor record}Data TypesTYPE    ccntTokenRecord =                                                     {used for rewriting tokens in }    RECORD                                                    { place of 'ccnt' descriptor }        tokenClass:                     DescType;                            { records; only of interest to }        token:                     AEDesc;                            { those who, when they get ranges }    END;                                                    { as key data in their object }                                                        { accessor functions, resolve }    ccntTokenRecPtr = ^ccntTokenRecord;                                                    { the object specifier records }    ccntTokenRecHandle = ^ccntTokenRecPtr;                                                    { for the end points manually}    DescPtr = ^AEDesc;    DescHandle = ^DescPtr;    AccessorProcPtr = ProcPtr;Routines for Resolving and Creating Object Specifier RecordsInitializing the Object Support LibraryFUNCTION AEObjectInit : OSErr;Setting Object Accessor Functions and Object Callback FunctionsFUNCTION AEInstallObjectAccessor(desiredClass: DescType; containerType: DescType; theAccessor: AccessorProcPtr; accessorRefcon: LongInt; isSysHandler: Boolean): OSErr;FUNCTION AESetObjectCallbacks(myCompareProc, myCountProc, myDisposeTokenProc,                                        myGetMarkTokenProc, myMarkProc,myAdjustMarksProc, myGetErrDescProc: ProcPtr): OSErr;Getting, Calling, and Removing Object Accessor FunctionsFUNCTION AEGetObjectAccessor(desiredClass: DescType; containerType: DescType;VAR theAccessor: AccessorProcPtr;VAR accessorRefcon: LongInt; isSysHandler: Boolean): OSErr;FUNCTION AECallObjectAccessor(desiredClass: DescType; containerToken: AEDesc;containerClass: DescType; keyForm: DescType; keyData: AEDesc; VAR theToken: AEDesc): OSErr;FUNCTION AERemoveObjectAccessor(desiredClass: DescType; containerType: DescType; theAccessor: AccessorProcPtr; isSysHandler: Boolean): OSErr;Resolving Object Specifier RecordsFUNCTION AEResolve     (objectSpecifier: AEDesc; callbackFlags: Integer;VAR theToken: AEDesc): OSErr;Deallocating Memory for TokensFUNCTION AEDisposeToken     (VAR theToken: AEDesc): OSErr;Creating Object Specifier RecordsFUNCTION CreateOffsetDescriptor(theOffset: LongInt; VAR theDescriptor: AEDesc): OSErr;FUNCTION CreateCompDescriptor(comparisonOperator: DescType;VAR operand1: AEDesc; VAR operand2: AEDesc; disposeInputs: Boolean; VAR theDescriptor: AEDesc): OSErr;FUNCTION CreateLogicalDescriptor(VAR theLogicalTerms: AEDescList; theLogicOperator: DescType; disposeInputs: Boolean; VAR theDescriptor: AEDesc): OSErr;FUNCTION CreateRangeDescriptor(VAR rangeStart: AEDesc; VAR rangeStop: AEDesc; disposeInputs: Boolean; VAR theDescriptor: AEDesc): OSErr;FUNCTION CreateObjSpecifier    (desiredClass: DescType;VAR theContainer: AEDesc; keyForm: DescType; VAR keyData: AEDesc; disposeInputs: Boolean; VAR objSpecifier: AEDesc): OSErr;Application-Defined RoutinesObject Accessor FunctionsFUNCTION MyObjectAccessor     (desiredClass: DescType; containerToken: AEDesc; containerClass: DescType; keyForm: DescType; keyData: AEDesc; VAR theToken: AEDesc; theRefcon: LongInt): OSErr;Object Callback FunctionsFUNCTION MyCountObjects    (desiredClass: DescType; containerClass: DescType; theContainer: AEDesc; VAR result: LongInt): OSErr;FUNCTION MyCompareObjects    (comparisonOperator: DescType; theobject: AEDesc; objectOrDescToCompare: AEDesc; VAR result: Boolean): OSErr;FUNCTION MyDisposeToken     (VAR unneededToken: AEDesc): OSErr;FUNCTION MyGetErrorDesc     (VAR errDescPtr: DescPtr): OSErr;FUNCTION MyGetMarkToken     (containerToken: AEDesc; containerClass: DescType; VAR result: AEDesc): OSErr;FUNCTION MyMark     (theToken: AEDesc; markToken: AEDesc;markCount: LongInt): OSErr;FUNCTION MyAdjustMarks     (newStart, newStop: LongInt; markToken: AEDesc): OSErr;C SummaryConstantsenum {        #define         gestaltAppleEventsAttr                                      'evnt'            /*selector for Apple events*/        gestaltAppleEventsPresent                                             = 0        /*if this bit is set, then */                                                            /* Apple Event Manager is */};                                                            /* available*//*logical operators for descriptor records with keyword */ /* keyAELogicalOperator*/#define kAEAND                                                'AND '                #define kAEOR                                                'OR  '#define kAENOT                                                'NOT '/*absolute ordinals used as key data in an object specifier */ /* record with key form formAbsolutePosition*/#define kAEFirst                                                'firs'#define kAELast                                                'last'#define kAEMiddle                                                'midd'#define kAEAny                                                'any '#define kAEAll                                                'all '/*relative ordinals used as key data in an object specifier record *//* with key form formRelativePosition*/#define kAENext                                                'next'#define kAEPrevious                                                'prev'/*keywords for object specifier records*/                                                             #define keyAEDesiredClass                                                'want'            /*object class ID*/#define keyAEContainer                                                'from'            /*description of container*/#define keyAEKeyForm                                                'form'            /*key form*/#define keyAEKeyData                                                  'seld'            /*key data for specified key */                                                            /* form*//*keywords for range descriptor records*/#define keyAERangeStart                                                'star'            /*beginning of range*/#define keyAERangeStop                                                'stop'            /*end of range*/    /*values for the keyAEKeyForm field of an object specifier record*/                         #define formAbsolutePosition                                                 'indx'             /*for example, 1 = first */                                                            /* element in container, -2 = */                                                            /* second from end of */                                                            /* container*/#define formRelativePosition                                                'rele'             /*key data specifies element */                                                            /* before or after container*/#define formTest                                                'test'            /*key data specifies a test*/#define formRange                                                'rang'             /*key data specifies a range*/#define formPropertyID                                                'prop'             /*key data is property ID*/#define formName                                                'name'             /*key data is element's name*//* descriptor types used to identify Apple event objects*/#define typeObjectSpecifier                                                  'obj '            /*object specifier record, */                                                            /* often used as */                                                            /* keyAEContainer*/#define typeObjectBeingExamined                                                 'exmn'            /*used as keyAEContainer*/#define typeCurrentContainer                                                'ccnt'            /*used as keyAEContainer*/#define typeToken                                                'toke'            /*substituted for 'ccnt' */                                                            /* before accessor called*/#define typeAbsoluteOrdinal                                                 'abso'            /*formAbsolutePosition*/#define typeRangeDescriptor                                                  'rang'            /*formRange*/#define typeLogicalDescriptor                                                 'logi'            /*formTest*/#define typeCompDescriptor                                                'cmpd'            /*formTest*//*various relevant keywords*/#define keyAECompOperator                                                'relo'            /*operator for comparison: */                                                            /* '=', '<=', etc.*/#define keyAELogicalTerms                                                'term'            /*an AEList of terms to be */                                                            /* related by 'logc' below*/#define keyAELogicalOperator                                                'logc'            /*kAEAND, kAEOR, or kAENOT*/#define keyAEObject1                                                'obj1'            /*first of two objects being */                                                            /* compared; must be object */                                                            /* specifier record*/#define keyAEObject2                                                'obj2'            /*the other object; may be */                                                            /* simple descriptor record */                                                            /* or object specifier record*//*special handler selectors used with AESetObjectCallbacks*/#define keyDisposeTokenProc                                                'xtok'#define keyAECompareProc                                                  'cmpr'#define keyAECountProc                                                  'cont'#define keyAEMarkTokenProc                                                  'mkid'#define keyAEMarkProc                                                  'mark'#define keyAEAdjustMarksProc                                                  'adjm'#define keyAEGetErrDescProc                                                  'indc'/*additive values for callbackFlags parameter to AEResolve*/#define kAEIDoMinimum                                                0x0000            /*server does not support */                                                            /* whose descriptor records */                                                            /* or marking*/#define kAEIDoWhose                                                0x0001            /*server supports whose */                                                            /* descriptor records*/#define kAEIDoMarking                                                0x0004            /*server supports marking*//*constants for whose descriptor records*/#define typeWhoseDescriptor                                                'whos'            /*whose descriptor record*/#define formWhose                                                'whos'            /*key form for key data of */                                                            /* descriptor type */                                                            /* typeWhoseDescriptor*/#define typeWhoseRange                                                'wrng'            /*whose range descriptor */                                                            /* record*/#define keyAEWhoseRangeStart                                                'wstr'            /*beginning of range*/#define keyAEWhoseRangeStop                                                'wstp'            /*end of range*/#define keyAEIndex                                                'kidx'            /*index for whose descriptor */                                                            /* record*/#define keyAETest                                                'ktst'            /*test for whose descriptor */                                                            /* record*/Data Typesstruct ccntTokenRecord                             {                                /*used for rewriting tokens */    DescType tokenClass                        ;                                /* in place of 'ccnt' */    AEDesc token                ;                                        /* descriptor records; only */};                                                            /* of interest to those who, */                                                            /* when they get ranges as */typedef struct ccntTokenRecord ccntTokenRecord,                                                             /* key data in their object */*ccntTokenRecPtr, **ccntTokenRecHandle;                                                            /* accessor functions, */                                                             /* resolve them manually*/typedef AEDesc *DescPtr, **DescHandle;/*typedefs providing type checking for procedure pointers*/typedef pascal OSErr (*accessorProcPtr) (DescType desiredClass,                                                        const AEDesc *container,                                                         DescType containerClass,                                                         DescType form,                                                        const AEDesc *selectionData,                                                         AEDesc *value, long LongInt);typedef pascal OSErr (*compareProcPtr)(DescType oper, const AEDesc *obj1,                                                    const AEDesc *obj2,                                                    Boolean *result);typedef pascal OSErr (*countProcPtr)(DescType desiredClass,                                                     DescType containerClass,                                                    const AEDesc *container,                                                     long *result);typedef pascal OSErr (*disposeTokenProcPtr)(AEDesc *unneededToken);typedef pascal OSErr (*getMarkTokenProcPtr)(const AEDesc *ContainerToken,                                                             DescType containerClass,                                                            AEDesc *result);typedef pascal OSErr (*getErrDescProcPtr)(DescPtr *appDescPtr);Routines for Resolving and Creating Object Specifier RecordsInitializing the Object Support Librarypascal OSErr AEObjectInit    ();Setting Object Accessor Functions and Object Callback Functionspascal OSErr AEInstallObjectAccessor(DescType desiredClass, DescType containerType,accessorProcPtr theAccessor,long accessorRefcon, Boolean isSysHandler);pascal OSErr AESetObjectCallbacks(compareProcPtr myCompareProc, countProcPtr myCountProc, disposeTokenProcPtr myDisposeTokenProc, getMarkTokenProcPtr myGetMarkTokenProc, markProcPtr myMarkProc, adjustMarksProcPtr myAdjustMarksProc, getErrDescProcPtr myGetErrDescProc);Getting, Calling, and Removing Object Accessor Functionspascal OSErr AEGetObjectAccessor(DescType desiredClass, DescType containerType,accessorProcPtr *theAccessor,long *accessorRefcon, Boolean isSysHandler);pascal OSErr AECallObjectAccessor(DescType desiredClass, const AEDesc *containerToken, DescType containerClass, DescType keyForm, const AEDesc *keyData, AEDesc *theToken);pascal OSErr AERemoveObjectAccessor(DescType desiredClass, DescType containerType,accessorProcPtr theAccessor, Boolean isSysHandler);Resolving Object Specifier Recordspascal OSErr AEResolve    (const AEDesc *objectSpecifier, short callbackFlags, AEDesc *theToken);Deallocating Memory for Tokenspascal OSErr AEDisposeToken    (AEDesc *theToken);Creating Object Specifier Recordspascal OSErr CreateOffsetDescriptor(long theOffset, AEDesc *theDescriptor);pascal OSErr CreateCompDescriptor(DescType comparisonOperator, AEDesc* operand1,AEDesc* operand2, Boolean                                             disposeInputs, AEDesc* theDescriptor);pascal OSErr CreateLogicalDescriptor(AEDescList *theLogicalTerms, DescType theLogicOperator, Boolean disposeInputs, AEDesc *theDescriptor);pascal OSErr CreateRangeDescriptor(AEDesc *rangeStart, AEDesc *rangeStop,Boolean disposeInputs, AEDesc *theDescriptor);pascal OSErr CreateObjSpecifier(DescType desiredClass, AEDesc *theContainer,DescType                                         keyForm, AEDesc *keyData, Boolean disposeInputs, AEDesc *objSpecifier);Application-Defined RoutinesObject Accessor Functionspascal OSErr MyObjectAccessor(DescType desiredClass, const AEDesc *containerToken, DescType containerClass, DescType keyForm, const AEDesc *keyData, AEDesc *theToken, long *theRefcon);Object Callback Functionspascal OSErr MyCountObjects    (DescType desiredClass, DescType containerClass, const AEDesc *theContainer, long *result);pascal OSErr MyCompareObjects(DescType comparisonOperator, const AEDesc *theObject, const AEDesc *objectOrDescToCompare, Boolean *result);pascal OSErr MyDisposeToken    (AEDesc *unneededToken);pascal OSErr MyGetErrorDesc    (DescPtr *errDescPtr);pascal OSErr MyGetMarkToken    (const AEDesc *containerToken, DescType containerClass, AEDesc *result);pascal OSErr MyMark    (const AEDesc *theToken, const AEDesc *markToken, long markCount);pascal OSErr MyAdjustMarks    (long newStart, long newStop, const AEDesc *markToken);Assembly-Language SummaryTrap MacrosTrap Macros Requiring Routine Selectors_Pack8Selector    Routine    $023A    AEDisposeToken    $0536    AEResolve    $0738    AERemoveObjectAccessor    $0937    AEInstallObjectAccessor    $0939    AEGetObjectAccessor    $0C3B    AECallObjectAccessor    $0E35    AESetObjectCallbacks    Result CodesnoErr    0    No error    paramErr    –50    Parameter error (for example, value of handler pointer is NIL or odd)    eLenErr    –92    Buffer too big to send    memFullErr    –108    Not enough room in heap zone    userCanceledErr    –128    User canceled an operation    procNotFound    –600    No eligible process with specified process serial number    bufferIsSmall    –607    Buffer is too small    noOutstandingHLE    –608    No outstanding high-level event    connectionInvalid    –609    Nonexistent signature or session ID    noUserInteractionAllowed    –610    Background application sends event requiring authentication    noPortErr    –903    Client hasn’t set 'SIZE' resource to indicate awareness of high-level events    destPortErr    –906    Server hasn’t set 'SIZE' resource to indicate awareness of high-level events, or else is not present    sessClosedErr    –917    The kAEDontReconnect flag in the sendMode parameter was set, and the server quit and then restarted    errAECoercionFail    –1700    Data could not be coerced to the requested descriptor type    errAEDescNotFound    –1701    Descriptor record was not found    errAECorruptData    –1702    Data in an Apple event could not be read    errAEWrongDataType    –1703    Wrong descriptor type    errAENotAEDesc    –1704    Not a valid descriptor record    errAEBadListItem    –1705    Operation involving a list item failed    errAENewerVersion    –1706    Need a newer version of the Apple Event Manager    errAENotAppleEvent    –1707    Event is not an Apple event    errAEEventNotHandled    –1708    Event wasn’t handled by an Apple event handler    errAEReplyNotValid    –1709    AEResetTimer was passed an invalid reply    errAEUnknownSendMode    –1710    Invalid sending mode was passed    errAEWaitCanceled    –1711    User canceled out of wait loop for reply or receipt    errAETimeout    –1712    Apple event timed out    errAENoUserInteraction    –1713    No user interaction allowed    errAENotASpecialFunction    –1714    The keyword is not valid for a special function    errAEParamMissed    –1715    Handler cannot understand a parameter the client considers required    errAEUnknownAddressType    –1716    Unknown Apple event address type    errAEHandlerNotFound    –1717    No handler found for an Apple event or a coercion, or no object callback function found    errAEReplyNotArrived    –1718    Reply has not yet arrived    errAEIllegalIndex    –1719    Not a valid list index    errAEImpossibleRange    –1720    The range is not valid because it is impossible for a range to include the first and last objects that were specified; an example is a range in which the offset of the first object is greater than the offset of the last object    errAEWrongNumberArgs    –1721    The number of operands provided for the kAENOT logical operator is not 1    errAEAccessorNotFound    –1723    There is no object accessor function for the specified object class and token descriptor type    errAENoSuchLogical    –1725    The logical operator in a logical descriptor record is not kAEAND, kAEOR, or kAENOT    errAEBadTestKey    –1726    The descriptor record in a test key is neither a comparison descriptor record nor a logical descriptor record    errAENotAnObjectSpec    –1727    The objSpecifier parameter of AEResolve is not an object specifier record    errAENoSuchObject    –1728     A run-time resolution error, for example: object specifier record asked for the third element, but there are only 2.    errAENegativeCount    –1729     Object-counting function returned negative value    errAEEmptyListContainer    –1730    The container for an Apple event object is specified by an empty list    errAEUnknownObjectType    –1731    Descriptor type of token returned by AEResolve is not known to server application     errAERecordingIsAlreadyOn    –1732    Attempt to turn recording on when it is already on    Listing 7-0Table 7-0Introduction to ScriptingContentsAbout Scripts and Scripting Components7-4Script Editors and Script Files7-6Scripting Components and Scriptable Applications7-8Scripting Components and Applications That Execute Scripts7-11Making Your Application Scriptable7-14About Apple Event Terminology Resources7-15How AppleScript Uses Terminology Information7-17Dynamic Loading of Terminology Information7-20Making Your Application Recordable7-20Manipulating and Executing Scripts7-22Compiling, Saving, Modifying, and Executing Scripts7-24Using a Script Context to Handle an Apple Event7-25Introduction to ScriptingThis chapter provides an overview of the tasks involved in making your application scriptable and recordable. This chapter also introduces some of the ways your application can use the Component Manager and scripting components to manipulate and execute scripts. The three chapters that follow provide detailed information, including sample code, about the topics introduced in this chapter.The chapter “Introduction to Interapplication Communication” in this book describes the Open Scripting Architecture (OSA) and its relationship to the Apple Event Manager and other parts of the IAC architecture. If your application supports the appropriate core and functional-area events defined in the Apple Event Registry: Standard Suites, you can make it scriptable (that is, capable of responding to Apple events sent by scripting components) by providing an Apple event terminology extension ('aete') resource. This chapter describes some of the tasks involved in making your application scriptable and introduces the 'aete' resource. The next chapter, “Apple Event Terminology Resources,” describes in detail how to create an 'aete' resource.This chapter also introduces Apple event recording and the use of the standard scripting component routines to manipulate and execute scripts. The chapter “Recording Apple Events” describes in detail how to make your application recordable, and the chapter “Scripting Components” describes how to use the standard scripting component routines.To use this chapter or any of the chapters that follow, you should be familiar with the chapters “Introduction to Apple Events” and “Responding to Apple Events” in this book. If you plan to make your application recordable, you should also read the chapters “Creating and Sending Apple Events” and “Resolving and Creating Object Specifier Records.”The AppleScript Software Developers’ Kit (available from APDA) provides development tools, sample applications, and information about the AppleScript language that you will find useful when you begin to apply the information in this chapter to your application. If you are developing a scripting component, you should provide support for the standard scripting component routines described in the chapter “Scripting Components,” and you should read the instructions for creating components in the chapter “Component Manager” in Inside Macintosh: More Macintosh Toolbox. This chapter begins with an overview of scripts and scripting components. The rest of the chapter describes how the OSA makes it possible to n    make your application scriptablen    make your application recordablen    have your application manipulate and execute scriptsAbout Scripts and Scripting ComponentsA script is any collection of data that, when executed by the appropriate program, causes a corresponding action or series of actions. The Open Scripting Architecture (OSA) provides a standard mechanism that allows users to control multiple applications with scripts written in a variety of scripting languages. Each scripting language has a corresponding scripting component. Each scripting component supports the standard scripting component routines described in the chapter “Scripting Components” in this book.  When a scripting component executes a script, it performs the actions described in the script, including sending Apple events to applications if necessary. Like other components that use the Component Manager, scripting components can provide their own routines in addition to the standard routines that must be supported by all components of the same type.Scripting components typically implement a text-based scripting language based on Apple events. For example, the AppleScript component implements AppleScript, the standard user scripting language defined by Apple Computer, Inc. This book uses AppleScript examples to demonstrate how applications can interact with scripting components.  Other scripting components may support the standard scripting component routines in different ways. Scripting components need not implement a text-based scripting language, or even one that is based on Apple events. For example, specialized scripting components can play sounds, execute XCMDs, or perform almost any other action when they execute scripts. This chapter describes three ways that you can take advantage of the OSA:n    You can make your application scriptable, or capable of responding to Apple events sent to it by a scripting component. An application is scriptable if itn    Responds to the appropriate standard Apple events as described in the chapter “Responding to Apple Events” in this book.n    Provides an Apple event terminology extension ('aete') resource describing the Apple events that your application supports and the user terminology that corresponds to those events. The 'aete' resource allows scripting components to interpret scripts correctly and send the appropriate Apple events to your application during script execution.n    You can make your application recordable—that is, capable of sending Apple events to itself to report user actions to the Apple Event Manager for recording purposes. After a user has turned on recording for a particular scripting component, the scripting component receives a copy of every subsequent Apple event that any application on the local computer sends to itself. The scripting component records such events in the form of a script. n    You can have your application manipulate and execute scripts with the aid of a scripting component. To do so, your application mustn    Use the Component Manager to open a connection with the appropriate component.n    Use the standard scripting component routines described in the chapter “Scripting Components” to record, edit, compile, save, load, or execute scripts.Users of scriptable applications can execute scripts to perform tasks that might otherwise be difficult to accomplish, especially repetitive or conditional tasks that involve multiple applications. For example, a user can execute an AppleScript script to locate database records with specific characteristics, create a series of graphs based on those records, import the graphs into a page-layout document, and send the document to a remote computer on the network via electronic mail. When a user executes such a script, the AppleScript component attempts to perform the actions the script describes, including sending Apple events when necessary. To respond appropriately to the Apple events sent to it by the AppleScript component, the database application in this example must be able to locate records with specific characteristics so that it can identify and return the requested data. These characteristics are described by an object specifier record that is part of an Apple event supported by the application. Also, the other applications involved must support Apple events that manipulate the data in the ways described in the script. Each application in this example must also provide an 'aete' resource describing the Apple events that the application supports and the user terminology that corresponds to those events, so that the AppleScript component can interpret the script correctly.Even with little or no knowledge of a particular scripting language, users of applications that are recordable as well as scriptable can record simple scripts. More knowledgeable users may also wish to record their actions as scripts with recordable applications and then edit or combine scripts as needed.An application that uses scripting components to manipulate and execute scripts need not be scriptable; however, if it is scriptable, it can execute scripts that control its own behavior. In other words, it can perform tasks by means of scripts and allow users to modify those scripts to suit their own needs.The next three sections provide an overview of the way scripting components can interact with applications.Script Editors and Script FilesA script editor is an application that allows users to record, edit, save, and execute scripts. For example, the AppleScript component uses the services of the Script Editor application.  Figure 7-1 shows an AppleScript script displayed in a Script Editor window. The Record, Stop, and Run buttons control a script in much the same way that the equivalent buttons on a cassette recorder control an audio tape. A script comment at the top of the window describes what the script does. Users with some knowledge of a text-based scripting language such as AppleScript can use Script Editor to modify recorded scripts or write their own scripts.Figure 7-1    A script window in the Script Editor applicationScript Editor provides entry-level scripting capabilities, but it is not intended for intensive script development. Users who wish to write complex scripts may replace Script Editor with more sophisticated editors that provide specialized debugging and development tools.  A script like the one in Figure 7-1 can be stored in a script file represented by an icon in the Finder, or it can be stored within an application or one of its documents. Figure 7-2 shows the four icons representing the files in which Script Editor stores scripts.Figure 7-2    Script file icons in the Finder and corresponding user actionsScript Editor and similar script-editing applications allow users to store scripts using three file types:n    A compiled script file has the file type 'osas' and contains the script data as a resource of type 'scpt'. Before executing the script in a compiled script file, a user must first open the script from the Finder or from an application such as Script Editor. After opening a compiled script in an application that supports script editing, the user can view the script, modify it if necessary, and execute it.n    A script application has the file type 'APPL' and contains the script data as a resource of type 'scpt'. Its kind is “application.” A script application takes one of two forms, each with its own icon:  n    A script application with the creator signature 'aplt'. A user double-clicks the icon to trigger the script.   n    A script application with the creator signature 'dplt'. A user can drag the icon for another file or a folder over this script application’s icon to trigger a script that acts on that object.   By default, when a user triggers the script in either kind of script application, a splash screen appears that allows the user either to quit or to run the script. Users can also save a script application in a form that bypasses the splash screen, running the script immediately after the user double-clicks its icon.n    A script text file contains only a plain-text version of uncompiled scripting-language statements. This format is useful primarily as a last resort for saving a script that can’t be compiled because of syntax errors or other problems. It is also useful for exchanging unstyled text with other text-based applications. A user must open a script text file in a script editor and successfully compile it before it will execute. Like sound resources, scripts can be stored within applications and documents as well as in distinct files that can be manipulated from the Finder. Your application can use the standard scripting component routines to manipulate and execute both its own internally stored scripts and scripts stored as separate files whose icons appear in the Finder. For more information about script storage formats, see “Saving Script Data” on page 10-12. The next two sections describe how scripting components interact with scriptable applications and with applications that execute scripts.Scripting Components and Scriptable ApplicationsScripting components control the behavior of scriptable applications by means of Apple events. For example, when the AppleScript component executes the AppleScript script shown in Figure 7-1, it sends the Apple events shown in Figure 7-3 to trigger the actions described by the script. The client application in this example would most commonly be a script editor but could also be any other application that uses standard scripting component routines to manipulate and execute scripts. Figure 7-3    How the AppleScript component executes a scriptAs described in the chapter “Introduction to Apple Events” in this book, a client application is any application that uses Apple events to request a service or information. A client application that executes a script does not send the corresponding Apple events itself; instead, it uses scripting component routines to manipulate and execute the script. The scripting component sends Apple events when necessary to trigger the actions described in the script. Similarly, a scriptable application that responds to the Apple events sent by a scripting component can be considered the server application for those Apple events. When a scripting component evaluates a script, it attempts to perform all the actions described in the script, including sending Apple events when necessary. In the example shown in Figure 7-3, the AppleScript component first performs the action described in the first tell statement: tell application "SurfWriter"    copy table "Summary of Sales" of document¬         "Sales Report" to Totalsend tellTo perform this action, the AppleScript component sends a Get Data event to the SurfWriter application requesting the data from the specified table. The SurfWriter application returns the data to the AppleScript component in a standard reply Apple event, and the AppleScript component sets the value of the variable Totals to the data returned by SurfWriter.Then the AppleScript component performs the action described in the second tell statement:tell application "SurfCharter"    copy Totals to Chart 1 of document "Sales Chart"end tellIn this case, the AppleScript component sends a Set Data event to the SurfCharter application that sets the specified chart to the value of the variable Totals. Both SurfWriter and SurfCharter are server applications for the Apple events sent by the AppleScript component, because they are performing services in response to requests made by the client application via the script.To send the appropriate Apple events to a scriptable application while executing a script, a scripting component must obtain information about the nature of that application’s support for Apple events and the human-language terminology to associate with those events. A scriptable application provides this information in the form of an Apple event terminology extension ('aete') resource. A scripting component uses both the 'aete' resource provided by a scriptable application and the Apple event user terminology ('aeut') resource provided by the scripting component itself to obtain the information it needs to execute a script that controls that application. See “Making Your Application Scriptable,” which begins on page 7-14, for an overview of the tasks you should perform to make your application scriptable and a more detailed description of the 'aete' and 'aeut' resources. See “Making Your Application Recordable” on page 7-20 for an overview of the tasks you should perform if you want your application to be recordable as well as scriptable.Scripting Components and Applications That Execute ScriptsTo store and execute scripts as a client application, your application must first establish a connection with a scripting component registered with the Component Manager on the same computer. Each scripting component can manipulate and execute scripts written in the corresponding scripting language when your application calls the standard scripting component routines.Your application can use scripting component routines ton    obtain a handle to a script in a form that can be saved, and load the script again when necessaryn    allow users to modify scripts that have been previously savedn    compile and execute scriptsn    redirect Apple events to script contextsn    supply application-defined functions for use by scripting componentsn    control the recording process directly, turning recording off and on and saving the recorded script for use by your applicationYour application can perform these tasks as a client application regardless of whether it is scriptable or recordable. If your application is scriptable, however, it can execute scripts that control its own behavior, thus acting as both the client application and the server application for the corresponding Apple events. For example, your application can allow users to associate a script with a custom menu command that performs a series of routine actions on a selected object, sets preferences, or automates other actions within your application.You can also use scripting component routines to execute scripts that perform tasks for your application with the aid of other applications. For example, a user of a word-processing application might be able to attach a script to a specific word so that the application executes the script whenever that word is double-clicked. Such a script could trigger Apple events that cause other applications to look up and display related information, run a QuickTime movie, perform a calculation, play a voice annotation, and so on. Your application can associate a script with either Apple event objects or application-defined objects. Almost any user action can be used to trigger such a script: choosing a menu command, clicking a button, tabbing from one table cell to another, and so on. The script can be executed directly by the application when it detects a triggering action; or, if the script is associated with an Apple event object in the form of a script context, it can be executed automatically when a specified Apple event performs an action on that object.The rest of this section describes one way that an application could execute such a script. Suppose a forms application allows users to create custom forms that can include scripts associated with specific fields on the form. These scripts are executed when the user presses Enter or Tab in the appropriate field. For the purposes of this example, it doesn’t matter whether a field with which a script is associated is an Apple event object (which can be described in an object specifier record) or some other application-defined object (which can’t be described in an object specifier record). A company could use the forms application to create a custom order form for taking telephone orders. If the customer has ordered from the company before, the user can quickly retrieve the customer’s address from the company database by typing the customer’s name in a field and pressing the Tab key. In response, the application executes the script associated with the field. The script might look like this in AppleScript:set custName to field "Customer Name"tell application SurfDB    copy the first record in the table MyAddresses ¬        whose cell "Customer Name" = custName to Addressend tellset field "Street" to item 2 of Addressset field "City" to item 3 of Addressset field "Zip" to item 4 of AddressTo execute such a script (or to manipulate it any other way, such as when the form is first created), the forms application must previously have established a connection with the appropriate scripting component—in this case, the AppleScript component. When the user enters a customer name and presses Tab, the forms application calls scripting component routines to execute the script. As shown in Figure 7-4, the AppleScript component first sends the forms application a Get Data event that requests the contents of the “Customer Name” field and sets the variable custName to that value. It then sends SurfDB a Get Data event that requests the appropriate address information and copies it to the variable Address. (The replies to the Get Data events are not shown in Figure 7-4.) Finally, the AppleScript component sends the forms application a Set Data event that copies the address information from the variable Address to the appropriate fields. The AppleScript component needs to maintain the binding of the variables custName and Address throughout execution of the script. Scripting components bind variables with the aid of a script context, which is a script that maintains context information for the execution of other scripts. An application specifies a script context when it executes a script. The forms application in Figure 7-4 provides a context for the scripting component to use whenever it executes a script associated with a button. Figure 7-4    How an application uses the AppleScript component to execute a scriptIn the example shown in Figure 7-4, the application executes the script directly when the cursor is in the appropriate field and the user presses Tab or Enter. Your application can also associate such a script with an object in the form of a script context, so that the script context is executed whenever a specified Apple event acts on the field. The section “Using a Script Context to Handle an Apple Event,” which begins on page 7-25, describes this approach in more detail. See “Manipulating and Executing Scripts,” which begins on page 7-22, for an overview of methods your application can use to save and load script data, compile source data, and perform other useful tasks with scripting component routines. The chapter “Scripting Components” in this book provides full implementation details, including sample code and human interface guidelines for associating scripts with objects. Making Your Application ScriptableTo make your application scriptable, you need to n    define a hierarchy of Apple event objects within your application that you want client applications to be able to identify—that is, which objects can be contained by other Apple event objects in your application, which properties each kind of object can have, and so onn    write Apple event handlers, object accessor functions, and other routines required to implement the Apple events and related object classes that you want to supportn    create an 'aete' resourceThe chapters “Introduction to Apple Events,” “Responding to Apple Events,” and “Resolving and Creating Object Specifier Records” in this book describe how to perform the first two tasks. The extent to which scripts can control your application depends mainly on the extent of your application’s support for Apple events. For example, if your application does not provide the Apple event handlers and object accessor functions required to locate and manipulate windows, users will not be able to use scripts to control your application’s windows. Although you should use the definitions in the Apple Event Registry: Standard Suites whenever possible, you have considerable freedom to extend or limit your implementation of the standard Apple events according to the needs of your application.The OSA makes it possible to design new kinds of applications that always operate in the background and can be controlled only by means of scripts. For example, it is possible to design a simple telecommunications program that can log on to a network, send and receive text files created by another application, and perform other basic operations in response to scripts without providing any other form of user interface. Such an application would not need to support Apple events that control window movement, the File menu, or the Edit menu; instead, it would need to support only those Apple events that execute its basic telecommunications operations.At the other extreme, some applications allow users to arrange windows, palettes, and dialog boxes on their screen in many different ways, or to customize menus or other aspects of the presentation of information. If such an application can respond to scripts that control windows, dialog boxes, specialized preferences, and other aspects of the presentation of information, it can allow users who might not otherwise explore those capabilities to take advantage of them. For example, a naive user could execute a script that sets up a powerful word processor with the appropriate menus, window and palette arrangement, and formatting templates for a particular task, such as producing a company newsletter.Scripting components use 'aeut' and 'aete' resources to associate Apple event codes supported by your application with corresponding human-language terms used in scripts that control your application. Each scripting component supplies an 'aeut' resource, and each scriptable application provides an 'aete' resource. The next section introduces the 'aeut' and 'aete' resources. About Apple Event Terminology ResourcesAs explained in the chapter “Introduction to Apple Events” in this book, applications can support different combinations of the standard suites of Apple events. Applications can also extend the definitions of individual Apple events and object classes, or define custom Apple events and object classes. Scripting components use the Apple event user terminology resources, 'aeut' and 'aete', to associate the IDs, keywords, and other codes used in Apple events with the corresponding human-language terms used in scripts that control your application.  The Apple event user terminology ('aeut') resource contains terminology information for all the standard suites of Apple events defined in the Apple Event Registry: Standard Suites. The resource consists of a sequence of concatenated arrays that map human-language names to each of the following:n    the ID defined for each suiten    the Apple events defined for each suiten    the parameters defined for each Apple eventn    the Apple event object classes defined for each suiten    the properties defined for each object classn    the elements defined for each object classn    the key forms defined for each element classn    the comparison operators defined for each suiten    the values for enumerators defined for each suiteEach scripting component provides its own 'aeut' resource. A scripting component can also provide different versions of the 'aeut' resource; for example, the user terminology provided by the 'aeut' resource for the AppleScript Japanese dialect component is in Japanese. The IDs, keywords, and other codes listed in the 'aeut' resource are based on the Apple Event Registry: Standard Suites and do not vary from one version to another.An 'aete' resource has the same format as the 'aeut' resource but serves a different purpose. Each scriptable application must include its own 'aete' resource describing which of the standard suites listed in the 'aeut' resource it supports and providing other application-specific information. Since the human-language equivalents for the standard suites are defined in the 'aeut' resource, applications that support standard suites without any modifications do not have to define such equivalents; instead, they can simply list, in the 'aete' resource, the suites they support. The scripting component associates the standard suites listed in the 'aete' resource with the corresponding Apple event descriptions in its 'aeut' resource. Applications can also use the 'aete' resource to describe extensions to the standard suites, such as additional parameters for standard Apple events, additional properties and element classes for the standard Apple event object classes, and additional key forms for each element class. Information about such extensions must be included in the appropriate arrays of the 'aete' resource, along with the equivalent human-language terms. Similarly, an application can use the 'aete' resource to describe the parts of each standard suite it supports (if it doesn’t support the entire suite) and any custom Apple events or Apple event object classes defined by the application. The human language in which your Apple event extensions or custom Apple events are displayed in scripts depends on the corresponding user terminology you specify in your application’s 'aete' resource. Therefore, if your application implements such extensions or custom Apple events, you must provide a separate version of this resource for each localized version of your application.Scripting components can use the information in the 'aete' and 'aeut' resources in a variety of ways. The next section, “How AppleScript Uses Terminology Information,” describes how the AppleScript component uses these resources when it executes or records a script. The next chapter, “Apple Event Terminology Resources,” describes how to create an 'aete' resource for your application.If you want users to be able to control your application with scripts written in the AppleScript scripting language, you also need to know how the AppleScript component interprets AppleScript commands that trigger Apple events. In this way, you can make sure you support Apple events and specify the user terminology for your 'aete' resource in a way that translates easily into AppleScript statements. The section “Defining Terminology for Use by the AppleScript Component,” which begins on page 8-3, discusses these issues. If you implement Apple events so that they translate into logical and useful AppleScript scripts, your implementation will probably work well with other scripting components that resemble AppleScript. How AppleScript Uses Terminology InformationThe manner in which the AppleScript component uses the information in 'aete' resources depends on specific characteristics of the AppleScript scripting language. An AppleScript expression consists of an internal compiled form and corresponding expressions in dialects, or versions of the AppleScript scripting language that resemble different human languages. Users can select the dialect they want to use from within the Script Editor application. If a script is displayed in a window and the user selects a different dialect, the AppleScript component converts the script to the new dialect. Users can install additional dialects as necessary.This section describes how the AppleScript component uses the information in the 'aeut' and 'aete' resources, not how it obtains that information. For a description of the methods available to scripting components for loading information from terminology resources, see “Dynamic Loading of Terminology Information” on page 7-20.Figure 7-5 shows how the AppleScript component uses information from its 'aeut' resource and an application’s 'aete' resource to execute a script that consists of AppleScript statements displayed in a script editor window. When a user executes the script from the script editor (for example, by pressing the Run button in the Script Editor application), the AppleScript component first compiles the script into the equivalent compiled expressions, using information from its 'aeut' resource and the application’s 'aete' resource to map application-specific terms in the script with the equivalent Apple events and Apple event parameters. The AppleScript component then evaluates each expression and performs actions or sends Apple events as appropriate. For example, the AppleScript component evaluates the expression2*3as the value 6. The AppleScript component can then decompile and display this value in the script editor window, assign it to a variable, or otherwise manipulate it according to the rest of the script. However, to compile the statementprint Chart 1 of document "Sales Report"the AppleScript component uses its 'aeut' resource and the SurfWriter application’s 'aete' resource to associate the terms used in the script with the Print Apple event, the object class for charts, and the object class for documents, so that it can describe the event accurately in the form of a compiled expression. When the AppleScript component evaluates the compiled expression, it creates and sends a Print event whose direct parameter is an object specifier record that the SurfWriter application can resolve as the specified chart. The SurfWriter application then handles the Apple event by printing the chart as requested.Figure 7-5    Role of the 'aete' and 'aeut' resources when the AppleScript component compiles and executes a scriptNote that although Figure 7-5 shows only one Apple event generated as a result of executing a script, the AppleScript component could also send a series of Apple events to several different applications, depending on the content of the script.A recordable application generally needs to be able to send itself a subset of the Apple events that it can handle as a scriptable application. A recordable event is any Apple event that any recordable application sends to itself while recording is turned on for the local computer (with the exception of events that the application explicitly identifies as not for recording purposes). After a user turns on recording from the Script Editor application, the Apple Event Manager sends copies of all recordable events to Script Editor. A scripting component previously selected by the user handles each copied event for Script Editor by translating the event and recording the translation as part of a Script Editor script. When a scripting component executes a recorded script, it sends the corresponding Apple events to the applications in which they were recorded.Every scripting component must be able to handle copies of recordable events sent to a recording process (such as Script Editor) by recording them in an appropriate form. For example, as shown in Figure 7-6, the AppleScript component records copies of recordable events in the form of compiled expressions. The AppleScript component can then use information from its 'aeut' resource and the application’s 'aete' resource to translate the compiled expressions into the appropriate human-language terms and display them as AppleScript statements in the script editor window. When the user opens a recorded script in Script Editor and presses Run, the AppleScript component recompiles the script if necessary and sends the Apple events described by the compiled expressions to the SurfWriter application, just as in Figure 7-5.Figure 7-6    Role of the 'aete' and 'aeut' resources when the AppleScript component records and decompiles a scriptIf the user copies a chart from one document to another document and the SurfWriter application performs this task by sending itself Apple events, the equivalent statements in the recorded script might look something like this:tell application "SurfWriter"    select Chart 1 of document "Sales Chart"    copy    select paragraph 3 of document "Monthly Report"    pasteend tellTo display these statements in the script editor window, the AppleScript component first translates the Set Data, Copy, and Paste Apple events sent by the recordable application into compiled expressions. It then uses information from its 'aeut' resource and the application’s 'aete' resource to decompile the compiled expressions and pass the equivalent source data to the script editor for display to the user. After completing a recording session, the user can edit and save the resulting script and execute it again at any time. As shown in Figure 7-5 and Figure 7-6, the AppleScript component uses information it obtains from the 'aeut' and 'aete' resources when it is compiling and decompiling scripts. Other scripting components might use the same information during execution or recording, or in other ways that are specific to each component.  Dynamic Loading of Terminology InformationWhen a scripting component needs information about the user terminology defined in your application’s 'aete' resource, it sends a Get AETE event to your application. If your application does not handle the Get AETE event, the scripting component reads the terminology information it needs directly from your application’s 'aete' resource. Your application does not need to handle the Get AETE event unless it provides separate 'aete' resources for plug-in components. If your application does provide separate plug-in components, the Get AETE event allows it to gather terminology information from the 'aete' resources for the components that are currently running and add that information to the reply event. If your application handles the Get AETE event, you must also provide a scripting size resource. A scripting size resource is a resource of type 'scsz' that provides information about an application’s capabilities and preferences for use by scripting components.To take advantage of dynamic loading, your application must be running. Note that if your application does not provide a handler for the Get AETE event, the scripting component can obtain terminology information directly from your application’s 'aete' resource even if your application is not running.  Making Your Application RecordableIf you decide to make your application scriptable, you can also make it recordable. A recordable application is an application that uses Apple events to report user actions to the Apple Event Manager for recording purposes. A recordable event is any Apple event that a recordable application sends to itself while recording is turned on for the local computer (with the exception of events sent with the kAEDontRecord flag set in the sendMode parameter of AESend). When a user turns on recording by clicking the Record button in the Script Editor application, the Apple Event Manager sends copies of all subsequent recordable events to Script Editor. The AppleScript component handles each copied event for Script Editor by translating it into compiled expressions and recording the compiled expressions as part of a script. (Figure 7-6 on page 7-19 shows how the AppleScript component uses the 'aete' and 'aeut' resources when it records a script.) The user can view the equivalent decompiled source data in Script Editor while the script is being recorded. When a user executes a recorded script, the AppleScript component sends the corresponding Apple events to the applications in which they were recorded.Applications generally have two parts: the code that implements the application’s user interface and the code that actually performs the work of the application when the user manipulates the interface. One way to make your application recordable is to separate these two parts of your application, using Apple events to connect user actions with the work your application performs. This is called factoring your application. In a fully factored application, almost all tasks are carried out in response to Apple events. The application translates low-level events that result in significant actions into recordable Apple events and then sends them to itself.Factoring your application is the recommended method of making your application recordable. However, it is also possible for your application to report user actions by means of Apple events even though it actually performs those actions by some means other than Apple events. You can indicate that you want the Apple Event Manager to record events in this manner, without executing them, by adding the constant kAEDontExecute to the sendMode parameter of AESend.Before you decide how to map the user’s potential actions to recordable Apple events supported by your application, you need to answer these questions:n    What are the significant (that is, undoable) actions a user can perform with your application that you want to record? n    Which actions can you execute by means of Apple events, and which actions should cause Apple events to be sent but not executed?n    How do you want to record actions that can be described in a scripting language in several different ways?For example, if your application is a word processor, the user’s selection of a range of text should probably not generate an Apple event, because users often select various different pieces of text before deciding to do something to the selection. However, if a user changes the font of a selection, a recordable word processor should generate a corresponding Apple event so that the scripting component can record the change. In general, a recordable application should generate Apple events for any user action that the user could reverse by choosing Undo. A recordable application can usually handle a greater variety of Apple events than it can record, because it must record the same action the same way every time even though Apple events might be able to trigger that action in several different ways.For more information about recordable applications, factoring, and the Apple Event Manager’s recording mechanism, see the chapter “Recording Apple Events” in this book. For a description of the role of the 'aete' and 'aeut' resources when the AppleScript component records a script, see “How AppleScript Uses Terminology Information,” which begins on page 7-17. Manipulating and Executing ScriptsYour application can use scripting component routines to manipulate and execute scripts written in any scripting language based on the OSA. This section describes how scripting components use script data and summarizes some of the tasks your application can perform by calling the standard scripting component routines.  Your application can manipulate and execute scripts regardless of whether it is scriptable or recordable. However, if your application is scriptable, you can easily make it capable of manipulating and executing scripts that control its own behavior. For example, the forms application shown in Figure 7-4 on page 7-13 uses standard scripting component routines to execute a script whenever the cursor is in the appropriate field and the user presses Enter or Tab. Applications can also use scripting component routines to allow users to edit, recompile, save, and load such scripts in order to adapt them to their own purposes.Before using any scripting component routines, your application must open a connection with at least one scripting component. After opening a connection with a component, your application receives a component instance that it can use as the first parameter for any scripting component routine. You can use the Component Manager to establish a connection with the generic scripting component or to establish an explicit connection with any other scripting component. Your application can open connections with different scripting components under different circumstances and, if necessary, simultaneously.To manipulate or execute scripts written in any scripting language based on the OSA, your application can open a connection with the generic scripting component. The generic scripting component in turn attempts to open connections dynamically with the appropriate scripting component for a given script. If your application opens a connection with the generic scripting component, it can load and execute scripts created by any scripting component that is registered with the Component Manager on the current computer. The generic scripting component also provides routines that allow you to determine which scripting component created a particular script and to perform other useful tasks when you are using multiple scripting components.To manipulate and execute scripts written in a single scripting language only, your application can open an explicit connection with the scripting component for that language. In this case your application can load and execute only those scripts that were created by that component; however, your application can also take advantage of additional routines and other special capabilities provided by the component.After your application has established a connection with the appropriate scripting component for an existing script, it can use the standard scripting component routines to execute scripts. A script that has not yet been compiled consists of source data, or statements in a scripting language. Before executing source data, your application must use scripting component routines to compile it so that the scripting component can keep track of it in memory and execute it.  Scripting components can refer to at least three kinds of script data in memory:n    A compiled script consists of compiled code that an application can decompile into source data or execute using the standard scripting component routines. n    A script value consists of an integer, a string, a Boolean value, constants, PICT data, or any other fixed data returned or used by a scripting component in the course of executing a script.n    A script context maintains context information for the execution of other scripts. A script context can also contain executable statements in a scripting language. Like a compiled script, a script context can be decompiled as source data.For example, a script context can contain user-defined handlers for specific Apple events. In AppleScript, a script context that contains such handlers or other executable statements is called a script object. Handlers in a script object resemble HyperTalk message handlers. They consist of AppleScript statements and have no corresponding entry in Apple event dispatch tables.   Scripting components keep track of script data in memory by means of script IDs of type OSAID. TYPE OSAID = LongInt;A scripting component assigns a script ID to a compiled script or script context whenever the component creates or loads the corresponding script data. The scripting component routines that compile, load, and execute scripts all return script IDs, and you must pass valid script IDs to many of the other routines that manipulate scripts. Applications most commonly use scripting component routines to n    compile source data and execute the resulting compiled script, so that a user can create a new script and execute it immediately from within the applicationn    get a handle to script data in a form that can be saved, and load and execute the script data again when necessaryn    allow users to modify a script, then recompile and save the scriptn    redirect Apple events to script contextsThe remainder of this section provides an overview of the scripting component routines you can use to perform these tasks. Your application can also use scripting component routines to n    get information about scriptsn    get information about scripting componentsn    coerce script values to descriptor records and vice versan    set a resume dispatch function and alternative send, create, and active functions for use by a scripting componentn    control the recording process directly, turning recording off and on and saving the recorded script for use by your applicationThe chapter “Scripting Components” in this book provides detailed information about using all the standard scripting component routines as well as additional routines provided by the AppleScript component and the generic scripting component.Compiling, Saving, Modifying, and Executing ScriptsThis section introduces some of the scripting component functions your application can use to compile, save, modify, and execute scripts.To create and execute a script using the Script Editor application, a user can type the script, then press the Run button to execute it. Your application can provide similar capabilities by using these functions to compile source data and execute the resulting compiled script:n    The OSACompile function takes a descriptor record with a handle to source data (usually text) and a script ID. If you specify kOSANullScript instead of an existing script ID, OSACompile returns a script ID for the new compiled script, which you can then pass to the OSAExecute function.n    The OSAExecute function takes a script ID for a compiled script and a script ID for a script context, executes the script, and returns a script ID for the resulting script value.The binding of any global variables in the compiled script is determined by the script context whose script ID you pass to OSAExecute. If you pass kOSANullScript instead of the script ID for a script context, the scripting component provides its own default context. If you want to provide your own script context rather than using the scripting component default context, you can use either OSACompile or OSAMakeContext to create a script context, which you can load and store just like a compiled script.After creating a script and trying it out, a user may want to save it for future use. Your application should normally save its scripts as script data rather than source data, so that it can reload and execute the data without recompiling it. Before saving script data, you must first call the OSAStore function to get a handle to the data in the form of a descriptor record. You can then save the data to disk as a resource or write it to the data fork of a document. To allow a user to reload and execute a previously compiled and saved script, your application can call these functions:n    The OSALoad function takes a descriptor record that contains a handle to the saved script data and returns a script ID for the compiled script.n    The OSAExecute function takes a script ID for a compiled script and a script ID for a script context, executes the script, and returns a script ID for the resulting script value.In most cases you will want to allow users to modify saved scripts and save them again. To allow a user to modify and save a compiled script, your application can call these functions:n    The OSAGetSource function takes a script ID and returns a descriptor record with a handle to the equivalent source data.n    The OSACompile function takes a descriptor record with a handle to source data and a script ID, and returns the same script ID updated so that it refers to the modified and recompiled script.n    The OSAStore function takes a script ID and returns a copy of the corresponding script data in the form of a storage descriptor record.You can pass the script ID for the compiled script to be modified to the OSAGetSource function, which returns a descriptor record with a handle to the equivalent source data. Your application can then present the source data to the user for editing. When the user has finished editing the source data, you can pass the modified source data and the original script ID to the OSACompile function to update the script ID so that it refers to the modified and recompiled script. Finally, to obtain a handle to the modified script data so you can save it in a resource or write it to the data fork of a document, you can pass the script ID for the modified compiled script to the OSAStore function. If your application has no further use for a compiled script or a resulting script value after successfully loading, saving, compiling, or executing a script, you can use the OSADispose function to release the memory assigned to them. The OSADispose function takes a script ID and releases the memory assigned to the corresponding script data. A script ID is no longer valid after the memory associated with it has been released. This means, for example, that a scripting component may assign a different script ID to the same compiled script each time you load it, and that a scripting component may reuse a script ID that is no longer associated with a specific script.“Using Scripting Component Routines,” which begins on page 10-7, provides more information about the standard scripting component routines described in this section. Using a Script Context to Handle an Apple EventOne way to associate a script with an object is to associate a script context with a specific Apple event object—that is, with any object in your application that can be identified by an object specifier record. When an Apple event acts on an Apple event object with which a script context is associated, your application attempts to use the script context to handle the Apple event. This approach can be useful if you want to associate many different scripts with many different kinds of objects. Figure 7-7 illustrates one way that an application can use a script context to handle an Apple event. This example shows how you can use a general Apple event handler to provide initial processing for all Apple events received by your application. If an Apple event acts on an object with which a script context is associated, the general handler attempts to use the script context to handle the event.The SurfWriter application in Figure 7-7 associates script contexts (called script objects in AppleScript) with geometric shapes such as circles or squares. These script contexts can contain one or more user-defined handlers for specific Apple events. For example, the script context shown in Figure 7-7 is associated with a circle and contains this handler:on move to {x, y}    continue move to {x, item 2 of position of this}end moveThis handler exists only as AppleScript statements in the script context and doesn’t have an entry in SurfWriter’s Apple event dispatch table. SurfWriter does have its own standard Apple event handlers installed in its Apple event dispatch table. When SurfWriter receives a Move event that acts on the circle with which this script context is associated, SurfWriter uses the handler in the script context to modify its own standard handling of the event. The rest of this section describes how this works.Figure 7-7    Using a handler in a script context to handle an Apple eventThe MyGeneralAppleEventHandler function in Figure 7-7 is installed in SurfWriter’s special handler dispatch table. Thus, MyGeneralAppleEventHandler provides initial processing for all Apple events received by SurfWriter. When it receives an Apple event, MyGeneralAppleEventHandler checks whether a script context is associated with the object on which the event acts. If so, MyGeneralAppleEventHandler passes the event and a script ID for the script context to the OSADoEvent function. If not, MyGeneralAppleEventHandler returns errAEEventNotHandled, which causes the Apple Event Manager to look for the appropriate handler in SurfWriter’s Apple event dispatch table.The OSADoEvent function looks for a handler in the specified script context that can handle the specified event. If the script context doesn’t include an appropriate handler, OSADoEvent returns errAEEventNotHandled. If the script context includes an appropriate handler (in this example, a handler that begins on move), OSADoEvent attempts to use the handler to handle the event.When it encounters the continue statement during execution of the on move handler shown in Figure 7-7, the AppleScript component calls SurfWriter’s resume dispatch function. A resume dispatch function takes an Apple event and invokes the application’s default handler for that event directly, bypassing the application’s special handler dispatch table and the MyGeneralAppleEventHandler handler (or its equivalent). In this case, the AppleScript component uses SurfWriter’s default Move handler to move the circle to a different location than the one specified in the original Move event. The location specified by {x, item 2 of position of this} has the same horizontal coordinate as the location specified by the original event, but specifies the circle’s original vertical coordinate (item 2 of the circle’s original position), thus constraining motion to a horizontal direction.The AppleScript component calls the resume dispatch function as soon as it encounters a continue statement during script execution. For example, if the handler in Figure 7-7 contained additional indented statements after the continue statement, the AppleScript component would proceed with the execution of those statements after calling the resume dispatch function successfully.A script context can modify the event and use the default Apple event handler to execute the modified event, as in this example; or it can override the default handler completely, performing some completely different action; or it can perform some action and then pass the original event to the application’s default handler to be handled in the usual way. Script contexts associated with Apple event objects thus provide a way for users to modify or override the way an application responds to a particular Apple event that manipulates those objects.A general Apple event handler can use the OSAExecuteEvent function instead of OSADoEvent to execute a script context. The main difference between these functions is is that OSAExecuteEvent returns the script ID for the resulting script value, whereas OSADoEvent returns a reply event.To create a script context, pass the source data for the scripting-language statements you want the script context to contain to OSACompile with the modeFlags parameter set to kOSACompileIntoContext. The resulting script context is identical to a script context returned by the OSAMakeContext function, except that it contains compiled statements.“Using a Script Context to Handle an Apple Event,” which begins on page 10-19, describes this method of executing a script in more detail.       Listing 8-0Table 8-0Apple Event Terminology ResourcesContentsDefining Terminology for Use by the AppleScript Component8-3Structure of Apple Event Terminology Resources8-8Creating an Apple Event Terminology Extension Resource8-13Supporting Standard Suites Without Extensions8-14Extending the Standard Suites8-16Supporting Subsets of Suites8-23Supporting New Suites8-23Handling the Get AETE Event8-23Reference to Apple Event Terminology Resources8-26Header Data for an Apple Event Terminology Resource8-27Suite Data for an Apple Event Terminology Resource8-27Event Data8-29Object Class Data8-36Comparison Operator Data8-42Enumeration and Enumerator Data8-43The Scripting Size Resource8-45Apple Event Terminology ResourcesThis chapter describes the resource structure used by both the 'aeut' and 'aete' resources and explains how to create an 'aete' resource for your application. It also explains how applications that support additional plug-in modules, each with its own 'aete' resource, can write a handler for the Get AETE event that collects the 'aete' resources from the modules that are currently running.Before you read this chapter, you should read the chapter “Introduction to Scripting” in this book and the chapters about the Apple Event Manager that are relevant to your application. The first section in this chapter describes how the AppleScript component interprets AppleScript statements that trigger Apple events. The first section also explains how to define both Apple events and the corresponding user terminology for your application in a way that translates easily into AppleScript statements. If you implement Apple events so that they translate into logical and useful AppleScript scripts, your implementation will probably work well with other scripting components that resemble AppleScript.The next two sections describe how ton    create an 'aete' resourcen    handle the Get AETE eventFor details about the structure of the data in an 'aeut' resource and an 'scsz' resource, see “Reference to Apple Event Terminology Resources,” which begins on page 8-26.Defining Terminology for Use by the AppleScript ComponentYou should keep two principles in mind when you are defining the Apple event object hierarchy and corresponding terminology for your application: n    Avoid defining new Apple events unless absolutely necessary. For example, instead of defining a custom Find event, use the Get Data event with whose tests. (For more information about whose tests, see the chapter “Resolving and Creating Object Specifier Records” in this book.)n    Use existing object classes, or if you must define your own, define them in a general fashion.This section describes how the terms you specify in your application’s 'aete' resource are used in AppleScript statements that control your application. Before you implement the Apple event object hierarchy for your application, try out your proposed user terminology in AppleScript statements that use the standard syntax forms described here. This will help you discover some of the advantages and disadvantages of both your proposed object hierarchy and the human-language terminology you are planning to use.Some AppleScript commands, such as if, repeat, and tell, are executed directly by the AppleScript component and do not correspond to Apple events. Other commands trigger Apple events when the AppleScript component evaluates them.AppleScriptcommand    Corresponding Apple event    open    Open    close    Close    save    Save    move    Move    delete    Delete    set    Set Data    The AppleScript component interprets the terms used in scripts according to rules defined by the AppleScript language. For example, the open command must be followed by an argument that specifies the objects to open, and the save command must be followed by an argument that specifies the objects to save. The AppleScript component uses the information in an application’s 'aete' resource to map the human-language terms used in these arguments to specific Apple event keywords and codes, so that it can construct object specifier records that describe the objects on which the Open and Save events act. In general, the syntax for AppleScript commands that trigger Apple events follows this pattern: event name expression parameter name expression . . . parameter name expressionThe underlined terms are supplied by the AppleScript component’s 'aeut' resource, by the application’s 'aete' resource, or by the 'aeut' resource available on the current computer. The argument that follows event name corresponds to the direct parameter for the event, if there is one. Each subsequent argument corresponds to an additional parameter. An argument that corresponds to a direct parameter can use any of the syntax forms shown in Table 8-1. These forms correspond to the key forms that can be used to identify the key data in an object specifier record.Table 8-1    Syntax for AppleScript arguments that correspond to direct parametersSyntax of argument    AppleScript example    Key form    property name     the font    formPropertyID    class name expression     table "Fred"table 4    formNameformAbsolutePosition    class name before | after expression     word after table 2    formRelativePosition    class name expression thru expression    words 1 thru 30    formRange    every class name whose expression    every word whose¬  font = "Palatino"    formWhose    expression of expression     first row of¬  table "Fred"    Any key form; sets container for elements or properties    If the Apple event object hierarchy for your application requires you to specify terms in your 'aete' resource that are not included in the 'aeut' resource, make sure those terms read naturally when they appear in AppleScript statements that use the syntax shown in Table 8-1. Any of the underlined terms in the table may be supplied by your application’s 'aete' resource.For example, in the AppleScript statement copy name to expressionthe argument name corresponds to a direct parameter that can use any of the syntax variations shown in Table 8-1. The word to and the expression that follows it correspond to an additional parameter that describes the location to which to copy the objects described by the direct parameter.Many AppleScript commands, including the copy command, take additional arguments that correspond to insertion location descriptor records, which are descriptor records of type typeInsertionLoc defined as part of the Core suite. An insertion location descriptor record is a coerced AE record that consists of two keyword-specified descriptor records with the following keywords:Keyword    Description    keyAEObject    An object specifier record that identifies a single container    keyAEPosition    A constant that specifies where to put the Apple event object described in an Apple event’s direct parameter in relation to the container specified in the descriptor record with the keyword keyAEObject     You can specify one of these constants for the data in a descriptor record identified by the keyword keyAEPosition:Constant    Meaning    kAEBefore    Before the container     kAEAfter    After the container    kAEBeginning    In the container and before all other elements of the same class as the object being inserted     kAEEnd    In the container and after all other objects of the same class as the object being inserted    kAEReplace    Replace the container    The syntax that corresponds to an insertion descriptor record can take any of the forms shown in Table 8-2.Table 8-2    Syntax for AppleScript arguments that correspond to insertion location descriptor recordsSyntax of argument    AppleScript example    keyAEPosition constant    before | after expression    before Figure 1    kAEBefore | kAEAfter    beginning of | end of expression    end of window 2    kAEBeginning | kAEEnd    expression    Figure 1    kAEReplace    For example, in the AppleScript statement copy Chart 1 of document "Sales Chart" to before Figure 1the term copy corresponds to a Clone event, and Chart 1 of document "Sales Chart" corresponds to the direct parameter for the Clone event. The term to is the human-language name specified by the 'aeut' resource for the additional parameter identified by the keyword kAEInsertHere, which always consists of an insertion location descriptor record. The term before corresponds to the constant kAEBefore in the descriptor record identified by the keyword keyAEPosition, and Figure 1 corresponds to the object specifier record identified by the keyword keyAEObject. The AppleScript component handles statements that describe the replacement of one object with another differently from statements that specify an insertion location before, after, at the beginning of, or at the end of an object. For example, in the statementcopy Chart 1 of document "Sales Chart" to Figure 1the term to is the human-language name for the additional parameter identified by the keyword kAEInsertHere. When to is followed immediately by an element expression like Figure 1, the Clone Apple event sent by the AppleScript component includes an additional parameter that consists of an object specifier record for Figure 1. When your application requests the parameter as an insertion location descriptor record, a system coercion handler installed by the AppleScript component converts the object specifier record to an insertion location descriptor record that specifies kAEReplace in the descriptor record identified by the keyword keyAEPosition.If your application defines any extensions to the standard Apple events or object classes that require the use of insertion locations, use standard insertion location descriptor records to specify them, and make sure your Apple event object hierarchy and the corresponding human terminology in your 'aete' resource allow the AppleScript component to translate insertion location descriptor records into meaningful statements in an AppleScript dialect. Unlike most other AppleScript commands, the copy command causes the AppleScript component to send different Apple events under different circumstances. In the examples just discussed, the copy command corresponds to a Clone event. However, after evaluating the statementstell application "SurfWriter"        copy table "Summary of Sales" of document¬            "Sales Report" to Totalsend tellthe AppleScript component sends a Get Data event and sets the variable Sales91 to the value of the returned data; and the statementstell application "SurfCharter"        copy Totals to Chart 1 of document "Sales Chart"end tellcause the AppleScript component to send a Set Data event that sets the data in the specified chart to the value of the variable Totals.All scriptable applications should support the Get Data, Set Data, and Clone events for all Apple event objects that a user might want to manipulate from a script with the copy command. Scriptable applications should also support the other core events and any appropriate functional-area events.If you find it difficult to come up with meaningful AppleScript statements based on your proposed implementation of Apple events, you may need to rethink your implementation.   Structure of Apple Event Terminology ResourcesTable 8-3 summarizes the resource structure used by both the 'aeut' and 'aete' resources. Each asterisk (*) in the table indicates the beginning of an array. Each array can contain any number of items, including both additional arrays and specific definitions (n).Table 8-3    Structure of the 'aeut' and 'aete' resourcesn Template version    n Language code    * Array of suites:                       n Suite information                               * Array of events:                                                          n Event information (including information about the direct parameter)                                                          * Array of other parameters:                                                                                     n Parameter information                               * Array of classes:                                                          n Class description                                                          * Array of properties:                                                                                     n Property information                                                          * Array of elements:                                                                                     n Element information                                                                                     * Array of key forms:                                                                                                                n Key form information                               * Array of comparison operators:                                                          n Comparison operator information                               * Array of enumerations:                                                          n Enumeration information                                                          * Array of enumerators:                                                                                     n Enumerator information    Listing 8-1 shows the resource type declaration in Rez format for the 'aeut' resource, which can also serve as a template for an 'aete' resource. (Rez is a resource compiler available with the MPW programming environment.) For complete descriptions of all the fields shown in Listing 8-1, see “Reference to Apple Event Terminology Resources,” beginning on page 8-26.Listing 8-1    Resource type declaration for the 'aeut' resource  type 'aeut' {    hex byte;                                            /*major version in binary-coded */                                                /* decimal (BCD)*/    hex byte;                                            /*minor version in BCD*/    integer            Language, english = 0, japanese = 11;                                                    /*language code*/    integer            Script, roman = 0;                                /*script code                */    integer = $$Countof(Suites);    array Suites {        pstring;                                        /*human-language name of suite    */        pstring;                                        /*suite description*/        align word;                                        /*alignment*/        literal longint;                                        /*suite ID*/        integer;                                        /*suite level                */        integer;                                        /*suite version*/        integer = $$Countof(Events);        array Events {            pstring;                                    /*human-language name of event*/            pstring;                                    /*event description*/            align word;                                    /*alignment*/            literal longint;                                    /*event class                */            literal longint;                                    /*event ID            */            literal longint                        noReply = 'null';                            /*reply type                */            pstring;                                    /*reply description                        */            align word;                                    /*alignment            */            boolean            replyRequired,                        /*if the reply is */                        replyOptional;                        /* required*/            boolean            singleItem,                        /*if the reply must be a list*/                        listOfItems;                                    boolean             notEnumerated,                        /*if the type is                     enumerated*/                        enumerated;                                    boolean            reserved;                        /*these 13 bits are reserved; */            boolean            reserved;                        /* set them to "reserved"*/            boolean            reserved;                                    boolean            reserved;            boolean            reserved;            boolean            reserved;            boolean            reserved;            boolean            reserved;            boolean            reserved;            boolean            reserved;            boolean            reserved;            boolean            reserved;            boolean            reserved,                        /*if event is verb event or nonverb */                        nonVerbEvent;                        /* event; used by Japanese dialect*/            literal longint                        noParams = 'null'; /*direct param type*/            pstring;                                    /*direct param description*/            align word;                                    /*alignment*/            boolean            directParamRequired,                         /*if the direct param is required*/                        directParamOptional;            boolean             singleItem,                        /*if the param must be a list*/                        listOfItems;            boolean             notEnumerated,                        /*if the type is enumerated*/                        enumerated;            boolean            doesntChangeState,                         /*if the event changes server's state                                                */                        changesState;            boolean            reserved;                        /*these 12 bits are reserved;                                     */            boolean            reserved;                        /* set them to "reserved"        */            boolean            reserved;                                    boolean            reserved;            boolean            reserved;            boolean            reserved;            boolean            reserved;            boolean            reserved;            boolean            reserved;            boolean            reserved;            boolean            reserved;            boolean            reserved;            integer = $$Countof(OtherParams);            array OtherParams {                pstring;                                /*human-language name for parameter*/                align word;                                /*alignment*/                literal longint;                                /*parameter keyword*/                literal longint;                                /*parameter type*/                pstring;                                /*parameter description*/                align word;                                /*alignment*/                boolean            required,                    /*if param is required*/                            optional;                boolean             singleItem,                    /*if the param must be a list*/                            listOfItems;                boolean             notEnumerated,                    /*if the type is enumerated                                    */                            enumerated;                boolean            isNamed,                    /*indicates if this should be the */                            isUnnamed;                    /* unnamed parameter; only one                                         */                                                /* parameter can be so marked; set to */                                                /* reserved if not required*/                boolean            reserved;                    /*these 9 bits are reserved                                    ; */                boolean            reserved;                    /* set them to "reserved"*/                boolean            reserved;                boolean            reserved;                boolean            reserved;                boolean            reserved;                boolean            reserved;                boolean            reserved;                boolean            reserved;                boolean            notFeminine,                    /*feminine; set to reserved if not                                                 */                            feminine;                    /* required*/                boolean            notMasculine,                    /*masculine            ; set to reserved if not                                 */                            masculine;                    /* required*/                boolean            singular,                            plural;                    /*plural*/            };        };        integer = $$Countof(Classes);        array Classes {            pstring;                                    /*human-language name for class*/            align word;                                    /*alignment*/            literal longint;                                    /*class ID*/            pstring;                                    /*class description                        */            align word;                                    /*alignment            */            integer = $$Countof(Properties);            array Properties {                pstring;                                /*human-language name for property*/                align word;                                /*alignment            */                literal longint;                                /*property ID                */                literal longint;                                /*property class                    */                pstring;                                /*property description*/                align word;                                /*alignment            */                boolean            reserved;                    /*reserved*/                boolean            singleItem,                    /*if the property must be a list                                        */                            listOfItems;                                    boolean            notEnumerated,                    /*if the type is                     enumerated*/                            enumerated;                                boolean            readOnly,                    /*can only read it*/                            readWrite;                    /*can read or write it*/                boolean            reserved;                    /*these 9 bits are reserved; */                boolean            reserved;                    /* set them to "reserved"                                */                boolean            reserved;                            boolean            reserved;                boolean            reserved;                boolean            reserved;                boolean            reserved;                boolean            reserved;                boolean            reserved;                                    boolean            notFeminine,                    /*feminine; set to reserved if not                                                 */                            feminine;                    /* required*/                boolean            notMasculine,                    /*masculine            ; set to reserved if not                                 */                            masculine;                    /* required*/                boolean            singular,                            plural;                    /*plural*/            };            integer = $$Countof(Elements);            array Elements {                literal longint;                                /*element class*/                integer = $$Countof(KeyForms);                array KeyForms {                                /*list of key forms                        */                    literal longint                                            formAbsolutePosition = 'indx',                    formName = 'name';                            /*key form ID*/                };            };        };        integer = $$Countof(ComparisonOps);        array ComparisonOps {            pstring;                                    /*human-language name for */                                                /* comparison operator            */            align word;                                    /*alignment*/            literal longint;                                    /*comparison operator ID                                */            pstring;                                    /*comparison operator description*/            align word;                                    /*alignment*/        };        integer = $$Countof(Enumerations);        array Enumerations {                                        /*list of enumerations*/            literal longint;                                    /*enumeration ID*/            integer = $$Countof(Enumerators);            array Enumerators {                                    /*list of enumerators*/                pstring;                                /*human-language name for enumerator    */                align word;                                /*alignment*/                literal longint;                                /*enumerator ID                    */                pstring;                                /*enumerator description                                */                align word;                                /*alignment            */            };        };    };}; Creating an Apple Event Terminology Extension ResourceScriptable applications must include an Apple event terminology extension ('aete') resource. You use an 'aete' resource to inform scripting components about the extent of your application’s support for the standard Apple event suites, any custom Apple events or Apple event objects defined by your application, and the corresponding human-language terms for use in scripts that control your application. The format of the 'aete' resource is identical to that of the 'aeut' resource, although it serves a different purpose. The 'aeut' resource maps human-language names to IDs, keywords, and other codes used in the Apple events described by the current edition of the Apple Event Registry: Standard Suites. The 'aete' resource for an application uses the same format to accomplish the following:n    Indicate when a set of definitions for a particular suite included in the 'aeut' resource is supported in its entirety by the application. For example, an application can indicate that it supports all of the 'aeut' resource definitions for the Required and Core suites simply by identifying the suite as a whole in its 'aete' resource; the detailed information for each standard suite does not need to be repeated.n    Describe extensions, if any, to the definitions included in the 'aeut' resource, such as additional parameters for standard Apple events, additional properties and element classes for standard object classes, and additional key forms for each element class. For example, an application can indicate that it supports all of the definitions for the Required and Core suites included in the 'aeut' resource, an additional parameter for one of the core events defined in the 'aeut' resource, and an additional property for one of the core object classes defined in the 'aeut' resource.n    Describe the standard Apple events and object classes that belong to suites the application does not support in their entirety.n    Describe the application’s custom suite—that is, the application’s custom Apple events and object classes, if any.By specifying a suite ID, suite level, and suite version, your application can indicate that it supports an entire suite. Because the 'aeut' resource provided by each scripting component lists the human-language terms for all the standard suites, you do not have to repeat this information if you support a suite in its entirety. If you support a subset of a standard suite, you must list all the Apple events, Apple event parameters, object classes, and so on and equivalent human-language terms for the parts of the suite your application does support.You can include at most one 'aete' resource per application or per module. The language code for this resource must match the language code of the language for which you are developing your application. Applications that support additional modules with their own 'aete' resources must provide an 'scsz' resource and handle the Get AETE event as described in “Handling the Get AETE Event,” which begins on page 8-23.IMPORTANTEach human-language term supported by an application should correspond to a unique Apple event ID, keyword, or other code in either the application’s 'aete' resource or the 'aeut' resource. For example, since the 'aeut' resource defines “size” as the human-language equivalent for the property identified by the four-character code 'ptsz' (the pPointSize property of text objects), an application’s 'aete' resource must not define “size” as the human-language equivalent for some other part of an Apple event or object class. However, more than one human-language term can correspond to the same Apple event ID or code. For example, an application’s 'aete' resource can define a second human-language term, “point size,” that corresponds to the Apple event identifier 'ptsz'.sThe AppleScript Software Developers’ Kit (available from APDA) includes a tool that allows you to specify your application’s support for Apple events and creates the equivalent 'aete' resource. The previous section, “Structure of Apple Event Terminology Resources,” describes the basic format used by both the 'aeut' and 'aete' resources. The sections that follow provide examples of 'aete' resources that can be generated with the tools in the AppleScript Software Developers’ Kit. Supporting Standard Suites Without ExtensionsTo indicate that your application supports a standard suite in its entirety, without any extensions, your 'aete' resource needs to provide only the information that identifies the suite. For example, Listing 8-2 shows the Rez input for an 'aete' resource provided by an application that supports the entire Required and Core suites with no omissions or extensions.Every 'aete' resource must provide the major and minor version numbers for the content of the resource (1 and 0 in Listing 8-2) and the language code (English in Listing 8-2). For each suite that an application supports in its entirety, without extensions, the 'aete' resource provides only the name, suite description, suite ID, suite level (1 for all current suites), and suite version (1 for all current suites). If the 'aete' resource provides an empty string as the human-language name for such a suite, a scripting component uses the name provided for the corresponding suite by the 'aeut' resource. If an application does not extend or omit any of the definitions in a standard suite, a scripting component can get the rest of the information about the suite—its event and object class definitions, comparison operators, and enumerated groups—from the 'aeut' resource. The corresponding arrays in the 'aete' resource can therefore be left empty.Note that the Rez input for resources does not include the align word fields shown in the 'aeut' resource type declaration in Listing 8-1. Rez takes care of word alignment automatically.Listing 8-2    Rez input for an 'aete' resource for an application that supports the Required and Core suites in their entiretyresource 'aete' (0, "JustTwoSuites") {    1,                                                     /*major version in BCD*/    0,                                                     /*minor version in BCD*/    english,                                                     /*language code*/    roman,                                                    /*script code*/    {    /*array Suites: 2 elements*/        /*[1]*/        "",                                             /*human-language name for suite; */                                                    /* 'aeut' supplies "Required Suite"*/                   "Events that every application should support",                                                                 /*suite description*/        kAERequiredSuite,                                                 /*suite code*/        1,                                                 /*suite level*/        1,                                                 /*suite version*/        {    /*array Events: 0 elements*/        },        {    /*array Classes: 0 elements*/        },        {    /*array ComparisonOps: 0 elements*/        },        {    /*array Enumerations: 0 elements*/        },        /*[2]*/        "",                                                 /*human-language name for suite; */                                                        /* 'aeut' supplies "Core Suite"*/                                        "Suite that applies to all applications",                                                         /*suite description*/        kAECoreSuite,                                                 /*suite code*/        1,                                                /*suite level*/        1,                                                /*suite version*/        {    /*array Events: 0 element*/        },        {    /*array Classes: 0 elements*/        },        {    /*array ComparisonOps: 0 elements*/        },        {    /*array Enumerations: 0 elements*/        }    }}; Extending the Standard SuitesIf, like the 'aete' resource shown in Listing 8-2, your application’s 'aete' resource indicates that you support an entire standard suite, the scripting component automatically makes use of all the terminology for that suite provided by its 'aeut' resource. For this reason, you can easily extend the definitions for a suite that your application supports in its entirety: just provide arrays in the 'aete' resource for the definitions not already included in the 'aeut' resource. For example, if you’re extending the definition of an event to support a single additional parameter, you should provide an array of parameters that includes one item: the description of the new parameter. Similarly, if you’re not extending the contents of a particular array, you don’t need to include the array in the 'aete' resource. Although an array of descriptions in an 'aete' resource need not include descriptions that are already provided by the 'aeut' resource, you must include information that defines the position of the array in relation to the other information in the 'aete' resource. As Table 8-3 on page 8-8 shows, you can nest the arrays in an 'aete' resource within other arrays: for example, an array of parameters is part of the description of an event, and the event description is, in turn, part of the array of event descriptions for a suite.To add a description of a single new parameter to the definition of an Apple event in a suite that your application supports in its entirety, you need to providen    an array of parameters containing one element: the description of the new parametern    information that identifies the event definition to which you’re adding the parametern    information that identifies the suite containing the eventListing 8-3 illustrates how this works. This Rez input adds two new parameters (“number of copies” and “print quality”) to the Print Documents event in the Required suite, one enumeration (three values for the “print quality” parameter of the Print Documents event) to the Required suite, and a new property (“first indent”) to the cParagraph class in the Text suite. It also adds a plural synonym for the cParagraph class: the word “paragraphs.” Listing 8-3    Rez input for an 'aete' resource that extends the definitions of the Required, Core, and Text suites#define keyMyNumberOfCopies                                         'numc'#define keyMyPrintQuality                                         'prtq'#define typePrintQuality                                        'pqen'#define kFast                                         'fast'#define kNormal                                         'nrml'#define kHighQuality                                          'hiql'#define pFirstIndent                                        'indt'resource 'aete' (0, "SuiteExtensions") {    1,                                                     /*major version in BCD*/    0,                                                     /*minor version in BCD*/    english,                                                     /*language code*/    roman,                                                    /*script code*/    {    /*array Suites: 3 elements*/        /*[1]*/        "",                                             /*human-language name for suite; */                                                    /* 'aeut' supplies "Required Suite"*/                        "Events that every application should support",                                                                 /*suite description*/        kAERequiredSuite,                                                 /*suite code*/        1,                                                 /*suite level*/        1,                                                 /*suite version*/        {    /*array Events: 1 element*/            /*[1]*/            "",                                         /*human-language name for event; */                                                    /* 'aeut' supplies "Print Documents"*/                            "Print the specified list of documents",                                                             /*event description*/            kCoreEventClass,                                            /*event class*/            kAEPrintDocuments,                                            /*event ID*/            noReply,                                            /*reply type*/            "",                                            /*reply description*/            replyOptional,                                            /*reply is optional*/            singleItem,                                            /*reply must be single item*/            notEnumerated,                                             /*type is not enumerated*/            reserved,                                            /*these 13 bits are reserved*/            reserved,            reserved,            reserved,            reserved,            reserved,            reserved,            reserved,            reserved,            reserved,            reserved,            reserved,            reserved,            typeAlias,                                            /*direct parameter type*/            "List of documents to print",                                            /*direct parameter description*/            directParamRequired,                                            /*direct parameter is required*/            listOfItems,                                            /*direct parameter must be list*/            notEnumerated,                                            /*type is not enumerated*/            doesntChangeState,                                            /*event does not change */                                                        /* server's state*/            reserved,                                            /*these 12 bits are reserved*/            reserved,            reserved,            reserved,            reserved,            reserved,            reserved,            reserved,            reserved,            reserved,            reserved,            reserved,            {    /*array OtherParams: these fields describe the additional */                /* parameters Number of Copies and Print Quality to the */                /* standard Print Documents event*/                /*[1]*/                "number of copies",                                    /*human-language name for parameter*/                keyMyNumberOfCopies,                                        /*parameter keyword*/                typeShortInteger,                                        /*parameter type*/                "Number of copies to print",                                        /*parameter description*/                optional,                                        /*parameter is optional*/                singleItem,                                        /*parameter must be single item*/                notEnumerated,                                        /*type is not enumerated*/                reserved,                                        /*these 13 bits are reserved*/                reserved,                reserved,                reserved,                reserved,                reserved,                reserved,                reserved,                reserved,                reserved,                reserved,                reserved,                reserved,                /*[2]*/                "print quality",                                    /*human-language name for parameter*/                keyMyPrintQuality,                                        /*parameter keyword*/                typePrintQuality,                                        /*parameter type*/                "The quality of the printing",/*parameter description*/                optional,                                        /*parameter is optional*/                singleItem,                                        /*parameter must be single item*/                enumerated,                                        /*type is enumerated*/                reserved,                                        /*these 13 bits are reserved*/                reserved,                reserved,                reserved,                reserved,                reserved,                reserved,                reserved,                reserved,                reserved,                reserved,                reserved,                reserved            }        },        {    /*array Classes: 0 elements*/        },        {    /*array ComparisonOps: 0 elements*/        },        {    /*array Enumerations: 1 element*/            /*these fields add the 'pqen' enumeration to the Required suite*/            /*[1]*/            typePrintQuality,                                            /*enumeration ID*/            {    /*array Enumerators: 3 elements*/                /*[1]*/                "Fast",                                        /*enumerator name*/                kFast,                                        /*enumerator ID*/                "Print as quickly as possible",/*enumerator description    */                /*[2]*/                "Normal",                                        /*enumerator name*/                kNormal,                                        /*enumerator ID*/                "Print at normal speed",                                         /*enumerator description    */                /*[3]*/                "High-Quality",                                        /*enumerator name*/                kHighQuality,                                        /*enumerator ID*/                "Print at highest quality possible"                                         /*enumerator description    */            }        },        /*[2]*/        "",                                                 /*human-language name for suite; */                                                        /* 'aeut' supplies "Core Suite"*/                        "Suite that applies to all applications",                                                                 /*suite description*/        kAECoreSuite,                                                /*suite code*/        1,                                                 /*suite level*/        1,                                                 /*suite version*/        {    /*array Events: 0 elements*/        },        {    /*array Classes: 0 elements*/        },        {    /*array ComparisonOps: 0 elements*/        },        {    /*array Enumerations: 0 elements*/        },        /*[3]*/        "",                                                 /*human-language name for suite; */                                                        /* 'aeut' supplies "Text Suite"*/                        "A set of basic classes for text processing",                                                                /*suite description*/        kAETextSuite,                                                /*suite code*/        1,                                                 /*suite level*/        1,                                                 /*suite version*/        {    /*array Events: 0 elements*/        },        {    /*array Classes: 1 element*/            /*[1]*/            "paragraph",                                             /*human-language name for class*/            cParagraph,                                            /*class ID*/            "A paragraph",                                            /*class description*/            {    /*array Properties: 1 element*/                /*[1]*/                "first indent",                                    /*human-language name for property*/                pFirstIndent,                                        /*property ID*/                cLongInteger,                                        /*property class*/                "First indent of paragraph in points",/*property description*/                reserved,                                        /*reserved*/                singleItem,                                        /*property is single item*/                notEnumerated,                                        /*type is not enumerated*/                readWrite,                                        /*property can be modified*/                reserved,                                        /*these 12 bits are reserved*/                reserved,                reserved,                reserved,                reserved,                reserved,                reserved,                reserved,                reserved,                reserved,                reserved,                reserved            },            {    /*array Elements: 0 elements*/            },            "paragraphs",                                        /*human-language name for class*/            cParagraph            ,                            /*class ID*/            "Every paragraph",                                        /*class description*/            {    /*array Special Properties: 1 element*/                /*[1]*/                "",                                    /*human-language name for property*/                kAESpecialClassProperties,                                        /*property ID*/                cType,                                        /*property class*/                "",                                         /*property description*/                reserved,                                        /*reserved*/                singleItem,                                        /*property is single item*/                notEnumerated,                                        /*type is not enumerated*/                readOnly,                                        /*property cannot be modified*/                reserved,                                        /*these 11 bits are reserved*/                reserved,                reserved,                reserved,                reserved,                reserved,                reserved,                reserved,                reserved,                reserved,                reserved,                plural                                        /*human-language name is */                                                        /* plural form*/            },            {    /*array Elements: 0 elements*/            },        },        {    /*array ComparisonOps: 0 elements*/        },        {    /*array Enumerations: 0 elements*/         }    }};In Listing 8-3, the possible values for the “print quality” parameter belong to an enumeration. This is indicated by the term enumerated in the parameter description. For this reason, the parameter type field contains the ID for the enumeration—typePrintQuality.Listing 8-3 also adds a plural synonym for “paragraph” to the array of classes: the word “paragraphs.” Note that this is listed as if it were an additional class, except that it also specifies cParagraph as the class ID. The first property listed for the synonym has property ID kAESpecialClassProperties. This property describes characteristics of the class as a whole; the last flag bit for this property is set to plural, indicating that the term paragraphs is a plural term for the specified class. This property must always be the first property listed for a class. For more information about the kAESpecialClassProperties property, see “Property Data,” which begins on page 8-38.An enumeration is described only by its ID; its declaration does not include a name or description field. However, a name, value, and description must be provided for each of the enumerators in an enumeration.You can use the method illustrated in Listing 8-3 only to add to the definitions of Apple events and Apple event object classes, not to support subsets of them. For example, to support only a subset of the parameters of an Apple event or only some of the elements or properties of an existing object class, you must list all the definitions from that suite that you do support. The next section, “Supporting Subsets of Suites,” provides more information about how to do this.Human-language names for Apple events, object classes, and so on (including extensions) can include both uppercase and lowercase letters and spaces. For comparison purposes, case doesn’t matter. However, note that the human-language names defined in Listing 8-3 are all lowercase. This convention ensures that scripts in which these terms appear won’t have capital letters in unexpected places.Scripting components that get identifiers or strings from user terminology resources are free to change the identifiers or strings as necessary (eliminating spaces, converting identifiers to all uppercase or lowercase, or changing the identifiers altogether) to meet the requirements of a particular task. Supporting Subsets of SuitesYour application is not required to support all the definitions in a suite. If you wish to support a subset of the definitions in one or more standard suites, you can collect individual definitions from any number of suites in a placeholder suite whose suite ID is the application’s signature or typeWildCard ('****'). When you support a subset of a suite, you must provide all the definitions you want to support in your 'aete' resource. Supporting New SuitesIf your application defines its own custom Apple events or other Apple event constructs, you should include a separate suite section for the suite in the 'aete' resource. You should use your application’s signature for both the suite ID and the class ID of all events in the suite.    Handling the Get AETE EventA scripting component sends the Get AETE event to an application when it needs information about the user terminology specified by the application. For example, the AppleScript component sends the Get AETE event when it first attempts to compile a tell statement that specifies a particular application. If your application does not handle the Get AETE event, the scripting component reads the terminology information it needs directly from your application’s 'aete' resource. Applications that support additional plug-in modules, each with its own 'aete' resource, must provide an 'scsz' resource and a handler for the Get AETE event that collects the 'aete' resources from the modules that are currently running.If your application does provide separate plug-in modules, the Get AETE event allows it to gather information from the 'aete' resources for the modules that are currently running and return the terminology information along with your application’s built-in terminology information to the scripting component in the reply event.Here is a summary of the structure of a Get AETE event:Get AETE—Get an application’s 'aete' resource            Event class        kASAppleScriptClass    Event ID        kGetAETE    Required parameter                Keyword:    keyDirectObject        Descriptor type:    typeInteger        Data:    Language code    Required reply parameter                Keyword:    keyDirectObject        Descriptor type:    typeAEList or typeAETE        Data:    The application’s terminologies    Description        Sent by a scripting component to an application when the scripting component needs information about the application’s user terminology     Your application can’t handle the Get AETE event unless it is running. If your application doesn’t provide a handler for the Get AETE event, the scripting component can obtain terminology information directly from your application’s 'aete' resource even if your application is not running.If your application handles the Get AETE event, it must also provide a scripting size resource. A scripting size resource is a resource of type 'scsz' that provides information about an application’s capabilities for use by scripting components. It allows your application to declare whether it needs the Get AETE event and to specify preferences for the sizes of the portion of your application’s heap used by a scripting component. For information about the 'scsz' resource, see “The Scripting Size Resource” on page 8-45. A handler for the Get AETE event should perform the following tasks:n    Obtain the language code specified by the event.n    Create a descriptor list to hold the 'aete' resources.n    Collect the 'aete' resources from all the application’s plug-in modules that are currently running, including the application itself, and add them to the list. n    Add the list to the reply Apple event.Listing 8-4 provides an example of a handler for the Get AETE event. Listing 8-4    A handler for the Get AETE event FUNCTION MyGetAETE (theAE: AppleEvent; theReply: AppleEvent;                             refCon: LongInt): OSErr;VAR    theList:                     AEDescList;    returnedType:                    DescType;    actualSize:                    Size;    languageCode:                    Integer;    myErr:                    OSErr;BEGIN    MyGetAETE := errAEEventNotHandled;    languageCode := 0;    {if a reply was not requested, then don't handle}    IF theReply.dataHandle = NIL THEN        Exit(MyGetAETE);    {get the language code that AppleScript is requesting so that         }    { this function can return the aete of a specified language}    myErr := AEGetParamPtr(theAE, keyDirectObject,                                     typeLongInteger, returnedType,                                     @languageCode, sizeOf(LongInt),                                     actualSize);    IF myErr <> noErr THEN        Exit(MyGetAETE);    {create a list}    myErr := AECreateList(NIL, 0, FALSE, theList);    IF myErr <> noErr THEN        Exit(MyGetAETE);    {get the requested 'aete' resources and put in the list--the }    { MyGrabAETE application-defined function does this}    {your code should iterate all of your installed code }    { extensions and add the aete for each that matches the }    { language code requested}    myErr := MyGrabAETE(languageCode, theList);    IF myErr <> noErr THEN    BEGIN        myErr := AEDisposeDesc(theList);        Exit(MyGetAETE);    END;    {add list to reply Apple event}    myErr := AEPutParamDesc(theReply, keyDirectObject, theList);    myErr := AEDisposeDesc(theList);    myGetAETE := myErr;END;The MyGetAETE handler in Listing 8-4 begins by setting the function result to errAEEventNotHandled. The function is set to this result if for any reason the handler doesn’t successfully handle the event, so that a system handler provided by the scripting component can at least read the terminology information directly from the application’s own 'aete' resource. The handler in Listing 8-4 then checks the language code specified by the event. After checking to make sure the reply exists, the handler creates a list and uses the application-defined function MyGrabAETE to collect all the appropriate terminology information and append it to the list. The MyGetAETE handler then adds the list to the reply event.  Reference to Apple Event Terminology ResourcesListing 8-1 on page 8-9 shows the complete resource type declaration in Rez format for the 'aeut' resource. The same resource structure is used by both the 'aeut' and 'aete' resources. Figure 8-1 shows the format of a compiled 'aeut' or 'aete' resource. Figure 8-1    Structure of an 'aeut' or 'aete' resourceAn 'aeut' or 'aete' resource contains the following:n    a header containing the version and language code of the template and a count of the number of suites the resource describesn    a variable number of suite descriptionsThe sections that follow describe the content of the header and each suite description in detail.Header Data for an Apple Event Terminology ResourceThe header for an 'aeut' or 'aete' resource specifies the version of its contents, the language of the human-language equivalents contained in the resource, a script code, and a count of the number of suites the resource describes. Figure 8-2 shows the header format. Figure 8-2    Structure of the header data in an 'aeut' or 'aete' resourceThe header contains the following items:n    The major version number of the content of the resource in binary-coded decimal (the major version number for the first release of the 'aeut' resource is 1). The major and minor versions describe the content of the resource, not its template. You can use these fields to provide version numbers for the content of your application’s 'aete' resource.n    The minor version number of the template in binary-coded decimal (the minor version number for the first release of the 'aeut' resource is 0).n    The language code for the resource. Inside Macintosh: Text provides a list of language codes. This code must be the same as the resource ID for the resource. n    The script code for the resource, taken from the list of script codes provided in Inside Macintosh: Text. n    A count of the number of suites described by the resource.Suite Data for an Apple Event Terminology ResourceEach item in the array of suites for an 'aeut' or 'aete' resource includes information about the suite ID, level, and version and four arrays that specify the events, object classes, comparison operators, and enumerations for that suite. Figure 8-3 shows the format of this suite data.Figure 8-3    Structure of suite data in an 'aeut' or 'aete' resourceThe data for each suite consists of the following items:n    The human-language name of the suite. This is a Pascal string that can include any characters, including uppercase and lowercase letters and spaces. If the 'aete' resource specifies the name as an empty string, the scripting component looks up, in its 'aeut' resource, the suite name and other suite data that correspond to the specified suite ID, suite level, and suite version. This strategy simplifies specification of an entire suite and facilitates localization, since the human-language name is provided by the 'aeut' resource. If the 'aete' resource specifies a name other than the name provided by the 'aeut' resource for the same suite ID, suite level, and suite version, the scripting component uses the new name with the same suite data from the 'aeut' resource. Unless you are defining a custom suite, you should specify an empty string for the name of a suite.n    A human-language description of the suite. This is a Pascal string that can include any characters. When the resource description is compiled, the resource compiler pads the string and aligns the next field on a word boundary.n    A four-character ID that distinguishes the suite from all other suites defined in either the 'aeut' or 'aete' resources. This value is normally the same as the event class for the Apple events in the suite. If the 'aete' resource specifies a standard suite name but a suite ID that is different from the suite ID for the standard suite of that name described in the 'aeut' resource, the scripting component uses the new suite ID with the standard suite data for the specified name. In general, you should use the standard suite ID for any standard suite that you support. If your application uses a custom suite, you should use your application’s signature as the event class for the events in the suite and, in addition, as its suite ID. When you register your application’s signature with Developer Technical Support, the corresponding event class is automatically registered for your application, and only you can register events that belong to that event class. For information about registering Apple events, contact the Apple Event Registrar.n    The level and version of the suite. For the first version of any suite, the level is usually 1 (indicating that it is the suite that contains the most basic definitions) and the version is 1 (the version of this suite level). More advanced suites (such as a suite for performing more sophisticated text manipulation than the current Text suite allows) will have level numbers greater than 1. All currently defined suites have a level of 1 and a version of 1. n    A count of the events defined for this suite and an array of event definitions.n    A count of the object classes defined for this suite and an array of class definitions.n    A count of the comparison operators defined for this suite and an array of comparison operator definitions.n    A count of the enumerations defined for this suite and an array of enumeration definitions. Event DataEach item in the array of events for a suite specified in an 'aeut' or 'aete' resource includes information about the event, the reply, and the direct parameter, and an array that specifies the additional parameters for the event. Figure 8-4 shows the format of this event data.Figure 8-4    Structure of event data in an 'aeut' or 'aete' resourceThe data for each event consists of the following items:n    The human-language name of the event. This is a Pascal string that can include any characters, including uppercase and lowercase letters and spaces. If the 'aete' resource specifies the name as an empty string, the scripting component looks up, in its 'aeut' resource, the event name and other event data that correspond to the specified event class and event ID. This strategy facilitates localization, since the human-language name is provided by the 'aeut' resource. In this case the scripting component will use the standard data from the 'aeut' resource for the event plus the data provided by the 'aete' resource for any additional parameters.If the 'aete' resource specifies a name other than the name provided by the 'aeut' resource for the same event class and event ID, the scripting component uses the new name with the same suite data from the 'aeut' resource. You should specify an empty string for the name of any standard event that your application lists explicitly in its 'aete' resource.n    A human-language description of the event. This is a Pascal string that can include any characters. When the resource description is compiled, the resource compiler pads the string and aligns the next field on a word boundary.n    The four-character event class for the event. If the 'aete' resource specifies a standard event name and an event class other than the event class for the equivalent standard event, the scripting component uses the new event class with the standard event data for the specified name. You should specify the standard event class for any standard event that your application lists explicitly in its 'aete' resource. n    The four-character event ID for the event. If the 'aete' resource specifies a standard event name and an event ID other than the event ID for the equivalent standard event, the scripting component uses the new event ID with the standard event data for the specified name. You should specify the standard event ID for any standard event that your application lists explicitly in its 'aete' resource.n    A four-character descriptor type for the direct parameter of the reply. If the event never needs a reply, or if the reply does not include a direct parameter, this value must be typeNull. Otherwise, the meaning of this field varies according to the values of two of the flags that follow. One flag specifies whether the parameter is a list (singleItem or listOfItems), and the other specifies whether the values for the parameter are enumerated (enumerated or notEnumerated):n    If the parameter is not a list and its values are not enumerated, this value is the descriptor type for the direct parameter.n    If the parameter is a list and its values are not enumerated, this value is the descriptor type for each of the items in the list. (If not all the items in the list are of the same descriptor type, the flag specifying whether the value is a list must have the value singleItem, and the value of this field must be typeAEList.)n    If the parameter is not a list and its values are enumerated, this value is the four-character code for the enumeration defined in either the 'aete' or 'aeut' resource that contains the allowable values for the parameter. (If the values are enumerated but the enumeration is not defined in either the 'aete' or 'aeut' resource, the flag specifying whether the parameter’s values are enumerated must have the value notEnumerated, and the value of this field must be typeEnumerated.)n    If the parameter is a list and its values are enumerated, this value is the four-character code for the enumeration defined in the same resource that contains the allowable values for all of the items in the list. All items in the list must have one of these enumerated values.n    A human-language description of the direct parameter of the reply. This is a Pascal string that can include any characters. Although the reply may include other parameters, only the direct parameter of the reply is described here. When the resource description is compiled, the resource compiler aligns the string on a word boundary.n    Flags that specify the following as Boolean values:n    Whether the direct parameter of the reply is required (replyRequired) or optional (replyOptional).n    Whether the direct parameter of the reply is a single item (singleItem) or a list of items (listOfItems). (See the earlier description of the reply event’s four-character descriptor type for information about how this value changes the meaning of the reply type.)n    Whether named constants, called enumerators, are specified as the only valid values for the direct parameter of the reply (enumerated or notEnumerated). (See the earlier description of the four-character descriptor type for the reply event’s direct parameter for information about how this value changes the meaning of the direct parameter type.) For information about specifying enumerators, see “Enumeration and Enumerator Data” on page 8-43.n    Following 5 bits are reserved for future use. The values of these bits must be set to reserved.n    Following 7 bits are reserved for future use as dialect-specific flags. The values of these bits must be set to reserved.n    Whether the event is a nonverb event (nonVerbEvent). This bit is used by dialects such as the AppleScript Japanese dialect that make this distinction. For all other dialects, set the value of this bit to reserved.n    A four-character descriptor type for the direct parameter of the event. If the event never has a direct parameter, this value must be typeNull. Otherwise, the meaning of this field varies according to the values of two of the flags that follow. One flag specifies whether the parameter is a list (singleItem or listOfItems), and the other specifies whether the values for the parameter are enumerated (enumerated or notEnumerated):n    If the parameter is not a list and its values are not enumerated, this value is the descriptor type for the direct parameter.n    If the parameter is a list and its values are not enumerated, this value is the descriptor type for each of the items in the list. (If not all the items in the list are of the same descriptor type, the flag specifying whether the value is a list must have the value singleItem, and the value of this field must be typeAEList.)n    If the parameter is not a list and its values are enumerated, this value is the four-character code for the enumeration defined in either the 'aete' or 'aeut' resource that contains the allowable values for the parameter. (If the values are enumerated but the enumeration is not defined in either the 'aete' or 'aeut' resource, the flag specifying whether the parameter’s values are enumerated must have the value notEnumerated, and the value of this field must be typeEnumerated.)n    If the parameter is a list and its values are enumerated, this value is the four-character code for the enumeration defined in the same resource that contains the allowable values for all of the items in the list. The values of the items in the list must all be one of these enumerated values.n    A human-language description of the direct parameter. This is a Pascal string that can include any characters. When the resource description is compiled, the resource compiler pads the string and aligns the next field on a word boundary.n    Flags that specify the following as Boolean values:n    Whether the direct parameter of the event is required (directParamRequired) or optional (directParamOptional).n    Whether the direct parameter of the event is a single item (singleItem) or a list of items (listOfItems). (See the earlier description of the direct parameter’s four-character descriptor type for information about how this value changes the meaning of the direct parameter type.)n    Whether named constants, called enumerators, are specified as the only valid values for the direct parameter (enumerated or notEnumerated). (See the earlier description of the direct parameter’s four-character descriptor type for information about how this value changes the meaning of the direct parameter type.) For information about specifying enumerators, see “Enumeration and Enumerator Data” on page 8-43.n    Whether receiving this event changes (changesState) or doesn’t change (doesntChangeState) the internal state of the receiving application. Events that only get information do not change the state of the application, whereas events such as Cut and Move do.n    Following 4 bits are reserved for future use. The values of these bits must be set to reserved.n    Following 8 bits are reserved for future use as dialect-specific flags. The values of these bits must be set to reserved.n    A count of the additional parameters described for this event and an array of additional parameter definitions.Additional Parameter DataEach item in the array of additional parameters for an event specified in an 'aeut' resource includes information about a single additional parameter. Figure 8-5 shows the format of additional parameter data in an 'aeut' or 'aete' resource. Figure 8-5    Structure of additional parameter data in an 'aeut' or 'aete' resourceThe data for each additional parameter consists of the following items:n    The human-language name of the parameter. This is a Pascal string that can include any characters, including uppercase and lowercase letters and spaces. When the resource description is compiled, the resource compiler pads the string and aligns the next field on a word boundary.If the 'aete' resource specifies the name of an additional parameter as an empty string, the scripting component looks up, in its 'aeut' resource, the parameter name and other parameter data that correspond to the specified parameter keyword. If the 'aete' resource specifies a name other than the name provided by the 'aeut' resource for the same parameter keyword, the scripting component uses the new name with the same parameter data from the 'aeut' resource. You should specify an empty string for the name of any standard additional parameter that you list explicitly in an 'aete' resource.n    The four-character keyword for the parameter. If the 'aete' resource specifies a standard parameter name and a parameter keyword other than the keyword for the equivalent standard parameter, the scripting component uses the new parameter keyword with the standard parameter data for the specified name. You should specify the standard parameter keyword for any standard additional parameter that you list explicitly in an 'aete' resource.n    A four-character descriptor type for the parameter. The meaning of this field varies according to the values of two of the flags that follow. One flag specifies whether the parameter is a list (singleItem or listOfItems), and the other specifies whether the values for the parameter are enumerated (enumerated or notEnumerated):n    If the parameter is not a list and its values are not enumerated, this value is the descriptor type for the direct parameter.n    If the parameter is a list and its values are not enumerated, this value is the descriptor type for each of the items in the list. (If not all the items in the list are of the same descriptor type, the flag specifying whether the value is a list must have the value singleItem, and the value of this field must be typeAEList.)n    If the parameter is not a list and its values are enumerated, this value is the four-character code for the enumeration defined in either the 'aete' or 'aeut' resource that contains the allowable values for the parameter. (If the values are enumerated but the enumeration is not defined in either the 'aete' or 'aeut' resource, the flag specifying whether the parameter’s values are enumerated must have the value notEnumerated, and the value of this field must be typeEnumerated.)n    If the parameter is a list and its values are enumerated, this value is the four-character code for the enumeration defined in the same resource that contains the allowable values for all of the items in the list. The values of the items in the list must all be one of these enumerated values.n    A human-language description of the parameter. This is a Pascal string that can include any characters. When the resource description is compiled, the resource compiler pads the string and aligns the next field on a word boundary.n    Flags that specify the following as Boolean values:n    Whether the parameter is required (required) or optional (optional).n    Whether the parameter is a single item (singleItem) or a list of items (listOfItems). (See the earlier description of the additional parameter’s four-character descriptor type for information about how this value changes the meaning of the parameter type.)n    Whether named constants, called enumerators, are specified as the only valid values for the parameter (enumerated or notEnumerated). (See the earlier description of the parameter’s four-character descriptor type for information about how this value changes the meaning of the parameter type.) For information about specifying enumerators, see “Enumeration and Enumerator Data” on page 8-43.n    Whether the parameter is the event’s only unnamed parameter (isUnNamed) or is named (isNamed). This bit is used by dialects such as AppleScript Japanese that make this distinction. For all other dialects, set the value of this bit to reserved.n    Following 4 bits are reserved for future use. The values of these bits must be set to reserved.n    Following 8 bits are reserved for future use as dialect-specific flags. The values of these bits must be set to reserved.“Extending the Standard Suites,” which begins on page 8-16, includes sample Rez input for an 'aete' resource that adds new parameters to a standard Apple event.Object Class DataEach item in the array of object classes for a suite includes information about the class and arrays that specify the properties and elements for that class. Figure 8-6 shows the format of the object class data in an 'aeut' or 'aete' resource. Figure 8-6    Structure of object class data in an 'aeut' or 'aete' resource The data for each object class consists of the following items:n    The human-language name of the object class. This is a Pascal string that can include any characters, including uppercase and lowercase letters and spaces. When the resource description is compiled, the resource compiler pads the string and aligns the next field on a word boundary.If the 'aete' resource specifies the name of an object class as an empty string, the scripting component looks up, in its 'aeut' resource, the class name and other object class data that correspond to the specified class ID. If the 'aete' resource specifies a name other than the name provided by the 'aeut' resource for the same class ID, the scripting component uses the new name with the same object class data from the 'aeut' resource. You should specify an empty string for the name of any standard object class that you list explicitly in an 'aete' resource.n    The four-character class ID for the object class. If the 'aete' resource specifies a standard object class name and a class ID other than the class ID for the equivalent standard object class, the scripting component uses the new class ID with the standard object class data for the specified name. You should specify the standard class ID for any standard object class that you list explicitly in an 'aete' resource.n    A human-language description of the class. This is a Pascal string that can include any characters. When the resource description is compiled, the resource compiler pads the string and aligns the next field on a word boundary.n    A count of the properties described for this class and an array of property definitions.n    A count of the element classes described for this class and an array of element class definitions.To define characteristics of an object class (for instance, whether an object of that class is a single item or a list of items, whether it is singular or plural, and so on), your application’s 'aete' resource must define a special property of property ID kAESpecialClassProperties as the first property in the array of properties. Because object class data does not include flag bits, the flag bits of this property are used to specify attributes for the class to which the property belongs. The next section describes how this property is defined and used. Property DataEach item in the array of properties for an object class includes information about a single property. Figure 8-7 shows the format of the property data in an 'aeut' or 'aete' resource. Figure 8-7    Structure of property data in an 'aeut' or 'aete' resourceThe data for each property consists of the following items:n    The human-language name of the property. This is a Pascal string that can include any characters, including uppercase and lowercase letters and spaces. When the resource description is compiled, the resource compiler pads the string and aligns the next field on a word boundary.If the 'aete' resource specifies the name of a property as an empty string, the scripting component looks up, in its 'aeut' resource, the property name and other property data that correspond to the specified property ID. If the 'aete' resource specifies a name other than the name provided by the 'aeut' resource for the same property ID, the scripting component uses the new name with the same property data from the 'aeut' resource. You should specify an empty string for the name of any standard property that you list explicitly in an 'aete' resource.n    The four-character property ID for the property. If the 'aete' resource specifies a standard property name and a property ID other than the property ID for the equivalent standard property, the scripting component uses the new property ID with the standard property data for the specified name. You should specify the standard property ID for any standard property that you list explicitly in an 'aete' resource.n    A four-character class ID for the object class to which the property belongs. The meaning of this field varies according to the values of two of the flags that follow. One flag specifies whether the property is a list (singleItem or listOfItems), and the other specifies whether the values for the parameter are enumerated (enumerated or notEnumerated):n    If the property is not a list and its values are not enumerated, this value is the class ID for the property.n    If the property is a list and its values are not enumerated, this value is the class ID for each of the items in the list. (If not all the items in the list are of the same descriptor type, the flag specifying whether the value is a list must have the value singleItem, and the value of this field must be cAEList.)n    If the property is not a list and its values are enumerated, this value is the four-character code for the enumeration defined in either the 'aete' or 'aeut' resource that contains the allowable values for the property. (If the values are enumerated but the enumeration is not defined in either the 'aete' or 'aeut' resource, the flag specifying whether the property’s values are enumerated must have the value notEnumerated, and the value of this field must be typeEnumerated.)n    If the parameter is a list and its values are enumerated, this value is the four-character code for the enumeration defined in the same resource that contains the allowable values for all of the items in the list. The values of the items in the list must all be one of these enumerated values.n    A human-language description of the property. This is a Pascal string that can include any characters. When the resource description is compiled, the resource compiler pads the string and aligns the next field on a word boundary.n    Flags that specify the following as Boolean values:n    The first bit is reserved for future use. Its value must be set to reserved.n    Whether the property is a single item (singleItem) or a list of items (listOfItems). (See the earlier description of the property’s four-character class ID for information about how this value changes the meaning of the class ID.)n    Whether named constants, called enumerators, are specified as the only valid values for the property (enumerated or notEnumerated). (See the earlier description of the property’s four-character class ID for information about how this value changes the meaning of the class ID.) For information about specifying enumerators, see “Enumeration and Enumerator Data” on page 8-43.n    Whether the property’s value can (readWrite) or cannot (readOnly) be set by the Set Data Apple event.n    Following 4 bits are reserved for future use.n    Following 5 bits are reserved for future use as dialect-specific flags.n    Whether the human-language name of the property is feminine (feminine) or not (notFeminine). This bit is used by dialects such as the AppleScript French dialect that make this distinction. For all other dialects, set the value of this bit to reserved.n    Whether the human-language name of the property is masculine (masculine) or not (notMasculine). This bit is used by dialects such as AppleScript French that make this distinction. For all other dialects, set the value of this bit to reserved.n    Whether the human-language name of the property is singular (singular) or plural (plural). This bit is used by dialects such as AppleScript French that make this distinction. If you set this bit to reserved, the scripting component will assign it the value singular.“Extending the Standard Suites,” which begins on page 8-16, includes sample Rez input for an 'aete' resource that adds a new property to a standard object class.The array of properties in an 'aeut' resource begins with a definition of a special property that describes characteristics of the class as a whole using the flags in the definition of that property. A property used in this way to define characteristics of a class must be defined first in the array of properties for that class and must specify kAESpecialClassProperties ('c@#!') as the property ID, cType as the property class, and an empty string for the property name and property description. If you don’t define such a property for a class in your application’s 'aete' resource, the scripting component will assign that class the default values specified by the first constant for each flag bit in the Rez declaration for the 'aeut' resource. (See Listing 8-1, which begins on page 8-9, for the 'aeut' resource type declaration.) Element Class DataEach item in the array of elements for an object class includes information about a single element class and an array of key forms for that element class. Figure 8-8 shows the format of the object class data in an 'aeut' or 'aete' resource. Figure 8-8    Structure of element class data in an 'aeut' or 'aete' resourceThe following statements are included for each element class in the array of element classes for an object class:n    The four-character class ID for the element’s object class.n    A count of key forms that apply to elements of this class within objects of the class for which these element classes are defined, followed by an array of key forms. Each item in the array must be a value from a special 'kfrm' enumeration. (The 'aeut' resource includes enumerators for the standard key forms defined in the Apple Event Registry: Standard Suites; an 'aete' resource can contain 'kfrm' enumerators for additional key forms that are specific to an application. For information about defining enumerators and enumerations, see “Enumeration and Enumerator Data” on page 8-43.) The enumerators for a 'kfrm' enumeration can include 'indx' (for the key form formAbsolutePosition), 'name' (for the key form formName), 'ID  ' (for the key form formUniqueID), 'prop' (for the key form formPropertyID), 'rang' (for the key form formRange), 'rele' (for the key form formRelativePosition), and 'test' (for the key form formTest).No names or descriptions are provided for element classes, because elements are specified by their object classes, and the declaration of each object class includes the name and description of the class. Comparison Operator DataEach item in the array of comparison operators for a suite includes information about a single comparison operator. Figure 8-9 shows the format of the comparison operator data in an 'aeut' or 'aete' resource. NoteThe AppleScript component currently doesn’t use information about comparison operators. Other scripting components may use this information.uFigure 8-9    Structure of comparison operator data in an 'aeut' or 'aete' resource The data for each comparison operator consists of the following items:n    The human-language name of the comparison operator. This is a Pascal string that can include any characters, including uppercase and lowercase letters and spaces. When the resource description is compiled, the resource compiler pads the string and aligns the next field on a word boundary.If the 'aete' resource specifies the name of a comparison operator as an empty string, the scripting component looks up, in its 'aeut' resource, the comparison operator name and other comparison operator data that correspond to the specified comparison operator ID. If the 'aete' resource specifies a name other than the name provided by the 'aeut' resource for the same comparison operator ID, the scripting component uses the new name with the same comparison operator data from the 'aeut' resource. You should specify an empty string for the name of any standard comparison operator that you list explicitly in an 'aete' resource.n    The four-character comparison operator ID for the property. If the 'aete' resource specifies a standard comparison operator name and a comparison operator ID other than the comparison operator ID for the equivalent standard comparison operator, the scripting component uses the new comparison operator ID with the standard comparison operator data for the specified name. You should specify the standard comparison operator ID for any standard comparison operator that you list explicitly in an 'aete' resource.n    A human-language description of the comparison operator. This is a Pascal string that can include any characters. When the resource description is compiled, the resource compiler pads the string and aligns the next field on a word boundary.“Extending the Standard Suites,” which begins on page 8-16, includes sample Rez input for an 'aete' resource that adds a comparison operator to a standard suite. Enumeration and Enumerator Data Each item in the array of enumerations for a suite includes information about a single enumeration and an array of enumerators for that enumeration.Figure 8-10 shows the format of the enumeration data in an 'aeut' or 'aete' resource. Figure 8-10    Structure of enumeration data in an 'aeut' or 'aete' resourceThe data for each enumeration consists of the following items:n    a four-character enumeration IDn    a count of constants, known as enumerators, that specify the allowable values for the enumeration, and an array of enumeratorsFigure 8-11 shows the format of the enumerator data.Figure 8-11    Structure of enumerator data in an 'aeut' or 'aete' resourceThe data for each enumerator consists of the following items:n    The human-language name of the enumerator. This is a Pascal string that can include any characters, including uppercase and lowercase letters and spaces. When the resource description is compiled, the resource compiler pads the string and aligns the next field on a word boundary.If the 'aete' resource specifies the name of an enumerator as an empty string, the scripting component looks up, in its 'aeut' resource, the enumerator name and other enumerator data that correspond to the specified enumerator ID. If the 'aete' resource specifies a name other than the name provided by the 'aeut' resource for the same enumerator ID, the scripting component uses the new name with the same enumerator data from the 'aeut' resource. You should specify an empty string for the name of any standard enumerator that you list explicitly in an 'aete' resource.n    The four-character enumerator ID for the enumerator. If the 'aete' resource specifies a standard enumerator name and an enumerator ID other than the enumerator ID for the equivalent standard enumerator, the scripting component uses the new enumerator ID with the standard enumerator data for the specified name. You should specify the standard enumerator ID for any standard enumerator that you list explicitly in an 'aete' resource.n    A human-language description of the enumerator. This is a Pascal string that can include any characters. When the resource description is compiled, the resource compiler pads the string and aligns the next field on a word boundary.“Extending the Standard Suites,” which begins on page 8-16, includes sample Rez input for an 'aete' resource that specifies an enumeration and an array of enumerators.  The Scripting Size ResourceIf your application handles the Get AETE event, you must provide a scripting size resource. A scripting size resource is a resource of type 'scsz' that provides information about an application’s capabilities for use by scripting components. It also allows your application to specify preferences for the sizes of the portion of your application’s heap used by a scripting component for its application-specific heap and stack. Listing 8-5 shows the resource type declaration in Rez format for the 'scsz' resource. Listing 8-5    Resource type declaration for the 'scsz' resourcetype 'scsz' {    boolean            dontReadExtensionTerms, /*if application needs */                 readExtensionTerms;                                /* Get AETE event*/    boolean            reserved;    boolean            reserved;    boolean            reserved;    boolean            reserved;    boolean            reserved;    boolean            reserved;    boolean            reserved;    boolean            reserved;    boolean            reserved;    boolean            reserved;    boolean            reserved;    boolean            reserved;    boolean            reserved;    boolean            reserved;    boolean            reserved;/*memory sizes are in bytes; 0 means use default*/    unsigned longint                        minStackSize;                            /*minimum stack size*/    unsigned longint                        preferredStackSize;                            /*preferred stack size*/    unsigned longint                        maxStackSize;                            /*maximum stack size*/    unsigned longint                        minHeapSize;                            /*minimum heap size*/    unsigned longint                        preferredHeapSize;                            /*preferred stack size*/    unsigned longint                        maxHeapSize;                            /*maximum heap size*/};The data for an 'scsz' resource consists of the following items:n    Flags that specify Boolean values:n    Whether the scripting component should (readExtensionTerms) or shouldn’t (dontReadExtensionTerms) read the application’s terminology information directly from its 'aete' resource. If the application is not running, this flag allows a scripting component to determine whether it should read the application’s terminology information without sending it a Get AETE event.n    The following 15 bits are reserved for future use. Their values must be set to reserved.n    The minimum size for the portion of the application’s heap used by the scripting component’s application-specific stackn    The preferred size for the portion of the application’s heap used by the scripting component’s application-specific stackn    The maximum size for the portion of the application’s heap used by the scripting component’s application-specific stackn    The minimum size for the portion of the application’s heap used by the scripting component’s application-specific heapn    The preferred size for the portion of the application’s heap used by the scripting component’s application-specific heapn    The maximum size for the portion of the application’s heap used by the scripting component’s application-specific heapIf you specify 0 for any of the fields that specify memory size or number of script IDs, the scripting component uses its own default values for those fields. The AppleScript component provides a function, ASInit, that allows your application to initialize the component with desired values for memory sizes or number of script IDs. If your application doesn’t call ASInit, the AppleScript component initializes itself using either the values specified in the application’s 'scsz' resource or, for those values not provided by the 'scsz' resource, default values provided by the AppleScript component. For more information about ASInit, see “Initializing AppleScript” on page 10-80.  Listing 9-0Table 9-0Recording Apple EventsContentsAbout Recordable Applications9-3Factoring Your Application for Recording9-6Factoring the Quit Command and the New Command9-6Sending Apple Events Without Executing Them9-12What to Record9-14Recording User Actions9-15Recording the Selection of Text Objects9-18Recording Insertion Points9-23Recording Typing9-27Recording the Selection of Nontext Objects9-30Identifying Objects9-32Moving the Selection During Recording9-34Recording Interactions With Dialog Boxes9-35How Apple Event Recording Works9-35Recording Apple EventsThis chapter describes the general characteristics of a recordable application and provides some examples of how to factor your application for recording. It also provides guidelines to help you decide which user actions to record and how to record them. Before you read this chapter, you should read the chapter “Introduction to Scripting” in this book. To factor your application, you must know how to respond to Apple events, create and send Apple events, and resolve and create object specifier records. For comprehensive information about implementing Apple events, see the chapters “Introduction to Apple Events,” “Responding to Apple Events,” “Creating and Sending Apple Events,” and “Resolving and Creating Object Specifier Records” in this book.The first three sections in this chapter providen    a description of the basic requirements for recordable applicationsn    examples of how to begin factoring your applicationn    guidelines for what to recordThe fourth section describes how Apple event recording works. You need to read it only if you are developing a script editor, an application that can initiate recording, or a scripting component.About Recordable ApplicationsA recordable application is an application that uses Apple events to report user actions to the Apple Event Manager for recording purposes. One way to do this is to separate the code that implements your application’s user interface from the code that actually performs work when the user manipulates the interface. This is called factoring your application. A factored application translates low-level events generated by the user into recordable Apple events that the application sends to itself to perform tasks.A recordable event is any Apple event that any recordable application sends to itself while recording is turned on for the local computer, with the exception of events that are sent with the kAEDontRecord flag set in the sendMode parameter of AESend. A recording process is any process (for example, the Script Editor application) that can turn recording on and off and can receive and record recordable Apple events. After Apple event recording has been turned on by a recording process, the Apple Event Manager sends that process copies of all recordable Apple events on the local computer. For example, when a user presses the Record button in the Script Editor application, it calls a scripting component routine to turn on recording for the AppleScript component (or any other scripting component). While recording is on, the Apple Event Manager sends Script Editor copies of all subsequent recordable Apple events, which Script Editor records (with the aid of the scripting component) in the form of a compiled script. After turning off recording from Script Editor, the user can edit or execute the recorded script.Although factoring your application is the recommended method of making your application recordable, it is also possible to report user actions by means of Apple events only when Apple event recording is turned on, even though the application may respond to those actions by some means other than Apple events. In effect, the application uses Apple events to describe user actions without actually using the events to perform the action. To indicate that you want the Apple Event Manager to send a copy of a recordable event to the recording process without actually sending the event to your application, add the constant kAEDontExecute to the sendMode parameter of the AESend function.Even in a factored application, it may not always be possible to send an Apple event that actually executes the task initiated by the user. For example, if the user types some text, it is more practical to use standard TextEdit or QuickDraw routines to draw the text than to send a separate Apple event each time the user presses a key. In this case, the application can draw the text as it is typed in the most convenient manner available; then, when the user finishes typing a sequence of characters—by clicking the mouse button while the cursor is somewhere else in the document or performing some other action—the application can create an Apple event that corresponds to the typing and add the constant kAEDontExecute to the sendMode parameter when it sends the Apple event. If your application needs to know when Apple event recording is turned on and off, it should install handlers for the Recording On and Recording Off events.Recording On—perform actions associated with beginning of recording session         Event class    kCoreEventClass    Event ID    kAENotifyStartRecording    Parameters    None    Description    Sent by the Apple Event Manager to all running processes on the local computer to inform them that recording has been turned on    Recording Off—perform actions associated with end of recording session         Event class    kCoreEventClass    Event ID    kAENotifyStopRecording    Parameters    None    Description    Sent by the Apple Event Manager to all running processes on the local computer to inform them that recording has been turned off    When a recording process turns on recording, the Apple Event Manager sends all running processes on the local computer a Recording On event. When a user turns off recording, the Apple Event Manager sends all running processes the Recording Off event with the kAEWaitReply flag set. If an application has stored some data (for instance, keystrokes) that needs to be recorded as an Apple event, this is the last chance to send an event for recording purposes. If your application needs to know which recording process has turned recording on or off, it can check the keyOriginalAddressAttr attribute of the Recording On or Recording Off event for the address of the recording process. Factoring your application is the recommended method of making your application recordable because it guarantees that any action a user can perform via your application’s user interface can also be accomplished via Apple events. Factoring also allows you to avoid duplicating code within your application. Instead of using one piece of code to respond to some user action within your application, and another piece of code to respond to the equivalent Apple event, you can use the same code to respond to the Apple event, whether it is sent by your application in response to a user action, by some other application, or by a scripting component in the course of executing a script. The next section, “Factoring Your Application for Recording,” provides some examples of how to go about factoring your application. Regardless of how you factor your application, making it recordable requires you to make decisions about the most useful methods of recording user actions that can be described in several different ways in scripts. If a user moves a window, for example, the window can be described in the corresponding recorded script as window 1, or the window named Fred, or the first window. Although the OSA permits recording at a high level and thus avoids many of the problems users encounter with applications that record low-level events such as keystrokes and mouse clicks, scripting components cannot predict what information a user cares about in a given situation. Therefore, a recordable application should send Apple events that correspond to the simplest possible statements in a scripting language. “What to Record,” which begins on page 9-14, provides some general guidelines for making these kinds of decisions.“How Apple Event Recording Works,” which begins on page 9-35, describes the Apple Event Manager’s recording mechanism in more detail, including the role of the Recording On and Recording Off events. Factoring Your Application for RecordingThe recommended way to make your application recordable, or capable of sending Apple events to itself whenever a user performs a significant action, is to factor the code that controls your application’s user interface from the code that responds to the user’s manipulation of the interface. A fully factored application translates user actions into Apple events that the application sends to itself to initiate tasks.  The examples that follow demonstrate how to factor code that responds to relatively simple user actions such as creating a new document or moving a window. They are intended only to illustrate the general approach you should take; many of the decisions you will need to make while factoring will be unique to your application. “What to Record,” which begins on page 9-14, provides guidelines for deciding which user actions to record and how to record them. For examples of factored applications, see the AppleScript Software Developers’ Kit. If you are factoring an existing application, it’s usually a good idea to begin with the required Apple events and any other Apple events that you plan to send in order to execute commands in the File menu. You can then proceed to other menu commands and mouse actions. If you are designing a new application and want to make it recordable, you should build factoring into every aspect of your application design.Factoring the Quit Command and the New CommandThis section demonstrates how to factor two File menu commands: Quit and New. When the user chooses a menu command, an application first determines which one was chosen and then performs the action associated with that command. For example, when a user chooses Quit from the File menu, an application that is not factored simply calls an application-defined DoQuit routine. Because Quit Application is one of the required Apple events, it is relatively easy for most applications that support Apple events to factor the code that responds to the Quit command.After a factored application has determined that the user has chosen the Quit command, it sends the Quit Application event to itself by calling its MyDoMenuQuit routine.PROCEDURE MyDoMenuQuit;VAR    myErr: OSErr;BEGIN    myErr := MySendAEQuit(kAEAskUser);    {handle any errors}END;The MyDoMenuQuit routine in turn calls the MySendAEQuit routine shown in Listing 9-1, which creates the Quit Application event and sends it. Listing 9-1    A function used by a factored application to send itself a Quit Application eventFUNCTION MySendAEQuit (saveOpt: DescType): OSErr;VAR     myAppleEvent, defReply:                                AppleEvent;    myErr, ignoreErr:                                OSErr;BEGIN    {create Quit event}    myErr := AECreateAppleEvent(kCoreEventClass,                                             kAEQuitApplication,                                             gSelfAddrDesc,                                             kAutoGenerateReturnID,                                             kAnyTransactionID, myAppleEvent);    IF myErr = noErr THEN        {add optional parameter that specifies whether this app }        { should prompt user if window is dirty}        myErr := AEPutParamPtr(myAppleEvent, keyAESaveOptions,                                         typeEnumerated, @saveOpt,                                        SizeOf(saveOpt));    IF myErr = noErr THEN             {send event}        myErr := AESend(myAppleEvent, defReply,                                 kAENoReply+kAEAlwaysInteract,                                kAENormalPriority, kAEDefaultTimeOut,                                NIL, NIL);    MySendAEQuit := myErr;    ignoreErr := AEDisposeDesc(myAppleEvent);END;The input to the MySendAEQuit routine is a constant that indicates whether to save dirty windows without asking the user (kAEYes), quit without saving dirty windows (kAENo), or ask the user whether each dirty window should be saved (kAEAskUser). In this example, the constant kAEAskUser passed to the MySendAEQuit routine indicates that the user will be asked whether each dirty window should be saved. After the application receives the Quit Application event, the MyHandleQuit handler shown in Listing 9-2 performs all the actions associated with that event, such as saving any open documents. (Note that your application should call the ExitToShell procedure from the main event loop, not from your handler for the Quit Application event.)Listing 9-2    A routine used by a factored application to handle a Quit Application eventFUNCTION MyHandleQuit (theAppleEvent, reply: AppleEvent;                                handlerRefcon: LongInt): OSErr;VAR    userCanceled:                                Boolean;    saveOpt, returnedType:                                DescType;    actSize:                                Size;    myErr:                                OSErr;BEGIN    {check for missing required parameters}    myErr := MyGotRequiredParams(theAppleEvent);    IF myErr = noErr THEN    BEGIN        {pick up optional save parameter}        saveOpt := kAEAskUser;                                {the default}        myErr := AEGetParamPtr(theAppleEvent, keyAESaveOptions,                                         typeEnumerated, returnedType,                                        @saveOpt, SizeOf(saveOpt), actSize);        IF myErr = errAEDescNotFound THEN             myErr := noErr;        MyHandleQuit := myErr;        IF myErr = noErr THEN        BEGIN            userCanceled := MyPrepareToTerminate(saveOpt);            IF userCanceled THEN                 MyHandleQuit := kUserCanceled;        END;    END    ELSE        MyHandleQuit := myErr;END;The handler in Listing 9-2 calls another function supplied by the application, the MyPrepareToTerminate function. When the value of the optional parameter that specifies how to deal with dirty windows equals kAEAskUser, this function asks the user whether to save each dirty window and returns a Boolean value that indicates whether the user canceled the Quit request. It also responds appropriately to the other possible values of the optional parameter.If recording has been turned on for a scripting component (for example, after a user clicks the Record button in the Script Editor application) and the user quits the application, the Apple Event Manager automatically sends the scripting component a copy of the Quit Application event sent by the MySendAEQuit routine. The scripting component records the event in a compiled script. When a user executes the recorded script, the scripting component sends the same Quit Application event to the application, which calls the MyHandleQuit function and responds to the event just as if the user had chosen Quit from the File menu.  After you have factored the commands associated with required Apple events for an existing application, you can move on to the other commands in the File menu, such as New. After a factored application has determined that the user has chosen New, it calls its MyDoMenuNew routine, which sends the Create Element event to the application.PROCEDURE MyDoMenuNew;VAR    myErr := OSErr;BEGIN    myErr := MySendAECreateElement(gNullDesc, cDocument);    {handle any errors}END;The container for the new element is the application’s default container, specified by a null descriptor record, and the desired class is cDocument. The MyDoMenuNew routine in turn calls the MySendAECreateElement routine shown in Listing 9-3, which creates the Apple event and sends it. Listing 9-3    A routine used by a factored application to send itself a Create Element eventFUNCTION MySendAECreateElement (cont: AEDesc;                                           elemClass: DescType): OSErr; VAR     myAppleEvent, defReply:                                AppleEvent;    myErr, ignoreErr:                                OSErr;BEGIN    {create Create Element event}    myErr := AECreateAppleEvent(kCoreEventClass, kAECreateElement,                                            gSelfAddrDesc,                                            kAutoGenerateReturnID,                                            kAnyTransactionID, myAppleEvent);    IF myErr = noErr THEN        {add parameter that specifies insertion location for the }        { new element}        myErr :=  AEPutParamDesc(myAppleEvent,keyAEInsertHere,cont);    IF myErr = noErr THEN         {add parameter that specifies new element's object class}        myErr := AEPutParamPtr(myAppleEvent, keyAEObjectClass,                                      typeType, @elemClass,                                      SizeOf(elemClass));    IF myErr = noErr THEN        {send the event}        myErr := AESend(myAppleEvent, defReply,                                 kAENoReply+kAECanInteract,                                                         kAENormalPriority, kAEDefaultTimeOut, NIL,                                 NIL);    MySendAECreateElement := myErr;    ignoreErr := AEDisposeDesc(myAppleEvent); {must dispose of }                                                            { event}END;For the purposes of this example, the routine shown in Listing 9-3 sends only the required parameters and can only create a new active window with the default name. After the application receives the Create Element event, its MyHandleCreateElement handler performs the requested action, as shown in Listing 9-4. In this case, it creates a new active window with a default title.Listing 9-4    The Create Element event handler for a factored applicationFUNCTION MyHandleCreateElement (theAppleEvent: AppleEvent;                                           reply: AppleEvent;                                           handlerRefCon: LongInt): OSErr;VAR    myCont:                                     AEDesc;    returnedType    , newElemClass:                                 DescType;    actSize:                                     Size;    contClass:                                     DescType;    window:                                     WindowPtr;    myErr:                                     OSErr;BEGIN    {get the parameters out of the event}    {first get the direct parameter, which specifies insertion }    { location for new window--that is, frontmost window}    myCont.dataHandle := NIL;    myErr := AEGetParamDesc(theAppleEvent, keyAEInsertHere,                                     typeWildCard, myCont);    IF myErr = noErr THEN        {get the other required parameter, which specifies class }        { cDocument when MyHandleCreateElement creates a new window}        myErr := AEGetParamPtr(theAppleEvent, keyAEObjectClass,                                         typeType, returnedType,                                        @newElemClass,                                         SizeOf(newElemClass), actSize);    IF myErr = noErr THEN        myErr := MyGotRequiredParams(theAppleEvent);    MyHandleCreateElement := myErr;    IF myErr = noErr THEN    BEGIN        {check container and class, just to make sure}        IF (myCont.descriptorType <> typeNull) OR (newElemClass <>                 cDocument) THEN             MyHandleCreateElement := kWrongContainerOrElement        ELSE            {MyNewWindow creates a new window with a default name }            { and returns a pointer to it in the window parameter}            MyHandleCreateElement := MyNewWindow(window);                                                END;    myErr := AEDisposeDesc(myCont);    {if your app sends a reply in response to the Create Element }    { event, then set up the reply event as appropriate}END; If recording has been turned on for a scripting component (for example, after a user clicks the Record button in the Script Editor application), the Apple Event Manager automatically sends the scripting component a copy of the Create Element event sent by the MySendAECreateElement routine. The scripting component records the Apple event as a statement in a compiled script. When a user executes the recorded script, the scripting component sends the same Create Element event to the application, which calls its MyHandleCreateElement handler and responds to the event just as if the user had chosen New from the File menu. Sending Apple Events Without Executing ThemIf an application is fully factored, it carries out almost all the tasks a user can perform by sending itself Apple events in the manner illustrated by the listings in the preceding sections. However, in some cases it may not be practical to send an Apple event that actually executes a task performed by the user. For example, if the user drags a window by its title bar from one position to another, it is inefficient to send a series of Apple events that move the window through a series of positions until the user releases the mouse button. Instead, your application can call the Window Manager routine DragWindow to allow the user to drag the window to a new position. Until the user releases the mouse button, it’s not possible to send a single Apple event that drags the window to the new position, because the new position is not yet known. When DragWindow returns, the window has already been dragged to its new position, and its window record has been updated. At this point your application can send itself the Set Data event that performs the same action; but to avoid repeating the action that was just performed with DragWindow, you should add the kAEDontExecute constant to the sendMode parameter of the AESend function when you send the event. The Apple Event Manager then sends the Set Data event to the recording process, if any, but does not send it to the application. Listing 9-5 shows an application-defined routine, MyDoDragWindow, that illustrates this approach. The MyDoDragWindow routine calls DragWindow in the usual way, then uses another application-defined routine, MyCreateAESetWindowPos, and the AESend function to create and send a Set Data Apple event that sets the window position to the new location. However, because the window has already been moved, there is no need to execute the Set Data event. To send the event for recording purposes without actually executing it, the MyDoDragWindow routine adds the kAEDontExecute constant to the sendMode parameter of the AESend function when it sends the Set Data event. Listing 9-5    A routine used by a factored application to handle window movementPROCEDURE MyDoDragWindow (theWindow: WindowPtr; startPt: Point;                                   boundsRect: Rect);VAR     newPos:                    Point;    index:                    Integer;    theAppleEvent:                    AppleEvent;    reply:                    AppleEvent;    myErr:                    OSErr;BEGIN    DragWindow(theWindow, startPt, boundsRect);    newPos := WindowPeek(theWindow)^.contRgn^^.rgnBBox.topLeft;        index := MyIndexFromWndwPtr(theWindow);    MyCreateAESetWindowPos(index, newPos, theAppleEvent);    myErr := AESend(theAppleEvent, reply, kAENoReply +                             kAECanInteract + kAEDontExecute,                            kAENormalPriority, kAEDefaultTimeout, NIL,                             NIL);END;If recording has been turned on and the user moves a window, the Apple Event Manager automatically sends the scripting component a copy of the Set Data event sent by the MyDoDragWindow routine but does not send the event to the application. The scripting component records the event as a statement in a compiled script. When a user executes the recorded script, the scripting component sends the same Set Data event to the application. The application’s handler for the Set Data event then changes the position of the window.  What to RecordFactoring an application involves making decisions about which user actions generate Apple events, about the content of those events, and about when to send events for recording purposes. For example, the preceding section, “Sending Apple Events Without Executing Them,” describes how an application should generate an Apple event that corresponds to a change in the position of a window. Other actions can be more complicated to define in terms of Apple events. This section provides general guidelines for deciding which user actions should generate Apple events and how those events should be defined.When the user records a series of actions as a script, playing the recorded script back later in exactly the same circumstances must produce exactly the same result. If the circumstances at execution time are similar but not exactly the same as when the script was recorded, the script should also work correctly. However, certain differences will always lead to unexpected results or cause execution to fail.The goal of these guidelines is to help you create scripts that will work correctly in the largest number of circumstances with the fewest post-recording changes by the user. To accomplish this goal, a recordable application should send itself Apple events that describe as specifically as possible the user’s actions in the application’s domain without making guesses about the user’s intentions.The way your application uses Apple events to record a user’s actions depends in part on the kind of script being recorded. From the user’s perspective, there are at least three kinds of scripts:n    A script application. The icons for these files appear in the Finder, for example, in the Apple Menu Items folder or the Startup Items folder. n    A script that functions like a menu command, usually acting on the current selection in the current application, and stored either as a compiled script file that appears in the Finder or as a script stored within an application or one of its documents. n    A script that is “embedded” in an application—that is, explicitly associated with something in a document, such as a field in a form, a cell or row of a spreadsheet, or a button.The recording guidelines in the sections that follow apply to the recording of scripts that function like menu commands and scripts that are embedded in an application. Because such scripts are executed under a user’s direct control, the user expects their execution to cause something to happen, possibly changing the current selection, the Clipboard, or the active window.The execution of a script application, however, may cause a scripting component to send events to one or more applications intermittently without the user’s knowledge. If the script in a script application refers to the current selection, the Clipboard, or the active window, its execution may interfere with other tasks being performed by the user or tasks performed during the execution of other scripts. To create a script application and ensure that it works correctly when executed, a scripter may need to modify the script after it has been recorded.For example, to eliminate references to the Clipboard, a scripter can use a script variable as a user-defined Clipboard and convert Cut, Copy, and Paste statements to appropriate combinations of Move, Copy, New, and Delete statements, while supplying the previously defined selection as the argument. It may also be necessary to convert a description such as “the front document” to a specific filename or a variable.Recording User ActionsTwo general guidelines apply to the recording of all user actions:n    Send Apple events that correspond to simple statements in a script rather than compound statements.n    Don’t record superfluous actions.In most cases, if the user performs several related actions, your application should send Apple events for each action rather than saving the actions and creating an event that combines them. For example, if the user selects some text, cuts it, and then pastes it somewhere else, your application should send itself four events that correspond to these actions:    1.    Select the text    2.    Cut    3.    Set the insertion point    4.    PasteThus, if the user selects characters 5 through 20 of the frontmost document, chooses the Cut command from the Edit menu, places the insertion point after character 72, and chooses the Paste command, your application should send the following events. n    A Select event (event class kAEMiscStandards, event ID kAESelect) with this direct parameter:Keyword    Descriptor type    Data    keyDirectObject    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cChar    keyAEContainer    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cDocument    keyAEContainer    typeNull    No data    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    1    keyAEKeyForm    typeEnumerated    formRange    keyAEKeyData    typeRangeDescriptor    (see indented record)    keyAERangeStart    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cChar    keyAEContainer    typeCurrentContainer    No data    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    5    keyAERangeStop    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cChar    keyAEContainer    typeCurrentContainer    No data    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    20    n    A Cut event (event class kAEMiscStandards, event ID kAECut)n    A Select event with this direct parameter:Keyword    Descriptor type    Data    keyDirectObject    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cInsertionLoc    keyAEContainer    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cChar    keyAEContainer    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cDocument    keyAEContainer    typeNull    No data    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    1    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    72    keyAEKeyForm    typeEnumerated    formRelativePosition    keyAEKeyData    typeEnumerated    kAEAfter    n    A Paste eventNoteThe format used for the direct parameters in this example and throughout this chapter does not show the structure of the direct parameters as they exist within the Apple events. Instead, this format shows what you would obtain after calling AEGetKeyDesc repeatedly to extract the nested descriptor records from the Apple events.When you call AEGetKeyDesc to extract the descriptor record that specifies an application’s default container, AEGetKeyDesc returns a descriptor record of type AEDesc with a descriptor type of typeNull and a data handle whose value is 0.uThe first Select event in this example sets the application’s pSelection property (that is, the current selection) to the objects identified by the object specifier record in the direct parameter—characters 5 through 20. The second Select event places the insertion point after the object identified by the object specifier in the direct parameter—after character 72.You could also interpret these four actions as a single Move event that simply moves characters 5 through 20 to after character 72. A user could write such a statement in a script, but for recording purposes four separate events correspond more precisely to the user’s actions. For example, if the user performed another paste operation after the first four actions, a Move event would not produce the correct results.It is equally important for a recordable application not to send superfluous events. For example, your application should not send an event every time the user makes a selection. Instead, it should keep track of the most recent selection made. When the user performs some action on the selection, the application should send an event that sets the selection followed by the event that corresponds to the action taken by the user. However, if the user doesn’t perform an action on the selection, the application should not send an event.IMPORTANTIf something is already selected when recording begins, your application should not record that selection. Subsequent user actions should be recorded assuming that there is a selection. By not recording the current selection, you allow the user to record scripts that work, without further modification, much like menu commands that operate on the current selection.sThe example just discussed assumes that the application has multiple documents. In such an application, document 1 is always the document in the frontmost window. The examples that follow are simplified, as if they were generated by an application like TeachText that can have only one document open at a time and can therefore locate objects such as characters in the default container. For more complex applications that locate text in cells, documents, and other containers, you must specify additional containers as appropriate.Recording the Selection of Text ObjectsWhen your application needs to record a selection that the user has made by dragging through a range of text, it should send itself a Select event that selects a range of characters. For example, a Select event with this direct parameter selects characters 80 through 764:Keyword    Descriptor type    Data    keyDirectObject    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cChar    keyAEContainer    typeNull    No data    keyAEKeyForm    typeEnumerated    formRange    keyAEKeyData    typeRangeDescriptor    (see indented record)    keyAERangeStart    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cChar    keyAEContainer    typeCurrentContainer    No data    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    80    keyAERangeStop    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cChar    keyAEContainer    typeCurrentContainer    No data    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    764    It is sufficient to record such a text selection as a range of characters. However, recording selections in other units can make the corresponding scripts easier to read. If you decide to record text selections in other units, keep these guidelines in mind:n    Use the largest whole unit that completely describes the selection.n    Do not mix units.n    Use units appropriate to the method of selection.n    Use logical units rather than units that vary with reformatting.n    Don’t try to guess the user’s intentions.The rest of this section provides examples of how to apply these guidelines.If you do record text selections in units other than characters, record each selection in terms of the largest whole unit that completely describes the selection. For example, suppose the user selects characters 115 through 170 by dragging. Further, suppose the selected characters are exactly the same as words 33 through 50 and also the same as paragraph 2. In this case your application should send itself a Select event with this direct parameter:Keyword    Descriptor type    Data    keyDirectObject    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cParagraph    keyAEContainer    typeNull    No data    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    2    However, if the selected characters don’t match a larger unit exactly—for example, if paragraph 2 is larger than the selection or the selection is a portion of two paragraphs— use the largest unit available, in this case words. For example, a Select event with this direct parameter selects word 33 through word 45: Keyword    Descriptor type    Data    keyDirectObject    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cText    keyAEContainer    typeNull    No data    keyAEKeyForm    typeEnumerated    formRange    keyAEKeyData    typeRangeDescriptor    (see indented record)    keyAERangeStart    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cWord    keyAEContainer    typeCurrentContainer    No data    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    33    keyAERangeStop    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cWord    keyAEContainer    typeCurrentContainer    No data    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    45    Do not mix units. You should not send Apple events that define selections like character 2 of word 3 of line 5 of paragraph 2 in document “MyDocument.” Instead, define selections as simply as possible; for example, character 45 in the document “MyDocument.”When the user selects text by double-clicking it, your application should send a Select event that specifies words. For example, your application should send a Select event with this direct parameter when the user double-clicks word 5:Keyword    Descriptor type    Data    keyDirectObject    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cWord    keyAEContainer    typeNull    No data    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    5     If the user double-clicks word 5 and then extends the selection through word 9, your application should send a Select event with this direct parameter:Keyword    Descriptor type    Data    keyDirectObject    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cText    keyAEContainer    typeNull    No data    keyAEKeyForm    typeEnumerated    formRange    keyAEKeyData    typeRangeDescriptor    (see indented record)    keyAERangeStart    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cWord    keyAEContainer    typeCurrentContainer    No data    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    5    keyAERangeStop    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cWord    keyAEContainer    typeCurrentContainer    No data    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    9    If your application supports selection of a paragraph, for example by clicking the left margin, triple-clicking, or some other action, your application should send a Select event that selects the paragraph. For example, a Select event with this direct parameter selects paragraph 2:Keyword    Descriptor type    Data    keyDirectObject    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cParagraph    keyAEContainer    typeNull    No data    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    2    If your application supports the selection of other units (for instance, cells, rows, and columns in a spreadsheet; embedded graphics in a word processor; or buttons) and if users can select a range of such units, your application should record using those units when appropriate. For example, a Select event with this direct parameter selects row 5 through row 23:Keyword    Descriptor type    Data    keyDirectObject    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cRow    keyAEContainer    typeNull    No data    keyAEKeyForm    typeEnumerated    formRange    keyAEKeyData    typeRangeDescriptor    (see indented record)    keyAERangeStart    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cRow    keyAEContainer    typeCurrentContainer    No data    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    5    keyAERangeStop    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cRow    keyAEContainer    typeCurrentContainer    No data    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    23    A Select event with this direct parameter selects the second 'PICT' image:Keyword    Descriptor type    Data    keyDirectObject    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cPICT    keyAEContainer    typeNull    No data    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    2    When the user chooses a Select All command, your application should send a Select event with this direct parameter to select the contents of the document:Keyword    Descriptor type    Data    keyDirectObject    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cProperty    keyAEContainer    typeNull    No data    keyAEKeyForm    typeEnumerated    formPropertyID    keyAEKeyData    typeLongInteger    pContents    Units that vary with reformatting, such as lines and pages in a text document, are not as useful as logical units that describe the data more precisely. Whenever possible, use logical units such as character, word, paragraph, section, and so on.Don’t try to guess the user’s intentions. For example, if a selection can be described as either “word 14” or as “the third bold word in paragraph 3,” use the simpler description. If you guess the user’s intentions, you will be wrong often enough to cause the user to distrust the recording process.Recording Insertion PointsThe insertion point and a selection are synonymous in the Macintosh Operating System. However, scripting languages need a way of specifying a zero-width selection. Sometimes the best way to specify an insertion location is in relation to another object; for example, “after word 5.” This section describes recommended methods of specifying an insertion point in a recordable event.The insertion point can be specified in Apple events by either an insertion location descriptor record (typeInsertionLocation) or an object specifier record (typeObjectSpecifier) that specifies the class cInsertionLoc and the key form formRelativePosition. The Move, Clone, and Create events accept an insertion location descriptor record; other events, including Select and Set Data, require an object specifier record. Five constants can be used to describe an insertion point in relation to an object or container: Constant    Corresponding insertion point    kAEReplace    The specified object will be replaced if not qualified by one of the other phrases    kAEBefore    Just before the specified object (either type typeObjectSpecifier or type typeInsertionLocation)    kAEAfter    Just after the specified object (either type typeObjectSpecifier or type typeInsertionLocation)    kAEBeginning    In the specified container and before all other elements of the same class in that container (type typeInsertionLocation only)    kAEEnd    In the specified container and after all other elements of the same class in that container     For more information about the way AppleScript uses insertion location descriptor records, see “Defining Terminology for Use by the AppleScript Component,” which begins on page 8-3, and the Apple Event Registry: Standard Suites. The rest of this section provides examples of object specifier records used to specify insertion points.Users usually insert objects after some other object. So, unless the insertion point is clearly at the beginning or end of a container or identifies an object to be replaced, use the constant kAEAfter to record the location. For example, if the user places the insertion point after character 2, your application should send a Select event with this direct parameter:Keyword    Descriptor type    Data    keyDirectObject    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cInsertionLoc    keyAEContainer    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cChar    keyAEContainer    typeNull    No data    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    2    keyAEKeyForm    typeEnumerated    formRelativePosition    keyAEKeyData    typeEnumerated    kAEAfter    If the selection is not 0 characters wide, the user is replacing the selection with another object, so you can specify the location simply as the object specifier record for the object to be replaced.If the user clicks the white space after a paragraph somewhere in the middle of the document, defining the insertion point becomes more complex because different applications deal with this situation in different ways. Some place the insertion point at the end of the current paragraph, while others place the insertion point at the beginning of the next paragraph. Depending on the way your application handles this situation, you should use an object specifier record that specifies either kAEBeginning or kAEEnd.Remember that the Select event requires an object specifier record. Thus, if you want to place the insertion point at the beginning of a paragraph, use an object specifier record that specifies a location just before the first item of the paragraph, rather than an insertion location descriptor record. For example, a Select event with this direct parameter places the insertion point just before the first item of paragraph 3:Keyword    Descriptor type    Data    keyDirectObject    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cInsertionLoc    keyAEContainer    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cItem    keyAEContainer    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cParagraph    keyAEContainer    typeNull    No data    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    3    keyAEKeyForm    typeType    formAbsolutePosition    keyAEKeyData    typeLongInteger    1    keyAEKeyForm    typeEnumerated    formRelativePosition    keyAEKeyData    typeEnumerated    kAEPrevious    If the user clicks the left edge of the first line in a paragraph, thus setting the insertion point before the beginning of the paragraph, you should use a similar strategy. However, this is the only situation in which you should use kAEPrevious.When the insertion point is at the end of a document record, use an object specifier record that specifies the location after the last item in the document.For example, a Select event with this direct parameter places the insertion point just after the last item in a document:Keyword    Descriptor type    Data    keyDirectObject    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cInsertionLoc    keyAEContainer    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cItem    keyAEContainer    typeNull    No data    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    -1    keyAEKeyForm    typeEnumerated    formRelativePosition    keyAEKeyData    typeEnumerated    kAENext     A Select event with this direct parameter places the insertion point just after the last item in paragraph 3:Keyword    Descriptor type    Data    keyDirectObject    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cInsertionLoc    keyAEContainer    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cParagraph    keyAEContainer    typeNull    No data    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    3    keyAEKeyForm    typeEnumerated    formRelativePosition    keyAEKeyData    typeEnumerated    kAENext    Recording TypingIn general, to record typing your application should send itself a Set Data event that sets the contents of the selection. The data should be unstyled text. When your application handles the Set Data event, it should apply the styles that prevail at the insertion point. If your application supports styled text, you need to decide how to apply styles to new text and how to record style changes to selected text. Follow these general guidelines for recording typing: n    When the user sets an insertion point and types new text, use the styles defined for the text just before the insertion location.n    When a user selects text and changes its style, apply the changes to the selection.n    If a user types or pastes new text into a selection, place the insertion point after the new text.The rest of this section provides examples of how to apply these guidelines.Suppose the user sets an insertion point and then types something. Your application should use the style, font, size, and other characteristics of the text just before the insertion point for the new text, and it should record only the new characters inserted. For example, to place the insertion point after word 30 and insert the text “This is the new text,” your application can send a Select event followed by a Set Data event:n    A Select event with this direct parameter places the insertion point after word 30:Keyword    Descriptor type    Data    keyDirectObject    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cInsertionLoc    keyAEContainer    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cWord    keyAEContainer    typeNull    No data    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    30    keyAEKeyForm    typeEnumerated    formRelativePosition    keyAEKeyData    typeEnumerated    kAENext    n    A Set Data event (event class kAECoreSuite, event ID kAESetData) with these parameters (keyDirectObject and keyAEData) sets the selection to the new text:Keyword    Descriptor type    Data    keyDirectObject    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cProperty    keyAEContainer    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cProperty    keyAEContainer    typeNull    No data    keyAEKeyForm    typeEnumerated    formPropertyID    keyAEKeyData    typeLongInteger    pSelection    keyAEKeyForm    typeEnumerated    formPropertyID    keyAEKeyData    typeType    pContents    keyAEData    typeChar    "This is the new text"    Notice that the Select event in this example causes your application to set its pSelection property (the current selection) to the location specified by the object specifier record in the direct parameter—that is, after word 30. The Set Data event then sets the contents of the selection to a text string. The pContents property specified by the object specifier record in the direct parameter of the Set Data event represents the contents of the selection, and the text string in the keyAEData parameter is the text to which the selection’s contents is to be set. At this stage, the insertion point is after word 35—the last word added by typing. If the user now selects one of the new words, say word 34, and changes the style to boldface and the font to Helvetica®, send a Select event and two Set Data events to record the action:n    A Select event with this direct parameter selects word 34:Keyword    Descriptor type    Data    keyDirectObject    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cWord    keyAEContainer    typeNull    No data    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    34    n    A Set Data event with these parameters sets the style of the selection to boldfaceKeyword    Descriptor type    Data    keyDirectObject    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cProperty    keyAEContainer    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cProperty    keyAEContainer    typeNull    No data    keyAEKeyForm    typeEnumerated    formPropertyID    keyAEKeyData    typeLongInteger    pSelection    keyAEKeyForm    typeType    formPropertyID    keyAEKeyData    typeType    pTextStyles    keyAEData    typeEnumerated    kAEBold    :n    A Set Data event with these parameters sets the font of the selection to Helvetica: Keyword    Descriptor type    Data    keyDirectObject    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cProperty    keyAEContainer    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cProperty    keyAEContainer    typeNull    No data    keyAEKeyForm    typeEnumerated    formPropertyID    keyAEKeyData    typeLongInteger    pSelection    keyAEKeyForm    typeEnumerated    formPropertyID    keyAEKeyData    typeType    pFont    keyAEData    typeChar    "Helvetica"    After these three events are sent, word 34 remains selected. Thus, subsequent user actions upon the same selection do not require your application to send an additional event to set the selection. Your application should maintain the selection as long as the selected text is not replaced. If the user types or pastes new text into the selection, your application should place the insertion point after the new text. Such a strategy might result in a series of events like these:n    A Set Data event with these parameters sets the contents of a selection to “More new text”:Keyword    Descriptor type    Data    keyDirectObject    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cProperty    keyAEContainer    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cProperty    keyAEContainer    typeNull    No data    keyAEKeyForm    typeEnumerated    formPropertyID    keyAEKeyData    typeLongInteger    pSelection    keyAEKeyForm    typeEnumerated    formPropertyID    keyAEKeyData    typeType    pContents    keyAEData    typeChar    "More new text"    n    Two Paste events paste the contents of the Clipboard twice after the new text. Recording the Selection of Nontext ObjectsThe selection of nontext objects differs from the selection of text objects mainly in the way a recordable application specifies the objects. For example, if the user is working in a table or spreadsheet and selects row 5, column 3, your application can send a Select event with this direct parameter:Keyword    Descriptor type    Data    keyDirectObject    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cRow    keyAEContainer    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cColumn    keyAEContainer    typeNull    No data    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    3    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    5    When recording a range of cells, use a range of rows through a range of columns. For example, if the user selects row 5 column 3 through row 6 column 4, specify columns 3 through 4 of rows 5 through 6 by sending a Select event with this direct parameter:Keyword    Descriptor type    Data    keyDirectObject    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cRow    keyAEContainer    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cColumn    keyAEContainer    typeNull    No data    keyAEKeyForm    typeEnumerated    formRange    keyAEKeyData    typeRangeDescriptor    (see indented record)    keyAERangeStart    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cColumn    keyAEContainer    typeCurrentContainer    No data    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    3    keyAERangeStop    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cColumn    keyAEContainer    typeCurrentContainer    No data    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    4    keyAEKeyForm    typeEnumerated    formRange    keyAEKeyData    typeRangeDescriptor    (see indented record)    keyAERangeStart    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cRow    keyAEContainer    typeCurrentContainer    No data    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    5    keyAERangeStop    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cRow    keyAEContainer    typeCurrentContainer    No data    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    6    In some drawing and layout applications, users are used to dealing with insertion points at specific locations rather than relative to other objects. For example, setting an insertion point in a recordable drawing application might cause the application to send itself a Select event that places the insertion location at (235, 330)—that is, the location defined by a vertical coordinate of 235 and a horizontal coordinate of 330. A Select event that does this could have this direct parameter:Keyword    Descriptor type    Data    keyDirectObject    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cInsertionLocation    keyAEContainer    typeNull    No data    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeAEList    (see indented record)        typeLongInteger    235        typeLongInteger    330    Notice that the key data corresponds to an application’s extension of the standard interpretation of key form formAbsolutePosition. To set a selection that consists of noncontiguous objects, an application should send events that correspond to statements like these:select {¬    row 5 thru 6 of column 3 thru 4, ¬    row 22 of column 6}select {circle 2, rectangle 12, text frame 2}select {file "Guidelines", file "Test Results"} Identifying ObjectsThe way a recordable application identifies objects can involve assumptions about the user’s criteria for selecting those objects. In general, such assumptions should be avoided. Follow these guidelines for identifying objects:n    If you aren’t absolutely certain of the user’s criteria for selecting an object, identify the object by name.n    If the object doesn’t have a name, identify it by index.n    Determine the index based on the order in which a user would see the objects when reading a document.n    Identify windows and open documents on which actions are taken as the frontmost window or document.The rest of this section provides examples of how to apply these guidelines.Suppose a user is working with an electronic mail application that permits a variety of sorting methods for messages received. If the user is currently looking at messages sorted by date and then deletes the second message in the list, that message should be identified by name rather than by date. Use an object’s name in any situation where it is not completely clear which identifying criteria the user had in mind.Suppose a user has used the application’s Find command to locate all messages created on a certain date. In this case it might be appropriate to identify “every message whose creation date . . .” in the corresponding Apple event. However, if the user did not ask for all messages created on that date, you can’t be sure whether the user really wanted every message or only a particular one. For instance, perhaps the user couldn’t remember the name, but only an approximate date. In this case a recordable application should identify the message by name.Just as names are more specific and usually more desirable than whose tests, names are usually more specific and more readable than identifiers or indices. However, some objects may not have a name, only some other identifier or an index. Even though an identifier is more specific than an index, a logically defined index of position is more readable and is therefore recommended. For example, if a document contains unnamed illustrations, the user is more likely to identify a figure by index (order from the beginning of the file) than identifier (such as order created).Suppose a document contains two figures that appear at first glance to be side by side, except that the right one is slightly taller and therefore begins higher on the page than the left one. In cases such as this, your application should determine the index based on the order in which the user would see the objects when reading a document. For Roman script systems, this means reading from left to right and from top to bottom. In the example just described, the leftmost, shorter figure would have a lower figure number than the rightmost, taller one.When your application needs to refer to a window or a document, it should identify the object with an object specifier record that corresponds to the first, or front, window:Keyword    Descriptor type    Data    keyDirectObject    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cWindow    keyAEContainer    typeNull    No data    keyAEKeyForm    typeEnumerated    formAbsolutePosition    keyAEKeyData    typeLongInteger    1    This strategy allows users to record scripts that will work on any window, regardless     of its name. Similarly, events that act on an open document should identify it as “document 1.”It is usually possible to describe objects in several different ways. If an object has a unique name, use that. For example, instead of an object specifier record that describes “column number 7,” use one that describes “the column named ‘March’”:Keyword    Descriptor type    Data    keyDirectObject    typeObjectSpecifier    (see indented record)    keyAEDesiredClass    typeType    cColumn    keyAEContainer    typeNull    No data    keyAEKeyForm    typeEnumerated    formName    keyAEKeyData    typeLongInteger    "March"    It may be that such an object could also be described in a more complex manner, such as picture 1 of paragraph 302 of chapter 2. But complex descriptions like this should be used only as a last resort if no simpler name is available.In general, be as specific as possible when you identify a selection in a recordable event. The user can generalize as necessary by editing the recorded script.Moving the Selection During RecordingIf recording is turned on and the user makes a selection, performs some action, and then makes a different selection, your application must make a decision: should it record the second selection in absolute terms or relative to the first selection? That is, should the corresponding AppleScript statement beselect insertion location before paragraph 5orselect insertion location before paragraph after selectionBoth statements may be appropriate under different conditions. But suppose that the user had selected paragraph 3 and now selects paragraph 12 or picture 3. Relative addressing doesn’t make sense in these situations because the distance involved is too great or the unit is different. When you can’t be sure of the user’s intent, you should use absolute addressing. You can safely use relative addressing only when the user moves the selection or insertion point by only one unit, as with the arrow keys.Even the use of the arrow keys does not guarantee that you can use relative addressing. For example, suppose that the user has selected cell 5 of row 2 in a spreadsheet and then presses the Left Arrow key three times. In this case, it is best to send Apple events equivalent to the statementselect cell 3 of row 2rather than the statementsselect the cell before selectionselect the cell before selectionselect the cell before selectionUsing relative addressing in certain circumstances may minimize the amount of editing that the user must do after recording a script. However, recordable applications are not required to use relative addressing.Recording Interactions With Dialog BoxesWhen executing scripts, users normally do not want to see dialog boxes. Therefore, your application should record information specified by the user in dialog boxes rather than sending events that would cause the dialog boxes to appear during script execution.For example, suppose a user chooses the Close command and the standard save changes dialog box appears. If the user then clicks Save, your application should send a Close event that corresponds to a statement like this:close document "MyDoc" saving YesAny settings in a dialog box that the user does not change (such as the range of pages to print in a Print dialog box) should not be recorded. How Apple Event Recording WorksScripting components use the Apple Event Manager’s recording mechanism to allow a recording process such as the Script Editor application to control recording into scripts. Script editors and applications that provide their own recording capabilities can take advantage of the recording mechanism via standard scripting component routines. This section describes how scripting components use Apple event recording. You need to read this section if you are developing a scripting component or a script-editing application, or if you want your application to initiate and control Apple event recording. For information about using the standard scripting component routines to turn recording off and on, see “Recording Scripts” on page 10-26.When a user turns on recording for a recording process (for example, by clicking the Record button in Script Editor), the recording process calls a scripting component routine (OSAStartRecording) to turn recording on. The scripting component responds by sending a Start Recording event to the recording process (or any running process on the local computer). Start Recording—begin sending copies of recordable events to recording process        Event class    kCoreEventClass    Event ID    kAEStartRecording    Parameters    None    Description    Sent by a scripting component to the recording process (or to any running process on the local computer), but handled by the Apple Event Manager. The Apple Event Manager responds by turning on recording and sending a Recording On event to all running processes on the local computer. This event must be addressed using a process serial number (PSN); it should never be sent to an address specified as kCurrentProcess.    The recording process should not handle the Start Recording event. Instead, the Apple Event Manager handles it by sending a Recording On event to all running processes on the local computer and sending copies of all subsequent recordable events to the recording process. (The Recording On event is described on page 9-4.) If an application that supports Apple events is launched on a computer for which recording is turned on, the Apple Event Manager will also send it a Recording On event for each recording process that is currently recording.The recording process receives recordable events by means of a Receive Recordable Event handler—that is, a handler installed in the Apple event dispatch table for event class kCoreEventClass and event ID kAENotifyRecording. Scripting components install this handler on behalf of a recording process when recording is first turned on and remove the handler when recording is turned off. Much like a handler for event class typeWildCard and event ID typeWildCard, the Receive Recordable Event handler handles all recordable events sent to the recording process by the Apple Event Manager. Any other Apple events received by the recording process are dispatched in the usual manner. The Receive Recordable Event handler handles recordable events by recording them in the script specified by the recording process’s call to OSAStartRecording.Receive Recordable Event—receive and record a copy of a recordable event        Event class    kCoreEventClass    Event ID    kAENotifyRecording    Parameters    Same as Apple event being recorded    Description    Wildcard event class and event ID handled by a recording process in order to receive and record copies of recordable events sent to it by the Apple Event Manager. Scripting components install a handler for this event on behalf of a recording process when recording is turned on and remove the handler when recording is turned off.    Whenever the Receive Recordable Event handler receives a recordable event, the scripting component sends your application a Recorded Text event. The Recorded Text event contains the decompiled source data for the recorded event in the form of styled text. For a description of the Recorded Text event, see “Recording Scripts” on page 10-26.When a user turns off recording (for example, by clicking Script Editor’s Stop button), the recording process calls a scripting component routine (OSAStopRecording) to turn recording off. The scripting component responds by sending a Stop Recording event to the recording process (or any running process on the local computer). Stop Recording—stop sending copies of recordable events to recording process        Event class    kCoreEventClass    Event ID    kAEStopRecording    Parameters    None    Description    Sent by a scripting component to the recording process (or to any running process on the local computer), but handled by the Apple Event Manager. The Apple Event Manager responds by sending a Recording Off event to all running processes on the local computer. This event must be addressed using a process serial number (PSN); it should never be sent to an address specified as kCurrentProcess.    Like the Start Recording event, the Stop Recording event is handled by the Apple Event Manager. The Apple Event Manager responds by sending a Recording Off event to all running processes on the local computer. (The Recording Off event is described on page 9-4.)Recording continues, and the recording process may continue to receive recordable events, until the Apple Event Manager has notified all running processes that recording has been turned off for that recording process. The Apple Event Manager sends all running processes the Recording Off event with the kAEWaitReply flag set. If an application has stored some data (for instance, keystrokes) that needs to be recorded as an Apple event, this is the last chance for the application to send the event for recording purposes. Recording stops only after the Apple Event Manager returns a reply for the Stop Recording event. The Apple Event Manager supports multiple simultaneous recording processes. A Stop Recording event sent for one of them does not affect the others. If your application needs to know which of several recording processes has turned recording on or off, it can check the keyOriginalAddressAttr attribute of the Recording On or Recording Off event for the address of the recording process.If the Apple Event Manager does not receive a Stop Recording event for a recording process that quits unexpectedly, the applications being recorded don’t find out immediately. When it attempts to send a copy of a recordable event to a recording process that is no longer active, the Apple Event Manager sends a Recording Off event to all running processes on behalf of that recording process and specifies the address for that process in the keyOriginalAddressAttr attribute. If a recording process that quits is the only actively recording process, recording stops completely after the Apple Event Manager has informed all running processes that recording has been turned off.    Listing 10-0Table 10-0Scripting ComponentsContentsConnecting to a Scripting Component10-3Using Scripting Component Routines10-7Compiling and Executing Source Data10-7Saving Script Data10-12Storage Formats for Script Data10-12Resource and File Types for Script Data10-13Loading and Executing Script Data10-14Modifying and Recompiling a Compiled Script10-17Using a Script Context to Handle an Apple Event10-19Supplying a Resume Dispatch Function10-21Supplying an Alternative Active Function10-23Supplying Alternative Create and Send Functions10-24Alternative Create Functions10-24Alternative Send Functions10-25Recording Scripts10-26Writing a Scripting Component10-27Scripting Components Reference10-28Data Structures10-29Required Scripting Component Routines10-30Saving and Loading Script Data10-30Executing and Disposing of Scripts10-33Setting and Getting Script Information10-41Manipulating the Active Function10-45Optional Scripting Component Routines10-46Compiling Scripts10-47Getting Source Data10-51Coercing Script Values10-52Manipulating the Create and Send Functions10-55Recording Scripts10-59Executing Scripts in One Step10-61Manipulating Dialects10-67Using Script Contexts to Handle Apple Events10-71AppleScript Component Routines10-80Initializing AppleScript10-80Getting and Setting Styles for Source Data10-82Generic Scripting Component Routines10-84Getting and Setting the Default Scripting Component10-86Using Component-Specific Routines10-87Routines Used by Scripting Components10-92Manipulating Trailers for Generic Storage Descriptor Records10-92Application-Defined Routines10-94Summary of Scripting Components10-99Pascal Summary10-99Constants10-99Data Types10-105Required Scripting Component Routines10-106Optional Scripting Component Routines10-107AppleScript Component Routines10-110Generic Scripting Component Routines10-110Routines Used by Scripting Components10-111Application-Defined Routines10-111C Summary10-112Constants10-112Data Types10-118Required Scripting Component Routines10-119Optional Scripting Component Routines10-120AppleScript Component Routines10-123Generic Scripting Component Routines10-123Routines Used by Scripting Components10-124Application-Defined Routines10-124Result Codes10-125Scripting ComponentsThis chapter describes how your application can use the Component Manager and scripting components to manipulate and execute scripts.Before you read this chapter, you should read the chapter “Introduction to Scripting” in this book and the chapters about the Apple Event Manager that are relevant to your application. Your application can use the standard scripting component data structures and routines described in this chapter to manipulate scripts written in any scripting language based on the Open Scripting Architecture (OSA). Your application need not be scriptable or recordable to use these routines. However, if your application is scriptable, you can easily make it capable of manipulating and executing scripts that control its own behavior.The first section in this chapter describes how to establish a connection with a scripting component. The next two sections providen    examples of how to use the standard scripting component routinesn    information for developers of scripting componentsThe section “Scripting Components Reference” describes, in addition to the standard scripting component routines, routines provided by the AppleScript component, routines provided by the generic scripting component, and routines called by scripting components.If you are developing a scripting component, you should also read the instructions for creating components in the chapter “Component Manager” in Inside Macintosh: More Macintosh Toolbox. Connecting to a Scripting ComponentTo manipulate and execute scripts written in different scripting languages, your application can use Component Manager routines either to open a connection with each corresponding scripting component individually or to open a single connection with the generic scripting component. The generic scripting component, in turn, attempts to open connections dynamically with the appropriate scripting component for each script. By opening a connection with the generic scripting component, your application can load and execute scripts created by any scripting component that is registered with the Component Manager on the current computer.In general, you should use the generic scripting component to execute and manipulate existing scripts and a specific scripting component when you create new scripts. When you call OSACompile or OSAStartRecording, the generic scripting component examines the script ID to determine which scripting component to use. If instead of a script ID you pass the constant kOSANullScript to these routines, the generic scripting component uses its current default scripting component. Each instance of the generic scripting component has its own default scripting component. From the user’s point of view, the default scripting component corresponds to the scripting language selected in the Script Editor application when the user first creates a new script. The generic scripting component provides routines you can use to get and set the default scripting component, determine which scripting component created a particular script, and perform other useful tasks when you are using multiple scripting components. See the section “Generic Scripting Component Routines,” which begins on page 10-84, for descriptions of these routines.You can use the Component Manager function OpenComponent to open a connection to a scripting component you specify with the component identifier returned by the FindNextComponent function. You can also use the OpenDefaultComponent function to open a scripting component without calling the FindNextComponent function. The OpenComponent and OpenDefaultComponent functions return a component instance. This value identifies your application’s connection to a component. You must supply this value whenever you call a standard scripting component routine. NoteYour application may maintain several connections to a single component, or it may have connections to several components at the same time. Because some scripting components (including the current version of AppleScript) can execute only one script at a time per component instance, a multithreaded application must provide a separate component instance for each script that it compiles or executes while it is simultaneously executing other scripts.uThe Component Manager type code for scripting components that support the routines described in this chapter is 'osa ', and the subtype code for the generic scripting component is 'scpt'.  CONST    kOSAComponentType                                                    = 'osa ';    kOSAGenericscriptingComponentSubtype                                                    = 'scpt';You can open a connection to a scripting component by calling the OpenDefaultComponent function, which returns a component instance. For example, this code opens a connection with the generic scripting component and stores the returned value in an application-defined variable:VAR    gScriptingComponent: ComponentInstance;{open connection to generic scripting component}gScriptingComponent := OpenDefaultComponent(kOSAComponentType,                                  kOSAGenericscriptingComponentSubtype);The generic scripting component in turn opens connections with other scripting components as necessary. The generic scripting component provides routines you can use to get instances of other scripting components when you want to use component-specific routines.It is also possible to open an explicit connection directly with a specific scripting component such as AppleScript:VAR    gScriptingComponent: ComponentInstance;{open connection to AppleScript component}gScriptingComponent := OpenDefaultComponent(kOSAComponentType,                                                            kAppleScriptSubtype);The scripting component routines described in this chapter include eight groups of optional routines that scripting components can support. If necessary, you can use the FindNextComponent function and other Component Manager routines to find a scripting component that supports a specific group of routines or to determine whether a particular scripting component supports a specific group of routines. When you call FindNextComponent, you can provide, in a component description record (a data structure of type ComponentDescription), information about the scripting component you wish to find. The flag bits in the componentFlags field of a component description record provide this information. To find a scripting component that supports a specific group of optional routines, you can specify one or more of these constants in the componentFlags field: CONST    kOSASupportsCompiling                                     = $0002;    kOSASupportsGetSource                                     = $0004;     kOSASupportsAECoercion                                     = $0008;     kOSASupportsAESending                                     = $0010;     kOSASupportsRecording                                     = $0020;     kOSASupportsConvenience                                    = $0040;     kOSASupportsDialects                                     = $0080;     kOSASupportsEventHandling                                     = $0100; The routines that correspond to these constants are described in “Optional Scripting Component Routines,” which begins on page 10-46. NoteAlthough the generic scripting component supports all the scripting component routines represented by these flags, the support it can actually provide depends on the individual components with which it opens connections.uListing 10-1 shows how you can use these flags and the FindNextComponent function to locate a scripting component with specific characteristics. The componentFlags field of the component description record passed to FindNextComponent specifies the flags kOSASupportsCompiling and kOSASupportsGetSource. Because the componentFlagsMask field also specifies these flags, the FindNextComponent function locates a scripting component that supports these routines, regardless of whether or not it supports any others. The FindNextComponent function returns a component identifier that you can then use to get more information about the component or to open it. Listing 10-1    Locating a scripting component that supports specific optional routinesFUNCTION MyConnectToScripting (VAR scriptingComponent: ComponentInstance)                                        : OSAError;VAR    descr, descr2:                     componentDescription;    comp:                    component;    myErr:                     OSErr;BEGIN    {fill in the fields of the component description record}    {first specify component type, subtype, and manufacturer}    descr.componentType := kOSAComponentType; {must be scripting component}    descr.componentSubType := OSType(0); {any OSA component matching spec}    descr.componentManufacturer := OSType(0); {don't care about manufacturer}        {specify component flags and flags mask}    descr.componentFlags := kOSASupportsCompiling + kOSASupportsGetSource;    descr.componentFlagsMask :=         kOSASupportsCompiling + kOSASupportsGetSource;    {locate and open the specified component}    comp := FindNextComponent(Component(0), descr); {0 indicates all }                                                                    { registered components }                                                                    { will be searched}    {check whether the found component is the generic scripting component; }    { if so, skip it and find the next matching component}    myErr := GetComponentInfo(comp, descr2, NIL, NIL, NIL);    IF descr2.componentSubType = kOSAGenericScriptingComponentSubtype THEN        comp := FindNextComponent(comp, descr);    IF comp = 0 THEN         MyConnectToScripting := kComponentNotFound    ELSE     BEGIN        scriptingComponent := OpenComponent(comp);        IF scriptingComponent = 0 THEN             MyConnectToScripting := kComponentNotFound        ELSE             MyConnectToScripting := noErr;    END;END;Because the generic scripting component supports all the standard scripting component routines, the MyConnectToScripting function in Listing 10-1 checks whether the found component is the generic scripting component and, if so, skips it. If for any reason FindNextComponent can’t locate and open a scripting component that supports the specified routines, MyConnectToScripting returns the application-defined constant kComponentNotFound.For more information about locating and opening components with specific characteristics, see the chapter “Component Manager” in Inside Macintosh: More Macintosh Toolbox.  Using Scripting Component RoutinesThe following sections describe how to use some of the standard scripting component routines to manipulate and execute scripts from within your application. For an overview of these routines, see “Manipulating and Executing Scripts,” which begins on page 7-22.The first section describes how to compile and execute source data for a script. The remaining sections describe how you can use scripting component routines to n    get a handle to a compiled script and save the data as a resourcen    load and execute a previously saved and compiled scriptn    load, modify, recompile, and save a compiled scriptn    redirect Apple events to handlers in script contextsn    supply a resume dispatch functionn    supply an alternative active functionn    supply alternative send and create functionsn    record Apple events in compiled scripts and display equivalent source data to the userCompiling and Executing Source DataThis section describes how you can use scripting component routines to obtain source data from users, compile the source data, and execute the compiled script. To create and execute a script using the Script Editor application, a user can type the script, then click the Run button to execute it. Your application can provide similar capabilities.To allow users to write a new script and then execute it, your application must use scripting component routines to compile and execute the source data. To compile source data in a new script with a new script ID, pass the constant kOSANullScript (rather than an existing script ID) in the last parameter of the OSACompile function. This causes OSACompile to return a new script ID in the same parameter.To execute a compiled script, your application must specify, in addition to the script ID for the compiled script, a script context: either the corresponding scripting component’s default context or a script ID for the global context created by that scripting component. Script contexts maintain state information for the execution of scripts. Your application can use script contexts to control the binding of variables used in scripts that it executes. For example, if your application saves its own global context and reuses it every time a script is executed, the binding of variables used in the script is maintained after the user restarts the computer. If your application does not specify a script context, the AppleScript component uses a single default context whenever it executes the script. A scripting component’s default context binds the variables used in the script only until the user quits the application.To specify a scripting component’s default context, pass the constant kOSANullScript in the third parameter of the OSAExecute function; to specify some other global context, pass its script ID in the third parameter.  The MyDoNewScript procedure in Listing 10-2 allows a user to type a script in the appropriate scripting language, then compiles the script, executes the compiled script using a global context provided by the application, and displays the result to the user.The MyDoNewScript procedure begins by calling the OSAScriptingComponentName function to obtain the name of the scripting component specified by gScriptingComponent. This name is passed to the application-defined function MyGetUserScriptText.NoteIf you are using the generic scripting component, you can use the OSAGetDefaultComponent function to get the subtype code for the default scripting component (that is, the scripting component used by the generic scripting component for new scripts). You can then get an instance of the default scripting component by passing its subtype code to OSAGetScriptingComponent. Finally, you can pass that instance to OSAScriptingComponentName to obtain the default scripting component’s name. For more information about the default scripting component and routines you can use with the generic scripting component, see “Generic Scripting Component Routines,” which begins on page 10-84.u The MyGetUserScriptText function displays the name of the scripting language to use in a script-editing window or message box that allows the user to type and execute a new script. After it obtains the source data for the new script, the MyDoNewScript procedure sets the scriptID variable to kOSANullScript. The procedure then passes the source data and scriptID to the OSACompile function. When the script ID passed to OSACompile is kOSANullScript, OSACompile returns, in the same parameter, a new script ID for the resulting compiled script. The MyDoNewScript procedure then passes the new script ID to the OSAExecute function.In addition to a component instance and the script ID for the compiled script to be executed, OSAExecute takes a script ID for a script context and a parameter that contains the mode flags, if any, for script execution. In Listing 10-2, the script ID passed to OSAExecute for the script context is gContext, a global context provided by the application. The constant kOSAModeNull in the next parameter indicates that no mode flags are set for script execution. Listing 10-2    A routine that compiles and executes source dataPROCEDURE MyDoNewScript;VAR    componentName, scriptText, resultText:                                                    AEDesc;    scriptID, resultID        :                                            OSAID;    myOSAErr, ignoreErr:                                                    OSAError;BEGIN    {get the scripting component's name so you can show }    { the user which scripting language to use                                            }    myOSAErr := OSAScriptingComponentName(gScriptingComponent,                                                         componentName);    IF myOSAErr = noErr THEN    BEGIN                {get the user's script text, then compile it}        MyGetUserScriptText(componentName, scriptText);        {to create a new compiled script using the user's script }        { text, pass kOSANullScript to OSACompile as the script ID }        { for the script to be compiled}        scriptID := kOSANullScript;        myOSAErr := OSACompile(gScriptingComponent, scriptText,                                         kOSAModeNull, scriptID);        ignoreErr := AEDisposeDesc(scriptText);    END;    IF myOSAErr = noErr THEN    BEGIN        {execute the script in a global context                        }        myOSAErr := OSAExecute(gScriptingComponent, scriptID,                                         gContext, kOSAModeNull, resultID);        ignoreErr := OSADispose(gScriptingComponent, scriptID);        IF myOSAErr = noErr THEN        BEGIN            {convert the script value returned by OSAExecute to }            { text that can be displayed to the user}            myOSAErr := OSADisplay(gScriptingComponent, resultID,                                         typeChar, kOSAModeNull, resultText);            ignoreErr := OSADispose(gScriptingComponent, resultID);            {show result to user}            MyShowUserResult(resultText);            ignoreErr := AEDisposeDesc(resultText);        END;    END;    IF myOSAErr = errOSAScriptError THEN         MyGetScriptErrorInfo;END;  If script execution is successful, the MyDoNewScript procedure passes the script ID for the resulting script value to the OSADisplay function and calls the MyShowUserResult procedure to display the script value to the user. It also disposes of the script data for the compiled script. If OSAExecute or OSACompile returns the result code errOSAScriptError, the MyDoNewScript procedure calls the MyGetScriptErrorInfo procedure shown in Listing 10-3, which uses the OSAScriptError function to obtain more information about the error.Whenever a scripting component routine returns the result code errOSAScriptError, you can use OSAScriptError to obtain more information about the error. The second parameter of the OSAScriptError function is a constant that specifies the kind of error information to be returned, and the third parameter is the descriptor type for the descriptor record in which the additional error information will be returned.The MyGetScriptErrorInfo procedure in Listing 10-3 calls OSAScriptError three times: once to obtain an error number for either a system error or a scripting component error, once to obtain a text description of the error, and once to obtain error-range information. (For more information about specifying descriptor types for OSAScriptError, see page 10-37.) Finally, the MyGetScriptErrorInfo procedure extracts the starting and ending positions of the error range in the source data and calls the application-defined procedure MyIndicateError to display the error information to the user. Note that your application is responsible for disposing of any descriptor records that are created. You should use the OSACompile and OSAExecute functions as shown in Listing 10-2 if you expect the user to execute the compiled script several times or manipulate it in some other way. If you want to compile and execute a script just one time and don’t need to keep the compiled script in memory after it has been executed, you can use either OSACompileExecute or OSADoScript if these functions are supported by the scripting component you specify.  The OSACompileExecute function takes a component instance, a descriptor record for the source data to be compiled and executed, a context ID, and a modeFlags parameter. It executes the resulting compiled script, disposes of the compiled script, and returns the script ID for the resulting script value. The OSADoScript function takes a component instance, a descriptor record for source data, a context ID, a text descriptor type, and a modeFlags parameter. It compiles and executes the script, returns a descriptor record for the text that corresponds to the resulting script value, and disposes of both the compiled script and the script value. Listing 10-3    A procedure that uses OSAScriptError to get information about an execution errorPROCEDURE MyGetScriptErrorInfo; TYPE    OSErrPtr                    = ^OSErr;    OSErrHandle                    = ^OSErrPtr;VAR    errorMessage:                                        Handle;    startPos, endPos:                                        Integer;    desc, recordDesc:                                         AEDesc;    actualType:                                         DescType;    actualSize:                                        Size;    scriptErr, myErr, ignoreErr:                                        OSErr;    myOSAErr:                                        OSAError; BEGIN    myOSAErr := OSAScriptError(gScriptingComponent,                                     kOSAErrorNumber, typeShortInteger,                                     desc);    scriptErr := OSErrHandle(desc.dataHandle)^^;    ignoreErr := AEDisposeDesc(desc);    myOSAErr := OSAScriptError(gScriptingComponent,                                     kOSAErrorMessage, typeChar, desc);    errorMessage := desc.dataHandle;    myOSAErr := OSAScriptError(gScriptingComponent,                                     kOSAErrorRange, typeOSAErrorRange,                                     desc);    myErr := AECoerceDesc (desc, typeAERecord, recordDesc);    ignoreErr := AEDisposeDesc(desc);    myErr := AEGetKeyPtr(recordDesc, keySourceStart,                                 typeShortInteger, actualType,                                Ptr(@startPos), sizeOf(startPos),                                actualSize);    myErr := AEGetKeyPtr(recordDesc, keySourceEnd,                                 typeShortInteger, actualType,                                Ptr(@endPos), sizeOf(endPos),                                actualSize);    ignoreErr := AEDisposeDesc(recordDesc);    MyIndicateError(scriptErr, errorMessage, startPos, endPos);    {add your own error checking}END;  Saving Script DataAfter creating a new script (or after modifying a previously saved script), a user may want to save it. IMPORTANTYour application should usually save scripts as script data rather       than source data, so that it can reload and execute the data without compiling it.sBefore saving script data, your application can use the OSAStore function to obtain a handle to the data. The OSAStore function takes four input parameters: a component instance that identifies a connection with a scripting component, a script ID for the script data to be stored, a desired descriptor type for the descriptor record to be returned, and a parameter that contains mode flags for use by individual scripting components. It returns a descriptor record for the script data in the fifth parameter.The sections that follow describe the storage formats used by OSAStore and the resource and file types for script data.Storage Formats for Script DataThe descriptor record returned by OSAStore can be either a generic storage descriptor record or a component-specific storage descriptor record:n    A generic storage descriptor record is a special kind of descriptor record of type typeOSAGenericStorage that can be used to store script data created by any scripting component.n    A component-specific storage descriptor record is a descriptor record whose descriptor type is the scripting component subtype value for the scripting component that created the script data. Figure 10-1 illustrates the logical arrangement of a generic storage descriptor record. The descriptor type for a generic storage descriptor record is always typeOSAGenericStorage, and the data referred to by the descriptor record’s handle is always followed by a trailer containing the subtype value for the scripting component that created the script data. Figure 10-1    A generic storage descriptor recordFigure 10-2 illustrates the logical arrangement of a component-specific storage descriptor record. The descriptor type for a component-specific storage descriptor record is the subtype value for the scripting component that created the script data, and the data referred to by the descriptor record’s handle consists of the script data only, with no trailer.Figure 10-2    A component-specific storage descriptor recordIn most cases it is safest to request a handle to script data in the form of a generic storage descriptor record, regardless of the scripting component subtype you pass to the OSAStore function.If the presence of the trailer in a generic storage descriptor record does not interfere with the script data, that data may be used for a wide variety of purposes. For example, if an application uses script IDs to refer to XCMDs, it can call OSAStore with a desired type of typeOSAGenericStorage. The data for the resulting descriptor record consists of the XCMD data followed by a trailer indicating that the script data was created by a scripting component that executes XCMDs. Because the trailer does not interfere with the use of the data, the data may actually be used as an XCMD. Thus, an application can save XCMDs as script data and load and execute them after it has opened a connection with the generic scripting component.However, in some cases adding a trailer to script data may interfere with script execution. For example, suppose the data for a generic storage descriptor record consists of sound data. If a scripting component attempts to play the data from beginning to end as sound data, the trailer will interfere with the resulting sound. In this case, an application must open an explicit connection with a scripting component that can play sounds before saving the data, and then call OSAStore with a desired type that consists of the subtype for that scripting component. Resource and File Types for Script DataWhen the OSAStore function returns a descriptor record of the specified type, your application can save the descriptor record’s data as a resource of type 'scpt' or write it to the data fork of a document. The generic scripting component subtype, the generic storage descriptor type, and the resource type for stored script data all have the same value, though they serve different purposes.CONST    kOSAGenericScriptingComponentSubtype = 'scpt';       kOSAScriptResourceType = kOSAGenericScriptingComponentSubtype        ;    typeOSAGenericStorage = kOSAScriptResourceType;If you want to save script data as a compiled script file or as a script application, save it as a resource of type 'scpt'. The Script Editor application uses resource ID 128, but you can use any valid resource ID. Save the script comment that accompanies the script data as resources of type 'TEXT' and 'styl' with resource ID 1128. (See Figure 7-1 on page 7-6 for an example of a script comment.) Each script file can contain only one script and one script comment. The file type for a compiled script file should be 'osas'. A script application has the file type 'APPL'. If a script application has the creator signature 'aplt', a user can initiate execution of the script it contains by opening it from the Finder. If a script application has the creator signature 'dplt' and contains a user-defined handler for the Open Documents event, a user can initiate execution of the handler by dragging a document or folder icon over the script application’s icon. For more information about the file formats used for script files, see “Script Editors and Script Files” on page 7-6. Script applications must include a 'SIZE' resource and two 'CODE' resources with resource IDs 0 and 1. These resources should be identical to those in the sample script application files provided by Apple Computer, Inc. (except that you can change the size of the memory partition). The 'CODE' resources contain bootstrap code that instantiates the script application component. The script application component, which is registered with the Component Manager at startup, provides the code that loads the script to be run and passes the resulting script ID to the appropriate component.When the user opens a script application from the Finder, the Finder sends the script application an Open Application event. If the scripting component that created the script supports OSAExecuteEvent, the script application component passes the Open Application event and the script ID for the script to OSAExecuteEvent. If the scripting component doesn’t support OSAExecuteEvent, the script application component passes the script ID to OSAExecute.  Loading and Executing Script DataFigure 7-4 on page 7-13 illustrates how an application might execute a script whenever the user presses the Tab key after entering a customer’s name in the “Customer Name” field of an electronic form. To execute a script in response to some user action, your application must be able to load and execute the script data for a compiled script.  This section describes how to load and execute a previously compiled and saved script. The next section, “Modifying and Recompiling a Compiled Script,” describes how to allow a user to modify a compiled script.The OSALoad function takes three input parameters: a component instance that identifies a connection with a scripting component; a descriptor record that contains a handle to the script data to be loaded; and a parameter that contains flags for use by individual scripting components. The function returns, in the fourth parameter, a script ID for the script data. When your application calls OSALoad with a component instance that identifies a connection with the generic scripting component, the generic scripting component in turn uses a connection with the scripting component that created the script data (if that component is registered with the Component Manager on the local computer). If the descriptor record passed to OSALoad is of type typeOSAGenericStorage, the generic scripting component uses the trailer that follows the script data to determine which scripting component to open a connection with. If the descriptor record’s type is the subtype value for some other scripting component, the generic scripting component does not look for a trailer and uses the descriptor type to identify the scripting component. When your application calls OSALoad with a component instance that identifies a connection to any scripting component other than the generic scripting component, that component can load script data only if it was saved as the data for a descriptor record whose descriptor type matches the scripting component’s subtype. In this case, however, your application easily can take advantage of additional routines and other special capabilities provided by that scripting component.It is also possible to call OSALoad using the generic scripting component, then use generic scripting component routines to identify the specific component associated with the loaded script. This allows you to use component-specific routines with a script originally loaded by the generic scripting component. For information about how to do this, see “Routines Used by Scripting Components,” which begins on page 10-92.The OSALoad function returns a script ID for the loaded script data. The generic scripting component always associates the returned script ID with the scripting component that created the script. In this way, it can use a connection with that component again whenever the client application passes the returned script ID to other scripting component routines.Listing 10-4 shows a procedure that loads and executes a script. The MyLoadAndExecute procedure takes a handle to script data that was previously saved using a generic storage descriptor record, obtains a script ID for the equivalent compiled script, executes the compiled script in the default context, and disposes of both the compiled script and the resulting script value ID. If the OSAExecute function returns a script execution error, MyLoadAndExecute obtains further information about the error and displays it to the user. Listing 10-4    A routine that loads and executes script data previously saved using a generic storage descriptor recordPROCEDURE MyLoadAndExecute (scriptData: Handle);VAR    scriptDesc:                                         AEDesc;    scriptID, resultID:                                         OSAID;    scriptText:                                         AEDesc;    myOSAErr, ignoreErr:                                         OSAError;BEGIN    {load the script data}    scriptDesc.descriptorType := typeOSAGenericStorage;    scriptDesc.dataHandle := scriptData;    myOSAErr := OSALoad(gScriptingComponent, scriptDesc,                                 kOSAModeNull, scriptID);    IF myOSAErr = noErr THEN     BEGIN        {execute the resulting compiled script in the default }        { context}                         myOSAErr := OSAExecute(gScriptingComponent, scriptID,                                     kOSANullScript, kOSAModeNull,                                     resultID);        ignoreErr := OSADispose(gScriptingComponent, scriptID);        ignoreErr := OSADispose(gScriptingComponent, resultID);    END;    IF myOSAErr = errOSAScriptError THEN         MyGetScriptErrorInfo;END;The OSALoad function in Listing 10-4 takes a component instance, a generic storage descriptor record for the script data to be loaded, and a parameter that contains the mode flags, if any, for loading the script. In this case the constant kOSAModeNull indicates that no mode flags are set. The OSALoad function returns a script ID for the resulting compiled script, which the MyLoadAndExecute procedure then passes to the OSAExecute function.In addition to a component instance and the script ID for the compiled script to be executed, the OSAExecute function takes a script ID for a context and a parameter that contains the mode flags, if any, for script execution. In Listing 10-4, the script ID passed to OSAExecute for the script context is kOSANullScript, indicating that the scripting component can use its default context to bind any variables. The constant kOSAModeNull in the next parameter indicates that no mode flags are set for script execution. After disposing of the compiled script and the resulting script value, MyLoadAndExecute checks the result code returned by OSAExecute. If it is errOSAScriptError, MyLoadAndExecute calls the MyGetScriptErrorInfo procedure (see Listing 10-3 on page 10-11), which in turn uses the OSAScriptError function to obtain more information about the error.You can use the OSALoad and OSAExecute functions as shown in Listing 10-4 if you expect the user to execute the compiled script several times or manipulate it in some other way. If you want to load and execute a script just one time and don’t need to keep the compiled script in memory after it has been executed, you can use OSALoadExecute instead of OSALoad, OSAExecute, and OSADispose. This function takes a component instance, a descriptor record for the script data to be loaded and executed, a context ID, and a modeFlags parameter. The OSALoadExecute function executes the resulting compiled script, disposes of the compiled script, and returns the script ID for the resulting script data.   Modifying and Recompiling a Compiled ScriptIn addition to loading and executing a previously compiled and saved script as described in the previous section, your application can use the scripting component routines described in this section to decompile a compiled script, display the equivalent source data to users for editing, and recompile the source data after editing is completed. For example, if a user wants to change the script shown in Figure 7-4 on page 7-13 so that it refers to some other database or looks up other information in addition to the customer’s address, the forms application can use scripting component routines to display the compiled script to the user and recompile it after the user has modified it. You can use the OSAGetSource function to obtain the source data for a compiled script. The OSAGetSource function takes a component instance, a script ID for the compiled script, and the desired type of the resulting descriptor record. If you specify a component instance that identifies a connection with the generic scripting component, you can use OSAGetSource to get the source data for any compiled script created by a scripting component that is registered with the Component Manager on the local computer. If you specify a component instance that identifies an explicit connection with a scripting component, you can use OSAGetSource only to get the source data for scripts that were compiled by that scripting component.The MyEditGenericScript procedure in Listing 10-5 shows how you can use the OSAGetSource function with a component instance that identifies a connection to the generic scripting component. The MyEditGenericScript function gets the source data for a compiled script, allows the user to edit it, and recompiles the script so the original script ID refers to the recompiled script data.Listing 10-5    A routine that displays a compiled script for editing and recompiles itPROCEDURE MyEditGenericScript (scriptID: OSAID);VAR    scriptText:                     AEDesc;    myOSAErr:                     OSAError;    ignoreErr:                    OSErr;BEGIN    {first get the source data}    myOSAErr := OSAGetSource(gScriptingComponent, scriptID,                                         typeChar, scriptText);    {call the application's primitive text editor}    MyEditText(scriptText.dataHandle);    {now compile the edited script data in scriptText using }    { the scripting component that originally created it; }    { passing the original script ID to OSACompile causes }    { OSACompile to replace the original script with the new one}     myOSAErr := OSACompile(gScriptingComponent, scriptText,                                     kOSAModeNull, scriptID);    ignoreErr := AEDisposeDesc(scriptText);    IF myOSAErr = errOSAScriptError THEN         MyGetScriptErrorInfo;END; After obtaining the source data for the script, the MyEditGenericScript procedure calls the MyEditText function, which displays the application’s own primitive text editor and allows the user to edit the source data. After the user has finished editing the script, MyEditGenericScript passes the edited text and the script ID for the original compiled script to the OSACompile function, which updates the script ID so that it refers to the modified and recompiled script. The kOSAModeNull constant passed in the third parameter of OSACompile indicates that no mode flags are specified for compilation.If the OSACompile function returns errOSAScriptError, the MyEditGenericScript procedure calls the MyGetScriptErrorInfo procedure shown in Listing 10-3 on page 10-11 to obtain information about the error. After script data has changed as shown in Listing 10-5, your application should save the modified script data. Listing 10-6 shows how this could be done from a function that loads script data, calls the MyEditGenericScript procedure shown in Listing 10-5 to modify and recompile the script, then saves the modified script data.Listing 10-6    A function that loads and modifies script data, then saves it using a generic storage descriptor recordFUNCTION MyLoadAndModifyScriptData (resourceID: Integer)                                                : OSAError;VAR    scriptDesc:                         AEDesc;    storageDescRec:                        AEDesc;    scriptID:                        OSAID;    myOSAErr:                        OSAError;    ignoreErr:                        OSErr;    myHndl:                        Handle;BEGIN    scriptDesc.descriptorType := typeOSAGenericStorage;    scriptDesc.dataHandle := GetResource(kOSAScriptResourceType,                                                         resourceID);    myOSAErr := OSALoad(gGenericScriptingComponent, scriptDesc,                                kOSAModeNull, scriptID);    MyEditGenericScript (scriptID);    myOSAErr := OSAStore(gScriptingComponent, scriptID,                                 typeOSAGenericStorage, kOSAModeNull,                                storageDescRec);    MyWriteResource(storageDescRec.dataHandle, resourceID);    ignoreErr := AEDisposeDesc(scriptDesc);    ignoreErr := AEDisposeDesc(storageDescRec); END;Using a Script Context to Handle an Apple EventThe preceding sections describe how you can load, compile, modify, and execute scripts under circumstances determined by your application. Your application can use these techniques to associate a script with an Apple event object or application object and execute the script when the user manipulates the object in some way.   Another way to execute a script is to use a script context (called a script object in AppleScript) to handle an Apple event. To do this, your application passes both the event and the script context to OSAExecuteEvent or OSADoEvent. You can also associate script contexts with Apple event objects—that is, objects in your application that can be identified by object specifier records. If an Apple event acts on an object with which a script context is associated, your application attempts to use the script context to handle the Apple event.For example, Figure 7-7 on page 7-26 shows how you can use a general Apple event handler to provide initial processing for all Apple events received by your application. Listing 10-7 shows an example of such a handler. You install a general Apple event handler like the one in Listing 10-7 in your application’s special handler dispatch table using the constant keyPreDispatch: myErr := AEInstallSpecialHandler(keyPreDispatch,                                         @MyGeneralAppleEventHandler,                                          FALSE);When it receives an Apple event, the MyGeneralAppleEventHandler function in Listing 10-7 first extracts the event’s direct parameter. It then calls another application-defined function, MyGetAttachedScript, which checks whether the direct parameter contains an object specifier record, calls AEResolve to locate the corresponding Apple event object, and returns a script ID for any script context attached to that object.If a script context is associated with the object, MyGeneralAppleEventHandler passes the script context’s script ID and the Apple event to the OSADoEvent function. Otherwise, MyGeneralAppleEventHandler returns errAEEventNotHandled, which causes the Apple Event Manager to look for an appropriate handler in the application’s Apple event dispatch table or elsewhere using standard Apple event dispatching.The OSADoEvent function in Listing 10-7 takes a component instance that identifies a connection with the generic scripting component. (If it has not already done so, the generic scripting component in turn opens a connection with the scripting component that created the script context.) In addition to the component instance, the Apple event, and the script ID for the script context, OSADoEvent takes a parameter that indicates no mode flags are set and a VAR parameter that contains any reply Apple event returned as a result of handling the event. If the scripting component determines that a script context can’t handle the specified event (for example, if an AppleScript script context doesn’t include statements that handle the event), OSADoEvent returns errAEEventNotHandled. If OSADoEvent attempts to use the script context to handle the event, the function returns a reply event that contains either the resulting script value or, if an error occurred, information about the error.The script context shown in Figure 7-7 contains an AppleScript handler for the Move event. Such handlers exist only as AppleScript statements in a script context and do not have corresponding entries in an application’s Apple event dispatch table. However, a handler in a script context can modify or override the actions performed by an application’s standard Apple event handlers installed in its Apple event dispatch table. The next section, “Supplying a Resume Dispatch Function,” describes how this works.Listing 10-7    A general Apple event handler that uses the OSADoEvent functionFUNCTION MyGeneralAppleEventHandler (event: AppleEvent;                                                  reply: AppleEvent;                                                 refcon: LongInt): OSErr;VAR    dp, resultDesc:                         AEDesc;    scriptID:                        OSAID;    myErr, ignoreErr: OSErr;    myOSAErr:                        OSAError;BEGIN    {get the direct parameter}    myErr := AEGetParamDesc(event, keyDirectObject, typeWildCard,                                     dp);    {get script ID for script context attached to object }    { specified in direct parameter}    IF MyGetAttachedScript(dp, scriptID) THEN         {execute the handler in the script context handler and, if }        { necessary, the default Apple event handler}        myOSAErr := OSADoEvent(gScriptingComponent, event,                                         scriptID,     kOSAModeNull, reply)    ELSE        myOSAErr := errAEEventNotHandled;    ignoreErr := AEDisposeDesc(dp);    MyGeneralAppleEventHandler := OSErr(myOSAErr);END; For more information about OSADoEvent, OSAExecuteEvent, and other routines related to the use of script contexts to handle Apple events, see page 10-71.Supplying a Resume Dispatch FunctionEvery scripting component calls a resume dispatch function during script execution if the script contains the equivalent of an AppleScript continue statement within an event handler. (See Figure 7-7 on page 7-26 for an example.) The resume dispatch function dispatches the event specified by the script directly to the application’s standard handler for that event. Thus, if the script context passed to OSADoEvent in Listing 10-7 specifies that the event passed in the event parameter should be continued—that is, handled by the application’s standard Apple event handler for that event—the scripting component passes the event to the resume dispatch function currently set for that instance of the scripting component. The resume dispatch function attempts to redispatch the event to the handler installed in the application’s Apple event dispatch table for that event. If the call to the resume dispatch function is successful, execution of the script proceeds from the point at which the resume dispatch function was called. If the call to the resume dispatch function is not successful, OSADoEvent returns errAEEventNotHandled in the keyErrorNumber parameter of the reply event. (Other routines that execute scripts, such as OSAExecute or OSAExecuteEvent, return errOSAScriptError in this situation, and a subsequent call to OSAScriptError with kOSAErrorNumber in the selector parameter returns errAEEventNotHandled.)Some scripting components may provide routines that allow your application to set or get the pointer to the resume dispatch function used by a specified instance of a scripting component.TYPE AEHandlerProcPtr = EventHandlerProcPtr;A resume dispatch function takes the same parameters as an Apple event handler. FUNCTION MyResumeDispatch (theAppleEvent: AppleEvent;                                      reply: AppleEvent; refCon: LongInt)                                    :OSErr;To set the resume dispatch function for a scripting component, call OSASetResumeDispatchProc; to get the current dispatch function for a scripting component, call OSAGetResumeDispatchProc. If you do not set a resume dispatch function for a scripting component, it uses standard Apple event dispatching to dispatch the event, starting with the special handler dispatch table.You can install a resume dispatch function using the OSASetResumeDispatchProc function. However, if you are using a general handler similar to that in Listing 10-7 on page 10-21 and you can rely on standard Apple event dispatching to dispatch the event correctly, you don’t need to provide a resume dispatch function. Instead, you can specify kOSAUseStandardDispatch as the resume dispatch function and the constant kOSADontUsePhac as the reference constant when you call OSASetResumeDispatchProc.myErr := OSASetResumeDispatchProc(gScriptingComponent,                     kOSAUseStandardDispatch, kOSADontUsePhac);This causes the Apple Event Manager to redispatch events that would otherwise be passed to a resume dispatch function using standard Apple event dispatching—except that the Apple Event Manager bypasses your application’s special handler dispatch table and thus won’t call your general Apple event handler recursively.When a scripting component calls your resume dispatch function, the A5 register is set up for your application, and your application is the current process.   Supplying an Alternative Active FunctionEvery scripting component calls an active function periodically during script compilation and execution. All scripting components support routines that allow your application to set or get the pointer to the active function used by that scripting component.TYPE OSAActiveProcPtr = ProcPtr;A pointer of type OSAActiveProcPtr points to a MyActiveProc function that takes a reference constant as a parameter. FUNCTION MyActiveProc(refCon: LongInt): OSErr;If you want your application to get time periodically during script compilation and execution for tasks such as spinning the cursor or checking for system-level errors, you should provide an alternative active function that performs those tasks. To set an alternative active function, call OSASetActiveProc; to get the current active function, call OSAGetActiveProc. If you do not set an alternative active function for a scripting component, it uses its own default active function. A scripting component’s default active function allows a user to cancel script execution by pressing Command-period and calls WaitNextEvent to give other processes time.Your alternative active function can in turn call the scripting component’s default active function. To do this, your application can call OSAGetActiveProc before calling OSASetActiveProc to set the alternative active function, then call the default active function directly when necessary. Some scripting components may also supply building-block routines that your application can use to construct an alternative active function.Multithreaded applications may need to give time to other threads while one thread is waiting for the scripting component to complete compilation or execution of a script. You can provide an alternative send function and an idle function that allows threads to be switched (see “Alternative Send Functions” on page 10-25). However, the Apple Event Manager calls an idle function only after an Apple event has been sent, whereas a scripting component calls an active function at regular intervals throughout script compilation and execution. Thus, to give time to multiple threads, you may want to provide an alternative active function in addition to an alternative send function and an idle function. When a scripting component calls your alternative active function, the A5 register is set up for your application, and your application is the current process. Supplying Alternative Create and Send FunctionsEvery scripting component calls a create function whenever it creates an Apple event during script execution, and a send function whenever it sends an Apple event. Scripting components that use Apple events during script compilation, including AppleScript, also call create and send functions during compilation. Some scripting components may provide routines that allow your application to set or get the pointers to the create and send functions used by that scripting component. If your application does not set alternative send and create functions, the scripting component uses the standard Apple Event Manager functions AESend and AECreateAppleEvent, which it calls with its own default parameters.A scripting component that supports the routines you can use to set or get alternative create and send functions has the kOSASupportsAESending bit set in its component description record. For more information about using the Component Manager to find a scripting component that supports specific routines, see “Connecting to a Scripting Component,” which begins on page 10-3.When a scripting component calls your alternative send or create function, the A5 register is set up for your application, and your application is the current process. Alternative Create FunctionsA scripting component that allows your application to set or get its create function uses a pointer to identify the current create function.TYPE AECreateAppleEventProcPtr = ProcPtr;A pointer of type AECreateAppleEventProcPtr points to a MyAECreateProc function that takes the same parameters as the AECreate function plus a reference constant. FUNCTION MyAECreateProc (theAEEventClass: AEEventClass;                                  theAEEventID: AEEventID;                                  target: AEAddressDesc;                                  returnID: Integer;                                  transactionID: LongInt;                                  VAR result: AppleEvent;                                 refCon: LongInt): OSErr; Your application can use an alternative create function to gain control over the creation and addressing of Apple events. This can be useful, for example, if your application needs to add its own transaction code to the event.To set an alternative create function, call OSASetCreateProc; to get the current create function, call OSAGetCreateProc. If you do not set an alternative create function for a scripting component, it uses the standard Apple Event Manager function AECreateAppleEvent, which it calls with its own default parameters.Your alternative create function can in turn call the scripting component’s default create function. To do this, your application can call OSAGetCreateProc before calling OSASetCreateProc to set the alternative create function, then call the default create function directly when necessary. Alternative Send FunctionsA scripting component that allows your application to set or get its send function uses a pointer to identify the current send function. TYPE AESendProcPtr = ProcPtr;A pointer of type AESendProcPtr points to a MyAESendProc function that takes the same parameters as the AECreate function plus a reference constant. FUNCTION MyAESendProc (theAppleEvent: AppleEvent;                               VAR reply: AppleEvent;                               sendMode: AESendMode;                               sendPriority: AESendPriority;                               timeOutInTicks: LongInt;                               idleProc: IdleProcPtr;                               filterProc: EventFilterProcPtr;                              refCon: LongInt): OSErr; Your application can use an alternative send function to perform almost any action instead of or in addition to sending Apple events. For example, it can modify Apple events before sending them, save copies of Apple events before sending them, or substitute some other specialized mechanism for sending Apple events. To set an alternative send function, call OSASetSendProc; to get the current send function, call OSAGetSendProc. If you do not set an alternative send function for a scripting component, it uses the standard Apple Event Manager function AESend, which it calls with its own default parameters.Your alternative send function can in turn call the scripting component’s default send function. To do this, your application can call OSAGetSendProc before calling OSASetSendProc to set the alternative send function, then call the default send function directly when necessary. After a scripting component successfully calls a send function, the scripting component proceeds with script execution. If a call to a send function is not successful, the scripting component returns errOSAScriptError, and a subsequent call to OSAScriptError with kOSAErrorNumber in the selector parameter returns errAEEventNotHandled. Multithreaded applications need to allow other threads to execute while one thread is waiting for the response to an Apple event. You can accomplish this by supplying an idle function for your alternative send function that allows threads to be switched and by setting the kAEQueueReply flag in the sendMode parameter of the send function. However, if the call to the send function specifies the kAENoReply flag, be careful not to override it, because the user may have explicitly requested that no reply be returned or the 'aete' resource may indicate that the application cannot reply to that event. NoteThe Apple Event Manager calls an idle function only after an Apple event has been sent, whereas a scripting component calls an active function at regular intervals throughout script compilation and execution. Thus, to give time to multiple threads, you may want to provide an alternative active function in addition to an alternative send function and an idle function.uSome scripting components (including the current version of AppleScript) can execute only one script at a time per component instance. For this reason, a multithreaded application must provide a separate component instance for each script that it compiles or executes while it is also compiling or executing other scripts.You should follow the rules for setting sendMode flags described in the chapter “Creating and Sending Apple Events” in this book when you set flags for the sendMode parameter of an alternative send function. Keep these additional guidelines in mind:n    If the target application is on the local computer, you can set the kAECanInteract and kAECanSwitchLayer flags.n    If the target application is on the local computer and the user has requested no reply, set the kAENoReply, kAECanInteract, and kAECanSwitchLayer flags.n    If the target application is on a remote computer, set the kAENeverInteract flag and do not set the kAECanSwitchLayer flag.  Recording ScriptsIf you want your application to record Apple events in the form of a compiled script, or if you are writing a script-editing application like Script Editor, you can use the OSAStartRecording and OSAStopRecording functions to start and stop recording into a specified script ID on a single computer. Both functions take a component instance and a script ID for a compiled script. When your application calls OSAStartRecording, the scripting component identified by the component instance sends a Start Recording event to your application and installs a Receive Recordable Event handler in your application’s Apple event dispatch table. When your application calls OSAStopRecording, the scripting component removes the handler.An application acting as a recording process in this manner should not provide a handler for the Start Recording event. Instead, the Apple Event Manager receives the event and responds by sending a Recording On event to all running processes on the local computer. Thereafter, the Apple Event Manager sends copies of subsequent recordable events to the recording process, whose previously installed Receive Recordable Event handler, much like a handler for event class typeWildCard and event ID typeWildCard, handles those recordable events by recording them in the compiled script specified in the call to OSAStartRecording.Whenever the Receive Recordable Event handler receives a recordable event, the scripting component sends your application a Recorded Text event. The Recorded Text event contains the decompiled source data for the recorded event in the form of styled text. Recorded Text—append styled text to script editor window             Event class        kOSASuite    Event ID        kOSARecordedText    Required parameter                Keyword:    keyDirectObject        Descriptor type:    typeStyledText or any other text descriptor type        Data:    Decompiled source data for recorded event    Description        Sent by a scripting component to a recording process for each event recorded after a call to OSAStartRecording      If your want your application to display the source data for recorded events as they are recorded, you must provide a handler for the Recorded Text event. For more information about the Receive Recordable Event handler and Apple event recording, see “How Apple Event Recording Works,” which begins on page 9-35.Writing a Scripting ComponentIt is possible to create scripting components that execute a variety of scripts, including scripts that can be “run” in some sense but do not consist of statements in a scripting language. For example, script data can consist of an XCMD or even sound data that the appropriate scripting component can trigger or play back when it executes the script (see “Storage Formats for Script Data,” which begins on page 10-12). If you are developing a scripting component, you should read the instructions for creating components in the chapter “Component Manager” in Inside Macintosh: More Macintosh Toolbox. Every scripting component should also n    Provide a component name in the scripting component’s component resource that will make sense when displayed to users.n    Support the standard scripting component routines described in “Required Scripting Component Routines,” which begins on page 10-30.n    Support some, all, or none of the optional scripting component routines, as appropriate for the tasks to be performed by the scripting component. These routines are described in “Optional Scripting Component Routines,” which begins on page 10-46.n    Use the three OSA routines OSAGetStorageType, OSAAddStorageType, and OSARemoveStorageType to inspect, add, or remove the trailers appended to script data in generic storage descriptor records. These routines are described in “Manipulating Trailers for Generic Storage Descriptor Records,” which begins on page 10-92.n    Send the Get AETE event when necessary. This event is described in “Handling the Get AETE Event,” which begins on page 8-23.Scripting Components ReferenceThis section describes the standard scripting component data structures and routines your application can use to manipulate and execute scripts. This section also describes additional routines provided by the AppleScript scripting component and three routines called by scripting components.The first section, “Data Structures,” describes the principal data types used by scripting component routines. “Required Scripting Component Routines,” which begins on page 10-30, describes the standard scripting component routines that all scripting components must support. “Optional Scripting Component Routines,” which begins on page 10-46, describes additional standard scripting component routines that scripting components are not required to support. Your application can use the Component Manager to find a scripting component that supports specific optional routines or to determine whether a particular scripting component supports a specific group of routines. For information about how to do this, see “Connecting to a Scripting Component,” which begins on page 10-3. “AppleScript Component Routines,” which begins on page 10-80, describes additional routines supported by the AppleScript component. “Generic Scripting Component Routines” which begins on page 10-84, describes routines you can use to get instances of specific components and perform other useful tasks when you are using multiple scripting components. “Routines Used by Scripting Components,” which begins on page 10-92, describes three routines that all scripting components can use to manipulate trailers for generic storage descriptor records.Data StructuresThis section describes the principal data structures and Component Manager type codes used by the standard scripting component routines. Data structures used by individual routines are described with the appropriate routines in the sections that follow.The Component Manager type code for components that support the standard scripting component routines is 'osa ', and the subtype code for the generic scripting component is 'scpt'.CONST    kOSAComponentType                                                    = 'osa ';    kOSAGenericScriptingComponentSubtype                                                    = 'scpt';Because all results returned by the Component Manager are of type ComponentResult (a long integer), scripting components also define this type for result codes.TYPE    OSAError = ComponentResult;Scripting components keep track of script data in memory by means of script IDs of type OSAID.TYPE OSAID = LongInt; A scripting component assigns a script ID when it creates the associated script data (that is, a compiled script, a script value, a script context, or other kinds of script data supported by a scripting component) or loads it into memory. The scripting routines that create, load, compile, and execute scripts all return script IDs, and your application must pass valid script IDs to the other routines that manipulate scripts. A script ID remains valid until a client application calls OSADispose to reclaim the memory used for the corresponding script data. If the execution of a script does not result in a value, OSAExecute returns the constant kOSANullScript as the script ID. If a client application passes kOSANullScript to the OSAGetSource function instead of a valid script ID, the scripting component should display a null source description (possibly an empty text string). If a client application passes kOSANullScript to OSAStartRecording, the scripting component creates a new compiled script for editing or recording.CONST     kOSANullScript     = 0;Required Scripting Component RoutinesThis section describes the routines that all scripting components must support. Your application can use these routines to save and load script data, execute and dispose of scripts, get script information, and manipulate the active function. “Optional Scripting Component Routines,” which begins on page 10-46, describes additional routines your application can use with scripting components that support them.Saving and Loading Script DataThe OSAStore function takes a script ID and returns a copy of the corresponding script data in the form of a storage descriptor record. You can then save the script data as a resource or write it to the data fork of a document. The OSALoad function takes script data in a storage descriptor record and returns a script ID. OSAStoreYou can use the OSAStore function to get a handle to script data in the form of a storage descriptor record.   FUNCTION OSAStore(scriptingComponent: ComponentInstance;                         scriptID: OSAID;                         desiredType: DescType;                        modeFlags: LongInt;                        VAR resultingScriptData: AEDesc): OSAError;scriptingComponentA component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).scriptIDThe script ID for the script data for which to obtain a data handle. desiredTypeThe desired type of the descriptor record to be returned. If you want to store the script data in the form used by a generic storage descriptor record, specify typeOSAGenericStorage.modeFlags    Information used by individual scripting components. To avoid setting any mode flags, specify kOSAModeNull. To indicate that only the minimum script data required to run the script should be returned, pass kOSAModePreventGetSource in this parameter. (In this case the script data returned is not identical to the compiled script data and can’t be used to generate source data.) If the scriptID parameter identifies a script context, you can pass kOSAModeDontStoreParent in this parameter to store the script context without storing its parent context.resultingScriptDataThe resulting descriptor record.DESCRIPTIONThe OSAStore function writes script data to a descriptor record so that the data can later be saved in a resource or written to the data fork of a document. You can then reload the data for the descriptor record as a compiled script (although possibly with a different script ID) by passing the descriptor record to OSALoad. If you want the returned script data to be as small as possible and you are sure that you won’t need to display the source data to the user, specify the kOSAModePreventGetSource flag in the modeFlags parameter. If the scriptID parameter identifies a script context and you don’t want the returned script data to include the associated parent context, specify the kOSAModeDontStoreParent flag in the modeFlags parameter.The desired type is either typeOSAGenericStorage (for a generic storage descriptor record) or a specific scripting component subtype value (for a component-specific storage descriptor record).To store either a generic storage descriptor record or a component-specific storage descriptor record with your application’s resources, use 'scpt' as the resource type. The generic scripting component subtype, the generic storage descriptor type, and the resource type for stored script data all have the same value, though they serve different purposes.CONST     kOSAGenericScriptingComponentSubtype = 'scpt';    kOSAScriptResourceType = kOSAGenericScriptingComponentSubtype;    typeOSAGenericStorage = kOSAScriptResourceType;RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error    errOSAInvalidID    –1751    Invalid script ID    errOSABadStorageType    –1752    Desired type not supported by this scripting component       badComponentInstance    $80008001    Invalid component instance    SEE ALSOFor more information about storage formats for script data, see “Saving Script Data” on page 10-12.For an example of the use of OSAStore, see Listing 10-6 on page 10-19. OSALoadYou can use the OSALoad function to load script data. FUNCTION OSALoad(scriptingComponent: ComponentInstance;                       scriptData: AEDesc;                      modeFlags: LongInt;                      VAR resultingScriptID: OSAID): OSAError;scriptingComponent A component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).scriptDataThe descriptor record containing the script data to be loaded.modeFlags    Information used by individual scripting components. To avoid setting any mode flags, specify kOSAModeNull. To indicate that only the minimum script data required to run the script should be loaded, pass kOSAModePreventGetSource in this parameter.resultingScriptIDThe returned script ID for the compiled script.DESCRIPTIONThe OSALoad function loads script data and returns a script ID. The generic scripting component uses the descriptor record in the scriptData parameter to determine which scripting component should load the script. If the descriptor record is of type typeOSAGenericStorage, the generic scripting component uses the trailer at the end of the script data to identify the scripting component. If the descriptor record’s type is the subtype value for another scripting component, the generic scripting component uses the descriptor type to identify the scripting component. If you want the script ID returned by OSALoad to identify only the minimum script data required to run the script and you are sure that you won’t need to display the source data to the user, specify the kOSAModePreventGetSource flag in the modeFlags parameter. Scripting components other than the generic scripting component can load script data only if it has been saved in a descriptor record whose descriptor type matches the scripting component’s subtype.Script data may change after it has been loaded—for example, if your application allows the user to edit a script’s source data. To test whether script data has been modified, pass its script ID to OSAGetScriptInfo. If it has changed, you can call OSAStore again to obtain a handle to the modified script data and save it. RESULT CODESnoErr    0    No error    errOSACorruptData    –1702    Corrupt data    errOSASystemError    –1750    General scripting system error    errOSABadStorageType    –1752    Script data not for this scripting component       errOSADataFormatObsolete    –1758    Data format is obsolete    errOSADataFormatTooNew    –1759    Data format is too new    badComponentInstance    $80008001    Invalid component instance    SEE ALSOFor more information about the way scripting components interpret script data, see “Saving Script Data” on page 10-12. For examples of the use of OSALoad, see Listing 10-4 on page 10-16 and Listing 10-6 on page 10-19.Executing and Disposing of ScriptsTo execute a script, your application must first obtain a valid script ID for a compiled script or script context. You can use either the OSALoad function described in the preceding section or the optional OSACompile function described on page 10-48 to obtain a script ID. The OSAExecute function takes a script ID for a compiled script or script context and returns a script ID for a script value. The OSADisplay function converts a script value to text that your application can later display to the user. If the OSAExecute function returns errOSAScriptError, you can use the OSAScriptError function to get more information about the error.When your application no longer needs the script data associated with a specific script ID, you can use the OSADispose function to release the memory the script data occupies.OSAExecuteYou can use the OSAExecute function to execute a compiled script or a script context. FUNCTION OSAExecute(scriptingComponent: ComponentInstance;                          compiledScriptID: OSAID;                          contextID: OSAID;                          modeFlags: LongInt;                          VAR resultingScriptValueID: OSAID): OSAError;scriptingComponentA component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).compiledScriptIDThe script ID for the compiled script to be executed.contextID    The script ID for the context to be used during script execution. The constant kOSANullScript in this parameter indicates that the scripting component should use its default context.modeFlags    Information used by individual scripting components. To avoid setting mode flag values, specify kOSAModeNull. Other possible mode flags are listed in the description that follows. resultingScriptValueIDThe script ID for the script value returned.DESCRIPTIONThe OSAExecute function executes the compiled script identified by the compiledScriptID parameter, using the script context identified by the contextID parameter to maintain state information, such as the binding of variables, for the compiled script. After successfully executing a script, OSAExecute returns the script ID for a resulting script value, or, if execution does not result in a value, the constant kOSANullScript.  You can use the OSACoerceToDesc function to coerce the resulting script value to a descriptor record of a desired descriptor type, or the OSADisplay function to obtain the equivalent source data for the script value. You can control the way in which the scripting component executes a script by adding any of these flags to the modeFlags parameter:Flag    Description    kOSAModeNeverInteract    Adds kAENeverInteract to sendMode parameter of AESend for events sent when script is executed.    kOSAModeCanInteract    Adds kAECanInteract to sendMode parameter of AESend for events sent when script is executed.    kOSAModeAlwaysInteract    Adds kAEAlwaysInteract to sendMode parameter of AESend for events sent when script is executed.    kOSAModeCantSwitchLayer    Prevents use of kAECanSwitchLayer in sendMode parameter of AESend for events sent when script is executed (the opposite of the Apple Event Manager’s interpretation of the same bit).    kOSAModeDontReconnect    Adds kAEDontReconnect to sendMode parameter of AESend for events sent when script is executed.    kOSAModeDoRecord    Prevents use of kAEDontRecord in sendMode parameter of AESend for events sent when script is executed (the opposite of the Apple Event Manager’s interpretation of the same bit).    If the result code returned by OSAExecute is a general result code, there was some problem in arranging for the script to be run. If the result code is errOSAScriptError, an error occurred during script execution. In this case, you can obtain more detailed error information by calling OSAScriptError.RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error    errOSAInvalidID    –1751    Invalid script ID    errOSAScriptError    –1753    Error occurred during execution    badComponentInstance    $80008001    Invalid component instance     SEE ALSOFor information about the OSAGetSource and OSACoerceToDesc functions, see page 10-51 and page 10-54, respectively. For examples of the use of the OSAExecute function, see Listing 10-2 on page 10-9 and Listing 10-4 on page 10-16.For more information about resume dispatch functions, see “Supplying a Resume Dispatch Function,” which begins on page 10-21, and the description of a resume dispatch function on page 10-97.OSADisplayYou can use the OSADisplay function to convert a script value to text. Your application can then use its own routines to display this text to the user.FUNCTION OSADisplay(scriptingComponent: ComponentInstance;                          scriptValueID: OSAID;                           desiredType: DescType;                          modeFlags: LongInt;                          VAR resultingText: AEDesc): OSAError;scriptingComponentA component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).scriptValueIDThe script ID for the script value to coerce.desiredTypeThe desired text descriptor type, such as typeChar, for the resulting descriptor record.modeFlags    Information used by individual scripting components. To avoid setting any mode flags, specify kOSAModeNull. To make the resulting text readable by humans only, so that it can’t be recompiled, specify kOSAModeDisplayForHumans.resultingTextThe resulting descriptor record.DESCRIPTIONThe OSADisplay function coerces the script value identified by scriptValueID to a descriptor record of the text type specified by the desiredType parameter, if possible. Valid types include all the standard text descriptor types defined in the Apple Event Registry: Standard Suites, plus any special types supported by the scripting component.Unlike OSAGetSource, OSADisplay can coerce only script values and always produces a descriptor record of a text descriptor type. In addition, if you specify the mode flag kOSAModeDisplayForHumans, the resulting text cannot be recompiled.SPECIAL CONSIDERATIONSIf you want to get a script value in a form that you can display for humans to read, use OSADisplay. If you want the descriptor type of the descriptor record returned in the resultingText parameter to be the same as the descriptor type returned by a scripting component, use OSACoerceToDesc and specify typeWildCard as the desired type.RESULT CODESnoErr    0    No error    errOSACantCoerce    –1700    Desired type not supported by scripting component    errOSASystemError    –1750    General scripting system error    errOSAInvalidID    –1751    Invalid script ID    badComponentInstance    $80008001    Invalid component instance    SEE ALSOFor descriptions of the OSAGetSource and OSACoerceToDesc functions, see page 10-51 and page 10-54, respectively.For an example of the use of OSADisplay, see Listing 10-2 on page 10-9. OSAScriptErrorYou can use the OSAScriptError function to get information about errors that occur during script execution.FUNCTION OSAScriptError(scriptingComponent: ComponentInstance;                                selector: OSType;                                desiredType: DescType;                                VAR resultingErrorDescription: AEDesc)                                : OSAError;scriptingComponentA component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).selector    A value that determines what OSAScriptError returns. The value can be one of these constants:                 CONST                    kOSAErrorNumber                                    = 'errn';                    kOSAErrorMessage                                    = 'errs';                    kOSAErrorBriefMessage                                    = 'errb';                    kOSAErrorApp                                    = 'erap';                    kOSAErrorPartialResult                                    = 'ptlr';                    kOSAErrorOffendingObject                                    = 'erob';                    kOSAErrorRange                                    = 'erng';desiredTypeThe desired descriptor type of the resulting descriptor record. The description that follows explains how this is determined by the value passed in the selector parameter. resultingErrorDescriptionThe resulting descriptor record.DESCRIPTIONWhenever the OSAExecute function returns the error errOSAScriptError, you can use the OSAScriptError function to get more specific information about the error from the scripting component that encountered it. (This information remains available only until the next call to the same scripting component.) The information returned by OSAScriptError depends on the value passed in the selector parameter, which also determines the descriptor type you should specify in the desiredType parameter.Constant    Information returned in resultingErrorDescription parameter    kOSAErrorNumber    Error number for either system error or scripting component error. The value of desiredType must be typeShortInteger.     kOSAErrorMessage    Error message associated with error number, including both the name of the application and a description of the error. This constant is sufficient for simple error reporting. The value of desiredType must be typeChar or another text descriptor type.     kOSAErrorBriefMessage    Brief error message associated with error number, excluding the name of the application, any partial result, and the offending object. The value of desiredType must be typeChar or another text descriptor type.     kOSAErrorApp    Either the name or the process serial number (PSN) of the application that received the error, if it was the result of sending an Apple event. The value of desiredType must be typeProcessSerialNumber (for the PSN) or a text descriptor type such as typeChar (for the name).     kOSAErrorPartialResult    Partial result returned after a call to AESend that failed. This consists of a reply parameter that contains some but not all of the information requested.The value of desiredType must be typeBest (for the best type) or typeWildCard (for the default type).     kOSAErrorOffendingObject    An object specifier record for the object that caused the error. The value of desiredType must be typeObjectSpecifier, typeBest, or typeWildCard. For some scripting components, including AppleScript, these three values are equivalent.     kOSAErrorRange    Range of source data in which error occurred. The value of desiredType must be typeOSAErrorRange.      Every scripting component should support calls to OSAScriptError that pass kOSAErrorNumber, kOSAErrorMessage, or kOSAErrorPartialResult in the selector parameter. Some scripting components may also support calls that pass other values in the selector parameter, including kOSAErrorRange, which provides start and end positions delimiting the errant expression in the source data. If the value of the selector parameter is kOSAErrorRange, the value of desiredType must be typeOSAErrorRange. CONST typeOSAErrorRange                                            = 'erng';A descriptor record of type typeOSAErrorRange is an AE record that consists of two descriptor records of typeShortInteger specified by these keywords:CONST    keyOSASourceStart                            = 'srcs'; {start of error range}    keyOSASourceEnd                            = 'srce'; {end of error range}If the value of the selector parameter is kOSAErrorNumber, scripting components may return, in the resultingErrorDescription parameter, one of these general error codes: errOSACantCoerce    –1700    Same as errAECoercionFail; can’t coerce data to requested descriptor type    errOSACantAccess    –1728    Same as errAENoSuchObject; runtime error in resolution of object specifier record    errOSAGeneralError    –2700    General runtime error     errOSADivideByZero    –2701    Attempt to divide by zero    errOSANumericOverflow    –2702    Numeric overflow    errOSACantLaunch    –2703    Can’t launch specified file because it isn’t an application    errOSAAppNotHighLevelEventAware    –2704    Doesn’t respond to Apple events    errOSACorruptTerminology    –2705    The application has a corrupted 'aete' resource    errOSAStackOverflow    –2706    Stack overflow    errOSAInternalTableOverflow    –2707    Internal table overflow     errASDataBlockTooLarge    –2708    Attempt to create a value larger than the allowable size    errOSATypeError    –1703    Same as errAEWrongDataType; wrong descriptor type    errOSAMessageNotUnderstood    –1708    Same as errAEEventNotHandled; event not handled or message not understood    errOSAUndefinedMessage    –1717    Same as errAEHandlerNotFound; handler not found for message    errOSAIllegalIndex    –1728    Same as errAEIllegalIndex; not a valid index    errOSAIllegalRange    –2720    Same as errAEImpossibleRange; range of specified objects not possible    errOSASyntaxError    –2740    General syntax error    errOSASyntaxTypeError    –2741    Syntax error; parser expected one type but found another    errOSATokenTooLong    –2742    Identifier too long            continued    errOSAMissingParameter    –1701    Same as errAEDescNotFound; descriptor record not found    errOSAParameterMismatch    –1721    Same as errAEWrongNumberArgs; wrong number of arguments    errOSADuplicateParameter    –2750    Parameter specified more than once    errOSADuplicateProperty    –2751    Property specified more than once    errOSADuplicateHandler    –2752    Handler defined more than once    errOSAUndefinedVariable    –2753    Undefined variable    errOSAInconsistentDeclarations    –2754    Inconsistent declarations    errOSAControlFlowError    –2755    Control flow error    Although scripting components are not required to support these error codes, their use simplifies error handling for applications that run scripts created by multiple components. If the value of the selector parameter is kOSAErrorNumber, the AppleScript component may return, in the resultingErrorDescription parameter, one of these error codes:errAECantConsiderAndIgnore    –2720    Can’t both consider and ignore a parameter    errASCantCompareMoreThan32k    –2721    Can’t compare text larger than 32K     errASCantCompareMixedScripts    –2722    Can’t compare text from different script systems    errASTerminologyNestingTooDeep    –2760    Tell statements nested too deeply    errASInconsistentNames    –2780    Syntax error; names at beginning and end of handler are inconsistent (AppleScript English dialect only)     SPECIAL CONSIDERATIONSIf you call OSAScriptError using an instance of the generic scripting component, the generic scripting component uses the same instance of a scripting component that it used for the previous call.RESULT CODESnoErr    0    No error    errOSACantCoerce    –1700    Desired type not supported by scripting component    errOSASystemError    –1750    General scripting system error    errOSABadSelector    –1754    Selector value not supported by scripting component     badComponentInstance    $80008001    Invalid component instance    SEE ALSOFor an example of the use of OSAScriptError, see Listing 10-3 on page 10-11.OSADisposeYou can use the OSADispose function to reclaim the memory occupied by script data.FUNCTION OSADispose(scriptingComponent: ComponentInstance;                           scriptID: OSAID): OSAError;scriptingComponentA component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).scriptID    The script ID for the script data to be disposed of.DESCRIPTIONThe OSADispose function releases the memory assigned to the script data identified by the scriptID parameter. The script ID passed to the OSADispose function is no longer valid if the function returns successfully. A scripting component can then reuse that script ID for other script data. A call to OSADispose returns noErr if the script ID is kOSANullScript, although it does not dispose of anything. RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error    errOSAInvalidID    –1751    Invalid script ID    badComponentInstance    $80008001    Invalid component instance    Setting and Getting Script InformationThe OSASetScriptInfo function sets various kinds of information about script data, and the OSAGetScriptInfo function returns information about script data. The kind of information these functions set or get depends on constants you pass to the functions.OSASetScriptInfoYou can use OSASetScriptInfo to set information about script data according to the value you pass in the selector parameter.FUNCTION OSASetScriptInfo(scriptingComponent: ComponentInstance;                                  scriptID: OSAID;                                   selector: OSType;                                  value: LongInt): OSAError;scriptingComponentA component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).scriptID    The script ID for the script data whose information is to be set.selector    A value that determines what kind of information OSASetScriptInfo sets. All scripting components can accept this value:                CONST kOSAScriptIsModified                                                = 'modi';    The kOSAScriptIsModified constant indicates that the count of changes since the script data was loaded or created should be set to the value in the value parameter. The AppleScript component provides limited support for this constant.value    The value to set.DESCRIPTIONThe OSASetScriptInfo function sets script information according to the value you pass in the selector parameter. If you use the kOSAScriptIsModified constant, OSASetScriptInfo sets a value that indicates how many times the script data has been modified since it was created or passed to OSALoad. Some scripting components may provide additional constants.SPECIAL CONSIDERATIONSAlthough you can specify kOSAScriptIsModified when you are using the AppleScript component without generating an error, the current version of AppleScript doesn’t actually set a value for the count of changes since the script data was loaded or created. For more information, see the description of OSAGetScriptInfo that follows.RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error    errOSAInvalidID    –1751    Invalid script ID    errOSABadSelector    –1754    Selector value not supported by scripting component    badComponentInstance    $80008001    Invalid component instance    OSAGetScriptInfoYou can use OSAGetScriptInfo to obtain information about script data according to the value you pass in the selector parameter. FUNCTION OSAGetScriptInfo(scriptingComponent: ComponentInstance;                                  scriptID: OSAID;                                   selector: OSType;                                   VAR result: LongInt): OSAError;scriptingComponentA component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).scriptID    The script ID for the script data about which to obtain information.selector    A value that determines what kind of information OSAGetScriptInfo returns. The value can be one of these constants:                 CONST        kOSAScriptIsModified                                            = 'modi';                         kOSAScriptIsTypeCompiledScript                                            = 'cscr';                         kOSAScriptIsTypeScriptValue                                            = 'valu';                         kOSAScriptIsTypeScriptContext                                            = 'cntx';                         kOSAScriptBestType                                            = 'best';                         kOSACanGetSource                                            = 'gsrc';     The AppleScript component provides limited support for the constant kOSAScriptIsModified (see page 10-44). In addition to the standard constants, the AppleScript component also supports this constant:                CONST kASHasOpenHandler                                            = 'hsod'; result    The requested information, which you can coerce to the appropriate descriptor type for the value specified in the selector parameter.DESCRIPTIONThe OSAGetScriptInfo function returns various results according to the value you pass in the selector parameter.Value of selector parameter    Information returned in the result parameter(continued)    kOSAScriptIsModified    Long integer that indicates the number of times the script data has been modified since it was passed to OSALoad.    kOSAScriptIsTypeCompiledScript    Boolean value that indicates whether or not the script data is a compiled script.        continued    kOSAScriptIsTypeScriptValue    Boolean value that indicates whether or not the script data is a script value.    kOSAScriptIsTypeScriptContext    Boolean value that indicates whether or not the script data is a script context.    kOSAScriptBestType    A descriptor type that you can pass to OSACoerceToDesc.    kOSACanGetSource    Boolean value that indicates whether the script data can be successfully passed to OSAGetSource.    The AppleScript component also provides this constant for use in the selector parameter.Value of selector parameter    Information returned in the result parameter    kASHasOpenHandler    Boolean value that indicates whether a script context with the specified script ID contains a handler for the Open Documents event. If the script ID doesn’t identify a script context, OSAGetScriptInfo returns the result code errOSAIllegalAccess.    SPECIAL CONSIDERATIONSAlthough you can specify kOSAScriptIsModified when you are using the AppleScript component without generating an error, the current version of AppleScript interprets this request conservatively. The AppleScript component stores script data in a network of interlocking structures, and running a script can cause any of these structures to be modified. If you pass a script ID is to OSAGetScriptInfo with kOSAScriptIsModified as the value of the selector parameter, the AppleScript component returns 1 if there is any possibility that the script data or related structures may have been modified, and 0 if there is no possibility that they have been modified.RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error    errOSAInvalidID    –1751    Invalid script ID    errOSABadSelector    –1754    Selector value not supported by scripting component    badComponentInstance    $80008001    Invalid component instance      Manipulating the Active FunctionThe OSASetActiveProc and OSAGetActiveProc functions allow your application to set or to get a pointer to the active function called periodically by the scripting component during script execution. To get time periodically during script execution for its own purposes, your application can substitute its own active function for use by the scripting component. If you do not specify an active function, the scripting component uses its default active function, which allows a user to cancel script execution. The functions described in this section use the following type for pointers to active functions:TYPE OSAActiveProcPtr = ProcPtr;For more information about active functions, see “Supplying an Alternative Active Function” on page 10-23.OSASetActiveProcYou can use the OSASetActiveProc routine to set the active function that a scripting component calls periodically while executing a script.FUNCTION OSASetActiveProc(scriptingComponent: ComponentInstance;                                  activeProc: OSAActiveProcPtr;                                  refCon: LongInt): OSAError;scriptingComponent A component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).activeProcA pointer to the active function to set. If the value of this parameter is NIL, OSASetActiveProc sets the scripting component’s default active function.refCon    A reference constant to be associated with the active function. This parameter can be used for many purposes; for example, it could contain a handle to data used by the active function. RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error    badComponentInstance    $80008001    Invalid component instance    OSAGetActiveProcYou can use the OSAGetActiveProc function to get a pointer to the active function that a scripting component is currently using. FUNCTION OSAGetActiveProc(scriptingComponent: ComponentInstance;                                  VAR activeProc: OSAActiveProcPtr;                                  VAR refCon: LongInt): OSAError;scriptingComponent A component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).activeProcThe OSAGetActiveProc function returns in this parameter a pointer to the active function currently set for the specified scripting component.refCon    The OSAGetActiveProc function returns in this parameter the reference constant associated with the active function for the specified scripting component.RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error     badComponentInstance    $80008001    Invalid component instance    Optional Scripting Component RoutinesThis section describes eight groups of optional routines that scripting components can support. Your application can use the Component Manager to find a scripting component that supports a specific group of routines or to determine whether a particular scripting component supports a specific group of routines. To specify one or more groups of routines for the Component Manager, use the following constants to set the equivalent bits in the componentFlags field of a component description record:CONST    kOSASupportsCompiling                                     = $0002;    kOSASupportsGetSource                                     = $0004;    kOSASupportsAECoercion                                    = $0008;    kOSASupportsAESending                                     = $0010;    kOSASupportsRecording                                     = $0020;    kOSASupportsConvenience                                    = $0040;    kOSASupportsDialects                                     = $0080;    kOSASupportsEventHandling                                     = $0100;Each of these flags identifies one of the groups of routines that are described in the sections that follow. For information about using these constants to locate scripting components that support specific groups of optional routines, see “Connecting to a Scripting Component,” which begins on page 10-3.Compiling ScriptsScripting components can provide three optional routines that get the name of a scripting component, compile a script, and update a script ID. To obtain the name of a scripting component in a form that you can coerce to text, you can use the OSAScriptingComponentName function. The OSACompile function compiles source data and returns a script ID, and the OSACopyID function updates the script data associated with one script ID with the script data associated with another script ID.A scripting component that supports the routines in this section has the kOSASupportsCompiling bit set in the componentFlags field of its component description record. OSAScriptingComponentNameYou can use the OSAScriptingComponentName function to get the name of a scripting component.FUNCTION OSAScriptingComponentName            (scriptingComponent: ComponentInstance;             VAR resultingScriptingComponentName: AEDesc): OSAError;scriptingComponentA component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).resultingScriptingComponentNameThe name of the scripting component; or, if the component is the generic scripting component, the name of the default scripting component.DESCRIPTIONThe OSAScriptingComponentName function returns a descriptor record that you can coerce to a text descriptor type such as typeChar. This can be useful if you want to display the name of the scripting language in which the user should write a new script.RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error    badComponentInstance    $80008001    Invalid component instance    SEE ALSOFor an example of the use of OSAScriptingComponentName, see Listing 10-2 on page 10-9.OSACompileYou can use the OSACompile function to compile the source data for a script and obtain a script ID for a compiled script or a script context.FUNCTION OSACompile (scriptingComponent: ComponentInstance;                             sourceData: AEDesc; modeFlags: LongInt;                            VAR previousAndResultingScriptID: OSAID)                            : OSAError;scriptingComponentA component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).sourceDataA descriptor record containing suitable source data for the specified scripting component.modeFlags    Information used by individual scripting components. To avoid setting mode flag values, specify kOSAModeNull. Other possible mode flags are listed in the description that follows. previousAndResultingScriptIDThe script ID for the resulting compiled script. If the value of this parameter on input is kOSANullScript, OSACompile returns a new script ID for the compiled script data. If the value of this parameter on input is an existing script ID, OSACompile updates the script ID so that it refers to the newly compiled script data.DESCRIPTIONYou can pass a descriptor record containing source data suitable for a specific scripting component (usually text) to the OSACompile function to obtain a script ID for the equivalent compiled script or script context. To compile the source data as a script context for use with OSAExecuteEvent or OSADoEvent, you must set the kOSACompileIntoContext flag, and the source data should include appropriate handlers.After you have successfully compiled the script, you can use the returned script ID to refer to the compiled script when you call OSAExecute and other scripting component routines.You can control the way a compiled script is executed by adding any of these flags to the modeFlags parameter:Flag    Description    kOSAModePreventGetSource    Compiled script consists of only the minimum script data required to run the script. It will cause an error if passed to OSAGetSource.    kOSACompileIntoContext    The OSACompile function returns a script context instead of a compiled script.    kOSAModeAugmentContext    Script data associated with script ID passed in previousAndResultingCompiledScriptID is augmented rather than replaced with the new compiled script. Specifying this flag automatically invokes the kOSAModeCompileIntoContext mode flag. If you redefine variables, handlers, and so on that were previously defined in the script context, the new definitions will replace the old ones.    kOSAModeNeverInteract    Adds kAENeverInteract to sendMode parameter of AESend for events sent when script is executed.    kOSAModeCanInteract    Adds kAECanInteract to sendMode parameter of AESend for events sent when script is executed.    kOSAModeAlwaysInteract    Adds kAEAlwaysInteract to sendMode parameter of AESend for events sent when script is executed.    kOSAModeDontReconnect    Adds kAEDontReconnect to sendMode parameter of AESend for events sent when script is executed.    kOSAModeCantSwitchLayer    Prevents use of kAECanSwitchLayer in sendMode parameter of AESend for events sent when script is executed (the opposite of the Apple Event Manager’s interpretation of the same bit).    kOSAModeDoRecord    Prevents use of kAEDontRecord in sendMode parameter of AESend for events sent when script is executed (the opposite of the Apple Event Manager’s interpretation of the same bit).     SPECIAL CONSIDERATIONSIf you use OSACompile with an instance of the generic scripting component and pass kOSANullScript in the previousAndResultingScriptID parameter, the generic scripting component uses the default scripting component to compile the script. If you’re recompiling a script, specify the original script ID in the previousAndResultingScriptID parameter. The generic scripting component uses the script ID to determine which scripting component it should use to compile the script.RESULT CODESnoErr    0    No error    errOSACantCoerce    –1700    Source data incompatible with scripting component    errOSASystemError    –1750    General scripting system error    errOSAInvalidID    –1751    Invalid script ID    errOSAScriptError    –1753    Source data invalid (syntax error)     badComponentInstance    $80008001    Invalid component instance    SEE ALSOFor an example of the use of OSACompile to update an existing script ID, see Listing 10-5 on page 10-18. For an example of the use of OSACompile to obtain a new script ID, see Listing 10-2 on page 10-9.For more information about the default scripting component associated with any instance of the generic scripting component, see “Generic Scripting Component Routines,” which begins on page 10-84. OSACopyIDYou can use the OSACopyID function to update script data after editing or recording and to perform undo or revert operations on script data.FUNCTION OSACopyID(scriptingComponent    : ComponentInstance;                         fromID: OSAID;                         VAR toID: OSAID): OSAError;scriptingComponentA component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).fromID    The script ID for script data that you want to be associated with the script ID in the toID parameter.toID    The script ID for the script data to be replaced. If the value of this parameter is kOSANullScript, the OSACopyID function returns a new script ID.DESCRIPTIONThe OSACopyID function replaces the script data identified by the script ID in the toID parameter with the script data identified by the script ID in the fromID parameter.RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error    errOSAInvalidID    –1751    Invalid script ID    badComponentInstance    $80008001    Invalid component instance    Getting Source DataThe OSAGetSource function returns the source data that corresponds to the script data identified by a script ID. The source data it returns can in turn be passed to OSACompile.A scripting component that supports the OSAGetSource function has the kOSASupportsGetSource bit set in the componentFlags field of its component description record. OSAGetSourceYou can use the OSAGetSource function to decompile the script data identified by a script ID and obtain the equivalent source data.FUNCTION OSAGetSource(scriptingComponent: ComponentInstance;                             scriptID: OSAID;                              desiredType: DescType;                             VAR resultingSourceData: AEDesc): OSAError;scriptingComponentA component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).scriptID    The script ID for the script data to decompile. If you pass kOSANullScript in this parameter, OSAGetSource returns a null source description (such as an empty text string). desiredTypeThe desired descriptor type of the resulting descriptor record, or typeBest if any type will do.resultingSourceDataThe resulting descriptor record.DESCRIPTIONThe OSAGetSource function decompiles the script data identified by the specified script ID and returns a descriptor record containing the equivalent source data. The source data returned need not be exactly the same as the source data originally passed to OSACompile—for example, white space and formatting might be different—but it should be a reasonable equivalent suitable for user viewing and editing. The difference between OSACoerceToDesc and OSAGetSource is that OSAGetSource creates source data that can be displayed to a user or compiled and executed to generate an appropriate value, whereas OSACoerceToDesc actually returns the value. For example, if you call OSAGetSource and specify a string value, it returns the text surrounded by quotation marks (so that it can be properly compiled). If you call OSACoerceToDesc and specify a string value, it simply returns the text.The main difference between OSADisplay and OSAGetSource is that OSAGetSource can coerce any form of script data using a variety of descriptor types, whereas OSADisplay can coerce only script values and always produces a descriptor record of a text descriptor type. RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error    errOSAInvalidID    –1751    Invalid script ID    errOSASourceNotAvailable    –1756    Source data not available    badComponentInstance    $80008001    Invalid component instance    SEE ALSOFor an example of the use of OSAGetSource, see Listing 10-5 on page 10-18.Coercing Script ValuesScripting components can provide support for two optional routines, OSACoerceFromDesc and OSACoerceToDesc, which coerce data in a descriptor record to a script value and coerce a script value to data in a descriptor record, respectively.A scripting component that supports the routines in this section has the kOSASupportsAECoercion bit set in the componentFlags field of its component description record.OSACoerceFromDescYou can use the OSACoerceFromDesc function to obtain the script ID for a script value that corresponds to the data in a descriptor record.FUNCTION OSACoerceFromDesc                        (scriptingComponent: ComponentInstance;                         scriptData: AEDesc; modeFlags: LongInt;                         VAR resultingScriptValueID: OSAID): OSAError;scriptingComponentA component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).scriptDataA descriptor record containing the script data to be coerced.modeFlags    Information used by individual scripting components. To avoid setting mode flag values, specify kOSAModeNull. If the scriptData parameter contains an Apple event, you can use any of the mode flags listed in the description that follows. resultingScriptValueIDThe resulting script ID for a script value.DESCRIPTIONThe OSACoerceFromDesc function coerces the descriptor record in the scriptData parameter to the equivalent script value and returns a script ID for that value. If you pass OSACoerceFromDesc an Apple event in the scriptData parameter, it returns a script ID for the equivalent compiled script in the resultingScriptValueID parameter. In this case you can specify any of the modeFlags values used by OSACompile to control the way the compiled script is executed:Flag    Description(continued)    kOSAModePreventGetSource    Compiled script consists of only the minimum script data required to run the script. It will cause an error if passed to OSAGetSource.    kOSACompileIntoContext    The OSACoerceFromDesc function returns a script context instead of a compiled script.    kOSAModeNeverInteract    Adds kAENeverInteract to sendMode parameter of AESend for events sent when script is executed.    kOSAModeCanInteract    Adds kAECanInteract to sendMode parameter of AESend for events sent when script is executed.    kOSAModeAlwaysInteract    Adds kAEAlwaysInteract to sendMode parameter of AESend for events sent when script is executed.    kOSAModeDontReconnect    Adds kAEDontReconnect to sendMode parameter of AESend for events sent when script is executed.    kOSAModeCantSwitchLayer    Prevents use of kAECanSwitchLayer in sendMode parameter of AESend for events sent when script is executed (the opposite of the Apple Event Manager’s interpretation of the same bit).    kOSAModeDoRecord    Prevents use of kAEDontRecord in sendMode parameter of AESend for events sent when script is executed (the opposite of the Apple Event Manager’s interpretation of the same bit).     SPECIAL CONSIDERATIONSIf you call OSACoerceFromDesc using an instance of the generic scripting component, the generic scripting component uses the default scripting component to perform the coercion.RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error     badComponentInstance    $80008001    Invalid component instance    SEE ALSOFor more information about the default scripting component associated with any instance of the generic scripting component, see “Generic Scripting Component Routines,” which begins on page 10-84. OSACoerceToDescYou can use the OSACoerceToDesc function to coerce a script value to a descriptor record of a desired descriptor type.FUNCTION OSACoerceToDesc(scriptingComponent: ComponentInstance;                                 scriptValueID: OSAID;                                  desiredType: DescType;                                 modeFlags: LongInt;                                 VAR result: AEDesc): OSAError;scriptingComponentA component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).scriptValueIDThe script ID for the script value to coerce.desiredTypeThe desired descriptor type of the resulting descriptor record.modeFlags    Information used by individual scripting components. To avoid setting mode flag values, specify kOSAModeNull. result    The resulting descriptor record.DESCRIPTIONThe OSACoerceToDesc function coerces the script value identified by scriptValueID to a descriptor record of the type specified by the desiredType parameter, if possible. Valid types include all the standard descriptor types defined in the Apple Event Registry: Standard Suites, plus any special types supported by the scripting component.SPECIAL CONSIDERATIONSIf you want the descriptor type of the descriptor record returned in the result parameter to be the same as the descriptor type returned by a scripting component, use OSACoerceToDesc and specify typeWildCard as the desired type. If you want to get a script value in a form that you can display for humans to read, use OSADisplay. RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error    errOSAInvalidID    –1751    Invalid script ID    badComponentInstance    $80008001    Invalid component instance    SEE ALSOFor a description of OSADisplay, see page 10-35.  Manipulating the Create and Send FunctionsSome scripting components provide routines that allow your application to set or get pointers to the create and send functions used by the scripting component when it sends and creates Apple events during script execution. If you do not set the pointers that specify these functions, the scripting component uses the standard AECreateAppleEvent and AESend functions with default parameters.To gain control over the creation and addressing of Apple events, your application can provide its own create function for use by scripting components. To set a new create function, call the OSASetCreateProc function; to get the current create function, call OSAGetCreateProc.The send function provided by your application can perform almost any action instead of or in addition to sending Apple events; for example, it can be used to facilitate concurrent script execution. To set a new send function, call the OSASetSendProc function; to get the current send function, call OSAGetSendProc.The functions described in this section use the following types for pointers to the create and send functions:TYPE     AESendProcPtr = ProcPtr;    AECreateAppleEventProcPtr = ProcPtr;For more information about create and send functions, see “Supplying Alternative Create and Send Functions,” which begins on page 10-24. Scripting components that support manipulation of the create and send functions also support the OSASetDefaultTarget function, which allows you to set the default application to which Apple events are sent.A scripting component that supports the functions described in this section has the kOSASupportsAESending bit set in the componentFlags field of its component description record.OSASetCreateProcYou can use the OSASetCreateProc function to specify a create function that a scripting component should use instead of the Apple Event Manager’s AECreateAppleEvent function when creating Apple events.FUNCTION OSASetCreateProc(scriptingComponent: ComponentInstance;                                  createProc: AECreateAppleEventProcPtr;                                  refCon: LongInt): OSAError;scriptingComponent A component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).createProcA pointer to the create function to set.refCon    A reference constant.RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error    badComponentInstance    $80008001    Invalid component instance    OSAGetCreateProcYou can use the OSAGetCreateProc function to get a pointer to the create function that a scripting component is currently using to create Apple events.FUNCTION OSAGetCreateProc(scriptingComponent: ComponentInstance;                            VAR createProc: AECreateAppleEventProcPtr;                            VAR refCon: LongInt): OSAError;scriptingComponent A component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).createProcThe OSAGetCreateProc function returns, in this parameter, a pointer to the create function currently set for the specified scripting component.refCon    The OSAGetCreateProc function returns, in this parameter, the reference constant associated with the create function for the specified scripting component.RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error    badComponentInstance    $80008001    Invalid component instance    OSASetSendProcYou can use the OSASetSendProc function to specify a send function that a scripting component should use instead of the Apple Event Manger’s AESend function when sending Apple events. FUNCTION OSASetSendProc(scriptingComponent: ComponentInstance;                                sendProc: AESendProcPtr;                                 refCon: LongInt): OSAError;scriptingComponent A component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).sendProc    A pointer to the send function to set.refCon    A reference constant.RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error    badComponentInstance    $80008001    Invalid component instance    OSAGetSendProcYou can use the OSAGetSendProc function to get a pointer to the send function that a scripting component is currently using.FUNCTION OSAGetSendProc(scriptingComponent: ComponentInstance;                                VAR sendProc: AESendProcPtr;                                VAR refCon: LongInt): OSAError;scriptingComponent A component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).sendProc    The OSAGetSendProc function returns, in this parameter, a pointer to the send function currently set for the specified scripting component.refCon    The OSAGetSendProc function returns, in this parameter, the reference constant associated with the send function for the specified scripting component.RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error    badComponentInstance    $80008001    Invalid component instance    OSASetDefaultTargetYou can use the OSASetDefaultTarget function to set the default target application for Apple events.FUNCTION OSASetDefaultTarget                                (scriptingComponent: ComponentInstance;                                 target: AEAddressDesc): OSAError;scriptingComponent A component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).target    The address of the application that is being made the default application. If you pass a null descriptor record in this parameter, the scripting component treats the current process as the default target.DESCRIPTIONThe OSASetDefaultTarget function establishes the default target application for Apple event sending and the default application from which the scripting component should obtain terminology information. For example, AppleScript statements that refer to the default application do not need to be enclosed in tell/end tell statements. If your application doesn’t call this function, or if you pass a null descriptor record in the target parameter, the scripting component treats the current process (that is, the application that calls OSAExecute or related routines) as the default target application.RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error    badComponentInstance    $80008001    Invalid component instance    Recording ScriptsThe OSAStartRecording function turns on the Apple Event Manager’s recording mechanism and specifies a script in which subsequent recordable Apple events are recorded. The scripting component sends the recording process (for example, a script editor) a Recorded Text event that contains the decompiled equivalent for each recordable event it receives. The script editor can then display the decompiled script in a script editor window if a window for that script is currently open. Recording continues until a call to OSAStopRecording turns recording off. Script editors use these routines to allow users to control recording. Any application can use these routines to provide its own script-recording interface.For more information about the Apple event recording mechanism, see the chapter “Recording Apple Events” in this book. For more information about the Recorded Text event, see “Recording Scripts” on page 10-26.A scripting component that supports the functions described in this section has the kOSASupportsRecording bit set in the componentFlags field of its component description record.OSAStartRecordingYou can use the OSAStartRecording routine to turn on Apple event recording and record subsequent Apple events in a compiled script.FUNCTION OSAStartRecording                        (scriptingComponent: ComponentInstance;                         VAR compiledScriptToModifyID: OSAID): OSAError;scriptingComponent A component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).compiledScriptToModifyIDThe script ID for the compiled script in which to record.DESCRIPTIONThe OSAStartRecording routine turns on Apple event recording. Subsequent Apple events are recorded (that is, appended to any existing statements) in the compiled script specified by the compiledScriptToModifyID parameter. If the source data for the compiled script is currently displayed in a script editor’s window, the script editor’s handler for the Recorded Text event should display each new statement in the window as it is recorded. Users should not be able to change a script that is open in a script editor window while it is being recorded into.To record into a new compiled script, pass the constant kOSANullScript in the compiledScriptToModifyID parameter. The scripting component should respond by creating a new compiled script and recording into that.SPECIAL CONSIDERATIONSThe generic scripting component uses its default scripting component to create and record into a new compiled script.RESULT CODESnoErr    0    No error    errAERecordingIsAlreadyOn    –1732    Attempt to turn recording on when it is already on for a recording process    errOSASystemError    –1750    General scripting system error    errOSAInvalidID    –1751    Invalid script ID    badComponentInstance    $80008001    Invalid component instance    SEE ALSOFor more information about the default scripting component associated with any instance of the generic scripting component, see “Generic Scripting Component Routines,” which begins on page 10-84. OSAStopRecordingYou can use the OSAStopRecording function to turn off Apple event recording.FUNCTION OSAStopRecording(scriptingComponent: ComponentInstance;                                  compiledScriptID: OSAID): OSAError;scriptingComponent A component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).compiledScriptIDA script ID for the compiled script into which Apple events are being recorded.DESCRIPTIONThe OSAStopRecording function turns off recording. If the script is not currently open in a script editor window, the compiledScriptToModifyID parameter supplied to OSAStartRecording is then augmented to contain the newly recorded statements. If the script is currently open in a script editor window, the script data that corresponds to the compiledScriptToModifyID parameter supplied to OSAStartRecording is updated continuously until the client application calls OSAStopRecording. If the compiled script identified by the script ID in the compiledScriptID parameter is not being recorded into or recording is not currently on, OSAStopRecording returns noErr.RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error    errOSAInvalidID    –1751    Invalid script ID    badComponentInstance    $80008001    Invalid component instance     Executing Scripts in One StepThe OSALoadExecute, OSACompileExecute, and OSADoScript functions combine the capabilities of several other scripting component functions so that an application can execute a script in a single step. You can use these functions if you know that the script data to be executed will be executed only once.A scripting component that supports the functions described in this section has the kOSASupportsConvenience bit set in the componentFlags field of its component description record. OSALoadExecuteYou can use the OSALoadExecute function to load and execute a script in a single step rather than calling OSALoad and OSAExecute.FUNCTION OSALoadExecute (scriptingComponent: ComponentInstance;                                 scriptData: AEDesc;                                  contextID: OSAID; modeFlags: LongInt;                                  VAR resultingScriptValueID: OSAID)                                  : OSAError;scriptingComponent A component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).scriptDataThe descriptor record identifying the script data to be loaded and executed.contextID    The script ID for the context to be used during script execution. The constant kOSANullScript in this parameter indicates that the scripting component should use its default context.modeFlags    Information used by individual scripting components. To avoid setting mode flag values, specify kOSAModeNull. Other possible mode flags are listed in the description that follows. resultingScriptValueIDThe script ID for the script value returned.DESCRIPTIONThe OSALoadExecute function loads script data and executes the resulting compiled script, using the script context identified by the contextID parameter to maintain state information such as the binding of variables. After successfully executing the script, OSALoadExecute disposes of the compiled script and returns either the script ID for the resulting script value or, if execution does not result in a value, the constant kOSANullScript. You can control the way in which the scripting component executes a script by adding any of these flags to the modeFlags parameter:Flag    Description(continued)    kOSAModeNeverInteract    Adds kAENeverInteract to sendMode parameter of AESend for events sent when script is executed.    kOSAModeCanInteract    Adds kAECanInteract to sendMode parameter of AESend for events sent when script is executed.    kOSAModeAlwaysInteract    Adds kAEAlwaysInteract to sendMode parameter of AESend for events sent when script is executed.    kOSAModeCantSwitchLayer    Prevents use of kAECanSwitchLayer in sendMode parameter of AESend for events sent when script is executed (the opposite of the Apple Event Manager’s interpretation of the same bit).    kOSAModeDontReconnect    Adds kAEDontReconnect to sendMode parameter of AESend for events sent when script is executed.    kOSAModeDoRecord    Prevents use of kAEDontRecord in sendMode parameter of AESend for events sent when script is executed (the opposite of the Apple Event Manager’s interpretation of the same bit).    If the result code returned by OSALoadExecute is a general result code, there was some problem in arranging for the script to be run. If the result code is errOSAScriptError, an error occurred during script execution. In this case, you can obtain more detailed error information by calling OSAScriptError.RESULT CODESnoErr    0    No error    errOSACorruptData    –1702    Same as errAECorruptData    errOSASystemError    –1750    General scripting system error    errOSAInvalidID    –1751    Invalid script ID    errOSABadStorageType    –1752    Script data not for this scripting component    errOSAScriptError    –1753    Error occurred during execution    errOSADataFormatObsolete    –1758    Data format is obsolete    errOSADataFormatTooNew    –1759    Data format is too new    badComponentInstance    $80008001    Invalid component instance    OSACompileExecuteYou can use the OSACompileExecute routine to compile and execute a script in a single step rather than calling OSACompile and OSAExecute.FUNCTION OSACompileExecute                         (scriptingComponent: ComponentInstance;                         sourceData: AEDesc;                          contextID: OSAID; modeFlags: LongInt;                          VAR resultingScriptValueID: OSAID): OSAError;scriptingComponent A component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).sourceDataA descriptor record identifying suitable source data for the specified scripting component.contextID    The script ID for the context to be used during script execution. The constant kOSANullScript in this parameter indicates that the scripting component should use its default context.modeFlags    Information used by individual scripting components. To avoid setting mode flag values, specify kOSAModeNull. Other possible mode flags are listed in the description that follows. resultingScriptValueIDThe script ID for the script value returned.DESCRIPTIONThe OSACompileExecute function compiles source data and executes the resulting compiled script, using the script context identified by the contextID parameter to maintain state information such as the binding of variables. After successfully executing the script, OSACompileExecute disposes of the compiled script and returns either the script ID for the resulting script value or, if execution does not result in a value, the constant kOSANullScript.You can control the way in which the scripting component executes a script by adding any of these flags to the modeFlags parameter:Flag    Description    kOSAModeNeverInteract    Adds kAENeverInteract to sendMode parameter of AESend for events sent when script is executed.    kOSAModeCanInteract    Adds kAECanInteract to sendMode parameter of AESend for events sent when script is executed.    kOSAModeAlwaysInteract    Adds kAEAlwaysInteract to sendMode parameter of AESend for events sent when script is executed.    kOSAModeCantSwitchLayer    Prevents use of kAECanSwitchLayer in sendMode parameter of AESend for events sent when script is executed (the opposite of the Apple Event Manager’s interpretation of the same bit).    kOSAModeDontReconnect    Adds kAEDontReconnect to sendMode parameter of AESend for events sent when script is executed.    kOSAModeDoRecord    Prevents use of kAEDontRecord in sendMode parameter of AESend for events sent when script is executed (the opposite of the Apple Event Manager’s interpretation of the same bit).    If the result code returned by OSACompileExecute is a general result code, there was some problem in arranging for the script to be run. If the result code is errOSAScriptError, an error occurred during script execution. In this case, you can obtain more detailed error information by calling OSAScriptError.RESULT CODESnoErr    0    No error    errOSACantCoerce    –1700    Data could not be coerced to the requested data type    errOSASystemError    –1750    General scripting system error    errOSAInvalidID    –1751    Invalid script ID    errOSAScriptError    –1753    Source data invalid (syntax error) or an execution error occurred    badComponentInstance    $80008001    Invalid component instance    OSADoScriptYou can use the OSADoScript routine to compile and execute a script and convert the resulting script value to text in a single step rather than calling OSACompile, OSAExecute, and OSADisplay.FUNCTION OSADoScript (scriptingComponent: ComponentInstance;                             sourceData: AEDesc;                              contextID: OSAID; desiredType: DescType;                              modeFlags: LongInt;                              VAR resultingText: AEDesc): OSAError;scriptingComponent A component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).sourceDataA descriptor record identifying suitable source data for the specified scripting component.contextID    The script ID for the context to be used during script execution. The constant kOSANullScript in this parameter indicates that the scripting component should use its default context.desiredTypeThe desired text descriptor type, such as typeChar, for the resulting descriptor record.modeFlags    Information used by individual scripting components. To avoid setting mode flag values, specify kOSAModeNull. Other possible mode flags are listed in the description that follows. resultingTextThe resulting descriptor record.DESCRIPTIONCalling the OSADoScript function is equivalent to calling OSACompile followed by OSAExecute and OSADisplay. After compiling the source data, executing the compiled script using the script context identified by the contextID parameter, and returning the text equivalent of the resulting script value in the resultingText parameter, OSADoScript disposes of both the compiled script and the resulting script value.You can control the way in which the scripting component executes the script by adding any of these flags to the modeFlags parameter:Flag    Description    kOSAModeNeverInteract    Adds kAENeverInteract to sendMode parameter of AESend for events sent when script is executed.    kOSAModeCanInteract    Adds kAECanInteract to sendMode parameter of AESend for events sent when script is executed.    kOSAModeAlwaysInteract    Adds kAEAlwaysInteract to sendMode parameter of AESend for events sent when script is executed.    kOSAModeCantSwitchLayer    Prevents use of kAECanSwitchLayer in sendMode parameter of AESend for events sent when script is executed (the opposite of the Apple Event Manager’s interpretation of the same bit).    kOSAModeDontReconnect    Adds kAEDontReconnect to sendMode parameter of AESend for events sent when script is executed.    kOSAModeDoRecord    Prevents use of kAEDontRecord in sendMode parameter of AESend for events sent when script is executed (the opposite of the Apple Event Manager’s interpretation of the same bit).    kOSAModeDisplayForHumans    Resulting text is readable by humans only and cannot be recompiled by OSACompile.    If the result code returned by OSADoScript is a general result code, there was some problem in arranging for the script to be run. If the result code is errOSAScriptError, an error occurred during script execution, and the resultingText parameter contains the error message associated with the error. In this case, you can obtain more detailed error information by calling OSAScriptError.RESULT CODESnoErr    0    No error    errOSACantCoerce    –1700    Data could not be coerced to the requested data type    errOSASystemError    –1750    General scripting system error    errOSAInvalidID    –1751    Invalid script ID    errOSAScriptError    –1753    Source data invalid (syntax error) or an execution error occurred    badComponentInstance    $80008001    Invalid component instance    SEE ALSOFor more information about resume dispatch functions, see “Supplying a Resume Dispatch Function,” which begins on page 10-21, and the description of a resume dispatch function on page 10-97.Manipulating DialectsScripting components that provide several dialects may provide five functions that allow you to switch between dialects dynamically and get information about currently available dialects. The codes for specific dialects are provided by the scripting component.The OSASetCurrentDialect function sets the current dialect, and the OSAGetCurrentDialect function gets the dialect code for the current dialect. The OSAAvailableDialectCodeList function returns a list of codes for a scripting component’s dialects. You can pass any of these codes to the OSAGetDialectInfo function to get information about a specific dialect.Instead of using the OSAAvailableDialectCodeList and OSAGetDialectInfo functions, you can use the OSAAvailableDialects function to get a descriptor list that contains information about all of the currently available dialects for a scripting component. However, it is usually more convenient to get information about just one dialect.A scripting component that supports the functions described in this section has the kOSASupportsDialects bit set in the componentFlags field of its component description record.OSASetCurrentDialectYou can use the OSASetCurrentDialect function to set the current dialect for a scripting component.FUNCTION OSASetCurrentDialect                                (scriptingComponent: ComponentInstance;                                  dialectCode: Integer): OSAError;scriptingComponentA component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).dialectCodeThe code for the dialect to be set.RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error    errOSANoSuchDialect    –1757    Invalid dialect code    badComponentInstance    $80008001    Invalid component instance    OSAGetCurrentDialectYou can use the OSAGetCurrentDialect function to get the dialect code for the dialect currently being used by a scripting component.FUNCTION OSAGetCurrentDialect                        (scriptingComponent            : ComponentInstance;                         VAR resultingDialectCode    : Integer): OSAError;scriptingComponentA component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).resultingDialectCodeThe OSAGetCurrentDialect function returns, in this parameter, the code for the current dialect of the specified scripting component.RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error    errOSANoSuchDialect    –1757    Invalid dialect code    badComponentInstance    $80008001    Invalid component instance    OSAAvailableDialectCodeListYou can use the OSAAvailableDialectCodeList function to obtain a descriptor list containing dialect codes for each of a scripting component’s currently available dialects. FUNCTION OSAAvailableDialectCodeList                    (scriptingComponent                : ComponentInstance;                     VAR resultingDialectCodeList    : AEDesc): OSAError;scriptingComponentA component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).resultingDialectCodeListThe returned descriptor list. DESCRIPTIONEach item in the descriptor list returned by OSAAvailableDialectCodeList is a descriptor record of descriptor type typeInteger containing a dialect code for one of the specified scripting component’s currently available dialects. Dialect codes are defined by individual scripting components. You can pass any dialect code you obtain using OSAAvailableDialectCodeList to OSAGetDialectInfo to get information about the corresponding dialect.RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error     badComponentInstance    $80008001    Invalid component instance    OSAGetDialectInfoYou can use the OSAGetDialectInfo function to get information about a specified dialect provided by a specified scripting component.OSAGetDialectInfo (scriptingComponent: ComponentInstance;                          dialectCode: Integer; selector: OSType;                         VAR resultingDialectInfo: AEDesc): OSAError;scriptingComponentA component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).dialectCodeA code for the dialect about which you want information. You can obtain a list of a scripting component’s dialect codes by calling OSAAvailableDialectCodeList. selector    A constant that indicates what kind of information you want OSAGetDialectInfo to return in the result parameter. This constant determines the descriptor type for the descriptor record returned. See the description that follows for a list of the standard constants you can specify in this parameter.resultingDialectInfoA descriptor record containing the requested information. The descriptor record’s descriptor type corresponds to the constant specified in the selector parameter. DESCRIPTIONAfter you obtain a list of dialect codes by calling OSAAvailableDialectCodeList, you can pass any of those codes to OSAGetDialectInfo to get information about the corresponding dialect. The descriptor type of the descriptor record returned by OSAGetDialectInfo depends on the constant specified in the selector parameter. All scripting components support the following constants for this parameter:CONST    keyOSADialectName                                 = 'dnam';            {used with descriptor record }                                                { of any text type, such as }                                                { type typeChar}    keyOSADialectLangCode                                 = 'dlcd';            {used with descriptor record }                                                { of type typeShortInteger}    keyOSADialectScriptCode                     = 'dscd';                        {used with descriptor record }                                                { of type typeShortInteger}Individual scripting components may allow you to specify additional constants.RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error    errOSABadSelector    –1754    Invalid selector    errOSANoSuchDialect    –1757    Invalid dialect code    badComponentInstance    $80008001    Invalid component instance    OSAAvailableDialectsYou can use the OSAAvailableDialects function to obtain a descriptor list containing information about each of the currently available dialects for a scripting component.  FUNCTION OSAAvailableDialects                    (scriptingComponent                : ComponentInstance;                     VAR resultingDialectInfoList    : AEDesc): OSAError;scriptingComponentA component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).resultingDialectInfoListThe returned descriptor list. DESCRIPTIONEach item in the list returned by OSAAvailableDialects is an AE record of descriptor type typeOSADialectInfo.CONST typeOSADialectInfo                     = 'difo';Each descriptor record in the descriptor list contains, at a minimum, four keyword-specified descriptor records with the following keywords:CONST    keyOSADialectName                                 = 'dnam';            {used with descriptor record }                                                { of any text type, such as }                                                { type typeChar}    keyOSADialectCode                                 = 'dcod';            {used with descriptor record }                                                { of type typeShortInteger}    keyOSADialectLangCode                                 = 'dlcd';            {used with descriptor record }                                                { of type typeShortInteger}    keyOSADialectScriptCode                     = 'dscd';                        {used with descriptor record }                                                { of type typeShortInteger}Rather than calling OSAAvailableDialects to obtain complete dialect information for a scripting component, it is usually more convenient to call OSAAvailableDialectCodeList to get a list of codes for a scripting component’s dialects, then call OSAGetDialectInfo to get information about the specific dialect you’re interested in.RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error      badComponentInstance    $80008001    Invalid component instance    Using Script Contexts to Handle Apple EventsThe optional routines described in this section allow your application to use script contexts to handle Apple events. One way to do this is to install a general Apple event handler in your application’s special handler dispatch table. The general Apple event handler provides initial handling for every Apple event received by your application. (For an example of such a handler, see “Using a Script Context to Handle an Apple Event” on page 10-19.)The general Apple event handler extracts the event’s direct parameter, obtains a script ID for the script context associated with the object described in the direct parameter, and passes the Apple event and the script ID to either OSAExecuteEvent or OSADoEvent. The main difference between these two functions is that OSAExecuteEvent returns a script ID for the resulting script value, whereas OSADoEvent returns a reply Apple event that includes either the resulting script value or information about any errors that occurred.If the scripting component determines that a script context can’t handle the specified event (for example, if an AppleScript script context doesn’t include statements that handle the event), OSAExecuteEvent and OSADoEvent return errAEEventNotHandled. This causes the Apple Event Manager to look for an appropriate handler in the application’s Apple event dispatch table or elsewhere, using standard Apple event dispatching. If the scripting component determines that a script context passed to OSAExecuteEvent or OSADoEvent can handle the event, the function attempts to use the script context for that purpose.Script contexts can in turn pass an event to a resume dispatch function with a statement that’s equivalent to an AppleScript continue statement. The OSASetResumeDispatchProc and OSAGetResumeDispatchProc functions allow your application to set and get pointers to the resume dispatch function used by a scripting component. These functions use the following type for a pointer to a resume dispatch function:TYPE AEHandlerProcPtr = EventHandlerProcPtr;A resume dispatch function takes the same parameters as an Apple event handler and dispatches an event to an application’s standard handler for that event.If you need to create a new, empty script context, you can use the OSAMakeContext function.A scripting component that supports the functions described in this section has the kOSASupportsEventHandling bit set in the componentFlags field of its component description record.OSASetResumeDispatchProcYou can use the OSASetResumeDispatchProc function to set the resume dispatch function called by a scripting component during execution of an AppleScript continue statement or its equivalent. FUNCTION OSASetResumeDispatchProc                                 (scriptingComponent: ComponentInstance;                                  resumeDispatchProc: AEHandlerProcPtr;                                  refCon: LongInt): OSAError;scriptingComponentA component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).resumeDispatchProcYou can specify one of the following in this parameter:n    a pointer to a resume dispatch functionn    the kOSAUseStandardDispatch constant, which causes the Apple Event Manager to dispatch the event using standard Apple event dispatching  n    the kOSANoDispatch constant, which tells the Apple Event Manager that the processing of the Apple event is complete and that it does not need to be dispatchedrefCon    A reference constant. Specify kOSADontUsePhac in this parameter and kOSAUseStandardDispatch in the resumeDispatchProc parameter to request standard Apple event dispatching excluding the special handler dispatch table.DESCRIPTIONThe OSASetResumeDispatchProc function sets the resume dispatch function that the specified instance of a scripting component calls during execution of an AppleScript continue statement or its equivalent. The resume dispatch function should dispatch the event to the application’s standard handler for that event.If you are using a general handler similar to that in Listing 10-7 on page 10-21 for preliminary processing of Apple events, and if you can rely on standard Apple event dispatching to dispatch the event correctly, you don’t need to provide a resume dispatch function. Instead, you can specify kOSAUseStandardDispatch as the value of the resumeDispatchProc parameter and the constant kOSADontUsePhac as the value of the refCon parameter. This causes the Apple Event Manager to use standard Apple event dispatching except that it bypasses your application’s special handler dispatch table and thus won’t call your general Apple event handler recursively.RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error    badComponentInstance    $80008001    Invalid component instance    SEE ALSOFor more information about resume dispatch functions, see “Supplying a Resume Dispatch Function” on page 10-21 and the description of a resume dispatch function on page 10-97.OSAGetResumeDispatchProcYou can use the OSAGetResumeDispatchProc function to get the resume dispatch function currently being used by a scripting component instance during execution of an AppleScript continue statement or its equivalent.FUNCTION OSAGetResumeDispatchProc                             (scriptingComponent: ComponentInstance;                              VAR resumeDispatchProc: AEHandlerProcPtr;                              VAR refCon: LongInt): OSAError;scriptingComponentA component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).resumeDispatchProcThe OSAGetResumeDispatchProc function returns a pointer to the resume dispatch function for the specified scripting component in this parameter. If no resume dispatch function has been registered, OSAGetResumeDispatchProc returns kOSAUseStandardDispatch (the default). refCon    The OSAGetResumeDispatchProc function returns the reference constant associated with the resume dispatch function in this parameter.RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error    badComponentInstance    $80008001    Invalid component instance    OSAExecuteEventYou can use the OSAExecuteEvent function to handle an Apple event with the aid of a script context and obtain a script ID for the resulting script value.FUNCTION OSAExecuteEvent(scriptingComponent    : ComponentInstance;                                 theAppleEvent        : AppleEvent;                                 contextID            : OSAID;                                 modeFlags            : LongInt;                                 VAR resultingScriptValueID: OSAID)                                 : OSAError;scriptingComponentA component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).theAppleEventThe Apple event to be handled.contextID    The script ID for the script context to be used to handle the Apple event.modeFlags    Information used by individual scripting components. To avoid setting any mode flags, specify kOSAModeNull. Other possible mode flags are listed in the description that follows.resultingScriptValueIDA script ID for the resulting script value.DESCRIPTIONThe OSAExecuteEvent function attempts to use the script context specified by the contextID parameter to handle the Apple event specified by the theAppleEvent parameter. If the scripting component determines that the script context can’t handle the event (for example, if a script written in AppleScript doesn’t include statements that handle the event), OSAExecuteEvent immediately returns errAEEventNotHandled rather than errOSAScriptError.If the scripting component determines that the script context can handle the event, OSAExecuteEvent executes the script context’s handler and returns the resulting script ID. If execution of the script context’s handler for the event generates an error, OSAExecuteEvent returns errOSAScriptError, and you can get more detailed error information by calling the OSAScriptError function.You can control the way in which the scripting component executes a script context by adding any of these flags to the modeFlags parameter:Flag    Description    kOSAModeNeverInteract    Adds kAENeverInteract to sendMode parameter of AESend for events sent when script is executed.    kOSAModeCanInteract    Adds kAECanInteract to sendMode parameter of AESend for events sent when script is executed.    kOSAModeAlwaysInteract    Adds kAEAlwaysInteract to sendMode parameter of AESend for events sent when script is executed.    kOSAModeCantSwitchLayer    Prevents use of kAECanSwitchLayer in sendMode parameter of AESend for events sent when script is executed (the opposite of the Apple Event Manager’s interpretation of the same bit).    kOSAModeDontReconnect    Adds kAEDontReconnect to sendMode parameter of AESend for events sent when script is executed.    kOSAModeDoRecord    Prevents use of kAEDontRecord in sendMode parameter of AESend for events sent when script is executed (the opposite of the Apple Event Manager’s interpretation of the same bit).    If the script context identified by the contextID parameter specifies that the Apple event should be passed to the application’s default handler for that event (for example, with an AppleScript continue statement), OSAExecuteEvent passes the event to the resume dispatch function currently being used by the scripting component. The resume dispatch function dispatches the event directly to the application’s standard handler for that event (that is, without calling OSAExecuteEvent again). If the contextID parameter is kOSANullScript, the OSAExecuteEvent function passes the event directly to the resume dispatch function. If a call to the resume dispatch function is successful, execution of the script context proceeds from the point at which the resume dispatch function was called.IMPORTANTThe OSAExecuteEvent function can generate the result code errAEEventNotHandled in at least two ways. If the scripting component determines that a script context doesn’t declare a handler for a particular event, OSAExecuteEvent immediately returns errAEEventNotHandled. If a scripting component calls its resume dispatch function during script execution and the application’s standard handler for the event fails to handle it, OSAExecuteEvent returns errOSAScriptError and a call to OSAScriptError with kOSAErrorNumber in the selector parameter returns errAEEventNotHandled as the resulting error description.sRESULT CODESnoErr    0    No error    errAEEventNotHandled    –1708    Script context doesn’t contain handler for event    errOSASystemError    –1750    General scripting system error    errOSAInvalidID    –1751    Invalid script ID    errOSAScriptError    –1753    Error occurred during execution or because of an attempt to pass event to a NIL resume dispatch function    badComponentInstance    $80008001    Invalid component instance    OSADoEventYou can use the OSADoEvent function to handle an Apple event with the aid of a script context and obtain a reply event.FUNCTION OSADoEvent(scriptingComponent    : ComponentInstance;                          theAppleEvent        : AppleEvent;                          contextID            : OSAID;                          modeFlags            : LongInt;                          VAR reply: AppleEvent): OSAError;scriptingComponentA component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).theAppleEventThe Apple event to be handled.contextID    The script ID for the script context to be used to handle the Apple event.modeFlags    Information used by individual scripting components. To avoid setting any mode flags, specify kOSAModeNull. Other possible mode flags are listed in the description that follows.reply    The reply Apple event.DESCRIPTIONThe OSADoEvent function resembles both OSADoScript and OSAExecuteEvent. However, unlike OSADoScript, the script OSADoEvent executes must be in the form of a script context, and execution is initiated by an Apple event. Unlike OSAExecuteEvent, OSADoEvent returns a reply Apple event rather than the script ID of the resulting script value.The OSADoEvent function, like OSAExecuteEvent, attempts to use the script context specified by the contextID parameter to handle the Apple event specified by the theAppleEvent parameter. If the scripting component determines that the script context can’t handle the event (for example, if a script written in an AppleScript dialect doesn’t include statements that handle the event), OSADoEvent immediately returns errAEEventNotHandled rather than errOSAScriptError.If the scripting component determines that the script context can handle the event, OSADoEvent executes the script context’s handler for the event and returns the resulting script ID. The OSADoEvent function returns a reply event that contains either the resulting script value or, if an error occurred during script execution, information about the error. If the error errOSAScriptError occurs during script execution, OSADoEvent calls OSAScriptError and returns the appropriate error information in the reply. The OSADoEvent function never returns errOSAScriptError.You can control the way in which the scripting component executes a script context by adding any of these flags to the modeFlags parameter:Flag    Description(continued)    kOSAModeNeverInteract    Adds kAENeverInteract to sendMode parameter of AESend for events sent when script is executed.    kOSAModeCanInteract    Adds kAECanInteract to sendMode parameter of AESend for events sent when script is executed.    kOSAModeAlwaysInteract    Adds kAEAlwaysInteract to sendMode parameter of AESend for events sent when script is executed.        continued    kOSAModeCantSwitchLayer    Prevents use of kAECanSwitchLayer in sendMode parameter of AESend for events sent when script is executed (the opposite of the Apple Event Manager’s interpretation of the same bit).    kOSAModeDontReconnect    Adds kAEDontReconnect to sendMode parameter of AESend for events sent when script is executed.    kOSAModeDoRecord    Prevents use of kAEDontRecord in sendMode parameter of AESend for events sent when script is executed (the opposite of the Apple Event Manager’s interpretation of the same bit).    If the script context specifies that the Apple event should be passed to the application’s standard handler for that event (for example, with an AppleScript continue statement), OSADoEvent passes the event to the resume dispatch function currently being used by the scripting component. The resume dispatch function dispatches the event directly to the application’s standard handler for that event (that is, without calling OSADoEvent again). If the contextID parameter is kOSANullScript, the OSADoEvent function passes the event directly to the resume dispatch function. If the call to the resume dispatch function is successful, execution of the script context proceeds from the point at which the resume dispatch function was called. IMPORTANTLike OSAExecuteEvent, OSADoEvent can generate the result code errAEEventNotHandled in at least two ways. If the scripting component determines that a script context doesn’t declare a handler for a particular event, OSADoEvent immediately returns errAEEventNotHandled. If a scripting component calls its resume dispatch function during script execution and the application’s standard handler for the event fails to handle it, OSADoEvent returns errAEEventNotHandled in the reply Apple event.sRESULT CODESnoErr    0    No error    errAEEventNotHandled    –1708    Script context doesn’t contain handler for event    errOSASystemError    –1750    General scripting system error    errOSAInvalidID    –1751    Invalid script ID    badComponentInstance    $80008001    Invalid component instance    SEE ALSOFor an example of the use of OSADoEvent, see Listing 10-7 on page 10-21.OSAMakeContextYou can use the OSAMakeContext function to get a script ID for a new script context. FUNCTION OSAMakeContext(scriptingComponent            : ComponentInstance;                                contextName: AEDesc;                                parentContext: OSAID;                                VAR resultingContextID: OSAID): OSAError;scriptingComponentA component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).contextNameName of new context. Some scripting components may use context names for semantic purposes. If the value of this parameter is typeNull, OSAMakeContext creates an unnamed context.parentContextExisting context from which new context inherits bindings. If the value of this parameter is kOSANullScript, the new context does not inherit bindings from any other context.resultingContextIDA script ID for the resulting script context.DESCRIPTIONThe OSAMakeContext function creates a new script context that you may pass to OSAExecute or OSAExecuteEvent. The new script context inherits the bindings of the script context specified in the parentContext parameter.SPECIAL CONSIDERATIONSIf you call OSAMakeContext using an instance of the generic scripting component, the generic scripting component uses the default scripting component to create the new script context.RESULT CODESnoErr    0    No error    errOSACantCoerce    –1700    Invalid context name    errOSASystemError    –1750    General scripting system error    errOSAInvalidID    –1751    Invalid script ID    badComponentInstance    $80008001    Invalid component instance D      SEE ALSOTo compile existing source data into a script context, use OSACompile as described on page 10-48.AppleScript Component RoutinesThe AppleScript component provides routines for initializing the AppleScript component and manipulating the styles used to display AppleScript statements in a script. These routines are used primarily by script editors and other applications that display source data to users. Initializing AppleScriptBefore you call any of the standard scripting component routines, you can call the ASInit function to initialize the AppleScript component with desired application-specific stack and heap sizes. If you don’t call ASInit, the AppleScript component initializes itself using either the values specified in the application’s 'scsz' resource or, for those values not provided by the 'scsz' resource, default values provided by the AppleScript component.ASInitYou can use the ASInit function to initialize the AppleScript component.FUNCTION ASInit (scriptingComponent: ComponentInstance;                       modeFlags: LongInt;                       minStackSize: LongInt;                       preferredStackSize: LongInt;                       maxStackSize: LongInt;                      minHeapSize: LongInt;                      preferredHeapSize: LongInt;                      maxHeapSize: LongInt): OSAError;scriptingComponentA component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).modeFlags    Reserved for future use. Set to kOSAModeNull.minStackSizeThe minimum size for the portion of the application’s heap used by the AppleScript component’s application-specific stack. preferredStackSizeThe preferred size for the portion of the application’s heap used by the AppleScript component’s application-specific stack.maxStackSizeThe maximum size for the portion of the application’s heap used by the AppleScript component’s application-specific stack.minHeapSizeThe minimum size for the portion of the application’s heap used by the AppleScript component’s application-specific heap.preferredHeapSizeThe preferred size for the portion of the application’s heap used by the AppleScript component’s application-specific heap.maxHeapSizeThe maximum size for the portion of the application’s heap used by the AppleScript component’s application-specific heap.DESCRIPTIONYour application should set the modeFlags parameter to kOSAModeNull. You can use the other parameters to specify memory sizes for the portion of your application’s heap used by the AppleScript component for its application-specific heap and stack. If your application sets any of these parameters to 0, the AppleScript component uses the corresponding value in your application’s 'scsz' resource. If that value is also set to 0, the AppleScript component uses the corresponding default value:CONST    kASDefaultMinStackSize                                            = 1 * 1024;    kASDefaultPreferredStackSize                                            = 4 * 1024;    kASDefaultMaxStackSize                                            = 16 * 1024;    kASDefaultMinHeapSize                                            = 4 * 1024;    kASDefaultPreferredHeapSize                                            = 64 * 1024;    kASDefaultMaxHeapSize                                            = 32 * 1024 * 1024;If your application doesn’t call ASInit explicitly, the AppleScript component initializes itself using the values specified in your application’s 'scsz' resource when your application first calls any scripting component routine. If any of these values are set to 0, the AppleScript component uses the corresponding default value.If your application doesn’t call ASInit explicitly and doesn’t call any scripting component routines, the AppleScript component will not be initialized. For example, if your application opens and closes the AppleScript component or calls Component Manager routines such as OpenDefaultComponent or FindNextComponent but doesn’t call any scripting component routines, the AppleScript component is not initialized. When the AppleScript component is initialized, it uses your application’s high memory to create the blocks that it locks for its own use. If you expect to lock any portion of high memory for a shorter time than you expect the AppleScript component to be available, you should call ASInit explicitly.RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error    badComponentInstance    $80008001    Invalid component instance    Getting and Setting Styles for Source DataThe ASGetSourceStyles and ASSetSourceStyles functions allow you to get and set the script format styles currently used by the AppleScript component to display scripts. To obtain a list of style names formatted according to the script format styles currently used by the AppleScript component, use the ASGetSourceStyleNames function.ASGetSourceStylesYou can use the ASGetSourceStyles function to get the script format styles currently used by the AppleScript component to display scripts.FUNCTION ASGetSourceStyles                         (scriptingComponent: ComponentInstance;                         VAR resultingSourceStyles: STHandle): OSAError;scriptingComponentA component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).resultingSourceStylesA handle to a style element array defined by the TextEdit data type TEStyleTable that defines the styles used for different kinds of AppleScript terms. DESCRIPTIONThe ASGetSourceStyles function returns a style element array that defines the nine styles used for AppleScript terms. You can use these index constants to identify individual styles returned in the resultingSourceStyles parameter:CONST    kASSourceStyleUncompiledText                                             = 0;    kASSourceStyleNormalText                                            = 1;    kASSourceStyleLanguageKeyword                                            = 2;    kASSourceStyleApplicationKeyword                                            = 3;    kASSourceStyleComment                                            = 4;    kASSourceStyleLiteral                                            = 5;    kASSourceStyleUserSymbol                                            = 6;    kASSourceStyleObjectSpecifier                                            = 7;    kASNumberOfSourceStyles                                            = 8;Other AppleScript dialects may define additional styles. When you have finished using the style element array, you must dispose of it.RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error    badComponentInstance    $80008001    Invalid component instance    SEE ALSOFor information about the TEStyleTable array, see Inside Macintosh: Text.ASSetSourceStylesYou can use the ASSetSourceStyles function to set the script format styles used by the AppleScript component to display scripts.FUNCTION ASSetSourceStyles (scriptingComponent: ComponentInstance;                                     sourceStyles: STHandle): OSAError;scriptingComponentA component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).sourceStylesA handle to a style element array defined by the TextEdit data type TEStyleTable that defines the nine styles used for different kinds of AppleScript terms. The style for each kind of term should be identified according to the index constants listed for ASGetSourceStyles on page 10-82.DESCRIPTIONThe ASSetSourceStyles function sets the script format styles used to display scripts. If you pass a NIL handle in the sourceStyles parameter, the AppleScript component uses its default styles.After you have set the script format styles, you must dispose of the style element array you used to specify them.RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error    badComponentInstance    $80008001    Invalid component instance    SEE ALSOFor information about the TEStyleTable array, see Inside Macintosh: Text.ASGetSourceStyleNamesYou can use the ASGetSourceStyleNames function to obtain a list of style names that are each formatted according to the script format styles currently used by the AppleScript component.FUNCTION ASGetSourceStyleNames                         (scriptingComponent: ComponentInstance;                         modeFlags: LongInt;                          VAR resultingSourceStyleNameList: AEDescList)                         : OSAError;scriptingComponentA component instance created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).modeFlags    Reserved for future use. Set to kOSAModeNull.resultingSourceStyleNameListList of style names (for example, “Uncompiled Text,” “Normal Text”) that are each formatted according to the current script format styles. The order of the names corresponds to the order of the source style constants listed for ASGetSourceStyles on page 10-82.RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error    badComponentInstance    $80008001    Invalid component instance      Generic Scripting Component RoutinesTo manipulate and execute scripts written in different scripting languages, your application can either open a connection with each corresponding scripting component individually or open a single connection with the generic scripting component. For information about how to connect with scripting components, see “Connecting to a Scripting Component,” which begins on page 10-3.If you open a connection with the generic scripting component, it in turn attempts to open connections dynamically with the appropriate scripting component for each script that it executes or manipulates. To provide this capability, the generic scripting component must be able to determine which scripting component created any script ID passed as a parameter to a standard scripting component routine. Because different scripting components may end up using the same script ID to refer to different scripts, the generic scripting component uses its own generic script IDs. The generic scripting component translates generic scripting IDs into the corresponding component-specific script IDs and vice versa when necessary.   A generic script ID is a script ID of type GenericID.TYPE GenericID = OSAID;You don’t need to know in detail how the generic scripting component keeps track of script IDs. However, you should be aware that the script IDs to which your application refers when it uses the generic scripting component are not the same as the script IDs used by scripting components that actually manipulate and execute scripts.If you are writing a script editor or recorder, you must pass the existing script ID to OSACompile or OSAStartRecording when you are recompiling or recording into an existing script. This ensures that the script is recompiled or recorded using the same scripting component that originally created the script. If instead you pass kOSANullScript to these routines, the new script is compiled or recorded using the default scripting component. Each instance of the generic scripting component has its own default scripting component. The section “Getting and Setting the Default Scripting Component,” which follows, describes routines provided by the generic scripting component that allow you to get and set the default scripting component.The generic scripting component supports the standard scripting component routines. However, most scripting components also support their own component-specific routines. You can’t use the generic scripting component to call a component-specific routine. Instead, you must use an instance of the specific scripting component that supports the routine. To facilitate the use of component-specific routines, the generic scripting component allows you to identify the scripting component that created stored script data, get an instance of a specified scripting component, and convert between generic script IDs and component-specific script IDs. The section “Using Component-Specific Routines,” which begins on page 10-87, describes the generic scripting component routines that allow you to perform these tasks.Some generic scripting component routines take or return a component subtype of type ScriptingComponentSelector.TYPE ScriptingComponentSelector = OSType; You can use subtype codes of this type to identify specific scripting components.Getting and Setting the Default Scripting ComponentThe default scripting component for any instance of the generic scripting component is initially AppleScript, but you can change it if necessary. The OSAGetDefaultScriptingComponent and OSASetDefaultScriptingComponent functions allow you to get and set the default scripting component. OSAGetDefaultScriptingComponentYou can use the OSAGetDefaultScriptingComponent function to get the subtype code for the default scripting component associated with an instance of the generic scripting component. FUNCTION OSAGetDefaultScriptingComponent                    (genericScriptingComponent: ComponentInstance;                     VAR scriptingSubType: ScriptingComponentSelector)                     : OSAError;genericScriptingComponentA component instance for the generic scripting component, created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4). scriptingSubTypeThe function returns, in this parameter, the subtype code for the default scripting component associated with the instance of the generic scripting component specified in the genericScriptingComponent parameter.DESCRIPTIONThe OSAGetDefaultScriptingComponent function returns the subtype code for the default scripting component. This is the scripting component that will be used by OSAStartRecording, OSACompile, or OSACompileExecute if no existing script ID is specified. From the user’s point of view, the default scripting component corresponds to the scripting language selected in the Script Editor application when the user first creates a new script.Each instance of the generic scripting component has its own default scripting component, which is initially AppleScript. You can use OSASetDefaultScriptingComponent to change the default scripting component. RESULT CODESnoErr    0    No error    errOSACantOpenComponent    –1762    Can’t connect to scripting component    badComponentInstance    $80008001    Invalid component instance    OSASetDefaultScriptingComponentYou can use the OSASetDefaultScriptingComponent function to set the default scripting component associated with an instance of the generic scripting component.FUNCTION OSASetDefaultScriptingComponent                    (genericScriptingComponent: ComponentInstance;                     scriptingSubType: ScriptingComponentSelector)                     : OSAError;genericScriptingComponentA component instance for the generic scripting component, created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).scriptingSubTypeThe subtype code for the scripting component you want to set as the default.DESCRIPTIONThe OSASetDefaultScriptingComponent function sets the default scripting component for the specified instance of the generic scripting component to the scripting component identified by the scriptingSubType parameter.Each instance of the generic scripting component has its own default scripting component, which is initially AppleScript. You can use OSAGetDefaultScriptingComponent to get the current default scripting component for an instance of the generic scripting component. RESULT CODESnoErr    0    No error    errOSACantOpenComponent    –1762    Specified component subtype hasn’t been registered    badComponentInstance    $80008001    Invalid component instance      Using Component-Specific RoutinesYou can’t use the generic scripting component to call a component-specific routine. Instead, you must use an instance of the specific scripting component that supports the routine. To facilitate the use of component-specific routines, the generic scripting component allows you to identify the scripting component that created stored script data, get an instance of a specified scripting component, and convert between generic script IDs and component-specific script IDs.If you want to identify the scripting component that created a storage descriptor record but don’t want to load the script, use the OSAGetScriptingComponentFromStored function. When you need to use a specific scripting component, the OSAGetScriptingComponent function allows you to get a component instance for that scripting component.The OSAGenericToRealID and OSARealToGenericID functions allow you to convert between generic script IDs and component-specific script IDs.OSAGetScriptingComponentFromStoredYou can use the OSAGetScriptingComponentFromStored routine to get the subtype code for a scripting component that created a storage descriptor record.FUNCTION OSAGetScriptingComponentFromStored                    (genericScriptingComponent: ComponentInstance;                                 scriptData: AEDesc;                     VAR scriptingSubType: ScriptingComponentSelector)                     : OSAError;genericScriptingComponentA component instance for the generic scripting component, created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).scriptDataEither a generic storage descriptor record or a component-specific storage descriptor record.scriptingSubTypeThe function returns, in this parameter, a subtype code identifying the scripting component that created the descriptor record specified by the scriptData parameter.DESCRIPTIONThe OSAGetScriptingComponentFromStored function returns, in the scriptingSubType parameter, the subtype code for the scripting component that created the script data specified by the scriptData parameter. The generic scripting component automatically identifies the appropriate scripting component for you when you use it to call OSALoad. By calling OSAGetScriptingComponentFromStored, you can determine, without loading a script, which scripting component created the script data.RESULT CODESnoErr    0    No error    errOSACantOpenComponent    –1762    Can’t connect to scripting component    badComponentInstance    $80008001    Invalid component instance    OSAGetScriptingComponentYou can use the OSAGetScriptingComponent function to get the instance of a scripting component for a specified subtype.FUNCTION OSAGetScriptingComponent                    (genericScriptingComponent: ComponentInstance;                     scriptingSubType: ScriptingComponentSelector;                     VAR scriptingInstance: ComponentInstance)                     : OSAError;genericScriptingComponentA component instance for the generic scripting component, created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).scriptingSubTypeA subtype code for a scripting component.scriptingInstanceThe function returns, in this parameter, a component instance for the scripting component identified by the scriptingSubType parameter.DESCRIPTIONYou can’t use the generic scripting component with component-specific routines. Instead, use an instance of the specific scripting component, which you can obtain with OSAGetScriptingComponent. The OSAGetScriptingComponent function returns, in the scriptingInstance parameter, an instance of the scripting component identified by the scriptingSubType parameter. Each instance of the generic scripting component keeps track of a single instance of each component subtype, so OSAGetScriptingComponent always returns the same instance of a specified scripting component that the generic scripting component uses for standard scripting component routines.For example, you can use OSAGetDefaultComponent to get the subtype code for the default scripting component (that is, the scripting component used by the generic scripting component for new scripts). You can then get an instance of the default scripting component by passing its subtype code to OSAGetScriptingComponent. Finally, you can pass that instance to OSAScriptingComponentName to obtain the default scripting component’s name so you can display it to the user. Similarly, you can pass kAppleScriptSubtype in the scriptingSubType parameter to obtain an instance of the AppleScript component. This is necessary, for example, to call AppleScript-specific routines such as ASGetSourceStyles.RESULT CODESnoErr    0    No error    errOSACantOpenComponent    –1762    Can’t connect to scripting component    badComponentInstance    $80008001    Invalid component instance    SEEALSOFor descriptions of the OSAGetDefaultScriptingComponent and OSAScriptingComponentName functions, see page 10-86 and page 10-47, respectively. OSAGenericToRealIDYou can use the OSAGenericToRealID function to convert a generic script ID to the corresponding component-specific script ID. FUNCTION OSAGenericToRealID                    (genericScriptingComponent: ComponentInstance;                     VAR theScriptID: OSAID;                     VAR theExactComponent: ComponentInstance)                     : OSAError;genericScriptingComponentA component instance for the generic scripting component, created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).theScriptIDThe generic script ID that you want to convert. The OSAGenericToRealID function returns, in this parameter, the component-specific script ID that corresponds to the generic script ID that you pass in this parameter.theExactComponentThe OSAGenericToRealID function returns, in this parameter, the component instance that created the script ID returned in the theScriptID parameter.DESCRIPTIONYou can’t use the generic scripting component and a generic script ID with component-specific routines. Instead, you can use the component instance and script ID returned by OSAGenericToRealID.Given a generic script ID (that is, a script ID returned by a call to a standard component routine via the generic scripting component), the OSAGenericToRealID function returns the equivalent component-specific script ID and the component instance that created that script ID. The OSAGenericToRealID function modifies the script ID in place, changing the generic script ID you pass in the theScriptID parameter to the corresponding component-specific script ID. RESULT CODESnoErr    0    No error    errOSACantOpenComponent    –1762    Can’t connect to scripting component    badComponentInstance    $80008001    Invalid component instance    OSARealToGenericIDYou can use the OSARealToGenericID function to convert a component-specific script ID to the corresponding generic script ID. FUNCTION OSARealToGenericID                    (genericScriptingComponent: ComponentInstance;                                 VAR theScriptID: OSAID;                     theExactComponent: ComponentInstance)                     : OSAError;genericScriptingComponentA component instance for the generic scripting component, created by a prior call to the Component Manager function OpenDefaultComponent or OpenComponent (see page 10-4).theScriptIDThe component-specific script ID that you want to convert. You must have obtained this script ID from the scripting component instance passed in the theExactComponent parameter. The OSARealToGenericID function returns, in this parameter, the generic script ID that corresponds to the component-specific script ID that you pass in this parameter.theExactComponentA scripting component instance returned by a generic scripting component routine. DESCRIPTIONThe OSARealToGenericID function performs the reverse of the task performed by OSAGenericToRealID. Given a component-specific script ID and an exact scripting component instance (that is, the component instance that created the component-specific script ID), the OSARealToGenericID function returns the corresponding generic script ID. The OSARealToGenericID function modifies the script ID in place, changing the component-specific script ID passed in the theScriptID parameter to the corresponding generic script ID.You’ll need to do this if you have obtained a component-specific script ID using an exact scripting component instance and you want to refer to the same script in calls that use an instance of the generic scripting component. You can’t use a component-specific script ID with the generic scripting component.The script ID you pass in the theScriptID parameter must be a component-specific script ID obtained from a scripting component instance known to the generic scripting component. You can obtain such an instance by calling either OSAGetScriptingComponent or OSAGenericToRealID.RESULT CODESnoErr    0    No error    errOSAComponentMismatch    –1761    The theScriptID and theExactComponent parameters are for two different scripting components    errOSACantOpenComponent    –1762    Can’t connect to scripting component    badComponentInstance    $80008001    Invalid component instance    Routines Used by Scripting ComponentsScripting components can call three routines to manipulate the trailers for generic storage descriptor records. “Writing a Scripting Component” on page 10-27 provides general guidelines for writing a scripting component.Manipulating Trailers for Generic Storage Descriptor RecordsAll scripting components must use the OSAGetStorageType, OSAAddStorageType, and OSARemoveStorageType functions described in this section to add, remove, and inspect the trailers appended to script data in generic storage descriptor records. For more information about generic storage descriptor records, see “Saving Script Data,” which begins on page 10-12.OSAGetStorageTypeYou can use the OSAGetStorageType function to retrieve the scripting component subtype from the script trailer appended to the script data in a generic storage descriptor record.FUNCTION OSAGetStorageType(scriptData: Handle;                                     VAR type: DescType): OSErr;scriptData A handle to the script data.type    The descriptor type specified in the script data trailer.DESCRIPTIONThe OSAGetStorageType function retrieves the scripting component subtype from the trailer. If no trailer can be found, OSAGetStorageType returns the error errOSABadStorageType.RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error    errOSABadStorageType    –1752    Bad storage type    OSAAddStorageTypeYou can use the OSAAddStorageType routine to add a trailer to the script data in a generic storage descriptor record.FUNCTION OSAAddStorageType(scriptData: Handle;                                     type: DescType): OSErr;scriptData     A handle to the script data.type    The descriptor type to be specified in the trailer added to the script data. DESCRIPTIONThe OSAAddStorageType routine attaches a trailer to a handle (consequently expanding the data to which the handle refers) or updates an existing trailer.RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error    errOSABadStorageType    –1752    Bad storage type    OSARemoveStorageTypeYou can use the OSARemoveStorageType routine to remove a trailer from the script data in a generic storage descriptor record.FUNCTION OSARemoveStorageType (scriptData: Handle): OSErr;scriptDataA handle to the script data.DESCRIPTIONThe OSARemoveStorageType routine removes an existing trailer (reducing the handle's size). If no trailer can be found, then the handle is not modified, and noErr is returned.RESULT CODESnoErr    0    No error    errOSASystemError    –1750    General scripting system error    errOSABadStorageType    –1752    Bad storage type    Application-Defined RoutinesYour application can provide alternative active, send, and create functions for use by scripting components during script execution. All scripting components support routines that allow you to set and get the current active function called periodically by the scripting component during script execution. Some scripting components also support routines that allow you to set and get the current send and create functions used by the scripting component when it creates and sends Apple events during script execution.This section provides the syntax declarations for the active, send, create, and resume dispatch functions. When a scripting component calls any of these functions, the A5 register is set up for your application, and your application is the current process.MyActiveProcYour application can provide an alternative active function that performs periodic tasks during script compilation such as checking for Command-period, spinning the cursor, and checking for system-level errors. FUNCTION MyActiveProc (refCon: LongInt): OSErr;refCon    A reference constant.DESCRIPTIONEvery scripting component calls an active function periodically during script compilation and execution and provides routines that allow your application to set or get the pointer to the active function. If you don’t set an alternative active function for a scripting component, it uses its own default active function. A scripting component’s default active function allows a user to cancel script execution by pressing Command-period and calls WaitNextEvent to give other processes time.SEE ALSOFor descriptions of the scripting component routines you can use to set or get the pointer to a scripting component’s active function, see “Manipulating the Active Function” on page 10-45.For a discussion of the role of an active function, see “Supplying an Alternative Active Function” on page 10-23.MyAECreateProcYour application can provide an alternative create function to gain control over the creation and addressing of Apple events. This can be useful, for example, if your application needs to add its own transaction code to the event. An alternative create function takes the same parameters as the AECreateAppleEvent function plus a reference constant. FUNCTION MyAECreateProc (theAEEventClass: AEEventClass;                                  theAEEventID: AEEventID;                                  target: AEAddressDesc;                                  returnID: Integer;                                  transactionID: LongInt;                                  VAR result: AppleEvent;                                 refCon: LongInt): OSErr;DESCRIPTIONEvery scripting component calls a create function whenever it creates an Apple event during script execution and provides routines that allow you to set or get the pointer to the create function.If you don’t set an alternative create function for a scripting component, it uses the standard Apple Event Manager function AECreateAppleEvent, which it calls with its own default parameters.SEE ALSOFor descriptions of the scripting component routines you can use to set or get the pointer to a scripting component’s create function, see “Manipulating the Create and Send Functions,” which begins on page 10-55.For information about create functions, see “Alternative Create Functions” on page 10-24.For a description of the parameters for the AECreateAppleEvent function, see “Creating Apple Events,” which begins on page 5-25. MyAESendProcYour application can provide an alternative send function that performs almost any action instead of or in addition to sending Apple events. For example, before sending an Apple event, an alternative send function can modify the event or save a copy of the event. An alternative send function takes the same parameters as the AESend function plus a reference constant. FUNCTION MyAESendProc (theAppleEvent: AppleEvent;                               VAR reply: AppleEvent;                               sendMode: AESendMode;                               sendPriority: AESendPriority;                               timeOutInTicks: LongInt;                               idleProc: IdleProcPtr;                               filterProc: EventFilterProcPtr;                              refCon: LongInt): OSErr;DESCRIPTIONEvery scripting component calls a send function whenever it sends an Apple event during script execution and provides routines that allow you to set or get the pointer to the send function.If you don’t set an alternative send function for a scripting component, it uses the standard Apple Event Manager function AESend, which it calls with its own default parameters.SEE ALSOFor descriptions of the scripting component routines you can use to set or get the pointer to a scripting component’s send function, see “Manipulating the Create and Send Functions,” which begins on page 10-55.For more information about send functions, see “Alternative Send Functions” on page 10-25.For a description of the parameters for the AESend function, see “Sending Apple Events,” which begins on page 5-37.MyResumeDispatchYour application can provide a resume dispatch function that a scripting component calls during script execution to dispatch Apple events directly to an application’s default handler for an Apple event. A resume dispatch function takes the same parameters as an Apple event handler.FUNCTION MyResumeDispatch (theAppleEvent: AppleEvent;                                     reply: AppleEvent; refCon: LongInt)                                    : OSErr;theAppleEventThe Apple event to be dispatched.reply    The default reply Apple event provided by the Apple Event Manager.refCon    The reference constant stored in the Apple event dispatch table for the Apple event.DESCRIPTIONIf a script specifies that the Apple event should be passed to an application’s standard handler for that event (for example, with an AppleScript continue statement), the scripting component executing the script passes the event to the resume dispatch function currently being used by the scripting component. The resume dispatch function should dispatch the event directly to the application’s standard handler for that event. If you use script contexts to handle Apple events, you may need to provide a resume dispatch function.If you can rely on standard Apple event dispatching to dispatch the event correctly, you don’t need to provide a resume dispatch function. Instead, you can use the OSASetResumeDispatchProc routine to specify that the Apple Event Manager should use standard Apple event dispatching instead of a resume dispatch function.SEE ALSOFor a description of the OSASetResumeDispatchProc function, see page 10-72.For a discussion of the use of script contexts to handle Apple events, see “Using a Script Context to Handle an Apple Event” on page 10-19.Summary of Scripting ComponentsPascal SummaryConstantsCONST    {Component Manager type and subtype codes}    kOSAComponentType                                                    = 'osa ';                    kOSAGenericScriptingComponentSubtype                                                    = 'scpt';    {null script ID passed to OSAExecute, OSAGetSource, or OSAStartRecording}     kOSANullScript                                                    = 0;            {empty script}    {mode flag that indicates a routine's default mode settings are to be }    { used}    kOSAModeNull                                                    = 0;    kOSANullMode                                                    = 0;    {mode flag used with OSAStore to store a script context without storing }    { its parent context}    kOSAModeDontStoreParent                                                    = $00004000;    {mode flag used with OSAStore, OSALoad, or OSACompile to request }     { minimum script data}    kOSAModePreventGetSource                                                    = $00000001;        {mode flags used with OSACompile, OSAExecute, OSALoadExecute, }    { OSACompileExecute, OSADoScript, OSAExecuteEvent, and OSADoEvent}    {these mode flags cause the scripting component to set the corresponding }    { sendMode flags when it sends the event}    kOSAModeNeverInteract                                                    = kAENeverInteract                        ;                kOSAModeCanInteract                                                    = kAECanInteract                    ;                kOSAModeAlwaysInteract                                                    = kAEAlwaysInteract;                                        kOSAModeDontReconnect                                                    = kAEDontReconnect;    {this mode flag causes the scripting component not to set the }     { kAECanSwitchLayer sendMode flag when it sends the event}    kOSAModeCantSwitchLayer                                                    = $00000040;                        {this mode flag causes the scripting component not to set the }     { kAEDontRecord sendMode flag when it sends the event}    kOSAModeDoRecord                                                    = $00001000;    {mode flags used with OSACompile}    {this mode flag causes OSACompile to compile the source data as a script }     { context}    kOSAModeCompileIntoContext                                                    = $00000002;    {this mode flag causes OSACompile to augment the script data for a }     { script context rather than replacing it}    kOSAModeAugmentContext                                                    = $00000004;    {mode flags used with OSADisplay or OSADoScript to indicate that output }    { needs to be readable by humans only and does not have to be recompiled }    { by OSACompile}     kOSAModeDisplayForHumans                                                    = $00000008;    {suite and event code for the Recorded Text event}    kOSASuite                                                    = 'ascr';    kOSARecordedText                                                    = 'recd';    {resource type for stored script data}    kOSAScriptResourceType = kOSAGenericScriptingComponentSubtype        ;    {descriptor type for generic storage descriptor records}    typeOSAGenericStorage                                                     = kOSAScriptResourceType;    {descriptor types and error range keywords for OSAScriptError}    kOSAErrorNumber                                                    = 'errn'; {returns error number}    kOSAErrorMessage                                                    = 'errs'; {returns error message}    kOSAErrorBriefMessage                                                    = 'errb'; {returns brief error }                                                                     { message}    kOSAErrorApp                                                    = 'erap'; {returns PSN or name of }                                                                     { errant application}    kOSAErrorPartialResult                                                    = 'ptlr'; {returns partial }                                                                     { result, if any}    kOSAErrorOffendingObject                                                    = 'erob'; {returns info about }                                                                     { offending object, if }                                                                     { any}    kOSAErrorRange                                                    = 'erng'; {returns error range}    typeOSAErrorRange                                                     = 'erng'; {descriptor type for }                                                                     { error range}    keyOSASourceStart                                                    = 'srcs'; {start of error range}    keyOSASourceEnd                                                    = 'srce'; {end of error range}    {if selector parameter of kOSAScriptError is kOSAErrorNumber, scripting }    { components may return any of these error codes}    {dynamic errors}    errOSACantCoerce                                                    = errAECoercionFail;    errOSACantAccess                                                    = errAENoSuchObject;    errOSAGeneralError                                                    = -2700;    errOSADivideByZero                                                    = -2701;    errOSANumericOverflow                                                    = -2702;    errOSACantLaunch                                                    = -2703;    errOSAAppNotHighLevelEventAware                                                    = -2704;    errOSACorruptTerminology                                                    = -2705;    errOSAStackOverflow                                                    = -2706;    errOSAInternalTableOverflow                                                    = -2707;    errOSADataBlockTooLarge                                                    = -2708;    {component-specific dynamic script errors: -2720 through -2739}    {static errors}    errTypeError                                                    = errAEWrongDataType;    errOSAMessageNotUnderstood                                                    = errAEEventNotHandled;    errOSAUndefinedMessage                                                    = errAEHandlerNotFound;    errOSAIllegalIndex                                                    = errAEIllegalIndex;    errOASIllegalRange                                                    = errAEImpossibleRange;    errOSASyntaxError                                                    = -2740;    errOSASyntaxTypeError                                                     = -2741;    errOSATokenTooLong                                                    = -2742;    errOSAMissingParameter                                                    = errAEDescNotFound;    errOSAParameterMismatch                                                     = errAEWrongNumberArgs;    errOSADuplicateParameter                                                    = -2750;    errOSADuplicateProperty                                                    = -2751;    errOSADuplicateHandler                                                    = -2752;    errOSAUndefinedVariable                                                    = -2753;    errOSAInconsistentDeclarations                                                    = -2754;    errOSAControlFlowError                                                    = -2755;    {component-specific static script errors: -2760 through -2779}    {dialect-specific script errors: -2780 through -2799}    {descriptor type for each item in list returned by OSAAvailableDialects}        typeOSADialectInfo                                                     = 'difo';     {keywords for descriptor record of descriptor type typeOSADialectInfo; }    { these can also be used in selector parameter of OSAGetDialectInfo}    keyOSADialectName                                                     = 'dnam'; {used with descriptor }                                                                     { record of any text }                                                                     { type, such as typeChar}    keyOSADialectCode                                                     = 'dcod'; {used with descriptor }                                                                     { record of type }                                                                     { typeShortInteger}    keyOSADialectLangCode                                                    = 'dlcd'; {used with descriptor }                                                                     { record of type }                                                                     { typeShortInteger}    keyOSADialectScriptCode                                                    = 'dscd'; {used with descriptor }                                                                     { record of type }                                                                     { typeShortInteger}    {constants for use with OSASetResumeDispatchProc}    kOSAUseStandardDispatch                                                    = kAEUseStandardDispatch;    kOSANoDispatch                                                    = kAENoDispatch;    kOSADontUsePhac                                                    = $0001;    {selectors for use with OSAGetScriptInfo}    kOSAScriptIsModified                                                    = 'modi';    kOSAScriptIsTypeCompiledScript                                                    = 'cscr';    kOSAScriptIsTypeScriptValue                                                    = 'valu';    kOSAScriptIsTypeScriptContext                                                    = 'cntx';    kOSAScriptBestType                                                    = 'best';    kOSACanGetSource                                                    = 'gsrc';    {OSA component flags}    kOSASupportsCompiling                                                     = $0002;    kOSASupportsGetSource                                                     = $0004;    kOSASupportsAECoercion                                                    = $0008;    kOSASupportsAESending                                                     = $0010;    kOSASupportsRecording                                                     = $0020;    kOSASupportsConvenience                                                     = $0040;    kOSASupportsDialects                                                     = $0080;    kOSASupportsEventHandling                                                     = $0100;    {component selectors}    {basic scripting}    kOSASelectLoad                                                = $0001;    kOSASelectStore                                                = $0002;    kOSASelectExecute                                                = $0003;    kOSASelectDisplay                                                = $0004;    kOSASelectScriptError                                                = $0005;    kOSASelectDispose                                                = $0006;    kOSASelectSetScriptInfo                                                = $0007;    kOSASelectGetScriptInfo                                                = $0008;    kOSASelectSetActiveProc                                                = $0009;    kOSASelectGetActiveProc                                                = $000A;    {compiling}    kOSASelectScriptingComponentName                                                = $0102;    kOSASelectCompile                                                = $0103;    kOSASelectCopyID                                                = $0104;    {getting source data}    kOSASelectGetSourc                        e                        = $0201;    {coercing script values}    kOSASelectCoerceFromDesc                                                = $0301;    kOSASelectCoerceToDesc                                                = $0302;    {manipulating send and create functions}    kOSASelectSetSendProc                                                = $0401;    kOSASelectGetSendProc                                                = $0402;    kOSASelectSetCreateProc                                                = $0403;    kOSASelectGetCreateProc                                                = $0404;    kOSASelectSetDefaultTarget                                                = $0405;    {recording}    kOSASelectStartRecording                                                = $0501;    kOSASelectStopRecording                                                = $0502;    {convenience}    kOSASelectLoadExecute                                                = $0601;    kOSASelectCompileExecute                                                = $0602;    kOSASelectDoScript                                                = $0603;    {manipulating dialects}    kOSASelectSetCurrentDialect                                                = $0701;    kOSASelectGetCurrentDialect                                                = $0702;    kOSASelectAvailableDialects                                                = $0703;    kOSASelectGetDialectInfo                                                = $0704;    kOSASelectAvailableDialectCodeList                                                = $0705;    {executing Apple event handlers in script contexts}    kOSASelectSetResumeDispatchProc                                                = $0801;    kOSASelectGetResumeDispatchProc                                                = $0802;    kOSASelectExecuteEvent                                                = $0803;    kOSASelectDoEvent                                                = $0804;    kOSASelectMakeContext                                                = $0805;    {scripting-component-specific selectors begin with this value}    kOSASelectComponentSpecificStart                                                = $1001;{*******AppleScript component constants*******}    typeAppleScript                                                = 'ascr';    {Component Manager subtype for AppleScript component}    kAppleScriptSubtype                                                = typeAppleScript;    {AppleScript constant for storage descriptor records}    typeASStorage                                                = typeAppleScript;    {AppleScript constant for the selector parameter of OSAGetScriptInfo}    kASHasOpenHandler                                                = 'hsod';    {AppleScript component selectors}    kASSelectInit                                                = $1001;    kASSelectSetSourceStyles                                                = $1002;    kASSelectGetSourceStyles                                                = $1003;    kASSelectGetSourceStyleNames                                                = $1004;    {default initialization parameters for AppleScript}    kASDefaultMinStackSize                                                = 1 * 1024;    kASDefaultPreferredStackSize                                                = 4 * 1024;    kASDefaultMaxStackSize                                                = 16 * 1024;    kASDefaultMinHeapSize                                                = 4 * 1024;    kASDefaultPreferredHeapSize                                                = 64 * 1024;    kASDefaultMaxHeapSize                                                = 32 * 1024 * 1024;    {AppleScript source style flags}    kASSourceStyleUncompiledText                                                      = 0;    kASSourceStyleNormalText                                                     = 1;    kASSourceStyleLanguageKeyword                                                     = 2;    kASSourceStyleApplicationKeyword                                                     = 3;    kASSourceStyleComment                                                     = 4;    kASSourceStyleLiteral                                                     = 5;    kASSourceStyleUserSymbol                                                     = 6;    kASSourceStyleObjectSpecifier                                                     = 7;    kASNumberOfSourceStyles                                                     = 8;    {if selector parameter of kOSAScriptError is kOSAErrorNumber, }    { AppleScript component may return any of these error codes}    errASCantConsiderAndIgnore                                                     = -2720;    errASCantCompareMoreThan32k                                                     = -2721;    errASCantCompareMixedScripts                                                     = -2722;    errASTerminologyNestingTooDeep                                                     = -2760;    errASInconsistentNames                                                     = -2780; {English dialect}{*******generic scripting component constants*******}    {component version this header file describes}    kGenericComponentVersion                                                     = $0100;    {generic scripting component selectors}    kGSSSelectGetDefaultScriptingComponent                                                      = $1001;    kGSSSelectSetDefaultScriptingComponent                                                     = $1002;    kGSSSelectGetScriptingComponent                                                     = $1003;    kGSSSelectGetScriptingComponentFromStored                                                     = $1004;    kGSSSelectGenericToRealID                                                     = $1005;    kGSSSelectRealToGenericID                                                     = $1006;Data TypesTYPE    OSAID                                        = LongInt;                          {script ID}    OSAError                                        = ComponentResult; {type for result codes}    {pointers for application-defined functions}    OSAActiveProcPtr                                         = ProcPtr;    AESendProcPtr                                        = ProcPtr;     AECreateAppleEventProcPtr                                         = ProcPtr;    AEHandlerProcPtr                                        = EventHandlerProcPtr;    {generic scripting component data types}    ScriptingComponentSelector = OSType;    GenericID                                    = OSAID;Required Scripting Component RoutinesSaving and Loading Script DataFUNCTION OSAStore    (scriptingComponent: ComponentInstance; scriptID: OSAID; desiredType: DescType;modeFlags: LongInt;VAR resultingScriptData: AEDesc): OSAError;FUNCTION OSALoad    (scriptingComponent: ComponentInstance; scriptData: AEDesc;modeFlags: LongInt;VAR resultingScriptID: OSAID): OSAError;Executing and Disposing of ScriptsFUNCTION OSAExecute    (scriptingComponent: ComponentInstance;compiledScriptID: OSAID;contextID: OSAID;modeFlags: LongInt;VAR resultingScriptValueID    : OSAID): OSAError;FUNCTION OSADisplay    (scriptingComponent: ComponentInstance;scriptValueID: OSAID; desiredType: DescType;modeFlags: LongInt;VAR resultingText: AEDesc): OSAError;FUNCTION OSAScriptError    (scriptingComponent: ComponentInstance;selector: OSType;desiredType: DescType;VAR resultingErrorDescription: AEDesc): OSAError;FUNCTION OSADispose    (scriptingComponent: ComponentInstance; scriptID: OSAID): OSAError;Setting and Getting Script InformationFUNCTION OSASetScriptInfo    (scriptingComponent: ComponentInstance;scriptID: OSAID; selector: OSType;value: LongInt): OSAError;FUNCTION OSAGetScriptInfo    (scriptingComponent: ComponentInstance;scriptID: OSAID; selector: OSType;VAR result: LongInt): OSAError;Manipulating the Active FunctionFUNCTION OSASetActiveProc    (scriptingComponent: ComponentInstance;activeProc: OSAActiveProcPtr;refCon: LongInt): OSAError;FUNCTION OSAGetActiveProc    (scriptingComponent: ComponentInstance;VAR activeProc: OSAActiveProcPtr;VAR refCon: LongInt): OSAError;Optional Scripting Component RoutinesCompiling ScriptsFUNCTION OSAScriptingComponentName(scriptingComponent: ComponentInstance;VAR resultingScriptingComponentName: AEDesc): OSAError;FUNCTION OSACompile    (scriptingComponent: ComponentInstance; sourceData: AEDesc; modeFlags: LongInt;VAR previousAndResultingScriptID: OSAID): OSAError;FUNCTION OSACopyID    (scriptingComponent    : ComponentInstance;fromID: OSAID; VAR toID: OSAID): OSAError;Getting Source DataFUNCTION OSAGetSource    (scriptingComponent: ComponentInstance;scriptID: OSAID; desiredType: DescType;VAR resultingSourceData: AEDesc): OSAError;Coercing Script ValuesFUNCTION OSACoerceFromDesc    (scriptingComponent: ComponentInstance;scriptData: AEDesc; modeFlags: LongInt;VAR resultingScriptValueID: OSAID): OSAError;FUNCTION OSACoerceToDesc    (scriptingComponent: ComponentInstance;scriptValueID: OSAID; desiredType: DescType; modeFlags: LongInt;VAR result: AEDesc): OSAError;Manipulating the Create and Send FunctionsFUNCTION OSASetCreateProc    (scriptingComponent: ComponentInstance;createProc: AECreateAppleEventProcPtr;refCon: LongInt): OSAError;FUNCTION OSAGetCreateProc    (scriptingComponent: ComponentInstance;VAR createProc: AECreateAppleEventProcPtr;VAR refCon: LongInt): OSAError;FUNCTION OSASetSendProc    (scriptingComponent: ComponentInstance;sendProc: AESendProcPtr; refCon: LongInt): OSAError;FUNCTION OSAGetSendProc    (scriptingComponent: ComponentInstance;VAR sendProc: AESendProcPtr;VAR refCon: LongInt): OSAError;FUNCTION OSASetDefaultTarget(scriptingComponent: ComponentInstance;target: AEAddressDesc): OSAError;Recording ScriptsFUNCTION OSAStartRecording    (scriptingComponent: ComponentInstance;VAR compiledScriptToModifyID: OSAID): OSAError;FUNCTION OSAStopRecording    (scriptingComponent: ComponentInstance;                                 compiledScriptID: OSAID):     OSAError;Executing Scripts in One StepFUNCTION OSALoadExecute    (scriptingComponent: ComponentInstance; scriptData: AEDesc;contextID: OSAID; modeFlags: LongInt;VAR resultingScriptValueID: OSAID): OSAError;FUNCTION OSACompileExecute    (scriptingComponent: ComponentInstance; sourceData: AEDesc;contextID: OSAID; modeFlags: LongInt;VAR resultingScriptValueID: OSAID): OSAError;FUNCTION OSADoScript    (scriptingComponent: ComponentInstance; sourceData: AEDesc;contextID: OSAID;desiredType: DescType; modeFlags: LongInt;VAR resultingText: AEDesc): OSAError;Manipulating DialectsFUNCTION OSASetCurrentDialect(scriptingComponent: ComponentInstance;dialectCode        : Integer): OSAError;FUNCTION OSAGetCurrentDialect(scriptingComponent            : ComponentInstance;VAR resultingDialectCode    : Integer): OSAError;FUNCTION OSAAvailableDialectCodeList(scriptingComponent                : ComponentInstance;VAR resultingDialectCodeList    : AEDesc): OSAError;FUNCTION OSAGetDialectInfo    (scriptingComponent                : ComponentInstance;dialectCode    : Integer; selector: OSType;VAR resultingDialectInfo: AEDesc): OSAError;FUNCTION OSAAvailableDialects(scriptingComponent                : ComponentInstance;VAR resultingDialectCodeList    : AEDesc): OSAError;Using Script Contexts to Handle Apple EventsFUNCTION OSASetResumeDispatchProc(scriptingComponent: ComponentInstance;resumeDispatchProc: AEHandlerProcPtr;refCon: LongInt): OSAError;FUNCTION OSAGetResumeDispatchProc(scriptingComponent: ComponentInstance;VAR resumeDispatchProc: AEHandlerProcPtr;VAR refCon: LongInt): OSAError;FUNCTION OSAExecuteEvent    (scriptingComponent: ComponentInstance;theAppleEvent: AppleEvent;contextID: OSAID; modeFlags: LongInt;VAR resultingScriptValueID: OSAID): OSAError;FUNCTION OSADoEvent    (scriptingComponent: ComponentInstance;theAppleEvent: AppleEvent;contextID: OSAID; modeFlags: LongInt;VAR reply: AppleEvent): OSAError;FUNCTION OSAMakeContext    (scriptingComponent            : ComponentInstance;contextName: AEDesc;parentContext: OSAID;VAR resultingContextID: OSAID): OSAError;AppleScript Component RoutinesInitializing AppleScriptFUNCTION ASInit    (scriptingComponent        : ComponentInstance;modeFlags: LongInt;minStackSize            : LongInt;preferredStackSize    : LongInt;maxStackSize            : LongInt;minHeapSize            : LongInt;preferredHeapSize    : LongInt;maxHeapSize            : LongInt)    : OSAError;Getting and Setting Styles for Source DataFUNCTION ASGetSourceStyles    (scriptingComponent            : ComponentInstance;VAR resultingSourceStyles    : STHandle): OSAError;FUNCTION ASSetSourceStyles    (scriptingComponent        : ComponentInstance;sourceStyles            : STHandle): OSAError;FUNCTION ASGetSourceStyleNames(scriptingComponent: ComponentInstance;modeFlags: LongInt;VAR resultingSourceStyleNamesList: AEDescList): OSAError;Generic Scripting Component RoutinesGetting and Setting the Default Scripting ComponentFUNCTION OSAGetDefaultScriptingComponent(genericScriptingComponent: ComponentInstance;VAR scriptingSubType: ScriptingComponentSelector): OSAError;FUNCTION OSASetDefaultScriptingComponent(genericScriptingComponent: ComponentInstance;scriptingSubType: ScriptingComponentSelector): OSAError;Using Component-Specific RoutinesFUNCTION OSAGetScriptingComponentFromStored(genericScriptingComponent: ComponentInstance;scriptData: AEDesc; VAR scriptingSubType: ScriptingComponentSelector): OSAError;FUNCTION OSAGetScriptingComponent(genericScriptingComponent: ComponentInstance;scriptingSubType: ScriptingComponentSelector;VAR scriptingInstance: ComponentInstance): OSAError;FUNCTION OSAGenericToRealID    (genericScriptingComponent: ComponentInstance;VAR theScriptID: OSAID; VAR theExactComponent: ComponentInstance): OSAError;FUNCTION OSARealToGenericID    (genericScriptingComponent: ComponentInstance;VAR theScriptID: OSAID; theExactComponent: ComponentInstance): OSAError;Routines Used by Scripting ComponentsManipulating Trailers for Generic Storage Descriptor RecordsFUNCTION OSAGetStorageType    (scriptData: Handle; VAR type: DescType): OSErr;FUNCTION OSAAddStorageType    (scriptData: Handle; type: DescType): OSErr;FUNCTION OSARemoveStorageType(scriptData: Handle): OSErr;Application-Defined RoutinesFUNCTION MyActiveProc    (refCon: LongInt): OSErr;FUNCTION MyAECreateProc     (theAEEventClass: AEEventClass; theAEEventID: AEEventID; target: AEAddressDesc; returnID: Integer; transactionID: LongInt; VAR result: AppleEvent; refCon: LongInt): OSErr;FUNCTION MyAESendProc     (theAppleEvent: AppleEvent; VAR reply: AppleEvent; sendMode: AESendMode; sendPriority: AESendPriority; timeOutInTicks: LongInt; idleProc: IdleProcPtr; filterProc: EventFilterProcPtr;refCon: LongInt): OSErr;FUNCTION MyResumeDispatch    (theAppleEvent: AppleEvent; reply: AppleEvent; refCon: LongInt): OSErr;C SummaryConstants/*Component Manager type and subtype codes*/#define kOSAComponentType                                                    'osa '                #define kOSAGenericScriptingComponentSubtype                                                 'scpt'/*null script ID passed to OSAExecute, OSAGetSource, or OSAStartRecording*/ #define kOSANullScript                                                    ((OSAID) 0)/*mode flag that indicates a routine's default mode settings are to be used*/#define kOSAModeNull                                                    0            #define kOSANullMode                                                    0/*mode flag used with OSAStore to store a script context without storing *//* its parent context*/#define kOSAModeDontStoreParent                                                    0x00004000/*mode flag used with OSAStore, OSALoad, or OSACompile to request */ /* minimum script data*/#define kOSAModePreventGetSource                                                    0x00000001/*mode flags used with OSACompile, OSAExecute, OSALoadExecute, *//* OSACompileExecute, OSADoScript, OSAExecuteEvent, and OSADoEvent*//*these mode flags cause the scripting component to set the corresponding *//* sendMode flags when it sends the event*/#define kOSAModeNeverInteract                                                    kAENeverInteract                                    #define kOSAModeCanInteract                                                    kAECanInteract                                    #define kOSAModeAlwaysInteract                                                    kAEAlwaysInteract                                    #define kOSAModeDontReconnect                                                    kAEDontReconnect/*this mode flag causes the scripting component not to set the */ /* kAECanSwitchLayer sendMode flag when it sends the event*/#define kOSAModeCantSwitchLayer                                                    0x00000040/*this mode flag causes the scripting component not to set the */ /* kAEDontRecord sendMode flag when it sends the event*/#define kOSAModeDoRecord                                                    0x00001000/*mode flags used with OSACompile*//*this mode flag causes OSACompile to compile the source data as a script */ /* context*/#define kOSAModeCompileIntoContext                                                    0x00000002/*this mode flag causes OSACompile to augment the script data for a script */ /* context rather than replacing it*/#define kOSAModeAugmentContext                                                    0x00000004/*mode flags used with OSADisplay or OSADoScript to indicate that output *//* needs to be readable by humans only and does not have to be recompiled *//* by OSACompile*/ #define kOSAModeDisplayForHumans                                                    0x00000008/*suite and event code for the Recorded Text event*/#define kOSASuite                                                    'ascr'#define kOSARecordedText                                                    'recd'/*resource type for stored script data*/#define kOSAScriptResourceType                                                    kOSAGenericScriptingComponentSubtype        /*descriptor type for generic storage descriptor records*/#define typeOSAGenericStorage                                                     kOSAScriptResourceType/*descriptor types and error range keywords for OSAScriptError*/#define kOSAErrorNumber                                                    'errn'            /*returns error number*/#define kOSAErrorMessage                                                    'errs'            /*returns error message*/#define kOSAErrorBriefMessage                                                    'errb'            /*returns brief error */                                                                /* message*/#define kOSAErrorApp                                                    'erap'            /*returns PSN or name of */                                                                /* errant application*/#define kOSAErrorPartialResult                                                    'ptlr'            /*returns partial result, */                                                                /* if any*/#define kOSAErrorOffendingObject                                                    'erob'            /*returns info about */                                                                /* offending object, if any*/#define kOSAErrorRange                                                    'erng'            /*returns error range*/#define typeOSAErrorRange                                                     'erng'            /*descriptor type for */                                                                /* error range*/#define keyOSASourceStart                                                    'srcs'            /*start of error range*/#define keyOSASourceEnd                                                    'srce'            /*end of error range*//*if selector parameter of kOSAScriptError is kOSAErrorNumber, scripting *//* components may return any of these error codes*/ /*dynamic errors*/#define errOSACantCoerce                                                                errAECoercionFail#define errOSACantAccess                                                                errAENoSuchObject#define errOSAGeneralError                                                                 -2700#define errOSADivideByZero                                                                 -2701#define errOSANumericOverflow                                                                 -2702#define errOSACantLaunch                                                                 -2703#define errOSAAppNotHighLevelEventAware                                                                 -2704#define errOSACorruptTerminology                                                                 -2705#define errOSAStackOverflow                                                                 -2706#define errOSAInternalTableOverflow                                                                 -2707#define errOSADataBlockTooLarge                                                                 -2708/*component-specific dynamic script errors: -2720 through -2739*//*static errors*/#define errTypeError                                                                 errAEWrongDataType#define errOSAMessageNotUnderstood                                                                 errAEEventNotHandled#define errOSAUndefinedMessage                                                                 errAEHandlerNotFound#define errOSAIllegalIndex                                                                 errAEIllegalIndex#define errOASIllegalRange                                                                 errAEImpossibleRange#define errOSASyntaxError                                                                 -2740#define errOSASyntaxTypeError                                                                  -2741#define errOSATokenTooLong                                                                 -2742#define errOSAMissingParameter                                                                 errAEDescNotFound#define errOSAParameterMismatch                                                                  errAEWrongNumberArgs#define errOSADuplicateParameter                                                                 -2750#define errOSADuplicateProperty                                                                 -2751#define errOSADuplicateHandler                                                                 -2752#define errOSAUndefinedVariable                                                                 -2753#define errOSAInconsistentDeclarations                                                                 -2754#define errOSAControlFlowError                                                                 -2755/*component-specific static script errors: -2760 through -2779*//*dialect-specific script errors: -2780 through -2799*//*descriptor type for each item in list returned by OSAAvailableDialects*/#define typeOSADialectInfo                                                     'difo'            /*keywords for descriptor record of descriptor type typeOSADialectInfo; *//* these can also be used in selector parameter of OSAGetDialectInfo*/#define keyOSADialectName                                                     'dnam'            /*used with descriptor */                                                                /* record of any text */                                                                /* type, such as typeChar*/#define keyOSADialectCode                                                     'dcod'            /*used with descriptor */                                                                /* record of type */                                                                /* typeShortInteger*/#define keyOSADialectLangCode                                                    'dlcd'            /*used with descriptor */                                                                /* record of type */                                                                /* typeShortInteger*/#define keyOSADialectScriptCode                                                    'dscd'            /*used with descriptor */                                                                /* record of type */                                                                /* typeShortInteger*//*constants for use with OSASetResumeDispatchProc*/#define kOSAUseStandardDispatch                                                    kAEUseStandardDispatch#define kOSANoDispatch                                                    kAENoDispatch#define kOSADontUsePhac                                                    $0001/*selectors for use with OSAGetScriptInfo*/#define kOSAScriptIsModified                                                    'modi'#define kOSAScriptIsTypeCompiledScript                                                    'cscr'#define kOSAScriptIsTypeScriptValue                                                    'valu'#define kOSAScriptIsTypeScriptContext                                                    'cntx'#define kOSAScriptBestType                                                    'best'#define kOSACanGetSource                                                    'gsrc'/*OSA component flags*/#define kOSASupportsCompiling                                                     0x0002#define kOSASupportsGetSource                                                     0x0004#define kOSASupportsAECoercion                                                    0x0008#define kOSASupportsAESending                                                     0x0010#define kOSASupportsRecording                                                     0x0020#define kOSASupportsConvenience                                                     0x0040#define kOSASupportsDialects                                                     0x0080#define kOSASupportsEventHandling                                                     0x0100/*component selectors*//*basic scripting*/#define kOSASelectLoad                                                    0x0001#define kOSASelectStore                                                    0x0002#define kOSASelectExecute                                                    0x0003#define kOSASelectDisplay                                                    0x0004#define kOSASelectScriptError                                                    0x0005#define kOSASelectDispose                                                    0x0006#define kOSASelectSetScriptInfo                                                    0x0007#define kOSASelectGetScriptInfo                                                    0x0008#define kOSASelectSetActiveProc                                                    0x0009#define kOSASelectGetActiveProc                                                    0x000A/*compiling*/#define kOSASelectScriptingComponentName                                                     0x0102#define kOSASelectCompile                                                    0x0103#define kOSASelectCopyID                                                    0x0104/*getting source data*/#define kOSASelectGetSourc                        e                            0x0201/*coercing script values*/#define kOSASelectCoerceFromDesc                                                    0x0301#define kOSASelectCoerceToDesc                                                    0x0302/*manipulating send and create functions*/#define kOSASelectSetSendProc                                                    0x0401#define kOSASelectGetSendProc                                                    0x0402#define kOSASelectSetCreateProc                                                    0x0403#define kOSASelectGetCreateProc                                                    0x0404#define kOSASelectSetDefaultTarget                                                    0x0405/*recording*/#define kOSASelectStartRecording                                                    0x0501#define kOSASelectStopRecording                                                    0x0502/*convenience*/#define kOSASelectLoadExecute                                                    0x0601#define kOSASelectCompileExecute                                                    0x0602#define kOSASelectDoScript                                                    0x0603/*manipulating dialects*/#define kOSASelectSetCurrentDialect                                                    0x0701#define kOSASelectGetCurrentDialect                                                    0x0702#define kOSASelectAvailableDialects                                                    0x0703#define kOSASelectGetDialectInfo                                                    0x0704#define kOSASelectAvailableDialectCodeList                                                     0x0705/*executing Apple event handlers in script contexts*/#define kOSASelectSetResumeDispatchProc                                                        0x0801#define kOSASelectGetResumeDispatchProc                                                        0x0802#define kOSASelectExecuteEvent                                                        0x0803#define kOSASelectDoEvent                                                        0x0804#define kOSASelectMakeContext                                                        0x0805/*scripting-component-specific selectors are added beginning with this *//* value*/#define kOSASelectComponentSpecificStart                                                         0x1001/********AppleScript component constants********/#define     typeAppleScript                                                        'ascr'/*Component Manager subtype for AppleScript component*/#define     kAppleScriptSubtype                                                        typeAppleScript/*AppleScript constant for storage descriptor records*/#define     typeASStorage                                                        typeAppleScript/*AppleScript constant for the selector parameter of OSAGetScriptInfo*/#define kASHasOpenHandler                                                            'hsod'/*AppleScript component selectors*/#define kASSelectInit                                                            0x1001#define kASSelectSetSourceStyles                                                            0x1002#define kASSelectGetSourceStyles                                                            0x1003#define kASSelectGetSourceStyleNames                                                            0x1004/*default initialization parameters for AppleScript*/#define kASDefaultMinStackSize                                                            1 * 1024#define kASDefaultPreferredStackSize                                                            4 * 1024#define kASDefaultMaxStackSize                                                            16 * 1024#define kASDefaultMinHeapSize                                                            4 * 1024#define kASDefaultPreferredHeapSize                                                            64 * 1024#define kASDefaultMaxHeapSize                                                            32 * 1024 * 1024/*AppleScript source style flags*/#define kASSourceStyleUncompiledText                                                             0#define kASSourceStyleNormalText                                                            1#define kASSourceStyleLanguageKeyword                                                            2#define kASSourceStyleApplicationKeyword                                                            3#define kASSourceStyleComment                                                            4#define kASSourceStyleLiteral                                                            5#define kASSourceStyleUserSymbol                                                            6#define kASSourceStyleObjectSpecifier                                                            7#define kASNumberOfSourceStyles                                                            8/*if selector parameter of kOSAScriptError is kOSAErrorNumber, AppleScript *//* component may return any of these error codes*/ #define errASCantConsiderAndIgnore                                                                -2720#define errASCantCompareMoreThan32k                                                                -2721#define errASCantCompareMixedScripts                                                                 -2722#define errASTerminologyNestingTooDeep                                                                 -2760#define errASInconsistentNames                                                                 -2780 /*English dialect*//*******generic scripting component constants*******//*component version this header file describes*/kGenericComponentVersion                                                                 0x0100/*generic scripting component selectors*/#define kGSSSelectGetDefaultScriptingComponent                                                                0x1001#define kGSSSelectSetDefaultScriptingComponent                                                                 0x1002#define kGSSSelectGetScriptingComponent                                                                0x1003#define kGSSSelectGetScriptingSystemFromStored                                                                0x1004#define kGSSSelectGenericToRealID                                                                0x1005#define kGSSSelectRealToGenericID                                                                0x1006Data Typestypedef unsigned long                                            OSAID    ;                    /*script ID*/typedef ComponentResult                                             OSAError        ;                /*type for result codes*//*pointers for application-defined functions*/typedef pascal OSErr (*OSAActiveProcPtr) (long refCon);typedef pascal OSErr (*AESendProcPtr)                                      (const AppleEvent                *            theAppleEvent,                                        AppleEvent* reply, AESendMode                             sendMode,                                        AESendPriority sendPriority,                                        long timeOutInTicks, IdleProcPtr             idleProc,                                        EventFilterProcPtr filterProc, long                             refCon);typedef pascal OSErr (*AECreateAppleEventProcPtr)                                                              (AEEventClass theAEEventClass,                                        AEEventID theAEEventID,                                        const AEAddressDesc*                            target, short returnID,                                        long transactionID, AppleEvent*             result,                                        long refCon);typedef pascal OSErr (*AEHandlerProcPtr)                                      (const AppleEvent* the AppleEvent,                                        AppleEvent* reply, long refCon);/*generic scripting component data types*/typedef OSType ScriptingComponentSelector;typedef OSAID GenericID;Required Scripting Component RoutinesSaving and Loading Script Datapascal OSAError OSAStore    (ComponentInstance scriptingComponent, OSAID scriptID, DescType desiredType,long modeFlags, AEDesc* resultingScriptData);pascal OSAError OSALoad    (ComponentInstance scriptingComponent, const AEDesc* scriptData, long modeFlags,OSAID* resultingScriptID);Executing and Disposing of Scriptspascal OSAError OSAExecute    (ComponentInstance scriptingComponent,OSAID compiledScriptID, OSAID contextID,long modeFlags, OSAID* resultingScriptValueID    );pascal OSAError OSADisplay    (ComponentInstance scriptingComponent,OSAID scriptValueID, DescType desiredType,long modeFlags, AEDesc* resultingText);pascal OSAError OSAScriptError(ComponentInstance scriptingComponent,OSType selector, DescType desiredType,AEDesc* resultingErrorDescription);pascal OSAError OSADispose    (ComponentInstance scriptingComponent, OSAID scriptID);Setting and Getting Script Informationpascal OSAError OSASetScriptInfo(ComponentInstance scriptingComponent,OSAID scriptID, OSType selector, long value);pascal OSAError OSAGetScriptInfo(ComponentInstance scriptingComponent,OSAID scriptID, OSType selector, long* result);Manipulating the Active Functionpascal OSAError OSASetActiveProc(ComponentInstance scriptingComponent,OSAActiveProcPtr activeProc, long refCon);pascal OSAError OSAGetActiveProc(ComponentInstance scriptingComponent,OSAActiveProcPtr* activeProc, long* refCon);Optional Scripting Component RoutinesCompiling Scriptspascal OSAError OSAScriptingComponentName(ComponentInstance scriptingComponent,AEDesc* resultingScriptingComponentName);pascal OSAError OSACompile    (ComponentInstance scriptingComponent, const AEDesc* sourceData,long modeFlags,OSAID* previousAndResultingScriptID);pascal OSAError OSACopyID    (ComponentInstance scriptingComponent,OSAID fromID, OSAID* toID);Getting Source Datapascal OSAError OSAGetSource(ComponentInstance scriptingComponent,OSAID scriptID, DescType desiredType,AEDesc* resultingSourceData);Coercing Script Valuespascal OSAError OSACoerceFromDesc(ComponentInstance scriptingComponent,const AEDesc* scriptData, long modeFlags,OSAID* resultingScriptValueID);pascal OSAError OSACoerceToDesc(ComponentInstance scriptingComponent,OSAID scriptValueID, DescType desiredType,long modeFlags, AEDesc* result);Manipulating the Create and Send Functionspascal OSAError OSASetCreateProc(ComponentInstance scriptingComponent,AECreateAppleEventProcPtr createProc,long refCon);pascal OSAError OSAGetCreateProc(ComponentInstance scriptingComponent,AECreateAppleEventProcPtr* createProc,long* refCon);pascal OSAError OSASetSendProc(ComponentInstance scriptingComponent,AESendProcPtr sendProc, long refCon);pascal OSAError OSAGetSendProc(ComponentInstance scriptingComponent,AESendProcPtr* sendProc, long* refCon);pascal OSAError OSASetDefaultTarget(ComponentInstance scriptingComponent,const AEAddressDesc* target);Recording Scriptspascal OSAError OSAStartRecording(ComponentInstance scriptingComponent,OSAID* compiledScriptToModifyID);pascal OSAError OSAStopRecording(ComponentInstance scriptingComponent, OSAID compiledScriptID);Executing Scripts in One Steppascal OSAError OSALoadExecute(ComponentInstance scriptingComponent,const AEDesc* scriptData, OSAID contextID,long modeFlags, OSAID* resultingScriptValueID);pascal OSAError OSACompileExecute(ComponentInstance scriptingComponent,const AEDesc* sourceData, OSAID contextID,long modeFlags, OSAID* resultingScriptValueID);pascal OSAError OSADoScript    (ComponentInstance scriptingComponent,const AEDesc* sourceData, OSAID contextID,DescType desiredType, long modeFlags,AEDesc* resultingText);Manipulating Dialectspascal OSAError OSASetCurrentDialect(ComponentInstance scriptingComponent,short dialectCode);pascal OSAError OSAGetCurrentDialect(ComponentInstance scriptingComponent,short* resultingDialectCode);pascal OSAError OSAAvailableDialectCodeList(ComponentInstance scriptingComponent                ,AEDesc* resultingDialectCodeList);pascal OSAError OSAGetDialectInfo(ComponentInstance scriptingComponent,short dialectCode, OSType selector,AEDesc* resultingDialectInfo);pascal OSAError OSAAvailableDialects(ComponentInstance scriptingComponent                ,AEDesc* resultingDialectInfoList    );Using Script Contexts to Handle Apple Eventspascal OSAError OSASetResumeDispatchProc(ComponentInstance scriptingComponent    ,AEHandlerProcPtr resumeDispatchProc,long refCon);pascal OSAError OSAGetResumeDispatchProc(ComponentInstance scriptingComponent    ,AEHandlerProcPtr* resumeDispatchProc,long* refCon);pascal OSAError OSAExecuteEvent(ComponentInstance scriptingComponent    ,const AppleEvent* theAppleEvent,OSAID contextID, long modeFlags,OSAID* resultingScriptValueID);pascal OSAError OSADoEvent    (ComponentInstance scriptingComponent    ,const AppleEvent* theAppleEvent,OSAID contextID, long modeFlags,AppleEvent* reply);pascal OSAError OSAMakeContext(ComponentInstance scriptingComponent,const AEDesc* contextName,OSAID parentContext, OSAID* resultingContextID);AppleScript Component RoutinesInitializing AppleScriptpascal OSAError ASInit    (ComponentInstance scriptingComponent        ,long modeFlags, long minStackSize,long preferredStackSize, long maxStackSize,long minHeapSize, long preferredHeapSize,long maxHeapSize);Getting and Setting Styles for Source Datapascal OSAError ASGetSourceStyles(ComponentInstance scriptingComponent,STHandle* resultingSourceStyles);pascal OSAError ASSetSourceStyles(ComponentInstance scriptingComponent,STHandle sourceStyles);pascal OSAError ASGetSourceStyleNames(ComponentInstance scriptingComponent,long modeFlags,AEDescList* resultingSourceStyleNamesList);Generic Scripting Component RoutinesGetting and Setting the Default Scripting Componentpascal OSAError OSAGetDefaultScriptingComponent(ComponentInstance genericScriptingComponent, ScriptingComponentSelector* scriptingSubType);pascal OSAError OSASetDefaultScriptingComponent(ComponentInstance genericScriptingComponent,ScriptingComponentSelector scriptingSubType);Using Component-Specific Routinespascal OSAError OSAGetScriptingComponentFromStored(ComponentInstance genericScriptingComponent,const AEDesc *scriptData, ScriptingComponentSelector scriptingSubType);pascal OSAError OSAGetScriptingComponent(ComponentInstance genericScriptingComponent,ScriptingComponentSelector scriptingSubType,ComponentInstance* scriptingInstance);pascal OSAError OSAGenericToRealID(ComponentInstance genericScriptingComponent,OSAID *theScriptID, ComponentInstance *theExactComponent);pascal OSAError OSARealToGenericID(ComponentInstance genericScriptingComponent,OSAID *theScriptID, ComponentInstance theExactComponent);Routines Used by Scripting ComponentsManipulating Trailers for Generic Storage Descriptor Recordspascal OSErr OSAGetStorageType(Handle scriptData, DescType* type);pascal OSErr OSAAddStorageType(Handle scriptData, DescType type);pascal OSErr OSARemoveStorageType(Handle scriptData);Application-Defined Routinespascal OSErr MyActiveProc    (long refCon);pascal OSErr MyAECreateProc(AEEventClass theAEEventClass,AEEventID theAEEventID, AEAddressDesc target,short returnID, long transactionID,AppleEvent* result, long refCon);pascal OSErr MyAESendProc    (AppleEvent theAppleEvent, AppleEvent* reply,AESendMode sendMode,AESendPriority sendPriority,long timeOutInTicks, IdleProcPtr idleProc,EventFilterProcPtr filterProc, long refCon);pascal OSErr MyResumeDispatch(const AppleEvent* theAppleEvent,AppleEvent* reply, long refCon);Result CodesnoErr    0    No error    errOSACantCoerce     –1700    Same as errAECoercionFail; data could not be coerced to the requested data type    errOSACorruptData    –1702    Same as errAECorruptData     errAEEventNotHandled    –1708    Event wasn’t handled by an Apple event handler    errAERecordingIsAlreadyOn    –1732    Attempt to turn recording on when it is already on for a recording process    errOSASystemError    –1750    General scripting system error    errOSAInvalidID    –1751    Invalid script ID    errOSABadStorageType    –1752    Illegal storage type    errOSAScriptError    –1753    Error occurred during compilation or execution    errOSABadSelector    –1754    Selector not supported by scripting component    errOSASourceNotAvailable    –1756    Source data not available    errOSANoSuchDialect    –1757    Invalid dialect code    errOSADataFormatObsolete    –1758    Data format is obsolete    errOSADataFormatTooNew    –1759    Data format is too new    errOSAComponentMismatch    –1761    Generic scripting component error; parameters are for two different scripting components instead of the same one    errOSACantOpenComponent    –1762    Generic scripting component error; can’t connect to scripting component    badComponentInstance    $80008001    Invalid component instance     Listing 11-0Program-to-Program Communications ToolboxContentsAbout the PPC Toolbox11-4Ports, Sessions, and Message Blocks11-4Setting Up Authenticated Sessions11-6Using the PPC Toolbox11-10PPC Toolbox Calling Conventions11-14Specifying Port Names and Location Names11-17Opening a Port11-20Browsing for Ports Using the Program Linking Dialog Box11-22Obtaining a List of Available Ports11-27Preparing for a Session11-29Initiating a PPC Session11-29Receiving Session Requests11-35Accepting or Rejecting Session Requests11-37Exchanging Data During a PPC Session11-39Reading Data From an Application11-40Sending Data to an Application11-42Ending a Session and Closing a Port11-43Invalidating Users11-44PPC Toolbox Reference11-46Data Structures11-46The PPC Toolbox Parameter Block11-46The PPC Port Record11-48The Location Name Record11-49The Port Information Record11-50PPC Toolbox Routines11-50Initializing the PPC Toolbox11-51Using the Program Linking Dialog Box11-51Obtaining a List of Ports11-54Opening and Closing a Port11-56Starting and Ending a Session11-59Receiving, Accepting, and Rejecting a Session11-66Reading and Writing Data11-71Locating a Default User and Invalidating a User11-75Application-Defined Routines11-77Completion Routines for PPC Toolbox Routines11-77Port Filter Functions11-78Summary of the PPC Toolbox11-80Pascal Summary11-80Constants11-80Data Types11-81PPC Toolbox Routines11-87Application-Defined Routines11-88C Summary11-89Constants11-89Data Types11-90PPC Toolbox Routines11-95Application-Defined Routines11-96Assembly-Language Summary11-96Trap Macros11-96Result Codes11-97Program-to-Program Communications ToolboxThis chapter describes how you can use the Program-to-Program Communications (PPC) Toolbox to send and receive low-level message blocks between applications.The PPC Toolbox can be used by different applications located on the same computer or across a network of Macintosh computers. The PPC Toolbox is available only in System 7 or later. To test for the existence of the PPC Toolbox, use the Gestalt function, described in Inside Macintosh: Operating System Utilities.Read this chapter if you want your application to transmit and receive data from other applications that support the PPC Toolbox. Applications that utilize the PPC Toolbox must be open and connected to each other to exchange data. The PPC Toolbox allows you to send large amounts of data to other applications; it is typically useful for code that is not event-based. The PPC Toolbox is called by the Macintosh Operating System and can also be called by applications, device drivers, desk accessories, or other programs.The PPC Toolbox provides a method of communication that is particularly useful for applications that are specifically designed to work together and are dependent on each other for information. For example, suppose one user organizes large amounts of data using a database application and another user filters and plots the same data using a plotting application. If both applications use the PPC Toolbox, these two applications can directly transmit data to each other when both applications are open and connected to each other.You can also use the PPC Toolbox if your application communicates with other applications using high-level events or Apple events, and your application allows the user to choose another application to communicate with. You can use a PPC Toolbox routine that provides a standard user interface to display a dialog box that lists other applications that are available to exchange information. See “Browsing for Ports Using the Program Linking Dialog Box” beginning on page 11-22 for detailed information. See the chapter “Event Manager” in Inside Macintosh: Macintosh Toolbox Essentials for information on high-level events, and see earlier chapters in this book for information on Apple events. The PPC Toolbox uses the AppleTalk Data Stream Protocol (ADSP) and the Name-Binding Protocol (NBP). For detailed information on ADSP and NBP, see Inside Macintosh: Networking.NoteThe sample applications “store data,” “display data,” “send and receive,” “make memo,” and “spell quick” used in this chapter are not actual products of Apple Computer, Inc. They are used for illustrative purposes only.uAbout the PPC ToolboxThe PPC Toolbox provides you with the ability to n    exchange data with other open applications on the same computer or across a network of Macintosh computersn    browse through a listing of applications that are available to exchange datan    verify user identities for communication across a networkTo utilize the PPC Toolbox to exchange data between open applications, each application involved must support the PPC Toolbox.This chapter first defines the main elements of the PPC Toolbox and then discusses how ton    set up your application for communicationn    use security features prior to establishing communicationn    locate other applications that can exchange datan    initiate communication between applicationsn    accept or reject incoming communications requestsn    transmit and receive data between applicationsn    terminate communication between applicationsPorts, Sessions, and Message BlocksTo initiate communication between applications, you must first open a port. A port is a portal through which your application can exchange information with another application. A port is designated by a port name and a location name.A port name is a unique identifier for a particular application on a computer. The port name contains a name string, a type string, and a script code for localization. The location name identifies the location of the computer on the network. The location name contains an object string, a type string, and a zone. An application can specify an alias location name by modifying its type string.Your application can open as many ports as it requires as long as each port name is unique within a particular computer. See “Specifying Port Names and Location Names” beginning on page 11-17 for detailed information on port names and location names. Through its port, an open application can communicate with another open application during a session. One port can support any number of communication sessions. During a session, an application sends and receives data in the form of a message block. The PPC Toolbox treats each block of data as a byte stream and delivers it in the same sequence in which it was sent.The words port name, location name, session, and message block are programmatic terms. You should not use them in the user interface of your application or in your user documentation. Instead, refer to a file that contains executable code as an application program. An application program that opens and uses PPC ports supports program linking. When you link two application programs together, you are forming a program link. A link allows two application programs to communicate with each other—you unlink two application programs when you break the link between them. You can compare the link between two application programs to the communication established using telephones. For example, a program link is similar to a telephone connection that enables various forms of communication such as human-to-human, modem-to-modem, and facsimile machine–to–facsimile machine.        Figure 11-1 shows a database application on one computer that has initiated a session with a spreadsheet application located on another computer on the network.Figure 11-1    A PPC Toolbox session between two applicationsThe database application’s port name consists of “store data” (the name string) and “database” (the type string). Its location name consists of “Jane Doe’s Macintosh” (the object string), “PPCToolBox” (the type string), and “twilight” (the AppleTalk zone). The spreadsheet application’s port name consists of “display data” (the name string) and “spreadsheet” (the type string). Its location name consists of “Joe Smith’s Macintosh” (the object string), “PPCToolBox” (the type string), and “loading” (the AppleTalk zone).Setting Up Authenticated SessionsNetwork communication must be active to initiate sessions with other computers across a network. The user must activate AppleTalk in the Chooser and enable program linking using the Sharing Setup control panel located in the Control Panels folder inside the System Folder. Figure 11-2 displays the icon for the Sharing Setup control panel. Figure 11-2    The icon for the Sharing Setup control panelFigure 11-3 shows the Sharing Setup control panel.Figure 11-3    The Sharing Setup control panelTo permit other computers to initiate sessions with the owner’s computer, the owner of the computer must click the Start button underneath Program Linking (Start toggles with Stop). The Sharing Setup control panel then indicates “Program linking is on. Click Stop to prevent other users from linking to your shared programs.” To prevent other computers from initiating sessions, an owner simply clicks Stop underneath Program Linking. The Sharing Setup control panel then indicates “Program linking is off. Click Start to allow other users to link to your shared programs.” Clicking the Start or Stop button also enables or disables the transmission of incoming Apple events across the network.If a user clicks the Stop button while there are active incoming sessions (sessions initiated by other users), an alert box (shown in Figure 11-4) appears on the user’s screen.Figure 11-4    The session termination alert boxIf a user clicks OK, all active sessions initiated by other users are immediately terminated. Note that it is still possible for the owner of the computer to initiate sessions, even though other users may not initiate sessions with the owner’s computer.The PPC Toolbox establishes the identity of users through the process of authentication. The authentication mechanism of the PPC Toolbox identifies each user through an assigned name and password. Each session initiated with a port that is located on a remote computer requires authentication (unless guest access is enabled) before a session is permitted. Sessions between applications located on the same computer never require authentication.A computer’s owner can establish access for other users and guests by opening the Users & Groups control panel located in the Control Panels folder. The Users & Groups control panel allows an owner to specify the names and passwords of other users whose computers can initiate sessions with his or her ports across the network. When the computer’s owner opens the Users & Groups control panel, the Guest icon appears. If the owner’s name is specified in the Sharing Setup control panel, an icon with the owner’s name also appears.To specify a particular new user, the owner chooses New User from the File menu. The owner should type in the user’s name. When the owner opens a user icon in the Users & Groups control panel, the Finder displays the users and groups dialog box on the owner’s screen. Figure 11-5 shows the users and groups dialog box for a particular user.Figure 11-5    The users and groups dialog boxTo permit authenticated session requests, the owner can specify a password for each user. The owner allows other users to utilize the PPC Toolbox by clicking the checkbox under Program Linking. If the owner clicks the checkbox again, all active sessions initiated by this particular user are immediately terminated. The user termination alert box (shown in Figure 11-6) is displayed as a warning.Figure 11-6    The user termination alert boxWhen the owner opens a Guest icon in the Users & Groups control panel, the Finder displays the guest dialog box on the owner’s screen. Authentication is not required if the owner permits guest access. Figure 11-7 shows the guest dialog box. Figure 11-7    The guest dialog boxBy clicking the checkbox under Program Linking, the owner permits guests to communicate using the PPC Toolbox or Apple events.Consider this example of the authentication process: one user decides to make a dictionary service available to other users. A second user wishes to employ this service in a word-processing program. Assuming both programs support the PPC Toolbox, the word-processing program attempts to gain access to the dictionary service that is open on the first user’s computer by initiating a session. When the word-processing application requests a session, the PPC Toolbox attempts to authenticate the second user by requesting a user name and a password (unless guest access is enabled). If the authentication process verifies the user’s identity and the dictionary application accepts the request for a session, a session is established and the second user can access the dictionary’s data.Figure 11-8 illustrates the authentication process that occurs when a user attempts to initiate a session.Figure 11-8    The PPC Toolbox authentication processUsing the PPC ToolboxThis section describes how to n    use PPC Toolbox calling conventionsn    open a portn    list all available port locations on the networkn    indicate that a port is available to accept session requestsn    initiate a sessionn    accept and reject session requestsn    read and write data during a sessionn    end a session after data is transmitted and receivedn    close a port when it is no longer needed to transmit or receive datan    invalidate usersTo begin, you must determine whether the PPC Toolbox is available on the user’s computer system by using the Gestalt function with the selector gestaltPPCToolboxAttr. A noErr result code indicates that the PPC Toolbox is present.The Gestalt function returns a combination of the following constants in the response parameter: gestaltPPCToolboxPresent, gestaltPPCSupportsRealTime, gestaltPPCSupportsOutGoing, and gestaltPPCSupportsIncoming.The PPC Toolbox currently supports only sessions in real time. The Gestalt function returns gestaltPPCSupportsRealTime by default. If this bit is not set, you need to initialize the PPC Toolbox.The Gestalt function returns gestaltPPCSupportsOutGoing to indicate support of outgoing sessions across a network of Macintosh computers. If this bit is not set, the user hasn’t enabled AppleTalk in the Chooser.The Gestalt function returns gestaltPPCSupportsIncoming if the user has enabled program linking in the Sharing Setup control panel. If this bit is not set, the user either hasn’t enabled AppleTalk in the Chooser or hasn’t enabled program linking in the Sharing Setup control panel.Use the PPCInit function to initialize the PPC Toolbox.err := PPCInit;Listing 11-1 illustrates how you use the PPCInit function to initialize the PPC Toolbox.Listing 11-1    Initializing the PPC Toolbox using the PPCInit functionFUNCTION MyPPCInit: OSErr;VAR    PPCAttributes: LongInt;    err:                     OSErr;BEGIN    err := Gestalt(gestaltPPCToolboxAttr, PPCAttributes);    IF err = noErr THEN                                        {PPC Toolbox is present}    BEGIN        IF BAND(PPCAttributes, gestaltPPCSupportsRealTime) = 0 THEN        BEGIN                                MyPPCInit := PPCInit;                                {initialize the PPC Toolbox}            {test the attributes for the PPC Toolbox}            err := Gestalt(gestaltPPCToolboxAttr, PPCAttributes);        END;        IF BAND(PPCAttributes, gestaltPPCSupportsOutGoing) <> 0 THEN            {ports can be opened to the outside world}        ELSE            {it's likely that AppleTalk is disabled, so you }            ;        { may want to tell the user to activate AppleTalk }                    { from the Chooser}        IF BAND(PPCAttributes, gestaltPPCSupportsIncoming) <> 0 THEN            {ports can be opened with location names that the }            { outside world can see}        ELSE            {it's likely that program linking is disabled, so }            ;        { you may want to tell the user to start program }                    { linking from the Sharing Setup control panel}    END    ELSE        MyPPCInit := err;END;        Figure 11-9 illustrates a spreadsheet application (on the left) that has initiated a session with a database application (on the right) to exchange data using the PPC Toolbox. This figure includes an example of the sequence of PPC Toolbox routines executed by these applications. Detailed descriptions of the functions appear in the sections that follow.Figure 11-9    Database and spreadsheet applications using the PPC ToolboxTo establish a session, each application must first open a port using the PPCOpen function. The spreadsheet application prepares to receive session requests by calling the PPCInform function. Before initiating a session or opening a port, the database application can let the user browse through the list of available ports (using the PPCBrowser function). If the user decides to communicate with the spreadsheet application, the database application initiates a session with the spreadsheet application’s port using the StartSecureSession function. After the PPC Toolbox authenticates the user name and password of the initiating port, the spreadsheet application accepts the session request (using the PPCAccept function).Once the session is established, the applications exchange information in the form of message blocks (using the PPCRead and PPCWrite functions). During a session, an application can both read from and write message blocks to another application. After the information exchange is done, each application ends the session (PPCEnd) and then closes its port (PPCClose) when it quits.The PPCOpen function returns a port reference number. The port reference number is a reference number for the port through which you are requesting a session. The database application uses the port reference number in subsequent calls to the StartSecureSession and PPCClose functions. The StartSecureSession function returns a session reference number. The session reference number is used to identify the session during the exchange of data. It is used in subsequent calls to the PPCWrite, PPCRead, and PPCEnd functions.The PPCOpen function returns a port reference number that the spreadsheet uses in subsequent calls to the PPCInform and PPCClose functions. The PPCInform function returns a session reference number that is used in subsequent calls to the PPCAccept, PPCRead, PPCWrite, and PPCEnd functions.PPC Toolbox Calling ConventionsMost PPC Toolbox functions can execute synchronously (meaning that the application cannot continue until the function completes execution) or asynchronously (meaning that the application is free to perform other tasks while the function is executing). The PPC Toolbox functions that can only be executed synchronously include PPCInit, PPCBrowser, StartSecureSession, DeleteUserIdentity, and GetDefaultUser. All other PPC Toolbox functions can execute asynchronously or synchronously. Here’s an example: FUNCTION PPCFunction (pb: PPCParamBlockPtr;                              async: Boolean): OSErr;The pb parameter should point to a PPC parameter block. Set the async parameter to TRUE if you want the function to execute asynchronously; set it to FALSE if you want the function to execute synchronously.NoteThe PPCInform, PPCRead, and PPCWrite functions should always be executed asynchronously, because they require interaction from the other application in the session before they complete execution.uThe PPCParamBlockRec data type defines the PPC parameter block.TYPE PPCParamBlockRec =     RECORD        CASE Integer OF        0: (openParam:                            PPCOpenPBRec);                            {PPCOpen params}        1: (informParam:                            PPCInformPBRec);                            {PPCInform params}        2: (startParam:                            PPCStartPBRec);                            {PPCStart params}        3: (acceptParam:                            PPCAcceptPBRec);                            {PPCAccept params}        4: (rejectParam:                            PPCRejectPBRec);                            {PPCReject params}        5: (writeParam:                            PPCWritePBRec);                            {PPCWrite params}        6: (readParam:                            PPCReadPBRec);                            {PPCRead params}        7: (endParam:                            PPCEndPBRec);                            {PPCEnd params}        8: (closeParam:                            PPCClosePBRec);                            {PPCClose params}        9: (listPortsParam:                            IPCListPortsPBRec);                            {IPCListPorts }                                                                { params}    END;For an illustration of the fields of each individual parameter block (such as PPCInformPBRec or IPCListPortsPBRec), see Figure 11-18 on page 11-47.Your application transfers ownership of the PPC parameter block (and any buffers or records pointed to by the PPC parameter block) to the PPC Toolbox until a PPC function completes execution. Once the function completes, ownership of the parameter block (and any buffers or records it points to) is transferred back to your application. If a PPC Toolbox function is executed asynchronously, your program cannot alter memory that might be used by the PPC Toolbox until that function completes.A PPC Toolbox function that is executed asynchronously must specify NIL or the address of a completion routine in the ioCompletion field of the PPC parameter block. You should use the ioResult field to determine the actual result code when an asynchronously executed PPC Toolbox function completes.If you specify NIL in the ioCompletion field, you should poll the ioResult field of the PPC parameter block after the function is called to determine whether the PPC function has completed the requested operation. You should poll the ioResult field within the event loop of your application. If the ioResult field contains a value other than 1, the function has completed execution. Note that you must not poll the ioResult field at interrupt time to determine whether the function has completed execution.If you specify a completion routine in the ioCompletion field, it is called at interrupt time when the PPC Toolbox function completes execution.sWARNINGCompletion routines execute at the interrupt level and must preserve all registers other than A0, A1, and D0–D2. (Note that MPW C and MPW Pascal do this automatically.) Your completion routine must not make any calls to the Memory Manager directly or indirectly, and it can’t depend on the validity of handles to unlocked blocks. The PPC Toolbox preserves the application global register A5.sYou can write completion routines in C, Pascal, or assembly language. A completion routine declared in Pascal has this format:PROCEDURE MyCompletionRoutine (pb: PPCParamBlockPtr);The pb parameter points to the PPC parameter block passed to the PPC Toolbox function.You may call another PPC Toolbox function from within a completion routine, but the function called must be executed asynchronously. It is recommended that you allocate parameter blocks of data type PPCParamBlockRec so that you may reuse the pb parameter to call another PPC Toolbox function from within a completion routine. For example, you should call either the PPCAccept function or the PPCReject function asynchronously from within a PPCInform completion routine to accept or reject the session request.If your application is executing PPC Toolbox functions asynchronously, you may want to define your own record type to hold all data associated with a session. You can attach the data to the end of the parameter block. Here’s an example:TYPE     SessRecHndl = ^SessRecPtr;    SessRecPtr = ^SessRec;    SessRec =     RECORD        pb:                            PPCParamBlockRec;         {must be first }                                                            { item in record}        thePPCPortRec                :            PPCPortRec;        theLocationNameRec:                             LocationNameRec;        theUserName:                             Str32;    END;The additional data elements in your record can be accessed during execution of a completion routine by coercing the pb parameter to a pointer to your record type.Specifying Port Names and Location NamesBefore initiating a session, you must open a port to communicate with other programs. A port name and location name identify each port. An application can open as many ports as it requires as long as each port name is unique within a particular computer. You specify both the port name and the location name in the PPC parameter block.Figure 11-10 illustrates a single Macintosh computer with two applications, and their corresponding port names and location names.To open a port, you need to specify a port name. A port name consists of a name string, a type string, and a script code for localization. For example, you can designate “make memo” as the application’s name string, “word processor” as its type string, and “smRoman” as its script code. A port name is defined by a PPC port record. The PPC port record contains a script code, name string, port kind selector, and type string. The script code is an integer script identifier used for localization. The name string consists of a 32-byte character string that designates the application name. You should keep both the script code and the name string in a resource. The port kind selector is an integer that selects the kind of type string. You should make it consistent internationally. The type string can be either a 32-byte character string or a 4-character creator and a 4-character file type. See the chapter “Finder Interface” of Inside Macintosh: Macintosh Toolbox Essentials for information on creators and file types. See Inside Macintosh: Text for information on script codes and localization.Figure 11-10    Two Macintosh applications and their corresponding portsThe PPCPortRec data type defines the PPC port record.TYPE PPCPortRec =     RECORD        nameScript:                        ScriptCode;                        {script identifier}        name:                        Str32;                        {port name in program }                                                         { linking dialog box}        portKindSelector:                        PPCPortKinds;                        {general category of }                                                        { application}        CASE PPCPortKinds OF                                ppcByString:                        (portTypeStr: Str32);                                ppcByCreatorAndType:                                                         (portCreator: OSType;                                                        portType: OSType);    END;The location name identifies the location of the computer on the network. The PPC Toolbox provides the location name when the user starts up the computer. The location name is specified in the standard Name-Binding Protocol (NBP) form, <object string>:PPCToolBox @<AppleTalk zone>. The object string is the name provided in the Sharing Setup control panel in the Control Panels folder. By default, the type string is “PPCToolBox”. The AppleTalk zone is the zone to which the particular Macintosh computer belongs. For example, “Jane Doe’s Macintosh:PPCToolBox@twilight” specifies the object string, type string, and AppleTalk zone for a particular computer.The LocationNameRec data type defines the location name record. The locationKindSelector field can be set to ppcNoLocation, ppcNBPLocation, or ppcNBPTypeLocation.TYPE LocationNameRec =     RECORD        locationKindSelector: PPCLocationKind;                                                        {which variant}        CASE PPCLocationKind OF            {ppcNoLocation: storage not used by this value}            ppcNBPLocation:                                                                                 (nbpEntity: EntityName); {NBP name entity}            ppcNBPTypeLocation:                                                                (nbpType: Str32);                        {just the NBP type }                                                        { string for the }                                                        { PPCOpen function}    END;The ppcNoLocation constant is used when the location received from or passed to a PPC Toolbox function is the location of the local machine.The ppcNBPLocation constant is used when a full NBP entity name is received from or passed to a PPC Toolbox function.NoteYou should assign an NBP value directly—do not pack it using nbpSetEntity.uThe ppcNBPTypeLocation constant is used only by the PPCOpen function when an alias location name is needed.The NBP type to be used for the alias location name is passed in the location name record’s nbpType field. Alias location names allow you to filter the NBP objects (Macintosh computers) displayed by the program linking dialog box (shown in Figure 11-12 on page 11-22) using the PPCBrowser function. See “Browsing for Ports Using the Program Linking Dialog Box” beginning on page 11-22 for information on the PPCBrowser function.An alias location name could be used to advertise a service (such as a dictionary service) that is available to any application located on the network. For example, “Joe Smith’s Macintosh: dictionary@ozone” specifies the object string, type string, and AppleTalk zone for a particular dictionary service.To search for all dictionary services available within a zone, you use the PPCBrowser function and a filter. Figure 11-11 illustrates a Macintosh dictionary service application, its corresponding port name, and its alias location name.Figure 11-11    The PPC Toolbox and a dictionary service applicationOpening a PortTo open a port and associate a name with it, use the PPCOpen function. Listing 11-2 illustrates how you use the PPCOpen function to open a port. In this listing, the name is “Inside Macintosh” and the port type string is “Example”. The location name is <object string>:PPC Example@<AppleTalk zone>.Listing 11-2    Opening a PPC portFUNCTION MyPPCOpen(VAR thePortRefNum: PPCPortRefNum;                         VAR nbpRegisteredFlag: Boolean): OSErr;VAR    thePPCOpenPBRec:                                 PPCOpenPBRec;    thePPCPortRec:                                 PPCPortRec;    theLocationNameRec:                                 LocationNameRec;BEGIN    WITH thePPCPortRec DO    BEGIN        {nameScript and name should be resources to allow }        { easy localization}        nameScript := smRoman;                                {Roman script}        name := 'Inside Macintosh';        {the port type should always be hard-coded to allow the }        { application to find ports of a particular type even }        { after the name is localized}        portKindSelector := ppcByString;        portTypeStr := 'Example';    END;    WITH theLocationNameRec DO    BEGIN        locationKindSelector := ppcNBPTypeLocation;        nbpType := 'PPC Example';    END;    WITH thePPCOpenPBRec DO    BEGIN        serviceType := ppcServiceRealTime;        resFlag := 0;                                            {must be 0 for 7.0}        portName := @thePPCPortRec;        locationName := @theLocationNameRec;        networkVisible := TRUE;                                            {make this a visible }                                                    { entity on the network}    END;    MyPPCOpen := PPCOpen(@thePPCOpenPBRec, FALSE);    {synchronous}    thePortRefNum := thePPCOpenPBRec.portRefNum;    nbpRegisteredFlag := thePPCOpenPBRec.nbpRegistered;END;The PPCOpen function opens a port with the port name and location name specified in the name and location fields of the parameter block. When the PPCOpen function completes execution, the portRefNum field returns the port reference number. You can use the port reference number in the PPCInform, PPCStart, StartSecureSession, and PPCClose functions to refer to the port you have opened.Browsing for Ports Using the Program Linking Dialog BoxBefore initiating a session, you can use either the PPCBrowser function or the IPCListPorts function to locate a port to communicate with.Use the PPCBrowser function to display the program linking dialog box (shown in Figure 11-12) on the user’s screen.NoteBecause this function displays a dialog box on the user’s screen, you must not call the PPCBrowser function from an application that is running in the background.uFigure 11-12    The program linking dialog boxIn the program linking dialog box, the user selects the computer, zone, and application. The zone list is not displayed if there is no network connection. Figure 11-13 shows the dialog box without the zone list.Figure 11-13    The program linking dialog box without a zone listAs shortcuts for the user, the program linking dialog box supports standard keyboard equivalents. Pressing Command-period or the Esc (Escape) key selects Cancel—pressing Enter or Return selects the OK button.Each list is sorted in alphabetical order. As in the Chooser, the current list is indicated by a thick outline around its border. The program linking dialog box supports keyboard navigation and use of the arrow keys to select items from the current list. Pressing Tab or clicking the rectangle of another list switches the current list. Pressing Shift-Tab reverses the order in which the lists are selected. In addition, double-clicking an application name in the Programs list of the program linking dialog box is equivalent to clicking the OK button.The PPCBrowser function allows users to browse for PPC ports.err := PPCBrowser (prompt, applListLabel, defaultSpecified,                          theLocation, thePortInfo, portFilter,                          theLocNBPType);If the defaultSpecified parameter is TRUE, the PPCBrowser function tries to select the PPC port specified by the parameters theLocation and thePortInfo when the program linking dialog box first appears. If the default cannot be found, the PPCBrowser function selects the first PPC port in the list.An application can open multiple ports as long as each port name is unique within a particular computer. Unique ports can have duplicate name fields but different types. For example, you can designate “make memo” as the application’s name string and “word processor” as its type string. You can also designate a separate port as “make memo” (the application’s name string) and “text only” (its type string).In such a case, the PPCBrowser function does a secondary sort based on the port type. Ports with a type selector of ppcByCreatorAndType are displayed before ppcByString ports, and types are sorted alphabetically within each type selector.The PPCBrowser function uses the IPCListPorts function to obtain the list of existing ports on a particular computer within a particular zone. The portFilter parameter of the PPCBrowser function allows you to filter the list of PPC ports before it displays them in the program linking dialog box. If you set the portFilter parameter to NIL, the PPCBrowser function displays the names of all the existing PPC ports returned by the IPCListPorts function. If you do not set the portFilter parameter to NIL, you must set it to a pointer to a port filter function that you create.Listing 11-3 illustrates how you use a sample port filter function. In this listing, the MyBrowserPortFilter function returns TRUE for ports with the port type string “Example”.Listing 11-3    Using a port filter functionFUNCTION MyBrowserPortFilter(theLocationNameRec: LocationNameRec;                                      thePortInfoRec: PortInfoRec)                                      : Boolean;BEGIN    IF thePortInfoRec.name.portKindSelector = ppcByString THEN        IF thePortInfoRec.name.portTypeStr = 'Example' THEN            MyBrowserPortFilter := TRUE        ELSE             MyBrowserPortFilter := FALSE    ELSE         MyBrowserPortFilter := FALSE;END;The PPCBrowser function calls your filter function once for each port on the selected computer. Your function should return TRUE for each port you want to display in the program linking dialog box, and FALSE for each port that you do not want to display. Do not modify the data in the filter function parameters theLocationNameRec and thePortInfoRec. The PPCBrowser function returns the selected port name in the parameter thePortInfo. The IPCListPorts function returns the port names in the area of memory pointed to by the bufferPtr field of the IPCListPorts parameter block. Both functions specify each port name in a port information record.TYPE PortInfoRec =    RECORD        filler1:                    SignedByte;                        {space holder}        authRequired:                    Boolean;                        {authentication required}        name:                    PPCPortRec;                        {port name}    END;If the authRequired field returns TRUE, the port requires authentication before a session can begin. You should use the StartSecureSession function to initiate a session with this port. If this field returns FALSE, you can use either the PPCStart function or the StartSecureSession function to initiate a session. See “Initiating a PPC Session” beginning on page 11-29 for detailed information. The name field of the port information record specifies an available port name.Listing 11-4 illustrates how you use the PPCBrowser function to display the program linking dialog box in order to obtain the location and name of a port chosen by the user. In this listing, the PPCBrowser function builds lists of zones (shown in the AppleTalk Zones list of the program linking dialog box), objects (shown in the Macintoshes list), and ports (shown in the Programs list). In this example, the PPCBrowser function next tries to default to object “Moof™” in the “Twilight” zone. If it matches the object and zone, it also tries to default to the port “Inside Macintosh” with the port type “Example”.Note that the data in the records LocationNameRec and PortInfoRec is used to match the names in the program linking dialog box. The data has nothing to do with the NBP type used by NBPLookup or the filtered PPC ports that show up in the program linking dialog box. The NBPLookup function uses the NBP type supplied in theLocNBPType. The PPC port names are filtered using the MyBrowserPortFilter function shown in Listing 11-3 on page 11-24.Listing 11-4    Browsing through dictionary service portsFUNCTION MyPPCBrowser(VAR theLocationNameRec: LocationNameRec;                             VAR thePortInfoRec: PortInfoRec): OSErr;VAR    prompt:                             Str255;    applListLabel:                             Str255;    defaultSpecified:                             Boolean;    theLocNBPType:                             Str32;BEGIN    prompt := 'Choose an example to link to:';    applListLabel := 'Examples';    defaultSpecified := TRUE;    WITH theLocationNameRec DO    BEGIN        locationKindSelector := ppcNBPLocation;        WITH nbpEntity DO        BEGIN            objStr := 'Moof™';            {typeStr is ignored}            zoneStr := 'Twilight';        END;    END;    WITH thePortInfoRec.name DO    BEGIN        {nameScript and name should be resources to allow easy }        { localization}        nameScript := smRoman;                                {Roman script}        name := 'Inside Macintosh';        {the port type should always be hard-coded to allow the }        { application to find ports of a particular type even }        { after the name is localized}        portKindSelector := ppcByString;        portTypeStr := 'Example';    END;    {when building the list of objects (Macintoshes), }    { show only those with the NBP type "PPC Example"}    theLocNBPType := 'PPC Example';                                            {match this NBP type}    MyPPCBrowser := PPCBrowser(prompt, applListLabel,                                         defaultSpecified,                                        theLocationNameRec,                                        thePortInfoRec,                                        @MyBrowserPortFilter,                                        theLocNBPType);END;Obtaining a List of Available PortsTo generate a list of ports without displaying dialog boxes, you can use the IPCListPorts function. The IPCListPorts function allows you to obtain a list of ports on a particular computer within a particular zone. To obtain a list of ports, several steps are required. First, use the GetZoneList function to obtain a list of zones. Next, you must use the PLookupName function to obtain a list of computers with ports. After establishing the zone and the computer, you can use the IPCListPorts function to obtain the list of available ports. See Inside Macintosh: Networking for information on the GetZoneList and PLookupName functions.Listing 11-5 illustrates how you use the IPCListPorts function to obtain a list of ports on a particular computer. This function returns a list of port information records in the buffer pointed to by the parameter thePortInfoBufferPtr. The actual number of port information records is returned in the parameter theActualCount.Listing 11-5    Using the IPCListPorts function to obtain a list of portsFUNCTION MyIPCListPorts             (theStartIndex: Integer;              theRequestCount: Integer; VAR theActualCount: Integer;              theObjStr: Str32; theZoneStr: Str32;              thePortInfoBufferPtr: PortInfoArrayPtr): OSErr;VAR    theIPCListPortsPBRec:                                     IPCListPortsPBRec;    thePPCPortRec:                                     PPCPortRec;    theLocationNameRec:                                    LocationNameRec;BEGIN    {list all PPC ports at the specified location}    WITH thePPCPortRec DO    BEGIN        nameScript := smRoman;        name := '=';                            {match all names}        portKindSelector := ppcByString;        portTypeStr := '=';                            {match all types}     END;    WITH theLocationNameRec DO    BEGIN        locationKindSelector := ppcNBPLocation;        WITH nbpEntity DO        BEGIN            {set NBP object from the list returned by NBPLookup}            objStr := theObjStr;            {set NBP type, in this example to "PPC Example"; if you }            { don't supply your own NBP type, use "PPCToolBox"}            typeStr := 'PPC Example';            {set NBP zone from the list returned by GetZoneList}            zoneStr := theZoneStr;        END;    END;    WITH theIPCListPortsPBRec DO    BEGIN        startIndex := theStartIndex;        requestCount := theRequestCount;        portName := @thePPCPortRec;        locationName := @theLocationNameRec;        bufferPtr := thePortInfoBufferPtr;    END;    MyIPCListPorts := IPCListPorts(@theIPCListPortsPBRec, FALSE);    theActualCount := theIPCListPortsPBRec.actualCount;END;The IPCListPorts function returns information about ports that are on the computer specified in the locationName field of the list ports parameter block. If you set the locationName field to NIL or if you set the locationKindSelector field in the location name record to ppcNoLocation, the IPCListPorts function returns only the port names for the local computer.The bufferPtr field points to an area of memory that contains the requested port names. You are responsible for allocating enough memory to hold the requested port names. The buffer length must be equal tosizeof(PortInfoRec) * requestCountPreparing for a SessionTo communicate, you can open a port for your application and make it available to receive session requests, to initiate sessions, or both. Applications that are able to receive session requests can choose to accept or reject incoming session requests. Before an application can accept and establish a session with another application, the PPC Toolbox authenticates the initiating user (unless guest access is enabled or the applications are located on the same computer). Once a session begins, the two applications can exchange data with each other. Initiating a PPC SessionOnce you have established the name and the location of the port that you want to communicate with, you can initiate a session. You can use either the StartSecureSession function or the PPCStart function to initiate a session. The StartSecureSession function displays several dialog boxes to identify each user who requests a session. You may prefer to use the PPCStart function for low-level code such as that used for drivers, which typically do not provide a user interface. You may also prefer to use PPCStart when the application you are initiating a session with does not require authentication. The IPCListPorts and PPCBrowser functions return information about whether a particular port requires authentication.NoteDo not call the StartSecureSession function from an application that is running in the background, because the function displays several dialog boxes on the user’s screen.uThe StartSecureSession function provides authentication services to identify each user who requests a session. This function combines the processes of prompting for user name and password and initiating a session into one synchronous procedure call. If authentication fails, the PPC Toolbox rejects the incoming session request.err := StartSecureSession (pb, userName, useDefault, allowGuest,                                     guestSelected, prompt);Set the useDefault parameter to TRUE if you want the StartSecureSession function to use the default user identity (described later in this section). If the default user identity cannot be authenticated, the StartSecureSession function displays a dialog box to allow a user to log on. Figure 11-14 shows the user identity dialog box.Figure 11-14    The user identity dialog boxThe prompt parameter of the StartSecureSession function allows you to specify a line of text that the dialog box can display. The allowGuest parameter specifies whether to enable the Guest radio button. If a port requires authentication, you should set this parameter to FALSE.The userName parameter specifies the name of the user who is attempting to initiate a session. If the user name is not specified, the user identity dialog box appears on the user’s screen with the owner name provided from the Sharing Setup control panel. If the user enters an invalid password, the StartSecureSession function displays the dialog box shown in Figure 11-15.Figure 11-15    The incorrect password dialog boxAfter the user clicks OK, the user identity dialog box reappears in the foreground so that the user can enter the password again.If the user’s name is invalid, the StartSecureSession function displays the dialog box shown in Figure 11-16.Figure 11-16    The invalid user name dialog boxAfter the user clicks OK, the user identity dialog box reappears so that the user can enter a new user name.The StartSecureSession function remains in this loop until a secure session is initiated or the user clicks Cancel in the user identity dialog box. If a secure session is initiated, StartSecureSession returns the user reference number in the corresponding field in the PPCStart parameter block. The user reference number represents the user name and password. A user reference number of 0 indicates that a session has been initiated with guest access. See “Setting Up Authenticated Sessions” beginning on page 11-6 for more information.Before your application quits, you need to invalidate all user reference numbers obtained with the StartSecureSession function except for the default user reference number and the guest reference number (0). See “Invalidating Users” on page 11-44 for detailed information.Listing 11-6 illustrates how to use the StartSecureSession function to establish an authenticated session. This listing shows only one session, although your application may conduct multiple sessions at one time.Listing 11-6    Using the StartSecureSession function to establish a sessionFUNCTION MyStartSecureSession(thePortInfoPtr: PortInfoPtr;                                         theLocationNamePtr: LocationNamePtr;                                         thePortRefNum: PPCPortRefNum;                                         VAR theSessRefNum: PPCSessRefNum;                                         VAR theUserRefNum: LongInt;                                         VAR theRejectInfo: LongInt;                                         VAR userName: Str32;                                         VAR guestSelected: Boolean): OSErr;VAR    thePPCStartPBRec: PPCStartPBRec;    useDefault:                         Boolean;    allowGuest:                         Boolean;    err:                         OSErr;BEGIN    WITH thePPCStartPBRec DO    BEGIN        ioCompletion := NIL;        portRefNum := thePortRefNum;                                            {from the PPCOpen function}        serviceType := ppcServiceRealTime;        resFlag := 0;        portName := @thePortInfoPtr^.name;                                                 {from the PPCBrowser}        locationName := theLocationNamePtr;     {from the PPCBrowser}        userData := 0;                        {application-specific data that the }                                { PPCInform function sees}    END;    {try to connect with default user identity}    useDefault := TRUE;    {highlight the Guest button appropriately}    allowGuest := NOT thePortInfoPtr^.authRequired;    err := StartSecureSession(@thePPCStartPBRec, userName,                                       useDefault, allowGuest,                                      guestSelected, stringPtr(NIL)^);    IF err = noErr THEN    BEGIN        theSessRefNum := thePPCStartPBRec.sessRefNum;        theUserRefNum := thePPCStartPBRec.userRefNum;    END    ELSE        IF err = userRejectErr THEN            {return rejectInfo from the PPCReject function}            theRejectInfo := thePPCStartPBRec.rejectInfo;    MyStartSecureSession := err;END;For low-level code such as that used for drivers (which typically do not provide a user interface), you can use the PPCStart function instead of the StartSecureSession function to initiate a session. You can also use the IPCListPorts function (instead of displaying the program linking dialog box) to obtain a list of ports.If the authRequired field of the port information record contains FALSE, the port allows guest access. If the authRequired field of the port information record contains TRUE, use the PPCStart function and the user reference number obtained previously from the StartSecureSession function to reestablish an authenticated session.You can also attempt to log on as the default user using the GetDefaultUser function to obtain the default user reference number and the default user name. The default user name is established after the owner starts up the computer.err := GetDefaultUser (userRef, userName);The userRef parameter is a reference number that represents the user name and password of the default user. The userName parameter contains the owner name that is specified in the Sharing Setup control panel.The GetDefaultUser function returns an error when the default user identity does not exist (no name is specified in the Sharing Setup control panel) or the user is not currently logged on.Listing 11-7 illustrates how you use the PPCStart function to initiate a session. The PPCStart function uses the port information record and the location name record to attempt to open a session with the selected PPC port.Listing 11-7    Initiating a session using the PPCStart functionFUNCTION MyPPCStart(thePortInfoPtr: PortInfoPtr;                             theLocationNamePtr: LocationNamePtr;                             thePortRefNum: PPCPortRefNum;                             VAR theSessRefNum: PPCSessRefNum;                             VAR theUserRefNum: LongInt;                             VAR theRejectInfo: LongInt): OSErr;VAR    thePPCStartPBRec: PPCStartPBRec;    userName:                         Str32;    err:                         OSErr;BEGIN    WITH thePPCStartPBRec DO    BEGIN        ioCompletion := NIL;         portRefNum := thePortRefNum;                                            {from the PPCOpen function}        serviceType := ppcServiceRealTime;        resFlag := 0;        portName := @thePortInfoPtr^.name;                                                 {destination port}        locationName := theLocationNamePtr;                                                 {destination location}        userData := 0;                        {application-specific data for PPCInform}    END;    err := GetDefaultUser(thePPCStartPBRec.userRefNum, userName);    IF err <> noErr THEN        thePPCStartPBRec.userRefNum := 0;    IF thePortInfoPtr^.authRequired AND         (thePPCStartPBRec.userRefNum = 0) THEN        {port selected doesn't allow guests & you don't have a }        { default user ref number so you can't log on to this port}        err := authFailErr    ELSE        {attempt to log on}        err := PPCStart(@thePPCStartPBRec, FALSE);    IF err = noErr THEN    BEGIN        theSessRefNum := thePPCStartPBRec.sessRefNum;        theUserRefNum := thePPCStartPBRec.userRefNum;    END    ELSE        IF err = userRejectErr THEN            {return rejectInfo from the PPCReject function}            theRejectInfo := thePPCStartPBRec.rejectInfo;    MyPPCStart := err;END;The port to which you wish to connect must have an outstanding PPCInform function to successfully start a session. You cannot initiate a session with a port that is not able to receive session requests. If the port is open, has an outstanding PPCInform function posted, and accepts your session request, the PPCStart function returns a noErr result code and a valid session reference number. This session reference number is used to identify the session during the exchange of data.Receiving Session RequestsYour application can open as many ports as it requires as long as each port name is unique within a particular computer. A single port can support a number of communication sessions. To allow a port to receive session requests, use the PPCInform function. (Note that you must open a port to obtain a port reference number before calling the PPCInform function.) A port may have any number of outstanding PPCInform requests.Listing 11-8 illustrates how you use the PPCInform function to allow a port to receive session requests. In this listing, the parameter thePPCParamBlockPtr points to a PPC parameter block record allocated by the application. The portRefNum, autoAccept, portName, locationName, userName, and ioCompletion parameters of the PPC parameter block record must be supplied. If you want to automatically accept all incoming session requests, you can set the autoAccept field in the PPCInform parameter block. Listing 11-8    Using the PPCInform function to enable a port to receive sessionsFUNCTION MyPPCInform(thePPCParamBlockPtr: PPCParamBlockPtr;                             thePPCPortPtr: PPCPortPtr;                            theLocationNamePtr: LocationNamePtr;                             theUserNamePtr: stringPtr;                             thePortRefNum: PPCPortRefNum): OSErr;BEGIN    WITH thePPCParamBlockPtr^.informParam DO    BEGIN        ioCompletion := @MyInformCompProc;        portRefNum := thePortRefNum;                                        {from the PPCOpen function}        autoAccept := FALSE;                                        {the completion routine }                                                { handles accepting or }                                                { rejecting requests}        portName := thePPCPortPtr;        locationName := theLocationNamePtr;        userName := theUserNamePtr;    END;    MyPPCInform := PPCInform(PPCInformPBPtr(thePPCParamBlockPtr),                                        TRUE);            {asynchronous}END;A PPC parameter block record is used instead of a PPCInform parameter block record so that the same parameter block can be reused to make other PPC Toolbox calls from the PPCInform completion routine. The parameter block and the records it points to cannot be deallocated until all calls that use the parameter block and records have completed.You should make the call to PPCInform asynchronously. For each function that you use asynchronously, you should provide a completion routine. The completion routine gets called at interrupt time when the PPCInform function completes.Listing 11-9 illustrates a completion routine for a PPCInform function. You can use the data passed into your PPCInform completion routine (user name, user data, port name, and location name) to determine whether to accept or reject the session request.Listing 11-9    Completion routine for a PPCInform functionPROCEDURE MyInformCompProc(pb: PPCParamBlockPtr);BEGIN    IF pb^.informParam.ioResult = noErr THEN    BEGIN        {decide if this session should be accepted or rejected by }        { looking at data supplied by the session requester}        IF pb^.informParam.userData <> -1 THEN            DoPPCAccept(pb)        ELSE            DoPPCReject(pb);    END    ELSE        {use a global to tell the application that }        { PPCParamBlockRec and the records it points to }        { can be deallocated}        gPBInUse := FALSE;END;When the PPCInform function completes, the MyInformCompProc procedure determines whether to accept or reject the incoming session request. It does this by calling PPCAccept or PPCReject, as described in the next section.Accepting or Rejecting Session RequestsUse the PPCAccept function or the PPCReject function to accept or reject an incoming session request.sWARNINGIf the PPCInform function (with the autoAccept parameter set to FALSE) returns a noErr result code, you must call either the PPCAccept function or the PPCReject function. The computer trying to initiate a session (using the StartSecureSession function or the PPCStart function) waits (hangs) until the session attempt is either accepted or rejected, or until an error occurs.sListing 11-10 illustrates how you use the PPCAccept function to accept a session request. This listing reuses the parameter block used in the PPCInform function, so the sessRefNum field already contains the session reference number needed by the PPCAccept function.Listing 11-10    Accepting a session request using the PPCAccept functionPROCEDURE DoPPCAccept(pb: PPCParamBlockPtr);VAR    err:        OSErr;BEGIN        {accept the session}    pb^.acceptParam.ioCompletion := @MyAcceptCompProc;    {the sessRefNum field is set by the PPCInform function}    err := PPCAccept(@pb^.acceptParam, TRUE);                                                        {asynchronous}END;For each function that you use asynchronously, you should provide a completion routine. Listing 11-11 illustrates a completion routine for a PPCAccept function. This procedure gets called at interrupt time when the PPCAccept function completes. If there are no errors, it sets the global variable gSessionOpen to TRUE. The global variable gPBInUse is set to FALSE to inform the application that the parameter block and the records it points to are no longer in use.You can use the session reference number in subsequent PPCWrite, PPCRead, and PPCEnd functions once a session is accepted.Listing 11-11    Completion routine for a PPCAccept functionPROCEDURE MyAcceptCompProc(pb: PPCParamBlockPtr);BEGIN    IF pb^.acceptParam.ioResult = noErr THEN        {accept completed so the session is completely open}        gSessionOpen := TRUE;    {use a global to tell the application that PPCParamBlockRec }    { and the records it points to can be deallocated}    gPBInUse := FALSE;END;Use the PPCReject function to reject an incoming session request. Listing 11-12 illustrates how you use the PPCReject function to reject a session request. This listing reuses the parameter block used in the PPCInform function, so the sessRefNum field already contains the session reference number needed by the PPCReject function.Listing 11-12    Rejecting a session request using the PPCReject functionPROCEDURE DoPPCReject(pb: PPCParamBlockPtr);VAR    err:        OSErr;BEGIN {reject the session}    WITH pb^.rejectParam DO    BEGIN        ioCompletion := @MyRejectCompProc;        {the sessRefNum field is set by the PPCInform function}        rejectInfo := -1;    END;    err := PPCReject(@pb^.rejectParam, TRUE);                                                        {asynchronous}END;Listing 11-13 illustrates a completion routine for a PPCReject function. This procedure is called at interrupt time when the PPCReject function completes. In this example, the global variable gPBInUse is set to FALSE to inform the application that the parameter block and the records it points to are no longer in use.Listing 11-13    Completion routine for a PPCReject functionPROCEDURE MyRejectCompProc(pb: PPCParamBlockPtr);BEGIN    {use a global to tell the application that PPCParamBlockRec }    { and the records it points to can be deallocated}    gPBInUse := FALSE;END;Exchanging Data During a PPC SessionAfter a session begins, each application can send data to and receive data from the other using a sequence of message blocks. The PPC Toolbox treats each message block as a byte stream and does not interpret the contents of the message block. The size of a message block can be between 0 and (232–1) bytes. The PPC Toolbox treats the buffer size as an unsigned long integer.The PPC Toolbox delivers the message blocks in the same sequence as they are sent and without duplicates. In Figure 11-17, an application transmits message blocks during a session.Figure 11-17    Transmitting message blocksFor each message block, you specify a block creator, block type, and user data. The first PPCWrite function that you use to create a new message block sets the attributes for the block. The PPCRead function returns the block creator, block type, and user data attributes for the current message block when the call completes.Although the PPC Toolbox does not interpret these attributes, they can give the receiving application information about how to process the contents of the message block. For example, a database application may specify, in the block creator field, a counter to indicate the block number (block number 20 of 30 total blocks). This application could also specify a code, such as 'DREC', in the block type field to indicate that the information it contains is a database record. In addition, this application could specify, in the user data field, the length of the message block.Reading Data From an ApplicationAn application can both read from and write data to another application during a session. Use the PPCRead function during a session to read incoming blocks of data from another application.Once a session is initiated, you should have a PPCRead function pending. You can issue a PPCRead function from inside a completion routine. This provides you with immediate notification if an error condition arises or the session closes. The blockCreator, blockType, and userData fields are returned for the block you are reading. (These fields are set by the PPCWrite function.) To determine whether there is additional data to be read, check the more field. The value FALSE indicates the end of a message block.Listing 11-14 illustrates how you use the PPCRead function to read data during a session.Listing 11-14    Using the PPCRead function to read data during a sessionFUNCTION MyPPCRead(thePPCReadPBPtr: PPCReadPBPtr;                             theSessRefNum: PPCSessRefNum;                             theBufferLength: Size;                             theBufferPtr: Ptr): OSErr;BEGIN    WITH thePPCReadPBPtr^ DO    BEGIN        ioCompletion := NIL;        sessRefNum := theSessRefNum;                                        {from PPCStart or PPCInform}        bufferLength := theBufferLength;        bufferPtr := theBufferPtr;    END;    MyPPCRead := PPCRead(thePPCReadPBPtr, TRUE);                                                            {asynchronous}END;You should make any calls to PPCRead asynchronously. You can provide a completion routine that will be called when the PPCRead function has completed, or you can poll the ioResult field of the PPC parameter block to determine whether the PPCRead function has completed. A PPCRead completion routine can issue another asynchronous PPC Toolbox call or set global variables. If another PPC Toolbox call is made from a completion routine, then the PPCRead function must use a record of data type PPCParamBlockRec instead of type PPCReadPBRec.Listing 11-15 illustrates a function that can be used to poll the ioResult field of a record of data type PPCReadPBRec. The function returns TRUE when the PPCRead function associated with PPCReadPBRec has completed.Listing 11-15    Polling the ioResult field to determine if a PPCRead function has completedFUNCTION MyReadComplete(thePPCReadPBPtr: PPCReadPBPtr;                                 VAR err: OSErr): Boolean;BEGIN    err := thePPCReadPBPtr^.ioResult;    MyReadComplete := err <> 1;END;Sending Data to an ApplicationUse the PPCWrite function to send a message block during a session specified by the session reference number.You should call the PPCWrite function asynchronously. You can provide a completion routine that will be called when the PPCWrite function has completed, or you can poll the ioResult field of the PPC parameter block to determine whether the PPCWrite function has completed. A PPCWrite completion routine can issue another PPC Toolbox call or set global variables. If another PPC Toolbox call is made from a completion routine, then the PPCWrite function must use a record of data type PPCParamBlockRec instead of type PPCWritePBRec. Note that message blocks are sent in the order in which they are written.Listing 11-16 illustrates how you use the PPCWrite function to write data during a session.Listing 11-16    Using the PPCWrite function to write data during a sessionFUNCTION MyPPCWrite(thePPCWritePBPtr: PPCWritePBPtr;                          theSessRefNum: PPCSessRefNum;                          theBufferLength: Size;                          theBufferPtr: Ptr): OSErr;BEGIN    WITH thePPCWritePBPtr^ DO    BEGIN        ioCompletion := NIL;        sessRefNum := theSessRefNum;                                        {from PPCStart or PPCInform}        bufferLength := theBufferLength;        bufferPtr := theBufferPtr;        more := FALSE;                                {no more data to read}        userData := 0;                                {application-specific data}        blockCreator := '????';                                {application-specific data}        blockType := '????';                                {application-specific data}    END;    MyPPCWrite := PPCWrite(thePPCWritePBPtr, TRUE); {asynchronous}END;The first PPCWrite function that you use to create a new message block sets the block creator, block type, and user data attributes for the block. These attributes are returned to the application when it reads from the message block. Set the more field to FALSE to indicate the end of the message block or set this field to TRUE if you want to append additional data to a message block.Listing 11-17 illustrates a function that can be used to poll the ioResult field of a record of data type PPCWritePBRec. The function returns TRUE when the PPCWrite function associated with PPCWritePBRec has completed.Listing 11-17    Polling the ioResult field to determine if a PPCWrite function has completedFUNCTION MyWriteComplete(thePPCWritePBPtr: PPCWritePBPtr;                                 VAR err: OSErr): Boolean;BEGIN    err := thePPCWritePBPtr^.ioResult;    MyWriteComplete := err <> 1;END;Ending a Session and Closing a PortAfter data is written and read in, use the PPCEnd function to end the session (identified by the session reference number). You may receive an error if you use the PPCEnd function to end a session that has already been terminated.Listing 11-18 illustrates how you use the PPCEnd function to end a session.Listing 11-18    Ending a PPC session using the PPCEnd functionFUNCTION MyPPCEnd(theSessRefNum: PPCSessRefNum): OSErr;VAR    thePPCEndPBRec: PPCEndPBRec;BEGIN    thePPCEndPBRec.sessRefNum := theSessRefNum;    MyPPCEnd := PPCEnd(@thePPCEndPBRec, FALSE);                                                                {synchronous}END;The PPCEnd function causes all calls to the PPCRead and PPCWrite functions to complete (with a sessClosedErr result code) and invalidates the session reference number. The PPCEnd function also releases any PPC Toolbox resources so that they can be reused.Use the PPCClose function to close the port specified by the port reference number. When you close a port, all sessions associated with a port are ended. Any active asynchronous calls associated with a session then call their completion routines (if they have one).Listing 11-19 illustrates how you use the PPCClose function to close a port.Listing 11-19    Closing a PPC port using the PPCClose functionFUNCTION MyPPCClose(thePortRefNum: PPCPortRefNum): OSErr;VAR    theClosePBRec: PPCClosePBRec;BEGIN    theClosePBRec.portRefNum := thePortRefNum;                                                                 {from PPCOpen}    MyPPCClose := PPCClose(@theClosePBRec, FALSE);                                                                {synchronous}END;In this example, the call to PPCClose is made synchronously.Invalidating UsersIt is your responsibility to invalidate all user reference numbers obtained with the StartSecureSession function before your application quits. However, while your application remains open, you may want to keep track of a user reference number to start a session with a port, end it, and then later start another session with the same port.Use the DeleteUserIdentity function to invalidate the user reference number for a particular user.err := DeleteUserIdentity (userRef);The DeleteUserIdentity function removes a user by invalidating the specified user reference number. Note that you cannot invalidate the guest reference number (0) and, in most cases, you should not dispose of the default user reference number.Listing 11-20 illustrates how you use the DeleteUserIdentity function to invalidate a user reference number obtained from a StartSecureSession function. The sample code does not invalidate the user reference number if it is either the default user reference number or the guest reference number (0).Listing 11-20    Using the DeleteUserIdentity function to invalidate a user identityFUNCTION MyDeleteNewUserRefNum(newUserRef: LongInt): OSErr;VAR    err:                     OSErr;    defUserRef:                     LongInt;    defUserName:                     Str32;BEGIN    IF newUserRef <> 0 THEN    BEGIN        {user reference number passed was not the guest}        err := GetDefaultUser(defUserRef, defUserName);        IF err = noErr THEN        BEGIN            {there is a default user}            IF newUserRef <> defUserRef THEN                {new user ref number isn't the default user ref num, }                { so ok to delete}                err := DeleteUserIdentity(newUserRef);        END        ELSE            {there is no default, so delete new user ref num}                        err := DeleteUserIdentity(newUserRef);        MyDeleteNewUserRefNum := err;    END    ELSE {user reference number passed was the guest}        MyDeleteNewUserRefNum := noErr;END;PPC Toolbox ReferenceThis section describes the data structures and routines that are specific to the PPC Toolbox. The section “PPC Toolbox Routines” beginning on page 11-50 describes PPC Toolbox routines. “Application-Defined Routines” beginning on page 11-77 describes completion routines and port filter functions.Data StructuresThis section describes the PPC parameter block, PPC port record, location name record, and port information record. The PPC Toolbox Parameter BlockPPC Toolbox functions require a pointer to a PPC parameter block. You must fill out any fields of the parameter block that the specific PPC Toolbox function requires. TYPE     PPCParamBlockRec =     RECORD        CASE Integer OF        0: (openParam:                            PPCOpenPBRec);                            {PPCOpen params}        1: (informParam:                            PPCInformPBRec);                            {PPCInform params}        2: (startParam:                            PPCStartPBRec);                            {PPCStart params}        3: (acceptParam:                            PPCAcceptPBRec);                            {PPCAccept params}        4: (rejectParam:                            PPCRejectPBRec);                            {PPCReject params}        5: (writeParam:                            PPCWritePBRec);                            {PPCWrite params}        6: (readParam:                            PPCReadPBRec);                            {PPCRead params}        7: (endParam:                            PPCEndPBRec);                            {PPCEnd params}        8: (closeParam:                            PPCClosePBRec);                            {PPCClose params}        9: (listPortsParam:                            IPCListPortsPBRec);                            {IPCListPorts }                                                                { params}    END;Figure 11-18 on the next page shows the PPC Toolbox parameter blocks. Note that the reserved fields are not included in the illustration. The qLink, csCode, intUse, intUsePtr, and reserved fields are used internally by the PPC Toolbox. Your application should not rely on the PPC Toolbox to preserve these fields across calls.Your application transfers ownership of the PPC Toolbox parameter block (and any buffers or records pointed to by the PPC Toolbox parameter block) to the PPC Toolbox until a PPC function is complete. Once the function completes, ownership of the parameter block (and any buffers or records it points to) is transferred back to your application. If a PPC Toolbox function is executed asynchronously, your program cannot alter memory that might be used by the PPC Toolbox until that function completes.Figure 11-18    The PPC Toolbox parameter blocksA PPC Toolbox function that is executed asynchronously must specify NIL or the address of a completion routine in the ioCompletion field of the PPC parameter block. The ioResult field should be used to determine the actual result code when an asynchronously executed PPC Toolbox function completes. If you specify a completion routine in the ioCompletion field, it is called at interrupt time when the PPC Toolbox function completes execution. See page 11-78 for the routine declaration for a completion routine.The PPC Port RecordA PPC port name is defined by a PPC port record. The PPCPortRec data type defines the PPC port record.TYPE PPCPortRec =     RECORD        nameScript:                        ScriptCode;                        {script identifier}        name:                        Str32;                        {port name in program }                                                         { linking dialog box}        portKindSelector:                        PPCPortKinds;                        {general category of }                                                        { application}        CASE PPCPortKinds OF                                    ppcByString:                        (portTypeStr: Str32);                                ppcByCreatorAndType:                                                         (portCreator: OSType;                                                        portType: OSType);    END;Field descriptionsnameScript    An integer script code. name    A string that designates the application name. portKindSelectorAn  integer that selects the kind of type string (either ppcByString or ppcByCreatorAndType).portTypeStr    If the portKindSelector field specifies ppcByString, the portTypeStr field contains a 32-byte character string.portCreator    If the portKindSelector field specifies ppcByCreatorAndType, the portCreator field contains a 4-character creator code.portType    If the portKindSelector field specifies ppcByCreatorAndType, the portType field contains a 4-character type code.To open a port, you need to specify a port name. As previously described, a port name consists of a script code, a name string, and a type string. For example, you can designate “smRoman” as the script code, “make memo” as the application’s name string, and “word processor” as its type string. The Location Name RecordA location name identifies the location of a computer on the network. A location name is specified in the standard Name-Binding Protocol (NBP) form, <object string>:PPCToolBox @<AppleTalk zone>. The object string is the name provided in the Sharing Setup control panel in the Control Panels folder. By default, the type string is “PPCToolBox”. The AppleTalk zone is the zone to which the particular Macintosh computer belongs. For example, “Jane Doe’s Macintosh:PPCToolBox@twilight” specifies the object string, type string, and AppleTalk zone for a particular computer.The LocationNameRec data type defines the location name record. The locationKindSelector field can be set to ppcNoLocation, ppcNBPLocation, or ppcNBPTypeLocation.TYPE LocationNameRec =     RECORD        locationKindSelector: PPCLocationKind;                                                        {which variant}        CASE PPCLocationKind OF            {ppcNoLocation: storage not used by this value}            ppcNBPLocation:                                                                                 (nbpEntity: EntityName); {NBP name entity}            ppcNBPTypeLocation:                                                                (nbpType: Str32);                        {just the NBP type }                                                        { string for the }                                                        { PPCOpen function}    END;Field descriptionslocationKindSelectorAn  integer that determines how the location is specified. You can use either of the constants ppcNBPLocation or ppcNBPTypeLocation. (The PPC Toolbox uses the constant ppcNoLocation when the location received from or passed to a PPC Toolbox function is the location of the local machine.)nbpEntity    If the locationKindSelector field specifies ppcNBPLocation, the nbpEntity field specifies a full NBP entity name.nbpType    If the locationKindSelector field specifies ppcNBPTypeLocation, the nbpType field specifies an alias location name. This location kind is used only by the PPCOpen function when an alias location name is needed.NoteYou should assign an NBP value directly—do not pack it using nbpSetEntity.uThe Port Information RecordA port information record identifies whether a particular port requires authentication and specifies the port’s port name. Both the PPCBrowser and IPCListPorts functions return information about ports using port information records. In addition, if you provide a port filter function, the PPC Toolbox provides information to your function about the current port in a port information record. The PortInfoRec data type defines a port information record.TYPE PortInfoRec =    RECORD        filler1:                    SignedByte;                        {space holder}        authRequired:                    Boolean;                        {authentication required}        name:                    PPCPortRec;                        {port name}    END;Field descriptionsfiller1    Reserved.authRequired    Specifies whether the port requires authentication. This field is TRUE if the port requires authentication before a session can begin. Otherwise, this field is FALSE.name    Specifies an available port name.For information on the PPCBrowser and IPCListPorts functions, see page 11-52 and page 11-54, respectively. For information on port filter functions, see page 11-78.PPC Toolbox RoutinesThis section describes the routines forn    initializing the PPC Toolboxn    displaying the program linking dialog boxn    listing available portsn    opening and closing a portn    starting and ending a sessionn    accepting and rejecting a sessionn    reading and writing datan    obtaining the default user reference number and namen    invalidating a user reference numberResult codes appear after each function where applicable.Initializing the PPC ToolboxYou use the PPCInit function to initialize the PPC Toolbox.PPCInitUse the PPCInit function to initialize the PPC Toolbox.FUNCTION PPCInit: OSErr;DESCRIPTIONAfter initialization, most PPC Toolbox routines can execute either synchronously or asynchronously.Note that a noGlobalsErr result code indicates that the PPC Toolbox is not loaded properly.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the PPCInit function areTrap macro    Selector    _PPCBrowser    $0000    The registers on entry and exit for this routine areRegisters on entry        D0    Selector code    Registers on exit        D0    Result code    RESULT CODESnoErr    0    No error    noGlobalsErr    –904    System unable to allocate memory, critical error    Using the Program Linking Dialog BoxYou can use either the PPCBrowser function or the IPCListPorts function to locate a port to communicate with. Use the PPCBrowser function to display the program linking dialog box. For the description of IPCListPorts, see page 11-54.PPCBrowserUse the PPCBrowser function to display the program linking dialog box, which allows a user to select a port to communicate with.FUNCTION PPCBrowser (prompt: Str255; applListLabel: Str255;                             defaultSpecified: Boolean;                             VAR theLocation: LocationNameRec;                             VAR thePortInfo: PortInfoRec;                             portFilter: PPCFilterProcPtr;                             theLocNBPType: Str32): OSErr; prompt    A line of text that the PPCBrowser function displays as a prompt in the program linking dialog box. If you specify NIL or an empty string is passed, the default prompt “Choose a program to link to:” is used.applListLabelThe title of the list of PPC ports. If you specify NIL or an empty string is passed, the default title “Programs” is used.defaultSpecifiedA value that determines which port is initially selected in the program linking dialog box. If you specify TRUE, you must provide information in the parameters theLocation and thePortInfo. In this case, the PPCBrowser function tries to select the PPC port specified by the parameters theLocation and thePortInfo when the program linking dialog box first appears. If you specify FALSE, the PPCBrowser function selects the first port in the list and you can leave the location name record and the port information record (in the parameters theLocation and thePortInfo) uninitialized.theLocationThe port location. For information on this data structure, see “The Location Name Record” on page 11-49.thePortInfoThe port name. For information on this data structure, see “The Port Information Record” on page 11-50.portFilterDetermines how the list of PPC ports is filtered. If this parameter is NIL, the names of all existing PPC ports are displayed. If this parameter isn’t NIL, it must be a pointer to a port filter function.theLocNBPTypeThe NBP type passed to NBPLookup to generate the list of computers. If you specify NIL or an empty string is passed, the default, “PPCToolBox”, is used.DESCRIPTIONThe PPCBrowser function builds the list of ports and then displays the program linking dialog box.If you set the defaultSpecified parameter to TRUE, the PPCBrowser function tries to select the PPC port specified by the parameters theLocation and thePortInfo when the program linking dialog box first appears. The locationKindSelector field in the location name record must be set to the ppcNoLocation constant (which specifies the local computer) or the ppcNBPLocation constant (which specifies the NBP object and NBP zone). The ppcNBPTypeLocation constant is not supported for matching. When matching the location, only the object string and the zone string of the entity name are used—the type string is ignored. When matching the port, the entire PPC port record (script, name, and port type) is used in the port information record. The authRequired field of the port information record is ignored.The parameter theLocNBPType of the PPCBrowser function specifies the NBP type passed to NBPLookup to generate the list of computers. If you specify NIL or an empty string is passed, the default, “PPCToolBox”, is used. Note that the current computer is always included in the list of computers (even if a location with the specified type does not exist for it). If the parameter theLocNBPType contains either of the NBP wildcard characters (= or ≈), the PPCBrowser function returns a paramErr result code.If the PPCBrowser function returns noErr, the parameters theLocation and thePortInfo specify the port chosen by the user. If the PPCBrowser function returns a userCanceledErr result code, the user clicked the Cancel button, and no port was selected. If the function returns a memFullErr result code, there was not enough memory to load the PPCBrowser package, and the dialog box did not appear. NoteYou must not call the PPCBrowser function from an application that is running in the background, since this function displays a dialog box on the user’s screen.uRESULT CODESnoErr    0    No error    paramErr    –50    Illegal parameter    memFullErr    –108    Not enough memory to load PPCBrowser package    userCanceledErr    –128    User decided not to conduct a session    SEE ALSOFor an example of the use of the PPCBrowser function, see Listing 11-4 on page 11-26. For an example of the program linking dialog box, see Figure 11-12 on page 11-22. For information on port filter functions, see page 11-78.Obtaining a List of PortsUse the IPCListPorts function to generate a list of existing ports without displaying a dialog box. The IPCListPortsPBRec data type defines the parameter block used by the IPCListPorts function.IPCListPortsUse the IPCListPorts function to generate a list of existing ports without displaying a dialog box.FUNCTION IPCListPorts (pb: IPCListPortsPBPtr;                               async: Boolean): OSErr; pb    A pointer to an IPCListPorts parameter block.async    A value that specifies whether the function is to be executed asynchronously (TRUE) or synchronously (FALSE).Parameter blockÆ    ioCompletion    PPCCompProcPtr    Address of a completion routine    ¨    ioResult    OSErr    Result code    Æ    startIndex    Integer    Index to the port entry list    Æ    requestCount    Integer    Number of port names requested    ¨    actualCount    Integer    Number of port names returned    Æ    portName    PPCPortPtr    Pointer to a PPCPortRec    Æ    locationName    LocationNamePtr    Pointer to a LocationNameRec    Æ    bufferPtr    PortInfoArrayPtr    Pointer to an array of PortInfoRec    DESCRIPTIONIf your application calls the IPCListPorts function asynchronously, you must specify in the ioCompletion field either the address of a completion routine or NIL. If you set ioCompletion to NIL, you should poll the ioResult field of the PPC parameter block (from your application’s main event loop) to determine whether the PPC Toolbox has completed the requested operation. A value in the ioResult field other than 1 indicates that the call is complete. Note that it is unsafe to poll the ioResult field at interrupt time since the PPC Toolbox may be in the process of completing a call. See “PPC Toolbox Calling Conventions” beginning on page 11-14 for detailed information.If you call the IPCListPorts function asynchronously, you must not change any of the fields in the parameter block until the call completes. The port name, location name, and buffer pointed to by IPCListPortsPBRec are owned by the PPC Toolbox until the call completes. These objects must not be deallocated or moved in memory while the call is in progress.The startIndex field specifies the index to the list of ports on the remote machine from which the PPC Toolbox begins to get the list. In most cases, you’ll want to start at the beginning, so set the startIndex field to 0. The requestCount field specifies the maximum number of port information records that can fit into your buffer.The actualCount field returns the actual number of entries returned. Your program can use the IPCListPorts function repeatedly to obtain the entire list of ports. Ports that are not visible to the network are not included in the ports listing on a remote machine. (If you specify FALSE for the networkVisible field in the PPCOpen function, the port is not included in the listing of available ports across a network.)The portName field must contain a pointer to a PPC port record that specifies which PPC ports to list. You can specify particular values in the PPC port record or you can use an equal sign (=) in the name or the portTypeStr fields as a wildcard to match all port names or port types.The locationName field should contain a pointer to a location name record that designates the computer that contains the PPC ports you want returned. If the locationKindSelector field in the location name record is ppcNoLocation or if the locationName pointer is NIL, then the location is the local machine. If the locationKindSelector field in the location name record is ppcNBPLocation, then the location is a remote machine designated by the location name record’s nbpEntity field.The IPCListPorts function returns an array (list) of port information records in the area of memory pointed to by bufferPtr. Make sure that the buffer pointed to by the bufferPtr field is at least sizeof(PortInfoRec) * requestCount.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the IPCListPorts function areTrap macro    Selector    _PPC    $000A    The registers on entry and exit for this routine areRegisters on entry        A0    Pointer to a parameter block    D0    Selector code    Registers on exit        D0    Result code    RESULT CODESnoErr    0    No error    notInitErr    –900    PPC Toolbox has not been initialized yet    nameTypeErr    –902    Invalid or inappropriate locationKindSelector in location name    noGlobalsErr    –904    System unable to allocate memory, critical error    localOnlyErr    –905    Network activity is currently disabled    sessTableErr    –907    PPC Toolbox is unable to create a session    noResponseErr    –915    Unable to contact application    badPortNameErr    –919    PPC port record is invalid    networkErr    –925    An error has occurred in the network    badLocNameErr    –931    Location name is invalid    SEE ALSOFor an example of the use of the IPCListPorts function, see Listing 11-5 on page 11-28. Opening and Closing a PortYou open a port using the PPCOpen function and close a port using the PPCClose function.PPCOpenYou open a port using the PPCOpen function.FUNCTION PPCOpen (pb: PPCOpenPBPtr; async: Boolean): OSErr;pb    A pointer to a PPCOpen parameter block.async    A value that specifies whether the function is to be executed asynchronously (TRUE) or synchronously (FALSE).Parameter blockÆ    ioCompletion    PPCCompProcPtr    Address of a completion routine    ¨    ioResult    OSErr    Result code    ¨    portRefNum    PPCPortRefNum    Port reference number of port opened    Æ    serviceType    PPCServiceType    Service type requested—must be ppcServiceRealTime    Æ    resFlag    SignedByte    Reserved field—must be 0    Æ    portName    PPCPortPtr    Pointer to a PPCPortRec    Æ    locationName    LocationNamePtr    Pointer to a LocationNameRec    Æ    networkVisible    Boolean    Make this port network visible    ¨    nbpRegistered    Boolean    Port location was registered on the network    DESCRIPTIONIf your application calls the PPCOpen function asynchronously, you must specify in the ioCompletion field either the address of a completion routine or NIL. If you set ioCompletion to NIL, you should poll the ioResult field of the PPC parameter block (from your application’s main event loop) to determine whether the PPC Toolbox has completed the requested operation. A value in the ioResult field other than 1 indicates that the call is complete. Note that it is unsafe to poll the ioResult field at interrupt time since the PPC Toolbox may be in the process of completing a call. See “PPC Toolbox Calling Conventions” beginning on page 11-14 for detailed information.If you call the PPCOpen function asynchronously, you must not change any of the fields in the parameter block until the call completes. The port name and location name pointed to by the PPCOpen parameter block record are owned by the PPC Toolbox until the call completes. These objects must not be deallocated or moved in memory while the call is in progress.The portRefNum field returns the PPC port identifier. Use this port reference number to initiate a session for this particular port. Set the serviceType field to indicate that this port accepts sessions in real time. For System 7, this field must always be set to the ppcServiceRealTime constant. You must set the resFlag field to 0.The portName field must contain a pointer to a PPC port record that specifies the name of the PPC port to be opened.The locationName field should contain a pointer to a location name record that designates the location of the PPC port to be opened. If the locationName pointer is NIL, then the default name PPC Toolbox is used. If a location name record is used, then the locationKindSelector field in the location name record must be ppcNBPTypeLocation, and an alias location name specified by the location name record’s nbpType field is used.The networkVisible field indicates whether the port should be made visible (for browsing as well as incoming network requests). If you specify FALSE, this port is not visible in the listing of available ports across a network (although it is still included within the local machine’s listing of available ports).The nbpRegistered field returns TRUE if the location name specified was registered on the network.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the PPCOpen function areTrap macro    Selector    _PPC    $0001    The registers on entry and exit for this routine areRegisters on entry        A0    Pointer to a parameter block    D0    Selector (1)    Registers on exit        D0    Result code    RESULT CODESnoErr    0    No error    notInitErr    –900    PPC Toolbox has not been initialized yet    nameTypeErr    –902    Invalid or inappropriate locationKindSelector in location name    noPortErr    –903    Unable to open port or bad port reference number    noGlobalsErr    –904    System unable to allocate memory, critical error    badReqErr    –909    Bad parameter or invalid state for this operation    portNameExistsErr    –910    Another port is already open with this name    badPortNameErr    –919    PPC port record is invalid    badServiceMethodErr    –930    Service method is other than ppcServiceRealTime    badLocNameErr    –931    Location name is invalid    nbpDuplicateName    –1027    Location name represents a duplicate on this computer    SEE ALSOFor an example of the use of the PPCOpen function, see Listing 11-2 on page 11-21. PPCCloseYou use the PPCClose function to close the port specified by the port reference number.FUNCTION PPCClose (pb: PPCClosePBPtr; async: Boolean): OSErr; pb    A pointer to a PPCClose parameter block.async    A value that specifies whether the function is to be executed asynchronously (TRUE) or synchronously (FALSE).Parameter blockÆ    ioCompletion    PPCCompProcPtr    Address of a completion routine    ¨    ioResult    OSErr    Result code    Æ    portRefNum    PPCPortRefNum    Port reference number of port to close    DESCRIPTIONIf your application calls this function asynchronously, you must specify in the ioCompletion field either the address of a completion routine or NIL. If you set ioCompletion to NIL, you should poll the ioResult field of the PPC parameter block (from your application’s main event loop) to determine whether the PPC Toolbox has completed the requested operation. A value in the ioResult field other than 1 indicates that the call is complete. Note that it is unsafe to poll the ioResult field at interrupt time since the PPC Toolbox may be in the process of completing a call. See “PPC Toolbox Calling Conventions” beginning on page 11-14 for detailed information.The portRefNum field specifies the PPC port identifier of the port to close. The port reference number must be a valid port reference number returned from a previous call to the PPCOpen function.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the PPCClose function areTrap macro    Selector    _PPC    $0009    The registers on entry and exit for this routine areRegisters on entry        A0    Pointer to a parameter block    D0    Selector code    Registers on exit        D0    Result code    RESULT CODESnoErr    0    No error    notInitErr    –900    PPC Toolbox has not been initialized yet    noPortErr    –903    Bad port reference number    noGlobalsErr    –904    System unable to allocate memory, critical error    SEE ALSOFor an example of the use of the PPCClose function, see Listing 11-19 on page 11-44. Starting and Ending a SessionYou use the PPCStart or StartSecureSession function to initiate a session with another port, and you use the PPCEnd function to end a session.PPCStartThe PPCStart function initiates a session with the destination port specified in the name and location fields.FUNCTION PPCStart (pb: PPCStartPBPtr; async: Boolean): OSErr;pb    A pointer to a PPCStart parameter block.async    A value that specifies whether the function is to be executed asynchronously (TRUE) or synchronously (FALSE).Parameter blockÆ    ioCompletion    PPCCompProcPtr    Address of a completion routine    ¨    ioResult    OSErr    Result code    Æ    portRefNum    PPCPortRefNum    Port reference number of this session    ¨    sessRefNum    PPCSessRefNum    Session reference number of this session    Æ    serviceType    PPCServiceType    Service type requested—must be ppcServiceRealTime    Æ    resFlag    SignedByte    Reserved field—must be 0    Æ    portName    PPCPortPtr    Pointer to a PPCPortRec    Æ    locationName    LocationNamePtr    Pointer to a LocationNameRec    ¨    rejectInfo    LongInt    Value from PPCReject if session was rejected    Æ    userData    LongInt    Application-specific data    Æ    userRefNum    LongInt    User reference number    DESCRIPTIONIf your application calls the PPCStart function asynchronously, you must specify in the ioCompletion field either the address of a completion routine or NIL. If you set ioCompletion to NIL, you should poll the ioResult field of the PPC parameter block (from your application’s main event loop) to determine whether the PPC Toolbox has completed the requested operation. A value in the ioResult field other than 1 indicates that the call is complete. Note that it is unsafe to poll the ioResult field at interrupt time, since the PPC Toolbox may be in the process of completing a call. See “PPC Toolbox Calling Conventions” beginning on page 11-14 for detailed information.If you call the PPCStart function asynchronously, you must not change any of the fields in the parameter block until the call completes. The port name and location name pointed to by the PPCStart parameter block record are owned by the PPC Toolbox until the call completes. These objects must not be deallocated or moved in memory while the call is in progress.You specify the PPC port identifier in the portRefNum field. The port reference number is a reference number for the port through which you are requesting a session. The value you specify must correspond to the port reference number returned from the PPCOpen function.The sessRefNum field returns a session identifier. This number, which is provided by the PPC Toolbox, is used while data is being exchanged to identify a particular session. You must set the serviceType field to indicate that the session is to be connected in real time. For System 7, this field must always be set to the ppcServiceRealTime constant. You must set the resFlag field to 0.The portName field must contain a pointer to a PPC port record. The locationName field should contain a pointer to a location name record or NIL. The PPC port record and the location name record specify the name and location of the PPC port to initiate a session with, and they are usually obtained from the PPCBrowser function. If the locationKindSelector field in the location name record is ppcNoLocation or if the locationName pointer is NIL, then the location is the local machine. If the locationKindSelector field in the location name record is ppcNBPLocation, then the location is a remote machine designated by the location name record’s nbpEntity field.If the ioResult field of the PPC parameter block returns a userRejectErr result code, the rejectInfo field contains the same value as the rejectInfo field in the PPCReject parameter block. The rejectInfo field is defined by your application.The initiating port can specify any information in the userData field. The PPCInform function reports this data to the responding port upon its completion.The userRefNum field specifies an authenticated user. The authentication mechanism of the PPC Toolbox identifies each user through an assigned name and a password. A user reference number of 0 indicates that you want to specify a guest. ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the PPCStart function areTrap macro    Selector    _PPC    $0002    The registers on entry and exit for this routine areRegisters on entry        A0    Pointer to a parameter block    D0    Selector code    Registers on exit        D0    Result code    RESULT CODES    noErr    0    No error    notInitErr    –900    PPC Toolbox has not been initialized yet    nameTypeErr    –902    locationKindSelector is not ppcNBPLocation or ppcNoLocation    noPortErr    –903    Bad port reference number    noGlobalsErr    –904    System unable to allocate memory, critical error    localOnlyErr    –905    Network activity is currently disabled    destPortErr    –906    Port does not exist at destination    sessTableErr    –907    PPC Toolbox is unable to create a session    noUserNameErr    –911    User name unknown on destination machine    userRejectErr    –912    Destination rejected the session request    noResponseErr    –915    Unable to contact application    portClosedErr    –916    The port was closed    badPortNameErr    –919    PPC port record is invalid    networkErr    –925    An error has occurred in the network    noInformErr    –926    PPCStart failed because target application did not have an inform pending    authFailErr    –927    User’s password is wrong    noUserRecErr    –928    Invalid user reference number    badServiceMethodErr    –930    Service method is other than ppcServiceRealTime    guestNotAllowedErr    –932    Destination port requires authentication    SEE ALSOFor an example of the use of the PPCStart function, see Listing 11-7 on page 11-34. StartSecureSessionThe StartSecureSession function prompts for user name and password and calls PPCStart—all in one synchronous procedure call. Use the StartSecureSession function whenever a port destination requires authentication.FUNCTION StartSecureSession (pb: PPCStartPBPtr;                                       VAR userName: Str32;                                       useDefault: Boolean;                                       allowGuest: Boolean;                                       VAR guestSelected: Boolean;                                       prompt: Str255): OSErr;pb    A pointer to a PPCStart parameter block.userName    A pointer to a 32-byte character string to be displayed as the user’s name.useDefaultA Boolean value that indicates whether you want the StartSecureSession function to use the default user identity (and possibly prevent the user identity dialog box from appearing). If so, specify TRUE; otherwise, specify FALSE.allowGuestA Boolean value that determines whether the Guest radio button in the user identity dialog box is active (TRUE) or inactive (FALSE).guestSelectedReturns TRUE if the user has logged on as a guest.prompt    A line of text that the dialog box displays in place of the default prompt. Specify NIL or an empty string to use the default prompt.DESCRIPTIONYour program fills out a parameter block just as though it were calling the PPCStart function. You specify all input fields in the parameter block except for the userRefNum field. The userRefNum field is returned when the StartSecureSession function successfully completes.The userName parameter is a pointer to a 32-byte character string to be displayed as the user’s name. If the Pascal string length is 0, the default user name is used. The default user name is the name specified in the Sharing Setup control panel. The default user name is returned in the userName buffer.Set the useDefault parameter to TRUE if you want the StartSecureSession function to use the default user identity (and possibly prevent the user identity dialog box from appearing). The allowGuest parameter specifies whether the Guest radio button in the user identity dialog box is active. You usually set it to the inverse of the authRequired field in the port information record. For example, if authRequired is TRUE, then allowGuest should be set to FALSE.The guestSelected parameter returns TRUE if the user has logged on as a guest. The prompt parameter of the StartSecureSession function allows you to specify a line of text that the dialog box can display. Specify NIL or an empty string for the prompt parameter to enable the PPC Toolbox to use the default prompt. The PPC Toolbox uses the default string “Link to <port name> on <object string> as:”. The port name is obtained from the name string of the port name, and the object string is obtained from the object string of the location name. NoteDo not call the StartSecureSession function from an application that is running in the background, because the function displays several dialog boxes on the user’s screen.u ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the StartSecureSession function areTrap macro    Selector    _PPC    $000E    The registers on entry and exit for this routine areRegisters on entry        A0    Pointer to a StartSecureParams record    D0    Selector code    Registers on exit        D0    Result code    RESULT CODESnoErr    0    No error    userCanceledErr    –128    User decided not to conduct a session    notInitErr    –900    PPC Toolbox has not been initialized yet    nameTypeErr    –902    locationKindSelector is not ppcNBPLocation or ppcNoLocation    noPortErr    –903    Bad port reference number    noGlobalsErr    –904    System unable to allocate memory, critical error    localOnlyErr    –905    Network activity is currently disabled    destPortErr    –906    Port does not exist at destination    sessTableErr    –907    PPC Toolbox is unable to create a session    noResponseErr    –915    Unable to contact application    portClosedErr    –916    The port was closed    badPortNameErr    –919    PPC port record is invalid    noUserRefErr    –924    Unable to create a new user reference number    networkErr    –925    An error has occurred in the network    noInformErr    –926    PPCStart failed because target application did not have an inform pending    badServiceMethodErr    –930    Service method is other than ppcServiceRealTime    guestNotAllowedErr    –932    Destination port requires authentication    SEE ALSOFor an example of the use of the StartSecureSession function, see “Initiating a PPC Session” beginning on page 11-29. PPCEndUse the PPCEnd function to end a session. This function completes all outstanding asynchronous calls associated with the session reference number.FUNCTION PPCEnd (pb: PPCEndPBPtr; async: Boolean): OSErr; pb    A pointer to a PPCEnd parameter block.async    A value that specifies whether the function is to be executed asynchronously (TRUE) or synchronously (FALSE).Parameter blockÆ    ioCompletion    PPCCompProcPtr    Address of a completion routine    ¨    ioResult    OSErr    Result code    Æ    sessRefNum    PPCSessRefNum    Session reference number of session to end    DESCRIPTIONIf your application calls the PPCEnd function asynchronously, you must specify in the ioCompletion field either the address of a completion routine or NIL. If you set ioCompletion to NIL, you should poll the ioResult field of the PPC parameter block (from your application’s main event loop) to determine whether the PPC Toolbox has completed the requested operation. A value in the ioResult field other than 1 indicates that the call is complete. Note that it is unsafe to poll the ioResult field at interrupt time since the PPC Toolbox may be in the process of completing a call. See “PPC Toolbox Calling Conventions” beginning on page 11-14 for detailed information.You provide a session identifier in the sessRefNum field to identify the session that you are terminating. The PPCStart, StartSecureSession, or PPCInform function returns the session reference number.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the PPCEnd function areTrap macro    Selector    _PPC    $0008    The registers on entry and exit for this routine areRegisters on entry        A0    Pointer to a parameter block    D0    Selector code    Registers on exit        D0    Result code    RESULT CODESnoErr    0    No error    notInitErr    –900    PPC Toolbox has not been initialized yet    noGlobalsErr    –904    System unable to allocate memory, critical error    noSessionErr    –908    Invalid session reference number    SEE ALSOFor an example of the use of the PPCEnd function, see Listing 11-18 on page 11-43. Receiving, Accepting, and Rejecting a SessionYou use the PPCInform function to receive session requests. After the PPCInform function completes (with the autoAccept field set to FALSE), you must accept or reject the session request using the PPCAccept or PPCReject function.PPCInformAs long as a port has been opened, you can call the PPCInform function at any time. You can have any number of outstanding PPCInform functions.FUNCTION PPCInform (pb: PPCInformPBPtr; async: Boolean): OSErr;pb    A pointer to a PPCInform parameter block.async    A value that specifies whether the function is to be executed asynchronously (TRUE) or synchronously (FALSE). You should execute the PPCInform function asynchronously. Parameter blockÆ    ioCompletion    PPCCompProcPtr    Address of a completion routine    ¨    ioResult    OSErr    Result code    Æ    portRefNum    PPCPortRefNum    Port reference number of this session    ¨    sessRefNum    PPCSessRefNum    Session reference number of this session    ¨    serviceType    PPCServiceType    Service type of this session    Æ    autoAccept    Boolean    If TRUE, session is accepted automatically    Æ    portName    PPCPortPtr    Pointer to PPCPortRec, may be NIL    Æ    locationName    LocationNamePtr    Pointer to LocationNameRec, may be NIL        userName    StringPtr    Pointer to Str32, may be NIL    ¨    userData    LongInt    Application-specific data    ¨    requestType    PPCSessionOrigin    Network or local request    DESCRIPTIONIf your application calls the PPCInform function asynchronously, you must specify in the ioCompletion field either the address of a completion routine or NIL. If you set ioCompletion to NIL, you should poll the ioResult field of the PPC parameter block (from your application’s main event loop) to determine whether the PPC Toolbox has completed the requested operation. A value in the ioResult field other than 1 indicates that the call is complete. Note that it is unsafe to poll the ioResult field at interrupt time since the PPC Toolbox may be in the process of completing a call. See “PPC Toolbox Calling Conventions” beginning on page 11-14 for detailed information.If you call the PPCInform function asynchronously, you must not change any of the fields in the parameter block until the call completes. The port name, location name, user name, and buffer pointed to by the record of type PPCInformPBRec are owned by the PPC Toolbox until the call completes. These objects must not be deallocated or moved in memory while the call is in progress. You provide the PPC port identifier in the portRefNum field. A PPCOpen function returns the port identifier. The sessRefNum field returns a session identifier.The serviceType field indicates the service type. For system software version 7.0, this field always returns the ppcServiceRealTime constant.If you set the autoAccept field to TRUE, session requests are automatically accepted as they are received. When the PPCInform function completes execution with a noErr result code and you set the autoAccept field to FALSE, you need to accept or reject the session.sWARNINGIf the PPCInform function (with the autoAccept parameter set to FALSE) returns a noErr result code, you must call either the PPCAccept function or the PPCReject function. The computer trying to initiate a session using the StartSecureSession function or the PPCStart function waits (hangs) until the session attempt is either accepted or rejected, or until an error occurs.sThe portName field must contain NIL or a pointer to a PPC port record. If the portName field contains NIL, then the name of the PPC port that initiated the session is not returned. If the portName field points to a PPC port record, then the PPC port record is filled with the name of the PPC port that initiated the session when the PPCInform function completes.The locationName field must contain NIL or a pointer to a location name record. If the locationName field contains NIL, then the location of the PPC port that initiated the session is not returned. If the locationName field points to a location name record, then the location name record is filled with the location of the PPC port that initiated the session when the PPCInform function completes. If the locationKindSelector field of the location name record returned is ppcNoLocation, then the location is the local machine. If the locationKindSelector field of the location name record returned is ppcNBPLocation, then the location is a remote machine designated by the location name record’s nbpEntity field.The userName field must contain NIL or a pointer to a 32-byte character string. If the userName field contains NIL, then the user name string is not returned. If the userName field points to a 32-byte character string, then the 32-byte character string is filled with the name of the user making the session request (if authenticated) when the PPCInform function completes.When the PPCInform function completes, the userData field contains the user data provided by the application making the session request. This field is transparent to the PPC Toolbox. The application can send any data in this field.When the PPCInform function completes, the requestType field contains either ppcRemoteOrigin or ppcLocalOrigin, depending on whether the session request is initiated by a computer across the network or by a port on the same computer.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the PPCInform function areTrap macro    Selector    _PPC    $0003    The registers on entry and exit for this routine areRegisters on entry        A0    Pointer to a parameter block    D0    Selector code    Registers on exit        D0    Result code    RESULT CODESnoErr    0    No error    notInitErr    –900    PPC Toolbox has not been initialized yet    noPortErr    –903    Unable to open port or bad port reference number    noGlobalsErr    –904    System unable to allocate memory, critical error    portClosedErr    –916    The port was closed    SEE ALSOFor an example of the use of the PPCInform function, see Listing 11-8 on page 11-36. PPCAcceptUse the PPCAccept function to indicate that an application is willing to accept an incoming session request after a PPCInform function completes.FUNCTION PPCAccept (pb: PPCAcceptPBPtr; async: Boolean): OSErr;pb    A pointer to a PPCAccept parameter block.async    A value that specifies whether the function is to be executed asynchronously (TRUE) or synchronously (FALSE).Parameter blockÆ    ioCompletion    PPCCompProcPtr    Address of a completion routine    ¨    ioResult    OSErr    Result code    Æ    sessRefNum    PPCSessRefNum    Session reference number of session to accept    DESCRIPTIONIf your application calls the PPCAccept function asynchronously, you must specify in the ioCompletion field either the address of a completion routine or NIL. If you set ioCompletion to NIL, you should poll the ioResult field of the PPC parameter block (from your application’s main event loop) to determine whether the PPC Toolbox has completed the requested operation. A value in the ioResult field other than 1 indicates that the call is complete. Note that it is unsafe to poll the ioResult field at interrupt time since the PPC Toolbox may be in the process of completing a call. See “PPC Toolbox Calling Conventions” beginning on page 11-14 for detailed information.The sessRefNum field specifies a session identifier. Use the session reference number returned from the completed PPCInform parameter block to accept the session request.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the PPCAccept function areTrap macro    Selector    _PPC    $0004    The registers on entry and exit for this routine areRegisters on entry        A0    Pointer to a parameter block    D0    Selector code    Registers on exit        D0    Result code    RESULT CODESnoErr    0    No error    notInitErr    –900    PPC Toolbox has not been initialized yet    noGlobalsErr    –904    System unable to allocate memory, critical error    noSessionErr    –908    Invalid session reference number    badReqErr    –909    Bad parameter or invalid state for this operation    SEE ALSOFor an example of the use of the PPCAccept function, see “Accepting or Rejecting Session Requests” beginning on page 11-37. PPCRejectUse the PPCReject function to reject a session request after a PPCInform function completes.FUNCTION PPCReject (pb: PPCRejectPBPtr; async: Boolean): OSErr;pb    A pointer to a PPCReject parameter block.async    A value that specifies whether the function is to be executed asynchronously (TRUE) or synchronously (FALSE).Parameter blockÆ    ioCompletion    PPCCompProcPtr    Address of a completion routine    ¨    ioResult    OSErr    Result code    Æ    sessRefNum    PPCSessRefNum    Session reference number of session to reject    Æ    rejectInfo    LongInt    Value to return if session is rejected    DESCRIPTIONIf your application calls the PPCReject function asynchronously, you must specify in the ioCompletion field either the address of a completion routine or NIL. If you set ioCompletion to NIL, you should poll the ioResult field of the PPC parameter block (from your application’s main event loop) to determine whether the PPC Toolbox has completed the requested operation. A value in the ioResult field other than 1 indicates that the call is complete. Note that it is unsafe to poll the ioResult field at interrupt time since the PPC Toolbox may be in the process of completing a call. See “PPC Toolbox Calling Conventions” beginning on page 11-14 for detailed information.The sessRefNum field specifies a session to be rejected. This must be a valid session reference number returned from a previous PPCInform function. The rejectInfo field is an optional field. The application receiving a session request may specify any data in this field. The initiating application receives this information in the PPCStart parameter block.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the PPCReject function areTrap macro    Selector    _PPC    $0005    The registers on entry and exit for this routine areRegisters on entry        A0    Pointer to a parameter block    D0    Selector code    Registers on exit        D0    Result code    RESULT CODESnoErr    0    No error    notInitErr    –900    PPC Toolbox has not been initialized yet    noGlobalsErr    –904    System unable to allocate memory, critical error    noSessionErr    –908    Invalid session reference number    badReqErr    –909    Bad parameter or invalid state for this operation    SEE ALSOFor an example of the use of the PPCReject function, see page 11-39. Reading and Writing DataThe PPCRead function reads incoming data from an application, and the PPCWrite function writes data to an application during a session.PPCReadUse the PPCRead function to read message blocks during a session.FUNCTION PPCRead (pb: PPCReadPBPtr; async: Boolean): OSErr;pb    A pointer to a PPCRead parameter block.async    A value that specifies whether the function is to be executed asynchronously (TRUE) or synchronously (FALSE). You should execute the PPCRead function asynchronously. Parameter blockÆ    ioCompletion    PPCCompProcPtr    Address of a completion routine    ¨    ioResult    OSErr    Result code    Æ    sessRefNum    PPCSessRefNum    Session reference number    Æ    bufferLength    Size    Length of data buffer    ¨    actualLength    Size    Actual length of data read    Æ    bufferPtr    Ptr    Pointer to data buffer    ¨    more    Boolean    TRUE if more data in this block to be read    ¨    userData    LongInt    Application-specific data    ¨    blockCreator    OSType    Creator of block read    ¨    blockType    OSType    Type of block read    DESCRIPTIONIf your application calls the PPCRead function asynchronously, you must specify in the ioCompletion field either the address of a completion routine or NIL. If you set ioCompletion to NIL, you should poll the ioResult field of the PPC parameter block (from your application’s main event loop) to determine whether the PPC Toolbox has completed the requested operation. A value in the ioResult field other than 1 indicates that the call is complete. Note that it is unsafe to poll the ioResult field at interrupt time since the PPC Toolbox may be in the process of completing a call. See “PPC Toolbox Calling Conventions” beginning on page 11-14 for detailed information.If you call the PPCRead function asynchronously, you must not change any of the fields in the parameter block until the call completes. The buffer pointed to by the record of data type PPCReadPBRec is owned by the PPC Toolbox until the call completes. These objects must not be deallocated or moved in memory while the call is in progress. The sessRefNum field specifies a session to read data from. This must be a valid session reference number returned from a previous PPCStart, StartSecureSession, or PPCInform function. The bufferLength and bufferPtr fields specify the length and location of a buffer the message block will be read into. Your application must allocate the storage for the buffer. The actualLength field returns the actual size of the data read into your data buffer.The more field returns TRUE if the provided buffer cannot hold the remainder of the message block. Your application may read a message block in several pieces. It is not necessary to have a buffer large enough to read in the entire message block, so a message block can span multiple calls to the PPCRead function.Upon completion of the PPCRead function, the userData, blockCreator, and blockType fields contain information regarding the contents of the message block. You specify these fields using the PPCWrite function. ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the PPCRead function areTrap macro    Selector    _PPC    $0007    The registers on entry and exit for this routine areRegisters on entry        A0    Pointer to a parameter block    D0    Selector code    Registers on exit        D0    Result code    RESULT CODESnoErr    0    No error    notInitErr    –900    PPC Toolbox has not been initialized yet    noGlobalsErr    –904    System unable to allocate memory, critical error    noSessionErr    –908    Invalid session reference number    badReqErr    –909    Bad parameter or invalid state for this operation    sessClosedErr    –917    The session has closed    SEE ALSOFor an example of the use of the PPCRead function in conjunction with the PPCWrite function, see “Exchanging Data During a PPC Session” beginning on page 11-39.PPCWriteUse the PPCWrite function to write message blocks during a session.FUNCTION PPCWrite (pb: PPCWritePBPtr; async: Boolean): OSErr;pb    A pointer to a PPCWrite parameter block.async    A value that specifies whether the function is to be executed asynchronously (TRUE) or synchronously (FALSE). You should execute the PPCWrite function asynchronously. Parameter blockÆ    ioCompletion    PPCCompProcPtr    Address of a completion routine    ¨    ioResult    OSErr    Result code    Æ    sessRefNum    PPCSessRefNum    Session reference number    Æ    bufferLength    Size    Length of data buffer    ¨    actualLength    Size    Actual length of data written    Æ    bufferPtr    Ptr    Pointer to data buffer    Æ    more    Boolean    TRUE if more data in this block to be written    Æ    userData    LongInt    Application-specific data    Æ    blockCreator    OSType    Creator of block written    Æ    blockType    OSType    Type of block written    DESCRIPTIONIf your application calls the PPCWrite function asynchronously, you must specify in the ioCompletion field either the address of a completion routine or NIL. If you set ioCompletion to NIL, you should poll the ioResult field of the PPC parameter block (from your application’s main event loop) to determine whether the PPC Toolbox has completed the requested operation. A value in the ioResult field other than 1 indicates that the call is complete. Note that it is unsafe to poll the ioResult field at interrupt time since the PPC Toolbox may be in the process of completing a call. See “PPC Toolbox Calling Conventions” beginning on page 11-14.If you call the PPCWrite function asynchronously, you must not change any of the fields in the parameter block until the call completes. The buffer pointed to by the record of data type PPCWritePBRec is owned by the PPC Toolbox until the call completes. These objects must not be deallocated or moved in memory while the call is in progress.The sessRefNum field specifies a session identifier. This must be a valid session reference number returned from a previous PPCStart, StartSecureSession, or PPCInform function. The bufferLength and bufferPtr fields specify the length and location of a buffer the message block is sent to. If the PPCWrite function returns a noErr result code, the actualLength field returns the actual size of the message block that was written.Set the more field to TRUE to indicate that you will be using the PPCWrite function again to append data to this message block. Set the more field to FALSE to indicate that this is the end of the data in this message block.The initiating port can specify any information in the userData field. The PPCRead function reports this data to the responding port upon its completion.Set the userData, blockCreator, and blockType fields for each message block that you create. These fields can give the receiving application information about how to process the contents of the message block. They are ignored when you append information to a message block.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the PPCWrite function areTrap macro    Selector    _PPC    $0006    The registers on entry and exit for this routine areRegisters on entry        A0    Pointer to a parameter block    D0    Selector code    Registers on exit        D0    Result code    RESULT CODESnoErr    0    No error    notInitErr    –900    PPC Toolbox has not been initialized yet    noGlobalsErr    –904    System unable to allocate memory, critical error    noSessionErr    –908    Invalid session reference number    badReqErr    –909    Bad parameter or invalid state for this operation    sessClosedErr    –917    The session has closed    SEE ALSOFor an example of the use of the PPCWrite function in conjunction with the PPCRead function, see “Exchanging Data During a PPC Session” beginning on page 11-39.Locating a Default User and Invalidating a UserYou use the GetDefaultUser function to obtain a user reference number and the name of the default user. To invalidate a particular user name and corresponding password, use the DeleteUserIdentity function.GetDefaultUserThe GetDefaultUser function returns the user reference number and the name of the default user.FUNCTION GetDefaultUser (VAR userRef: LongInt;                                 VAR userName: Str32): OSErr;userRef    If the GetDefaultUser function completes with no errors, then the userRef parameter returns the user reference number that represents the user name and password of the default user.userName    The name of the default user.DESCRIPTIONThe default user is specified in the Sharing Setup control panel. This function is useful if your application uses the PPCStart function to initiate a session with an application that does not support guest access. If the GetDefaultUser function completes with no errors, then the userRef parameter returns the user reference number that represents the user name and password of the default user. The userName parameter must contain NIL or a 32-byte character string. If the userName parameter contains NIL, then the user name string is not returned. If the userName parameter is a 32-byte character string, the 32-byte character string contains the user name that is specified in the Sharing Setup control panel when the GetDefaultUser function completes (with no errors). sWARNINGIf you are using Pascal, you cannot pass NIL for the userName parameter. For example, you cannot pass StringPtr(NIL)^ because Pascal performs range checking of string bounds.sASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the GetDefaultUser function areTrap macro    Selector    _PPC    $000D    The registers on entry and exit for this routine areRegisters on entry        A0    Pointer to a GetDefaultUserParams record    D0    Selector code    Registers on exit        D0    Result code    RESULT CODESnoErr    0    No error    noDefaultUserErr    –922    User has not specified owner name in Sharing Setup control panel    notLoggedInErr    –923    Default user reference number does not yet exist    SEE ALSOFor an example of the use of the GetDefaultUser function, see Listing 11-20 on page 11-45.DeleteUserIdentityTo invalidate a particular user name and corresponding password, use the DeleteUserIdentity function.FUNCTION DeleteUserIdentity (userRef: LongInt): OSErr;userRef    The reference number representing the user and password to be deleted.DESCRIPTIONThe DeleteUserIdentity function deletes the user name and password corresponding to the user reference number.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the DeleteUserIdentity function areTrap macro    Selector    _PPC    $000C    The registers on entry and exit for this routine areRegisters on entry        A0    Pointer to a DeleteUserParams record    D0    Selector code    Registers on exit        D0    Result code    RESULT CODESnoErr    0    No error    noUserRecErr    –928    Invalid user reference number    SEE ALSOFor an example of the use of the DeleteUserIdentity function, see “Invalidating Users” on page 11-44.Application-Defined RoutinesThis section describes the routine syntax for completion routines and port filter functions.Completion Routines for PPC Toolbox RoutinesYour application can provide a pointer to a completion routine in the ioCompletion field of a PPC parameter block. You can provide completion routines only for PPC Toolbox routines that you execute asynchronously.MyCompletionRoutineYou can provide a completion routine for a PPC Toolbox routine that you execute asynchronously.PROCEDURE MyCompletionRoutine (pb: PPCParamBlockPtr);pb    A pointer to the PPC parameter block passed to the PPC Toolbox function.DESCRIPTIONIf you specify a completion routine in the ioCompletion field of a PPC parameter block, it is called at interrupt time when the PPC Toolbox routine completes execution. The PPC Toolbox passes to your completion routine a pointer to the same PPC parameter block that your application passed to the PPC Toolbox routine.sWARNINGCompletion routines execute at the interrupt level and must preserve all registers other than A0, A1, and D0–D2. (Note that MPW C and MPW Pascal do this automatically.) Your completion routine must not make any calls to the Memory Manager, directly or indirectly, and it can’t depend on the validity of handles to unlocked blocks. The PPC Toolbox preserves the application global register A5.sSEE ALSOFor examples of completion routines, see Listing 11-9 on page 11-37, Listing 11-11 on page 11-38, and Listing 11-13 on page 11-39.Port Filter FunctionsThis section describes the port filter function that can be used by the PPCBrowser function.MyPortFilterYou can provide a pointer to a port filter function in the portFilter parameter of the PPCBrowser function.You can use a port filter function to refine the list of PPC ports that the PPCBrowser function displays in the program linking dialog box. FUNCTION MyPortFilter (locationName: LocationNamePtr;                               thePortInfo: PortInfoPtr): Boolean; locationNameA pointer to a location name record. This record specifies the location of the PPC port currently under consideration for display in the program linking dialog box.thePortInfoA pointer to a port information record. This record specifies the port information for the PPC port currently under consideration for display in the program linking dialog box.DESCRIPTIONThe PPCBrowser function calls your port filter function once for each port before it adds that port to the dialog list. Your port filter function should return TRUE for each port that should be displayed in the program linking dialog box, and FALSE for each port that shouldn’t be displayed.SEE ALSOFor an example of a port filter function, see Listing 11-3 on page 11-24. For a description of the location name record, see page 11-49. For a description of the port information record, see page 11-50.Summary of the PPC ToolboxPascal SummaryConstantsCONST            {gestalt selectors}    gestaltPPCToolboxAttr                                    = 'ppc ';                {PPC Toolbox attributes}    gestaltPPCToolboxPresent                                    = $0000;                {PPC Toolbox is present}    gestaltPPCSupportsRealTime                                    = $1000;                {real time only in system }                                                        { software version 7.0}    gestaltPPCSupportsOutGoing                                    = $0002;                {support of outgoing }                                                        { sessions across a network}    gestaltPPCSupportsIncoming                                    = $0001;                {user enabled program }                                                        { linking in Sharing Setup }                                                        { control panel}    {service type)    ppcServiceRealTime                                    = 1;                {real time only in System 7}    {look-up type}    ppcNoLocation                                    = 0;                {there is no PPCLocName}    ppcNBPLocation                                    = 1;                {use AppleTalk NBP}    ppcNBPTypeLocation                                    = 2;                {use just the NBP type, fill }                                                        { in the rest with default}    {port type}    ppcByCreatorAndType                                    = 1;                 {port type is specified as }                                                        { standard creator and type}    ppcByString                                    = 2;                 {port type is in Pascal }                                                         { string format}    {session request type returned in the PPCInform function}    ppcLocalOrigin                                     = 1;                {session initiated on }                                                        { local computer}     ppcRemoteOrigin                                    = 2;                {session initiated on }                                                        { remote computer}Data TypesTYPE     PPCServiceType                                 = SignedByte;                        {service type}    PPCLocationKind                                 = Integer;                        {look-up type}    PPCPortKinds                                = Integer;                        {port type}    PPCSessionOrigin                                = SignedByte;                        {local or remote}    PPCPortRefNum                                = Integer;                        {port reference number}    PPCSessRefNum                                = LongInt;                        {session reference number}    LocationNamePtr                     = ^LocationNameRec;    LocationNameRec                     =     RECORD        locationKindSelector: PPCLocationKind;                                                    {which variant}        CASE PPCLocationKind OF                                                     {ppcNoLocation: storage not }                                                            { used by this value}            ppcNBPLocation:                                                {NBP name entity}                                     (nbpEntity: EntityName);            ppcNBPTypeLocation:(nbpType: Str32);                                                {just the NBP type string }                                                            { for the PPCOpen function}    END;    PortInfoPtr = ^PortInfoRec;    PortInfoRec =    RECORD        filler1:                            SignedByte;                        {space holder}        authRequired:                            Boolean;                        {authentication required}        name:                            PPCPortRec;                        {port name}    END;    PPCPortPtr = ^PPCPortRec;    PPCPortRec =     RECORD        nameScript:                            ScriptCode;                        {script identifier}        name:                            Str32;                        {port name shown in program }                                                            { linking dialog box}            portKindSelector:                        PPCPortKinds;                        {general category of }                                                            { application}            CASE PPCPortKinds OF                ppcByString:                    (portTypeStr: Str32);                            {32 characters}                ppcByCreatorAndType:                                             {4-character creator and type}                                    (portCreator: OSType; portType: OSType);    END;        PPCParamBlockPtr = ^PPCParamBlockRec;        PPCParamBlockRec =         RECORD            CASE Integer OF            0: (openParam:                            PPCOpenPBRec);                            {PPCOPen params}            1: (informParam:                            PPCInformPBRec);                            {PPCInform params}            2: (startParam:                            PPCStartPBRec);                            {PPCStart params}            3: (acceptParam:                            PPCAcceptPBRec);                            {PPCAccept params}            4: (rejectParam:                            PPCRejectPBRec);                            {PPCReject params}            5: (writeParam:                            PPCWritePBRec);                            {PPCWrite params}            6: (readParam:                            PPCReadPBRec);                            {PPCRead params}            7: (endParam:                            PPCEndPBRec);                            {PPCEnd params}            8: (closeParam:                            PPCClosePBRec);                            {PPCClose params}            9: (listPortsParam:                            IPCListPortsPBRec);                            {IPCListPorts params}        END;        PortInfoArrayPtr = ^PortInfoArray;        PortInfoArray    = ARRAY[0..0] OF PortInfoRec;        PPCOpenPBPtr = ^PPCOpenPBRec;        PPCOpenPBRec =         RECORD            qLink:                     Ptr;                            {private}            csCode:                     Integer;                            {private}            intUse:                    Integer;                            {private}            intUsePtr:                    Ptr;                            {private}            ioCompletion:                    PPCCompProcPtr;                            {address of a }                                                            { completion routine}            ioResult:                     OSErr;                            {completion of operation}            reserved:                     ARRAY[1..5] OF LongInt;                                                            {private}            portRefNum:                        PPCPortRefNum;                        {PPC port identifier}            filler1:                        LongInt;                        {space holder}            serviceType:                        PPCServiceType;                        {real time only}            resFlag:                        SignedByte;                        {reserved field}            portName    :                    PPCPortPtr;                        {name of port to be opened}            locationName:                        LocationNamePtr;                        {location of port to be }                                                            { opened}            networkVisible:                        Boolean;                        {port is visible for }                                                            { browsing}            nbpRegistered:                        Boolean    ;                    {location name registered }                                                            { on network}        END;        PPCInformPBPtr = ^PPCInformPBRec;        PPCInformPBRec =         RECORD            qLink:                         Ptr;                        {private}            csCode:                         Integer;                        {private}            intUse:                        Integer;                        {private}            intUsePtr:                        Ptr;                        {private}            ioCompletion:                         PPCCompProcPtr;                        {address of a completion }                                                            { routine}            ioResult:                         OSErr;                        {completion of operation}             reserved:                         ARRAY[1..5] OF LongInt;                                                            {private}            portRefNum:                        PPCPortRefNum;                        {port identifier}            sessRefNum:                        PPCSessRefNum;                        {session identifier}            serviceType:                        PPCServiceType;                        {real time only}            autoAccept:                        Boolean;                        {automatic session }                                                            { acceptance}            portName:                        PPCPortPtr;                        {name of port that }                                                            { initiated a session}            locationName:                        LocationNamePtr;                        {location of port that }                                                            { initiated a session}            userName:                        StringPtr;                        {name of user that }                                                             { initiated a session}            userData:                        LongInt;                        {application-defined}            requestType:                        PPCSessionOrigin;                        {local or remote}        END;        PPCStartPBPtr = ^PPCStartPBRec;        PPCStartPBRec =         RECORD            qLink:                         Ptr;                        {private}            csCode:                         Integer;                        {private}            intUse:                        Integer;                        {private}            intUsePtr:                        Ptr;                        {private}            ioCompletion:                         PPCCompProcPtr;                        {address of a completion }                                                            { routine}            ioResult:                         OSErr;                        {completion of operation}            reserved:                         ARRAY[1..5] OF LongInt;                                                            {private}            portRefNum:                        PPCPortRefNum;                        {identifier for requested }                                                            { port}            sessRefNum:                        PPCSessRefNum;                        {session identifier}            serviceType:                        PPCServiceType;                        {real time only}            resFlag:                        SignedByte;                        {reserved field}            portName:                        PPCPortPtr;                        {name of port to be opened}            locationName:                        LocationNamePtr;                        {location of port to be }                                                            { opened}            rejectInfo:                        LongInt;                        {rejection of session}            userData:                        LongInt;                        {application-specific}            userRefNum:                        LongInt;                        {specifies an authenticated }                                                            { user}        END;        PPCAcceptPBPtr = ^PPCAcceptPBRec;        PPCAcceptPBRec =         RECORD            qLink:                         Ptr;                        {private}            csCode:                         Integer;                        {private}            intUse:                        Integer;                        {private}            intUsePtr:                        Ptr;                        {private}            ioCompletion:                         PPCCompProcPtr;                        {address of a completion }                                                            { routine}            ioResult:                         OSErr;                        {completion of operation}            reserved:                         ARRAY[1..5] OF LongInt;                                                            {private}            filler1:                        Integer;                        {space holder}            sessRefNum:                        PPCSessRefNum;                        {session identifier}        END;        PPCRejectPBPtr = ^PPCRejectPBRec;        PPCRejectPBRec =         RECORD            qLink:                         Ptr;                        {private}            csCode:                         Integer;                        {private}            intUse:                        Integer;                        {private}            intUsePtr:                        Ptr;                        {private}            ioCompletion:                         PPCCompProcPtr;                        {address of a completion }                                                            { routine}            ioResult:                         OSErr;                        {completion of operation}            reserved:                         ARRAY[1..5] OF LongInt;                                                            {private}            filler1:                        Integer;                        {space holder}            sessRefNum:                        PPCSessRefNum;                        {session identifier}            filler2:                        Integer;                        {space holder}            filler3:                        LongInt;                        {space holder}            filler4:                        LongInt;                        {space holder}            rejectInfo:                        LongInt;                        {rejection of session}        END;        PPCWritePBPtr = ^PPCWritePBRec;        PPCWritePBRec =         RECORD            qLink:                         Ptr;                        {private}            csCode:                         Integer;                        {private}            intUse:                        Integer;                        {private}            intUsePtr:                        Ptr;                        {private}            ioCompletion:                         PPCCompProcPtr;                        {address of a completion }                                                            { routine}            ioResult:                         OSErr;                        {completion of operation}            reserved:                         ARRAY[1..5] OF LongInt;                                                            {private}            filler1:                        Integer;                        {space holder}            sessRefNum:                        PPCSessRefNum;                        {session identifier}            bufferLength:                        Size;                        {length of buffer to be }                                                            { written}            actualLength:                        Size;                        {actual size of data written}            bufferPtr:                        Ptr;                        {location of buffer to be }                                                            { written}            more:                        Boolean;                        {additional data to be }                                                            { written}            filler2:                        SignedByte;                        {space holder}            userData:                        LongInt;                        {application-specific}            blockCreator:                        OSType;                        {creator of block to be }                                                            { written}            blockType:                        OSType;                        {type of block to be written}        END;        PPCReadPBPtr = ^PPCReadPBRec;        PPCReadPBRec =         RECORD            qLink:                         Ptr;                        {private}            csCode:                         Integer;                        {private}            intUse:                        Integer;                        {private}            intUsePtr:                        Ptr;                        {private}            ioCompletion:                         PPCCompProcPtr;                        {address of a completion }                                                             { routine}            ioResult:                         OSErr;                        {completion of operation}            reserved:                         ARRAY[1..5] OF LongInt;                                                            {private}            filler1:                        Integer;                        {space holder}            sessRefNum:                        PPCSessRefNum;                        {session identifier}            bufferLength:                        Size;                        {length of buffer to be read}            actualLength:                        Size;                        {actual size of the data }                                                            { read}            bufferPtr:                        Ptr;                        {location of buffer to be }                                                            { read}            more:                        Boolean;                        {additional data to be read}            filler2:                        SignedByte;                        {space holder}            userData:                        LongInt;                        {application-specific}            blockCreator:                        OSType;                        {creator of block to be read}            blockType:                        OSType;                        {type of block to be read}        END;                PPCEndPBPtr = ^PPCEndPBRec;        PPCEndPBRec =         RECORD            qLink:                         Ptr;                        {private}            csCode:                         Integer;                        {private}            intUse:                        Integer;                        {private}            intUsePtr:                        Ptr;                        {private}            ioCompletion:                         PPCCompProcPtr;                        {address of a completion }                                                            { routine}            ioResult:                         OSErr;                        {completion of operation}            reserved:                         ARRAY[1..5] OF LongInt;                                                            {private}            filler1:                        Integer;                        {space holder}            sessRefNum:                        PPCSessRefNum;                        {identifier of session to }                                                            { be terminated}        END;                PPCClosePBPtr = ^PPCClosePBRec;        PPCClosePBRec =         RECORD            qLink:                         Ptr;                        {private}            csCode:                         Integer;                        {private}            intUse:                        Integer;                        {private}            intUsePtr:                        Ptr;                        {private}            ioCompletion:                         PPCCompProcPtr;                        {address of a completion }                                                             { routine}            ioResult:                         OSErr;                        {completion of operation}            reserved:                         ARRAY[1..5] OF LongInt;                                                            {private}            portRefNum:                        PPCPortRefNum;                        {identifier of port to }                                                             { be closed}        END;                IPCListPortsPBPtr = ^IPCListPortsPBRec;        IPCListPortsPBRec =        RECORD            qLink:                         Ptr;                        {private}            csCode:                         Integer;                        {private}            intUse:                        Integer;                        {private}            intUsePtr:                        Ptr;                        {private}            ioCompletion:                         PPCCompProcPtr;                        {address of a completion }                                                            { routine}            ioResult:                         OSErr;                        {completion of operation}            reserved:                        ARRAY[1..5] OF LongInt;                                                            {private}            filler1:                        Integer;                        {space holder}            startIndex:                        Integer;                         {index to the port entry }                                                             { list}            requestCount:                        Integer;                        {number of entries to }                                                            { be returned}            actualCount:                        Integer;                        {actual number of port names}            portName:                        PPCPortPtr;                         {list of port names}             locationName:                        LocationNamePtr;                        {location of port names}            bufferPtr:                        PortInfoArrayPtr;                         {pointer to a buffer}        END;PPC Toolbox RoutinesInitializing the PPC ToolboxFUNCTION PPCInit: OSErr;Using the Program Linking Dialog BoxFUNCTION PPCBrowser    (prompt: Str255; applListLabel: Str255; defaultSpecified: Boolean; VAR theLocation: LocationNameRec; VAR thePortInfo: PortInfoRec; portFilter: PPCFilterProcPtr; theLocNBPType: Str32): OSErr;Obtaining a List of PortsFUNCTION IPCListPorts    (pb: IPCListPortsPBPtr; async: Boolean): OSErr; Opening and Closing a PortFUNCTION PPCOpen    (pb: PPCOpenPBPtr; async: Boolean): OSErr;FUNCTION PPCClose    (pb: PPCClosePBPtr; async: Boolean): OSErr; Starting and Ending a SessionFUNCTION PPCStart    (pb: PPCStartPBPtr; async: Boolean): OSErr;FUNCTION StartSecureSession    (pb: PPCStartPBPtr; VAR userName: Str32; useDefault: Boolean; allowGuest: Boolean; VAR guestSelected: Boolean; prompt: Str255): OSErr;FUNCTION PPCEnd    (pb: PPCEndPBPtr; async: Boolean): OSErr; Receiving, Accepting, and Rejecting a SessionFUNCTION PPCInform    (pb: PPCInformPBPtr; async: Boolean): OSErr; FUNCTION PPCAccept    (pb: PPCAcceptPBPtr; async: Boolean): OSErr;FUNCTION PPCReject    (pb: PPCRejectPBPtr; async: Boolean): OSErr;Reading and Writing DataFUNCTION PPCRead    (pb: PPCReadPBPtr; async: Boolean): OSErr;FUNCTION PPCWrite    (pb: PPCWritePBPtr; async: Boolean): OSErr;Locating a Default User and Invalidating a UserFUNCTION GetDefaultUser    (VAR userRef: LongInt; VAR userName: Str32) : OSErr; FUNCTION DeleteUserIdentity    (userRef: LongInt): OSErr; Application-Defined RoutinesPROCEDURE MyCompletionRoutine(pb: PPCParamBlockPtr);FUNCTION MyPortFilter    (locationName: LocationNameRec; thePortInfo: PortInfoRec): Boolean;C SummaryConstantsCONST        enum {    /*gestalt selectors*/    #define gestaltPPCToolboxAttr                                     'ppc '                /*PPC Toolbox attributes*/    gestaltPPCToolboxPresent                                    = $0000,                /*PPC Toolbox is present*/    gestaltPPCSupportsRealTime                                    = $1000,                /*real time only in system */                                                        /* software version 7.0*/    gestaltPPCSupportsOutGoing                                    = $0002,                /*support of outgoing */                                                        /* sessions across a network*/    gestaltPPCSupportsIncoming                                    = $0001                /*user enabled program */                                                        /* linking in Sharing Setup */                                                        /* control panel*/};enum {    /*service type*/    ppcServiceRealTime                                    = 1                /*real time only in System 7*/};enum {    /*look-up type*/    ppcNoLocation                                    = 0,                /*there is no PPCLocName*/    ppcNBPLocation                                    = 1,                /*use AppleTalk NBP*/    ppcNBPTypeLocation                                    = 2                /*use just the NBP type, fill */                                                        /* in the rest with default*/};enum {    /*port type*/    ppcByCreatorAndType                                    = 1,                 /*port type is specified as */                                                        /* standard Mac creator and type*/    ppcByString                                    = 2                 /*port type is in Pascal */                                                         /* string format*/};enum {    /*session request type returned in the PPCInform function*/    ppcLocalOrigin                                     = 1,                /*session initiated on */                                                        /* local computer*/     ppcRemoteOrigin                                    = 2                /*session initiated on */                                                        /* remote computer*/};Data Typestypedef unsigned char PPCServiceType;                                                             /*service type*/typedef short PPCLocationKind;                                                             /*look-up type*/typedef short PPCPortKinds;                                                             /*port type*/typedef unsigned char PPCSessionOrigin;                                                            /*local or remote*/typedef short PPCPortRefNum;                                                            /*port reference number*/typedef long PPCSessRefNum;                                                            /*session reference number*/struct PPCPortRec {    ScriptCode nameScript;                                                        /*script identifier*/    Str32 name;                                                        /*port name shown in program */                                                            /* linking dialog box*/    PPCPortKinds portKindSelector;                                                        /*general category of */                                                            /* application*/    union        Str32 portTypeStr;                                                    /*32 characters*/        struct            OSType creator;                                                /*4-character creator and */            OSType type;                                                /* type*/            } port;        } u;};typedef struct PPCPortRec PPCPortRec;typedef PPCPortRec *PPCPortPtr;struct LocationNameRec {    PPCLocationKind locationKindSelector;                                                        /*which variant*/    union {                                                            EntityName                 nbpEntity;                                    /*NBP name entity*/        Str32                 nbpType;                                    /*just the NBP type string */                                                            /* for the PPCOpen function*/        } u;};typedef struct LocationNameRec LocationNameRec;typedef LocationNameRec *LocationNamePtr;struct PortInfoRec {    unsigned char                     filler1;                                    /*space holder*/    Boolean                     authRequired;                                    /*authentication required*/    PPCPortRec                     name;                                    /*port name*/};typedef struct PortInfoRec PortInfoRec;typedef PortInfoRec *PortInfoPtr;typedef PortInfoRec *PortInfoArrayPtr;typedef pascal Boolean (*PPCFilterProcPtr) (LocationNamePtr, PortInfoPtr);/*procedures you need to write*//*ex: void MyCompletionRoutine(PPCParamBlkPtr pb)*//*ex: pascal Boolean MyPortFilter(LocationNamePtr, PortInfoPtr)*/typedef ProcPtr PPCCompProcPtr;#define PPCHeader \    Ptr                        qLink;                                /*private*/    unsigned short                        csCode;                                /*private*/    unsigned short                        intUse;                                /*private*/    Ptr                        intUsePtr;                                /*private*/    PPCCompProcPtr                        ioCompletion;                                /*address of a */                                                            /* completion routine*/    OSErr                        ioResult;                                /*completion of operation*/    unsigned long                        Reserved[5];                                /*private*/struct PPCOpenPBRec {    PPCHeader    PPCPortRefNum                     portRefNum;                                    /*PPC port identifier*/    long                     filler1;                                    /*space holder*/    PPCServiceType     serviceType;                                                    /*real time only*/    unsigned char                     resFlag;                                    /*reserved field*/    PPCPortPtr                     portName;                                    /*name of port to be opened*/    LocationNamePtr locationName;                                                        /*location of port to be */                                                            /* opened*/    Boolean                     networkVisible;                                    /*port is visible for */                                                            /* browsing*/    Boolean                     nbpRegistered;                                    /*location name registered */                                                            /* on network*/};typedef struct PPCOpenPBRec PPCOpenPBRec;typedef PPCOpenPBRec *PPCOpenPBPtr;struct PPCInformPBRec {    PPCHeader    PPCPortRefNum                         portRefNum;                                /*port identifier*/    PPCSessRefNum                         sessRefNum;                                /*session identifier*/    PPCServiceType                         serviceType;                                /*real time only*/    Boolean                         autoAccept;                                /*automatic session acceptance*/    PPCPortPtr                         portName;                                /*name of port that */                                                            /* initiated a session*/    LocationNamePtr                         locationName;                                /*location of port that */                                                            /* initiated a session*/    StringPtr                         userName;                                /*name of user that */                                                             /* initiated a session*/    unsigned long                         userData;                                /*application-defined*/    PPCSessionOrigin                         requestType;                                /*local or remote*/};typdef struct PPCInformPBRec PPCInformPBPtr;struct PPCStartPBRec {    PPCHeader    PPCPortRefNum                         portRefNum;                            /*identifier for requested */                                                        /* port*/    PPCSessRefNum                         sessRefNum;                            /*session identifier*/    PPCServiceType                         serviceType;                            /*real time only*/    unsigned char                        resFlag;                            /*reserved field*/    PPCPortPtr                         portName;                            /*name of port to be opened*/    LocationNamePtr                         locationName;                            /*location of port to be opened*/    unsigned long                         rejectInfo;                            /*rejection of session*/    unsigned long                         userData;                            /*application-specific*/    unsigned long                         userRefNum;                            /*specifies an authenticated user*/};typedef struct PPCStartPBRec PPCStartPBRec;typedef PPCStartPBRec *PPCStartPBPtr;struct PPCAcceptPBRec {        PPCHeader        short                     filler1;                            /*space holder*/        PPCSessRefNum                     sessRefNum;                            /*session identifier*/};typedef struct PPCAcceptPBRec PPCAcceptPBRec;typedef PPCAcceptPBRec *PPCAcceptPBPtr;struct PPCRejectPBRec {        PPCHeader        short                     filler1;                            /*space holder*/        PPCSessRefNum                     sessRefNum;                            /*session identifier*/        short                     filler2;                            /*space holder*/        long                     filler3;                            /*space holder*/        long                     filler4;                            /*space holder*/        unsigned long                     rejectInfo;                            /*rejection of session*/};typedef struct PPCRejectPBRec PPCRejectPBRec;typedef PPCRejectPBRec *PPCRejectPBPtr;struct PPCWritePBRec {    PPCHeader    short                     filler1;                                /*space holder*/    PPCSessRefNum                     sessRefNum;                                /*session identifier*/    Size                     bufferLength;                                /*length of buffer to be written*/    Size                     actualLength;                                /*actual size of data written*/    Ptr                     bufferPtr;                                /*location of buffer to be */                                                        /* written*/    Boolean                     more;                                /*additional data to be written*/    unsigned char                     filler2;                                /*space holder*/    unsigned long                     userData;                                /*application-specific*/    OSType                     blockCreator;                                /*creator of block to be written*/    OSType                     blockType;                                /*type of block to be written*/};typedef struct PPCWritePBRec PPCWritePBRec;typedef PPCWritePBRec *PPCWritePBPtr;struct PPCReadPBRec {    PPCHeader    short                     filler1;                                /*space holder*/    PPCSessRefNum                     sessRefNum;                                /*session identifier*/    Size                     bufferLength;                                /*length of buffer to be read*/    Size                     actualLength;                                /*actual size of the data read*/    Ptr                     bufferPtr;                                /*location of buffer to be read*/    Boolean                     more;                                /*additional data to be read*/    unsigned char                     filler2;                                /*space holder*/    unsigned long                     userData;                                /*application-specific*/    OSType                     blockCreator;                                /*creator of block to be read*/    OSType                     blockType;                                /*type of block to be read*/};typedef struct PPCReadPBRec PPCReadPBRec;typdef PPCReadPBRec *PPCReadPBPtr;struct PPCEndPBRec {    PPCHeader    short                     filler1;                                /*space holder*/    PPCSessRefNum                     sessRefNum;                                /*identifier of session to */                                                        /* be terminated*/};typedef struct PPCEndPBRec PPCEndPBRec;typedef PPCEndPBRec *PPCEndPBPtr;struct PPCClosePBRec {    PPCHeader    PPCPortRefNum                     portRefNum;                                /*identifier of port to */                                                         /* be closed*/};typedef struct PPCClosePBRec PPCClosePBRec;typedef PPCClosePBRec *PPCClosePBPtr;struct IPCListPortsPBRec {    PPCHeader    short                         filler1;                            /*space holder*/    unsigned short                         startIndex;                             /*index to the port entry list*/     unsigned short                         requestCount;                            /*number of entries to */                                                        /* be returned*/    unsigned short                         actualCount;                            /*actual number of port names*/    PPCPortPtr                         portName;                             /*list of port names*/     LocationNamePtr                         locationName;                            /*location of port names*/    PortInfoArrayPtr                         bufferPtr;                            /*pointer to a buffer*/};typedef struct IPCListPortsPBRec IPCListPortsPBRec;typedef IPCListPortsPBRec *IPCListPortsPBPtr;union PPCParamBlockRec {    PPCOpenPBRec                         openParam;                            /*PPCOpen params*/    PPCInformPBRec                         informParam;                            /*PPCInform params*/    PPCStartPBRec                         startParam;                            /*PPCStart params*/    PPCAcceptPBRec                         acceptParam;                            /*PPCAccept params*/    PPCRejectPBRec                         rejectParam;                            /*PPCReject params*/    PPCWritePBRec                         writeParam;                            /*PPCWrite params*/    PPCReadPBRec                         readParam;                            /*PPCRead params*/    PPCEndPBRec                         endParam;                            /*PPCEnd params*/    PPCClosePBRec                         closeParam;                            /*PPCClose params*/    IPCListPortsPBRec                     listPortsParam;                                 /*IPCListPorts params*/};typdef union PPCParamBlockRec PPCParamBlockRec;typdef PPCParamBlockRec *PPCParamBlockPtr;PPC Toolbox RoutinesInitializing the PPC Toolboxpascal OSErr PPCInit    (void);Using the Program Linking Dialog Boxpascal OSErr PPCBrowser    (ConstStr255Param prompt, ConstStr255Param applListLabel, Boolean defaultSpecified, LocationNameRec *theLocation, PortInfoRec *thePortInfo, PPCFilterProcPtr portFilter, ConstStr32Param theLocNBPType);Obtaining a List of Portspascal OSErr IPCListPorts    (IPCListPortsPBPtr pb, Boolean async); Opening and Closing a Portpascal OSErr PPCOpen    (PPCOpenPBPtr pb, Boolean async);pascal OSErr PPCClose    (PPCClosePBPtr pb, Boolean async); Starting and Ending a Sessionpascal OSErr PPCStart    (PPCStartPBPtr pb, Boolean async);pascal OSErr StartSecureSession(PPCStartPBPtr pb, Str32 userName, Boolean useDefault, Boolean allowGuest, Boolean *guestSelected, ConstStr255Param prompt);pascal OSErr PPCEnd    (PPCEndPBPtr pb, Boolean async); Receiving, Accepting, and Rejecting a Sessionpascal OSErr PPCInform    (PPCInformPBPtr pb, Boolean async); pascal OSErr PPCAccept    (PPCAcceptPBPtr pb, Boolean async);pascal OSErr PPCReject    (PPCRejectPBPtr pb, Boolean async);Reading and Writing Datapascal OSErr PPCRead    (PPCReadPBPtr pb, Boolean async);pascal OSErr PPCWrite    (PPCWritePBPtr pb, Boolean async);Locating a Default User and Invalidating a Userpascal OSErr GetDefaultUser    (unsigned long *userRef, Str32 userName); pascal OSErr DeleteUserIdentity(unsigned long userRef); Application-Defined Routinesvoid MyCompletionRoutine    (PPCParamBlockPtr pb);pascal Boolean MyPortFilter    (LocationNameRec locationName, PortInfoRec thePortInfo);Assembly-Language SummaryTrap MacrosTrap Macros Requiring Routine Selectors_Pack9Selector    Routine    $0D00    PPCBrowser    _PPCSelector    Routine    $0000    PPCInit    $0001    PPCOpen    $0002    PPCStart    $0003    PPCInform    $0004    PPCAccept    $0005    PPCReject    $0006    PPCWrite    $0007    PPCRead    $0008    PPCEnd    $0009    PPCClose    $000A    IPCListPorts    $000C    DeleteUserIdentity    $000D    GetDefaultUser    $000E    StartSecureSession    Result CodesnoErr    0    No error    paramErr    –50    Illegal parameter    memFullErr    –108    Not enough memory to load PPCBrowser package    userCanceledErr    –128    User decided not to conduct a session    notInitErr    –900    PPC Toolbox has not been initialized yet    nameTypeErr    –902    Invalid or inappropriate locationKindSelector in location name    noPortErr    –903    Unable to open port or bad port reference number    noGlobalsErr    –904    System unable to allocate memory, critical error    localOnlyErr    –905    Network activity is currently disabled    destPortErr    –906    Port does not exist at destination    sessTableErr    –907    PPC Toolbox is unable to create a session    noSessionErr    –908    Invalid session reference number    badReqErr    –909    Bad parameter or invalid state for this operation    portNameExistsErr    –910    Another port is already open with this name    noUserNameErr    –911    User name unknown on destination machine    userRejectErr    –912    Destination rejected the session request    noResponseErr    –915    Unable to contact application    portClosedErr    –916    The port was closed    sessClosedErr    –917    The session has closed    badPortNameErr    –919    PPC port record is invalid    noDefaultUserErr    –922    User has not specified owner name in Sharing Setup control panel    notLoggedInErr    –923    Default user reference number does not yet exist    noUserRefErr    –924    Unable to create a new user reference number    networkErr    –925    An error has occurred in the network    noInformErr    –926    PPCStart failed because target application did not have an inform pending    authFailErr    –927    User’s password is wrong    noUserRecErr    –928    Invalid user reference number    badServiceMethodErr    –930    Service method is other than ppcServiceRealTime    badLocNameErr    –931    Location name is invalid    guestNotAllowedErr    –932    Destination port requires authentication    nbpDuplicate    –1027    Location name represents a duplicate on this computer    Listing 12-0Table 11-0Data Access ManagerContentsAbout the Data Access Manager12-5The High-Level Interface12-7Sending a Query Through the High-Level Interface12-8Retrieving Data Through the High-Level Interface12-9The Low-Level Interface12-9Sending a Query Through the Low-Level Interface12-10Retrieving Data Through the Low-Level Interface12-11Comparison of the High-Level and Low-Level Interfaces12-11Using the Data Access Manager12-12Executing Routines Asynchronously12-12General Guidelines for the User Interface12-13Keep the User in Control12-13Provide Feedback to the User12-13Using the High-Level Interface12-14Writing a Status Routine for High-Level Functions12-22Using the Low-Level Interface12-28Getting Information About Sessions in Progress12-35Processing Query Results12-36Getting Query Results12-36Converting Query Results to Text12-42Creating a Query Document12-46User Interface Guidelines for Query Documents12-46Contents of a Query Document12-48Query Records and Query Resources12-51Writing a Query Definition Function12-51Data Access Manager Reference12-54Data Structures12-54The Asynchronous Parameter Block12-55The Query Record12-56The Results Record12-58Data Access Manager Routines12-59Initializing the Data Access Manager12-60High-Level Interface: Handling Query Documents12-61High-Level Interface: Handling Query Results12-65Low-Level Interface: Controlling the Session12-68Low-Level Interface: Sending and Executing Queries12-76Low-Level Interface: Retrieving Results12-82Installing and Removing Result Handlers12-86Application-Defined Routines12-89Resources12-90The Query Resource12-90The Query String Resource12-91The Query Definition Function Resource12-92Summary of the Data Access Manager12-93Pascal Summary12-93Constants12-93Data Types12-94Data Access Manager Routines12-96Application-Defined Routines12-98C Summary12-98Constants12-98Data Types12-100Data Access Manager Routines12-101Application-Defined Routines12-103Assembly-Language Summary12-103Trap Macros12-103Result Codes12-104Data Access ManagerThis chapter describes how your application can use the Data Access Manager to gain access to data in another application. It also tells you how to provide templates to be used for data transactions.The Data Access Manager is available in System 7 and later versions. Use the Gestalt Manager to determine whether the Data Access Manager is present. To determine whether the Data Access Manager is available, use the Gestalt function with the gestaltDBAccessMgrAttr environmental selector. If the Data Access Manager is not available, the Gestalt function returns an error. For more information on the Gestalt Manager, see Inside Macintosh: Operating System Utilities.The Data Access Manager allows your application to communicate with a database or other data source even if you do not know anything about databases in general or the specific data source with which the users of your software will be communicating. All your application needs are a few high-level Data Access Manager functions and access to a file called a query document. The query document, provided by another application, contains commands and data in the format appropriate for the database or other data source. The string of commands and data sent to the data source are referred to as a query. Note that a query does not necessarily extract data from a data source; it might only send data or commands to a database or other application.The Data Access Manager makes it easy for your application to communicate with data sources. You need only add a menu item that opens a query document, using a few standard Data Access Manager functions to implement the menu selection. Users of your application can then access a database or other data source whenever they have the appropriate query documents. A user of a word-processing program might use this feature, for example, to obtain access to archived material, dictionaries in a variety of languages, or a database of famous quotations. A user of a spreadsheet program might use a query document to obtain tax records, actuarial tables, or other data. A user of an art or computer-aided design program might download archived illustrations or designs. And for the user of a database application for the Macintosh computer, the Data Access Manager can provide the resources and power of a mainframe database.The Data Access Manager also provides a low-level interface for use by applications that are capable of creating their own queries and that therefore do not have to use query documents. If your application uses only the high-level interface and relies on query documents created by other programs, then all the routines you need to know are described in this chapter. However, if you want to create a query document or an application that uses the low-level interface, then you must also be familiar with the command language used by the data server. You need the information in this chapter if you want your application to access data in other applications or if you want to write a query document.NoteThe Data Access Manager makes it easy for your application to communicate with a database running on a remote computer, and this chapter generally assumes that you are using it for that purpose. However, there is no reason why the database could not be local—that is, running on the same computer as your application. To implement such a system, you would have to have a database that runs on a Macintosh computer and that has a command-language interface, plus a database extension that can use that command language. In most cases, it would be much simpler to run the database as a separate application and use the Clipboard to transfer data into and out of the database.u Note also that the program containing the data need not be a database. With the appropriate database extension, your application could read data from a spreadsheet, for example, or any other program that stores data.Apple Computer, Inc. provides a database extension that uses Data Access Language (DAL). A database extension provides an interface between the Data Access Manager and the database or other program that contains the data. If you want to write an application that uses the low-level interface to communicate with a Data Access Language server, or if you want to create a query document that uses Data Access Language, you must be familiar with that language. Data Access Language Programmer’s Reference, available from APDA, fully describes this language.About the Data Access ManagerThe Data Access Manager constitutes a standard interface that allows Macintosh applications to communicate with any number of databases or other data sources through a variety of data servers. As used in this chapter, a data server is the application that acts as an interface between the database extension on the Macintosh computer and the data source, which can be on the Macintosh computer or on a remote host computer. A data server can be a database server program, such as a Data Access Language server, which can provide an interface to a variety of different databases, or it can be the data source itself, such as a Macintosh application.The Data Access Manager has two application interfaces: the high-level interface and the low-level interface. If the proper database extension and query documents are available in the user’s system, you can use the high-level interface to communicate with a data source without having any knowledge of the command language that the data server uses. Even if you use the low-level interface, your application can isolate the user from any specific knowledge of the data source or the data server’s command language.This section presents an overview and description of the Data Access Manager, including diagrams and conceptual descriptions of the components and processes involved in using the high-level and low-level interfaces. Next, “Using the Data Access Manager” beginning on page 12-12 includes descriptions, flowcharts, and program fragments that provide a step-by-step guide to the use of the high-level and low-level interfaces. “Creating a Query Document” beginning on page 12-46 describes the contents and function of a query document. You do not have to read this section unless you are writing an application that creates query documents, although if you are using the high-level interface you might be interested to know just how a query document works. Figure 12-1 illustrates connections between Macintosh applications and a database on a remote computer. The arrows in Figure 12-1 show the flow of information, not the paths of commands or control signals. See Figure 12-2 on page 12-8 and Figure 12-3 on page 12-10 for the sequences involved in sending and retrieving data.Figure 12-1    A connection with a databaseThe High-Level InterfaceAs Figure 12-1 on page 12-6 shows, a database-naive application—that is, one that cannot prepare a query for a specific data server—uses the Data Access Manager’s high-level routines to communicate with a data server. Because the application cannot prepare a query, it must use a query document to provide one. A query document can contain code, called a query definition function, that prompts the user for information and modifies the query before the Data Access Manager sends it to the data server. The exact format of a query definition function is described in “Writing a Query Definition Function” on page 12-51.NoteThe term query refers to any string of commands (and associated data) that can be executed by a data server. A query can send data to a data source, retrieve data from a data source, or reorganize the data in a data source. The Data Access Manager does not interpret or execute the query; it only implements the interface (sometimes called the application program interface, or API) that allows you to send the query to the data server.u When you want to use the high-level routines to execute a query on a data server, you first select a query document or allow the user to select one. You use high-level routines to n    get the query from the query document n    execute the query definition function to modify the queryn    send the query to the data servern    retrieve the results from any query that asks for information from the data sourcen    convert to text the results returned by a queryFor example, suppose a company that makes rubber ducks has a database on a minicomputer that contains a mailing list of all its customers. The database has a Data Access Language interface, and the company’s marketing manager has a Macintosh computer with an application that uses high-level Data Access Manager routines to communicate with the remote database server. As Figure 12-2 illustrates, the marketing manager must also have a query document, created by another application, that she can use to get an address from the mailing list on the remote minicomputer. The query document can be as complex or as simple as its creator cares to make it; in this example, the query document is designed specifically to obtain addresses from the rubber duck mailing list. The marketing manager might have several other query documents available as well: one to extract a mailing list for a specific zip code, one to list all of the customers who have made a purchase within the last year, and so on.Notice that once the query document has sent the query to the data server, the Data Access Manager handles the data retrieval. Although query documents and high-level Data Access Manager routines make it very easy for you to request data from a data source, there is no way for a query document to verify that data sent to a data source has been successfully received. For that reason, it is recommended that you use the low-level interface to send data to a data source or update data in a data source.Figure 12-2    Using high-level Data Access Manager routinesSending a Query Through the High-Level InterfaceTo obtain a list of addresses from the mailing list, the marketing manager chooses the Open Query menu command from the File menu in her application. From the list of query documents displayed, she chooses one named Rubber Duck Address List. The application calls the Data Access Manager function DBGetNewQuery, specifying the resource ID of the query ('qrsc') resource in the Rubber Duck Address List query document. The DBGetNewQuery function creates a query record and a partial query from the information in the query resource. The partial query specifies the type of data (character strings) and the columns from which the data items should come (the name and address columns). The partial query lacks some specific data (the rows that should be searched) that is needed to complete the search criteria. Next, the application calls the DBStartQuery function, which in turn calls the query definition function in the query document. The query definition function displays a dialog box that asks for the purchase dates to search. When the marketing manager types in the requested information and clicks OK, the query definition function adds the data to the partial query in memory. The query is now ready to be executed. Next, the DBStartQuery function sends the query to the Data Access Language database extension, and the database extension sends the query over a communications network to the remote Data Access Language server. Finally, the DBStartQuery function commands the Data Access Language server to execute the query. Retrieving Data Through the High-Level InterfaceWhen the application is ready to retrieve the data that it requested from the database, the application calls the DBGetQueryResults function. This function determines when the data is available, retrieves it from the data server, and places the data in a record in memory. The application can then call the DBResultsToText function, which uses routines called result handlers to convert each data item to a character string. The DBResultsToText function passes to the application a handle to the converted data. The application then displays the list of customers for the marketing manager.Data items and result handlers are described in “Processing Query Results” beginning on page 12-36.The Low-Level InterfaceA database-aware application communicates through the low-level interface of the Data Access Manager. You can use the low-level interface ton    initiate communication with the data server, sending the user name, password, and other information to the data servern    send a query to the data servern    execute the query that you have sent to the data servern    halt execution of the queryn    return status and errors from the data servern    send data to the data sourcen    retrieve data from the data sourceFor example, suppose once again that a company that makes rubber ducks has a mailing list of all of its customers in a database on a minicomputer, and the database has a Data Access Language interface. This time, suppose the Macintosh application the marketing manager is using calls low-level Data Access Manager routines to communicate with the remote database server. Figure 12-3 illustrates the use of the low-level interface. Notice that if you use the high-level interface (Figure 12-2), the query document and the Data Access Manager prepare the query, send the query, retrieve the query results, and translate the data for you. If you use the low-level interface, however, you must perform these functions yourself.Figure 12-3    Using low-level Data Access Manager routinesSending a Query Through the Low-Level InterfaceTo update the mailing list with a new address for customer Marvin M., the marketing manager enters the new address into her application. The application prepares a Data Access Language statement (a query) that specifies the type of data (a character string), the column into which the data item should go (the address column), the row to be modified (the Marvin M. row), plus the actual data the application wishes to send (Marvin M.’s address). The application then passes this query to the Data Access Manager using the low-level interface. (The application can send the query in several pieces or all at once.) The Data Access Manager sends the query to the Data Access Language database extension in the Macintosh computer, and the database extension sends the query to the remote Data Access Language server. Retrieving Data Through the Low-Level InterfaceOnce the query begins executing, the application can periodically check with the data server to determine whether the data is ready (Figure 12-3). When the data is available, the application must retrieve it one data item at a time. An application that uses the low-level interface must determine the data type of each data item, convert the data into a format that is meaningful to the user, and store the data in memory allocated by the application. Data types are described in “Getting Query Results” beginning on page 12-36.Note that neither the Data Access Manager nor the DAL database extension reads, modifies, or acts on the query that an application sends to the data server. The data server does execute the query, causing the data source to accept new data or prepare data for the application. To use the low-level interface to communicate with a data server, your application must be capable of preparing a query that can be executed by the data server.Comparison of the High-Level and Low-Level InterfacesAn application that uses the low-level interface to send a query to the data server must prepare the query, initiate communication with the data server, send the query to the data server, and execute the query. If it requested data to be returned, the application must determine when the data is ready, and retrieve the data one item at a time. Each step in this process requires calling one or more low-level routines. The high-level interface between the Data Access Manager and the application, in contrast, consists of only a few routines, each of which might call several low-level routines to accomplish its tasks. For example, a single high-level function can call the query definition function, initiate communication with the data server, send the query to the data server, and execute the query. Because the high-level interface is very easy to use and requires no specific knowledge of the data source or database server, you can add high-level data access to your application very easily. Then, whenever someone provides a query document for use with a specific data server, the user can take advantage of the data access capability included in your application. However, because there is no way for a query document to verify that data sent to a data source has been successfully received, it is recommended that you use the low-level interface to send data to a data source or update data in a data source.Although in concept the low-level routines and high-level routines serve separate purposes, there is nothing to prevent you from using calls to both in a single application. For example, you might use low-level routines to send a query to a data server and high-level routines to read the results and convert them to text.Using the Data Access ManagerThere are at least three different ways in which you can use the Data Access Manager to communicate with a data source. You cann    use low-level interface routines to send queries and retrieve data from the data source. In this case, your application must be capable of preparing a query in a language appropriate for the data server.n    use high-level interface routines to send queries and retrieve data from the data source. In this case, you must have one or more query documents provided by another application.n    create your own query documents and use high-level interface routines to send queries and retrieve data from the data source. In this case, your application must be capable of preparing a query, but it can use the same query repeatedly once it has been prepared. This section describes how to use the high-level and low-level interfaces to the Data Access Manager to send queries to a data server. This section also describes how to call Data Access Manager functions asynchronously, how to determine the status of the high-level functions at various points in their execution (and cancel execution if you so desire), how to obtain information about Data Access Manager sessions that are in progress, and how to retrieve query results and convert them to text. Executing Routines AsynchronouslyAll of the Data Access Manager low-level routines and some of the high-level routines can execute asynchronously—that is, the routine returns control to your application before the routine has completed execution. Your application must call the Event Manager’s WaitNextEvent function periodically to allow an asynchronous routine to complete execution. NoteThe database extension is responsible for implementing asynchronous execution of Data Access Manager routines. For example, if you call the DBSend function to send a query to a data server, and the database extension calls a device driver, the database extension can return control to your application as soon as the device driver has placed its routine in the driver input/output (I/O) queue. If you attempt to execute a routine asynchronously and the database extension that the user has selected does not support asynchronous execution, the routine returns a result code of rcDBAsyncNotSupp and terminates execution.u All Data Access Manager routines that can execute asynchronously take as a parameter a pointer to a parameter block known as the asynchronous parameter block. If the value of this pointer is NIL, the function is executed synchronously—that is, the routine does not return control to your application until execution is complete. General Guidelines for the User InterfaceWhen you use the Data Access Manager to provide data access, you should keep two important principles in mind: keep the user in control, and provide feedback to the user. Keep the User in ControlWhen designing a data access feature or application, keep in mind that the user should have as much access to the Macintosh computer’s abilities as possible. Design your application so that most of the data access process happens in the background. Call the Data Access Manager asynchronously whenever the database extension you are using supports asynchronous calls. Because data retrieval queries can take minutes or even hours to complete, they should always run in the background.After issuing a query, return control of the computer to users so that they may work on other tasks or switch to other applications while the query runs. Whenever a background task requires the user’s attention, follow the suggestions in Macintosh Human Interface Guidelines regarding user notification. A background task should never take control from the user by posting an alert box in front of the active application’s windows. Any message that you post should identify the query that requires attention. For example, an alert box might display the message “The query Get Employee Information was canceled because the connection was unexpectedly broken.”If your application allows more than one simultaneous connection to data sources or allows more than one query document to run, provide a modeless window that lists the open connections and queries, displays the status of each, and allows the user to cancel them if necessary. Allow the user to limit the amount of disk space that must remain free after any transaction. For example, a user may wish to specify that 1 MB of space always be free. Cancel any transaction that would exceed the user’s limit and notify the user. Provide Feedback to the UserKeep the user informed about status, progress, and error conditions, and allow the user to cancel an interaction whenever possible. Inform the user before the application becomes modal and the computer becomes unavailable. Use the spinning beach ball cursor or the animated wristwatch cursor to indicate a process that takes several seconds to complete. Use a dialog box to indicate any process that lasts longer than a few seconds. For example, connecting to a remote database could take a couple of minutes. In this case include a Cancel button in the dialog box so that the user can cancel the operation. When possible, display a progress indicator to show how long a process lasts. Warn the user before doing anything potentially dangerous or irreversible, such as deleting all of a user’s data files to replace them with data retrieved from a data source.When a data retrieval query terminates prematurely, make the retrieved data available to the user but warn the user that it is incomplete. The user can then evaluate the partial data before deciding whether to run the query again. Using the High-Level InterfaceUse the high-level interface to the Data Access Manager if you want to use a query document to do the work of communicating with a data source. You can use the high-level interface to open a query document, execute the query definition function in the query document, establish communication (initiate a session) with a data server, send the query to the data server, execute the query, retrieve any data requested by the query, and convert the retrieved data to text. Although two or three high-level routines accomplish most of these tasks, you may need to call a few low-level routines as well to control a session with a data server. Applications that implement this type of data access must provide user control and feedback as described in “General Guidelines for the User Interface” on page 12-13. In addition, you should include an Open Query command in the File menu. The Open Query command is equivalent to the Open (file) command in meaning. When the user chooses this command, display an open file dialog box filtered to show only query documents (file type 'qery'). The user can then select the desired query document. The query document contains the query to be sent to the data source. Depending on the type of query, the data source could receive information, send back information, report the status of the data source, or perform some other task. Figure 12-4 is a flowchart of a typical session using the high-level interface. As Figure 12-4 illustrates, you must follow this procedure to use the high-level interface:    1.    Call the InitDBPack function to initialize the Data Access Manager.    2.    Select the query document that you want to use and determine the resource ID of the 'qrsc' resource in that query document. You can use any method you like to select the query document. One possibility is to use the StandardGetFile procedure to let the user select the query document. A query document should contain only one 'qrsc' resource; you can then use the Resource Manager to determine the resource ID of the 'qrsc' resource in the document that the user selected. For further information, see the description of the StandardGetFile procedure in the chapter “Standard File Package” in Inside Macintosh: Files and the chapter “Resource Manager” in Inside Macintosh: More Macintosh Toolbox.    3.    Call the DBGetNewQuery function. The DBGetNewQuery function creates in memory a data structure called a query record from the 'qrsc' resource that you specify.     4.    Call the DBStartQuery function specifying the handle to the query record that you created with the DBGetNewQuery function (step 3). You should also provide the DBStartQuery function with a handle to your status routine. A status routine is a routine that you provide to update windows, check the results of the low-level calls made by the DBStartQuery and DBGetQueryResults functions, and cancel execution of these functions when you consider it appropriate to do so. Figure 12-4    A flowchart of a session using the high-level interfaceThe DBStartQuery function calls the query definition function (if any) referred to by the query record. The query definition function can prompt the user for information and modify the query record. After the query definition function has completed execution, the DBStartQuery function calls your status routine so that you can update your windows if necessary. The DBStartQuery function then checks whether communication has been established with the data server. If not, it calls your status routine so that you can display a status dialog box and then calls the DBInit function to establish communication (initiate a session) with the data server. The DBStartQuery function obtains the values it needs for the DBInit function parameters from the query record. When the DBInit function completes execution, the DBStartQuery function calls your status routine again. The DBInit function returns an identification number, called a session ID. This session ID is unique; no other current session, for any database extension, has the same session ID. You must specify the session ID any time you want to send data to or retrieve data from this session. If you prefer, you can use the DBInit function to establish communication before you call the DBStartQuery function. In that case, you must specify the session ID as an input parameter to the DBStartQuery function. See “Using the Low-Level Interface” beginning on page 12-28 for more information on using the DBInit function. Once communication has been established, the DBStartQuery function calls the DBSend function to send the data server the query specified by the query record. When the DBSend function has completed execution, the DBStartQuery function calls your status routine. Finally, the DBStartQuery function uses the DBExec function to execute the query. The DBStartQuery function calls your status routine after the DBExec function has completed execution (that is, the query has started executing and the DBExec function has returned control to the DBStartQuery function) and again just before the DBStartQuery function completes execution.     5.    If you requested data and want to know when the data is available, but do not want to retrieve the data immediately, you can call the DBState function. This function tells you when the data server has finished executing the query, but it does not retrieve the data. If you requested data and want to retrieve it as soon as it is available, you do not have to call the DBState function; go to step 6 instead.If you did not request data, you can use the DBState function to determine the status of the query. When the data server has finished executing the query, skip to step 8.    6.    Call the DBGetQueryResults function. If the query has not finished executing, this function returns the rcDBExec result code. If the query has finished executing, the DBGetQueryResults function calls the DBGetItem function repeatedly until the data server has returned all of the data available. The DBGetQueryResults function puts the returned data into a record that contains handles to arrays that contain the data, the type of data in each column, and the length of each data item. The Data Access Manager allocates the memory for this data in the application heap.The DBGetQueryResults function calls your status routine after it retrieves each data item. You can use this opportunity to display the data item for the user and to give the user the opportunity to cancel execution of the function. The DBGetQueryResults function also calls your status routine just before completing execution, so that you can dispose of any memory allocated by the status routine, remove any dialog box that you displayed, and update your windows if necessary.To convert the returned data to text, go to the next step. If you do not want to convert the returned data to text, skip to step 9.    7.    Call the DBResultsToText function. This function calls a result handler function for each data type. The result handler converts the data to text, places it in a buffer, and returns a handle to the buffer. Some result handlers are provided with the Data Access Manager; you can provide as many with your application as you wish. Result handlers are discussed in “Converting Query Results to Text” beginning on page 12-42.    8.    If you are finished using the query record, call the DBDisposeQuery function to dispose of the query record and free all the memory associated with the query record. If you want to reuse the same query, return to step 5. You should close the query document when you are finished using it.If you want to use a new query document, return to step 3.    9.    When you are finished using the data source, you must use the DBEnd function to terminate the session. You must call the DBEnd function after the DBInit function has returned a nonzero session ID, even if it also returned an error.Listing 12-1 illustrates the use of the high-level interface. This code initiates a session with a remote database, lets the user select a query document to execute, opens the selected file, finds a 'qsrc' resource, and creates a query record. Next, it executes the query, checks the status of the remote database server, retrieves the data when it’s available, and converts this data to text. When the query has finished executing, the code disposes of the query record, ends the session, and closes the user-selected query document. In general, there’s no reason why there can’t be multiple sessions open at once. You can identify each session by its session ID. Listing 12-1 shows just one session.Listing 12-1 assumes that you are using a database extension that supports asynchronous execution of Data Access Manager routines. This listing shows just one possible approach to sending a query and retrieving data asynchronously. Listing 12-1    Using the high-level interfacePROCEDURE MyHiLevel(VAR rr: ResultsRecord; myTextHdl: Handle;                        VAR thisSession: LongInt; VAR sessErr: OSErr);TYPE    {define a record to include space for the current value in }    { A5 so a completion routine can find it}    CRRec = RECORD        QPB: DBAsyncParamBlockRec;                                            {the parameter block}        appsA5: LongInt;                                            {append A5 to the }                                                    { parameter block}    END;    CRRecPtr = ^CRRec;VAR    StartPB, GetQRPB:                                                            CRRec;    SFR:                                                            StandardFileReply;    packErr, startQErr, getQErr, disposeQErr:                                                            OSErr;    getnewQErr, gStartQErr, gGetQRErr:                                                            OSErr;    endErr, fsopenErr, fscloseErr, resultsErr:                                                            OSErr;    gStart, gQueryResults:                                                            Boolean;    qrscHandle:                                                            Handle;    rsrcID:                                                            Integer;    rsrcType:                                                            ResType;    rsrcName:                                                            Str255;    myQHandle:                                                            QueryHandle;    savedResFile:                                                            Integer;    typeList:                                                            SFTypeList;    fsRefNum:                                                            Integer;FUNCTION GetQPB: CRRecPtr;    INLINE $2E88;                                        {MOVE.L  A0,(SP)}BEGIN    gStart := FALSE;    gQueryResults := FALSE;    sessErr := noErr;                                        {assume everything went fine}    packErr := InitDBPack;                                        {initialize the Data Access Mgr}    {display a dialog box to let the user pick a query document}    typeList[0] := 'qery';    StandardGetFile(NIL, 1, typeList, SFR);    IF SFR.sfGood = TRUE THEN        fsopenErr := FSpOpenRF(SFR.sfFile, fsCurPerm, fsRefNum);    IF (fsopenErr <> noErr) OR (SFR.sfGood = FALSE) THEN    BEGIN        sessErr := fsopenErrOrUserCanceled;        EXIT(MyHiLevel);    END;    savedResFile := CurResFile;                                        {save current resource file}    UseResFile(fsRefNum);                                        {get query info from here}    {a query document should have only one 'qrsc' resource}    qrscHandle := Get1IndResource('qrsc', 1);    IF ResError <> noErr THEN    BEGIN        sessErr := ResError;        EXIT(MyHiLevel);    END;    {get the resource ID of the 'qrsc' resource}    GetResInfo(qrscHandle, rsrcID, rsrcType, rsrcName);    {create a query record using the resource ID}    getnewQErr := DBGetNewQuery(rsrcID, myQHandle);    IF getnewQErr <> noErr THEN    BEGIN        sessErr := getnewQErr;        endErr := DBEnd(thisSession, NIL);        EXIT(MyHiLevel);    END;    StartPB.QPB.completionProc := @MyStartCompRoutine;    StartPB.appsA5 := SetCurrentA5;                                                {save this for the }                                                    { completion routine}    {MyStartStatus is a status routine that handles messages sent }    { by the DBStartQuery function when it calls a low-level         }    { function}    startQErr := DBStartQuery(thisSession, myQHandle,                                        @MyStartStatus, @StartPB);    IF startQErr <> noErr THEN    BEGIN        sessErr := startQErr;        IF thisSession <> 0 THEN             endErr := DBEnd(thisSession, NIL);        EXIT(MyHiLevel);    END;    WHILE NOT gStart DO                            {while waiting for gStart to go TRUE, }    BEGIN                            { MyGoDoSomething calls WaitNextEvent }        MyGoDoSomething;                        { to give other routines a chance to run}    END;            {while}    {the DBStartQuery call has completed}    IF gStartQErr <> noErr THEN    BEGIN        sessErr := gStartQErr;        IF thisSession <> 0 THEN             endErr := DBEnd(thisSession, NIL);        EXIT(MyHiLevel);    END;    GetQRPB.QPB.completionProc := @MyGetQRCompRoutine;    GetQRPB.appsA5 := SetCurrentA5;                                                    {save this for the }                                                        { completion routine}    {MyGetQRStatus is a status routine that handles messages sent }    { by the DBGetQueryResults function when it calls a low-level }    { function.}    getQErr := DBGetQueryResults(thisSession, rr, kDBWaitForever,                                            @MyGetQRStatus, @GetQRPB);    IF getQErr <> noErr THEN    BEGIN        sessErr := getQErr;        endErr := DBEnd(thisSession, NIL);        EXIT(MyHiLevel);    END;    WHILE NOT gQueryResults DO    BEGIN        MyGoDoSomething;    END; {while}    {The DBGetQueryResults call has completed. Assuming the call }    { completed successfully, you may want to convert the }    { retrieved data to text, return memory you have borrowed, }    { and end the session.}    IF gGetQRErr <> noErr THEN    BEGIN        sessErr := gGetQRErr;        endErr := DBEnd(thisSession, NIL);        EXIT(MyHiLevel);    END;    {the data has been retrieved; convert it to text}    resultsErr := DBResultsToText(rr, myTextHdl);    {The current query is finished.  You can elect to execute }    { the next 'qrsc' resource of the file, or select another }    { query document.  This example just returns to the caller.}    disposeQErr := DBDisposeQuery(myQHandle);    UseResFile(savedResFile);                {restore current resource file}    fscloseErr := FSClose(fsRefNum);                                            {close the query document}    IF fscloseErr <> noErr THEN         DoError(fscloseErr);    endErr := DBEnd(thisSession, NIL);    IF endErr <> noErr THEN         DoError(endErr);    END;Listing 12-2 shows the completion routines MyStartCompRoutine and MyGetQRCompRoutine used in Listing 12-1.Listing 12-2    Two completion routinesPROCEDURE MyStartCompRoutine(aCRRecPtr: CRRecPtr);VAR    curA5:            LongInt;BEGIN    aCRRecPtr := GetQPB;                                                {get the param block}    curA5 := SetA5(aCRRecPtr^.appsA5);                                                {set A5 to the app's A5}    gStart := TRUE;                                                {query has been started}    gStartQErr := aCRRecPtr^.QPB.result;                                                {send back result code}    {do whatever else you want to do}    curA5 := SetA5(curA5);                        {restore original A5}END;  {MyStartCompRoutine}PROCEDURE MyGetQRCompRoutine(aCRRecPtr: CRRecPtr);VAR    curA5:            LongInt;BEGIN    aCRRecPtr := GetQPB;                                                {get the param block}    curA5 := SetA5(aCRRecPtr^.appsA5);                                                {set A5 to the app's A5}    gQueryResults := TRUE;                        {query results are complete}    gGetQRErr := aCRRecPtr^.QPB.result;                                                {send back the result code}    {do whatever else you want to do}    curA5 := SetA5(curA5);                                                {restore original A5}END;      {MyGetQRCompRoutine}The next section provides information about status routines.Writing a Status Routine for High-Level FunctionsBoth of the two main high-level functions, DBStartQuery and DBGetQueryResults, call low-level functions repeatedly. After each time they call a low-level function, these high-level functions call a routine that you provide, called a status routine. Your status routine can check the result code returned by the low-level function and can cancel execution of the high-level function before it calls the next low-level function. Your status routine can also update your application’s windows after the DBStartQuery function has displayed a dialog box.You provide a pointer to your status routine in the statusProc parameter to the DBStartQuery and DBGetQueryResults functions. Here is a function declaration for a status routine:FUNCTION MyStatusFunc (message: Integer; result: OSErr;                               dataLen: Integer; dataPlaces: Integer;                               dataFlags: Integer; dataType: DBType;                               dataPtr: Ptr): Boolean;Your status routine should return a value of TRUE if you want to continue execution of the DBStartQuery or DBGetQueryResults function, or a value of FALSE if you want to cancel execution of the function. In the latter case, the high-level function returns the userCanceledErr result code.NoteIf you call the DBStartQuery or DBGetQueryResults function asynchronously, you cannot depend on the A5 register containing a pointer to your application’s global variables when the Data Access Manager calls your status routine.uThe message parameter tells your status routine the current status of the high-level function that called it. The possible values for the message parameter depend on which function called your routine. The value of the result parameter depends on the value of the message parameter, as summarized in the following list: Message    Result    kDBUpdateWind    0    kDBAboutToInit    0    kDBInitComplete    Result of DBInit    kDBSendComplete    Result of DBSend    kDBExecComplete    Result of DBExec    kDBStartQueryComplete    Result of DBStartQuery    kDBGetItemComplete    Result of DBGetItem    kDBGetQueryResultsComplete    Result of DBGetQueryResults    The dataLen, dataPlaces, dataFlags, dataType, and dataPtr parameters are returned only by the DBGetQueryResults function, and only when the message parameter equals kDBGetItemComplete. When the DBGetQueryResults function calls your status routine with this message, the dataLen, dataPlaces, and dataType parameters contain the length, decimal places, and type of the data item retrieved, respectively, and the dataPtr parameter contains a pointer to the data item. The least significant bit of the dataFlags parameter is set to 1 if the data item is in the last column of the row. The third bit of the dataFlags parameter is set to 1 if the data item is NULL. You can use this information, for example, to check whether the data meets some criteria of interest to the user, or to display each data item as the DBGetItem function receives it. You can use the constants kDBLastColFlag and kDBNullFlag to test for these flag bits.The DBGetQueryResults function returns a results record, which contains a handle to the retrieved data. The address in the dataPtr parameter points inside the array specified by this handle. Because the dataPtr parameter is not a pointer to a block of memory allocated by the Memory Manager, but just a pointer to a location inside such a block, you cannot use this pointer in any Memory Manager routines (such as the GetPtrSize function). Note also that you cannot rely on this pointer remaining valid after you return control to the DBGetQueryResults function. The DBStartQuery function can send to your status routine the following constants in the message parameter:CONST        {DBStartQuery status messages}        kDBUpdateWind                                 = 0;            {update windows}        kDBAboutToInit                                = 1;            {about to call DBInit}        kDBInitComplete                                = 2;            {DBInit has completed}        kDBSendComplete                                = 3;            {DBSend has completed}        kDBExecComplete                                = 4;            {DBExec has completed}        kDBStartQueryComplete                                = 5;            {DBStartQuery is about to }                                                    { complete} DBStartQuery message constant    Meaning(continued)    kDBUpdateWind    The DBStartQuery function has just called a query definition function. Your status routine should process any update events that your application has received for its windows.    kDBAboutToInit    The DBStartQuery function is about to call the DBInit function to initiate a session with a data server. Because initiating the session might involve establishing communication over a network, and because in some circumstances the execution of a query can tie up the user’s computer for some length of time, you might want to display a dialog box giving the user the option of canceling execution at this time.         continued    kDBInitComplete    The DBInit function has completed execution. When the DBStartQuery function calls your status routine with this message, the result parameter contains the result code returned by the DBInit function. If the DBInit function returns the noErr result code, the DBStartQuery function calls the DBSend function next. If the DBInit function returns any other result code, you can display a dialog box informing the user of the problem before returning control to the DBStartQuery function. The DBStartQuery function then returns an error code and stops execution.    kDBSendComplete    The DBSend function has completed execution. When the DBStartQuery function calls your status routine with this message, the result parameter contains the result code returned by the DBSend function. If the DBSend function returns the noErr result code, the DBStartQuery function calls the DBExec function next. If the DBSend function returns any other result code, you can display a dialog box informing the user of the problem before returning control to the DBStartQuery function. The DBStartQuery function then returns an error code and stops execution.    kDBExecComplete    The DBExec function has completed execution. When the DBStartQuery function calls your status routine with this message, the result parameter contains the result code returned by the DBExec function. If the DBExec function returns the noErr result code, the DBStartQuery function returns control to your application next. If the DBExec function returns any other result code, you can display a dialog box informing the user of the problem before returning control to the DBStartQuery function. The DBStartQuery function then returns an error code and stops execution.    kDBStartQueryComplete    The DBStartQuery function has completed execution and is about to return control to your application. The function result is in the result parameter passed to your status routine. Your status routine can use this opportunity to perform any final tasks, such as disposing of memory that it allocated or removing from the screen any dialog box that it displayed.    The DBGetQueryResults function can send to your status routine the following constants in the message parameter:CONST        {DBGetQueryResults status messages}        kDBGetItemComplete                                     = 6;        {DBGetItem has completed}        kDBGetQueryResultsComplete     = 7;                                        {DBGetQueryResults has }                                                    { completed} DBGetQueryResults message constant    Meaning    kDBGetItemComplete    The DBGetItem function has completed execution. When the DBGetQueryResults function calls your status routine with this message, the result parameter contains the result code returned by the DBGetItem function. The DBGetQueryResults function also returns values for the dataLen, dataPlaces, dataType, dataFlags, anddataPtr parameters, as discussed earlier in this section.For each data item that it retrieves, the DBGetQueryResults function calls the DBGetItem function twice: once to obtain information about the next data item and once to retrieve the data item. The DBGetQueryResults function calls your status routine only after calling the DBGetItem function to retrieve a data item.If your status routine returns a function result of FALSE in response to the kDBGetItemComplete message, the results record returned by the DBGetQueryResults function to your application contains data through the last full row retrieved.Data types and results records are described in “Getting Query Results” beginning on page 12-36.    kDBGetQueryResultsComplete    The DBGetQueryResults function has completed execution and is about to return control to your application. The function result is in the result parameter passed to your status routine. Your status routine can use this opportunity to perform any final tasks, such as disposing of memory that it allocated or removing from the screen any dialog box that it displayed.    Listing 12-3 shows a status routine for the DBStartQuery function. This routine updates the application’s windows in response to the kDBUpdateWind message, displays a dialog box giving the user the option of canceling before the data access is initiated, and checks the results of calls to the DBInit, DBSend, and DBExec functions. If one of these functions returns an error, the status routine displays a dialog box describing the error.Listing 12-3    A sample status routineFUNCTION MyStartStatus(message: Integer; result: OSErr;                                 dataLen: Integer; dataPlaces: Integer;                                dataFlags: Integer; dataType: DBType;                                 dataPtr: Ptr): Boolean;VAR    myString:                Str255;    continue:                Boolean;BEGIN    continue := TRUE;                        {assume user wants to continue with query}    CASE message OF    kDBUpdateWind:                        {a qdef function has just been called; }        BEGIN                    { handle activate and update events}            MyDoActivate;                    {find and handle activate events}            MyDoUpdate;                    {find and handle update events}        END;  {kDBUpdateWind}    kDBAboutToInit:                        {about to initiate a session}        BEGIN        {MyDisplayDialog displays a dialog box. The value }                { returned in the continue variable indicates }                { whether DBStartQuery should continue.}            myString := 'The Data Access Manager is about to open a                             session.  This could take a while.  Do you                            want to continue?';            MyDisplayDialog(@myString, continue);        END;  {kDBAboutToInit}    kDBInitComplete:                        {the DBInit function has completed execution}        BEGIN            IF result <> noErr THEN                                {if there's an error, }            BEGIN                                { let the user know what it is}                CASE result OF                rcDBError:                BEGIN                    myString := 'The Data Access Manager was unable to                                    open the session.  Please check your                                    connections and try again later.';                    MyDisplayString(@myString);                END;        {rcDBError}                rcDBBadDDev:                BEGIN                    myString := 'The Data Access Manager cannot find                                    the database extension file it needs to                                    open a session.  Check with your system                                    administrator for a copy of the file.';                    MyDisplayString(@myString);                END    ;    {rcDBBadDDev}                OTHERWISE                BEGIN                    myString := 'The Data Access Manager was unable to                                    open the session.  The error code                                     returned was';                    MyDisplayError(@myString, result);                END; {of otherwise}            END;  {of CASE result}            END; {of result <> noErr}        END; {kDBInitComplete}    kDBSendComplete:                        {the DBSend function has completed execution}         BEGIN            {if there's an error, let the user know what it is}            IF result <> noErr THEN            BEGIN                IF result = rcDBError THEN                BEGIN                    myString := 'An error occurred while the Data                                     Access Manager was trying to send the                                     query. Please try again later.';                    MyDisplayString(@myString);                END                ELSE                BEGIN                    myString := 'An error occurred while the Data                                     Access Manager was trying to send the                                     query. The error code returned was';                    MyDisplayError(@myString, result);                END;            END;        {of result <> noErr}        END;  {kDBSendComplete}    kDBExecComplete:                        {the DBExec function has completed execution}        BEGIN            IF result <> noErr THEN                                {if there's an error, }            BEGIN                                { let the user know what it is}                IF result = rcDBError THEN                BEGIN                    myString := 'The Data Access Manager was unable to                                execute the query. There may be a problem                                with the query document or the database.                                Check with your system administrator.';                    MyDisplayString(@myString);                END                ELSE                BEGIN                    myString := 'An error occurred while the Data                                Access Manager was trying to execute the                                query.  The error code returned was';                    MyDisplayError(@myString, result);                END;            END;        {of result <> noErr}        END;  {kDBExecComplete}    kDBStartQueryComplete:                            {the DBStartQuery function is about }        BEGIN                        { to return control to your application}            {clean up memory and any dialog boxes left on the screen}            MyCleanUpWindows;        END;  {kDBStartQueryComplete}    END; {CASE message}    MyStartStatus := continue;END;Using the Low-Level InterfaceYou can use the low-level interface to establish communication (initiate a session) with a data server, send a query to the data server, execute the query, and retrieve any data requested by the query. You call one or more low-level routines to accomplish each of these tasks. Applications that implement this type of data access must provide user control and feedback, as described in “General Guidelines for the User Interface” on page 12-13. When the data source is ready to return data, you can retrieve it all and then display it to the user, or you can display the data as it arrives. If the data arrives slowly, it’s best to display it one record at a time as it arrives. This way the user can preview the data, decide if it’s the desired information, and cancel the query if not. Figure 12-5 is a flowchart of a typical session using the low-level interface. As Figure 12-5 illustrates, you must follow this procedure to use the low-level interface:    1.    Call the InitDBPack function to initialize the Data Access Manager.    2.    Call the DBInit function to establish communication with the data server. The DBInit function returns an identification number, called a session ID. This session ID is unique; no other current session, for any database extension, has the same session ID. Figure 12-5    A flowchart of a session using the low-level interfaceYou must specify the session ID any time you want to send data to or retrieve data from this session.The DBInit function requires as input parameters the name of the database extension and character strings for the host system, user name, password, and connection string. All of these parameters depend on the user and the user’s computer system, including the specific database extension, host computer, data server, and database management software in use. You will not know the user name and password when you are writing an application, and you might not know the values of any of these parameters. Therefore, you must display a dialog box that prompts the user for the necessary information. Depending on the database extension you are using, the DBInit function might return a session ID of zero if it fails to initiate a session, or it might return a nonzero session ID and a result code other than noErr. In the latter case, you can pass the session ID to the DBGetErr function to determine the cause of the error. If the DBInit function returns a nonzero session ID and a result code other than noErr, you must call the DBEnd function before making another attempt to open the session.    3.    Prepare a query, and send it to the data server by calling the DBSend and DBSendItem functions one or more times. An application that uses the low-level interface must be capable of creating a query for the data server in the language and format required by that data server.The DBSend function sends a query or a portion of a query to the data server. The data server appends this portion of the query to any portion you sent previously. Because the Data Access Manager and data server do not modify the string you send in any way, they do not insert any delimiter between fragments of queries that you send to the data server. If you want a blank or a semicolon to be included between query fragments, or if you want to use return characters to divide the query into lines of text, you must include them in the character string that you send with the DBSend function. The data string that you send with the DBSend function can be any length up to 64 KB. The DBSendItem function sends a single data item to the data server. Use the DBSendItem function to send data items to the data source in the same format as they are retrieved from the data source by the DBGetItem function. You must specify the data type as an input parameter and, for any data type that does not have an implied length, you must specify the length as well. The database extension or the data server (depending on how the system is implemented) converts the data item to a character string and appends it to the query, just as a query program fragment is appended to the query by the DBSend function. You can call the DBSend and DBSendItem functions as many times as you wish to send your query to the data server.Listing 12-4 sends the Data Access Language query fragment “print 451+222;” to the Data Access Language server.Listing 12-4    Sending a query fragmentFUNCTION MySendFragment(sessID: LongInt): OSErr;VAR    value1:                                        LongInt;    value2:                                        LongInt;    text1, text2, text3:                                        Str15;    text1Ptr, text2Ptr, text3Ptr:                                        Ptr;    rc:            OSErr;BEGIN    text1 := 'print ';    value1 := 451;    text2 := '+';    value2 := 222;    text3 := ';';    MySetTextPtrs(text1, text1Ptr, text2, text2Ptr,                         text3, text3Ptr);    rc := DBSend (sessID, text1Ptr, LENGTH(text1), NIL);    IF rc = noErr THEN        rc := DBSendItem (sessID, typeInteger, 0, 0, 0,                                 Ptr(ORD(@value1)), NIL);    IF rc = noErr THEN        rc := DBSend (sessID, text2Ptr, LENGTH(text2), NIL);    IF rc = noErr THEN        rc := DBSendItem (sessID, typeInteger, 0, 0, 0,                                 Ptr(ORD(@value2)), NIL);    IF rc = noErr THEN        rc := DBSend (sessID, text3Ptr, LENGTH(text3), NIL);    MySendFragment := rc;END;    4.    Use the DBExec function to initiate execution of the query. Depending on the way the system you are using is implemented, the DBExec function might return control to your application as soon as the query has begun execution.     5.    Use the DBState function to determine the status of the data source. The DBState function tells you when the data server has finished executing the query you just sent. If you have requested data, the data server stores the data you requested but does not send it to your application until you request it explicitly. The DBState function tells you when the data is available; if data is available, go to step 6. If you wish to send another query, return to step 3. If you are finished using the data source, skip to step 7.    6.    Call the DBGetItem function repeatedly to retrieve the data. The DBGetItem function retrieves the next data item from the data server. You can also use this function to obtain information about the next data item without retrieving the data. When you use the DBGetItem function to retrieve a data item, you must specify the location and size of the buffer into which the function is to place that item. If you know beforehand what kind of data to expect, you can allocate a buffer of the exact size you need. If you do not know what type of data to expect, you can first call the DBGetItem function with a NIL pointer to the data buffer. The DBGetItem function then returns information about the next data item without actually retrieving it. You can then allocate the appropriate buffer and call DBGetItem again. Alternatively, to avoid calling DBGetItem twice for each data item, you can allocate a buffer that you expect to be of sufficient size for any data item and call the DBGetItem function. If the buffer is not large enough for the data item, the DBGetItem function returns the rcDBError result code, but still returns information about the data item. You can then allocate the necessary buffer, call the DBUnGetItem function to go back one data item, and call the DBGetItem function again to retrieve the data item a second time.The DBGetItem function includes a timeout parameter that you can use to specify the maximum amount of time that the database extension should wait to receive results from the data server before canceling the command. If the database extension you are using does not support asynchronous execution of routines, you can use the timeout parameter to return control to your application while a query is executing. To use the timeout parameter in this way, call the DBGetItem function periodically, specifying a brief period of time for the timeout parameter. Your application can then retrieve the next data item as soon as execution of the query is complete without having to call the DBState function to determine when data is available. The DBGetItem function ignores the timeout parameter if you make an asynchronous call to this function.    7.    When you are finished using the data source, you must use the DBEnd function to terminate the session. You must call the DBEnd function after the DBInit function has returned a nonzero session ID, even if it also returned an error.The procedure in Listing 12-5 uses the low-level interface to send a Data Access Language routine to the Data Access Language server on a remote computer and then retrieves the results. The procedure initiates a session with a remote database and calls the MySendFragment routine (Listing 12-4) to send a query. Next, it executes the query, checks the status of the remote database server, and retrieves the data when it’s available. This example retrieves only one data item. To retrieve more than one data item, put the data-retrieval code in a loop.Listing 12-5 assumes that the database extension does not support asynchronous execution of Data Access Manager routines. For an example of asynchronous execution of routines, see Listing 12-1 beginning on page 12-18.Listing 12-5    Using the low-level interfacePROCEDURE MyLoLevel(VAR thisSession: LongInt; VAR sessErr: OSErr);VAR    theDDevName:                                                Str63;    theHost, theUser:                                                Str255;    thePasswd, theConnStr:                                                Str255;    packErr, initErr, sendErr, execErr:                                                OSErr;    stateErr, getErr, endErr:                                                OSErr;    myTimeout:                                                LongInt;    myType:                                                DBType;    len, places, flags:                                                Integer;    myBuffer:                                                Ptr;    myDataInfo:                                                Boolean;    myDataReturned:                                                Boolean;BEGIN    sessErr := noErr;                                {assume everything went fine}    packErr := InitDBPack;                                {init the Data Access Mgr}    {Set up values for theDDevName, theHost, theUser, thePasswd, }    { and theConnStr. You can display a dialog box prompting }    { the user to supply some of these parameters.}    theDDevName := 'DAL';    theHost := 'The Host System Name';    theUser := 'Joe User';    thePasswd := 'secret';    theConnStr := 'extra stuff as needed';    initErr := DBInit(thisSession, theDDevName, theHost, theUser,                            thePasswd, theConnStr, NIL);    IF initErr <> noErr THEN    BEGIN        sessErr := initErr;        IF thisSession <> 0 THEN endErr := DBEnd(thisSession, NIL);        EXIT(MyLoLevel);    END;    {send a query or query fragment to the remote data server}    sendErr := MySendFragment(thisSession);    {If there's an error, then probably something went wrong with }    { DBSend or DBSendItem.  Don't forget to end the session.}    IF sendErr <> noErr THEN    BEGIN        sessErr := sendErr;        endErr := DBEnd(thisSession, NIL);        EXIT(MyLoLevel);    END;    {The query has been sent.  This example assumes that }    { the query will return data.}     execErr := DBExec(thisSession, NIL);    IF execErr = noErr THEN    BEGIN        stateErr := rcDBExec;        WHILE (stateErr = rcDBExec) DO        BEGIN                        {while waiting for stateErr <> rcDBExec, }            MyGoDoSomething; { let other apps run}            stateErr := DBState(thisSession, NIL);        END;        {DBState returned a result code other than rcDBExec. }        { If it's rcDBValue, there are results to retrieve. }        { Otherwise, it's probably an error.}        IF stateErr = rcDBValue THEN        BEGIN            {call DBGetItem once to get info on the data item and }            { call DBGetItem a second time to get the data item}            myTimeout := 2*60;                            {2*60 ticks = 2 seconds}            myType := DBType(typeAnyType);            myDataInfo := FALSE;            WHILE NOT myDataInfo DO            BEGIN                getErr := DBGetItem(thisSession, myTimeout, myType,                                             len, places, flags, NIL, NIL);                {If you timed out, then give up control.  When }                { control returns, continue getting the info.}                IF getErr = rcDBBreak THEN MyGoDoSomething                ELSE IF (getErr = noErr) OR (getErr = rcDBValue) THEN                     myDataInfo := TRUE                ELSE                BEGIN                    sessErr := getErr;                    endErr := DBEnd(thisSession, NIL);                    EXIT(MyLoLevel);                END;            END; {while}            {At this point, you may want to examine the info }            { about the data item before calling DBGetItem a }            { second time to actually retrieve it.}            {MyGimmeSpace returns a pointer to where you want }            { the data item to go.}            myBuffer := MyGimmeSpace(len);            myDataReturned := FALSE;            WHILE NOT myDataReturned DO            BEGIN                getErr := DBGetItem(thisSession, myTimeout, myType,                                              len, places, flags, myBuffer,                                            NIL);                {If you timed out, then give up control.  When }                { control returns, continue getting the data.}                IF getErr = rcDBBreak THEN MyGoDoSomething                ELSE IF (getErr = noErr) OR                        (getErr = rcDBValue) THEN myDataReturned := TRUE                ELSE                BEGIN                    sessErr := getErr;                    endErr := DBEnd(thisSession, NIL);                    EXIT(MyLoLevel);                END;            END; {while}        END        ELSE sessErr := stateErr;    END    ELSE sessErr := execErr;    endErr := DBEnd(thisSession, NIL);END;Note that, even if you are using the low-level interface to send queries to the data server, you might want to use the high-level functions to retrieve data and convert it to text.Getting Information About Sessions in ProgressIf your application is only one of several on a single Macintosh computer connected to data servers, you can use the DBGetConnInfo and DBGetSessionNum functions to obtain information about the sessions in progress. If you know the session ID (which is returned by the DBInit function when you open a session), you can use the DBGetConnInfo function to determine the database extension being used, the name of the host system on which the session is running, the user name and connection string used to initiate the session, the time at which the session started, and the status of the session. The status of the session specifies whether the data server is executing a query or waiting for another query fragment, whether there is output data available, and whether execution of a query ended in an error.If you do not know the session ID, or if you want to get information about all open sessions, you can specify a database extension and a session number when you call the DBGetConnInfo function. Although there can be only one active session with a given session ID, session numbers are unique only for a specific database extension. Because the database extension assigns session numbers sequentially, starting with 1, you can call the DBGetConnInfo function repeatedly for a given database extension, incrementing the session number each time, to obtain information about all sessions open for that database extension. Your application need not have initiated the session to obtain information about it in this fashion.The DBGetSessionNum function returns the session number when you specify the session ID. You can use this function to determine the session numbers for the sessions opened by your own application. You might want this information, for example, so you can distinguish your own sessions from those opened by other applications when you use the DBGetConnInfo function to get information about all open sessions. Processing Query ResultsYou can use the low-level function DBGetItem to retrieve a single data item returned by a query, or you can use the high-level function DBGetQueryResults to retrieve all of the query results at once. If you use the DBGetQueryResults function, you can then use the DBResultsToText function to convert the results to ASCII text. The DBResultsToText function calls routines called result handlers, which are installed in memory by applications or by system extensions (files containing 'INIT' resources). This section discusses the use of the DBGetItem and DBGetQueryResults functions and describes how to write and install a result handler.Getting Query ResultsThe DBGetItem function retrieves a single data item that was returned by a data source in response to a query. When you call the DBGetItem function, you specify the data type to be retrieved. If you do not know what data type to expect, you can specify the typeAnyType constant for the dataType parameter, and the data server returns the next data item regardless of data type. It also returns information about the data item, including data type and length. If you do not know the length of the next data item, you can specify NIL for the buffer parameter in the DBGetItem function, and the data server returns the data type, length, and number of decimal places without retrieving the data item. The next time you call the DBGetItem function with a nonzero value for the buffer parameter, the function retrieves the data item. If you want to skip a data item, specify the typeDiscard constant for the dataType parameter. Then the next time you call the DBGetItem function, it retrieves the following data item.You should use the DBGetItem function if you want complete control over the retrieval of each item of data. If you want the Data Access Manager to retrieve the data for you, use the DBGetQueryResults function instead.Table 12-1 shows the data types recognized by the Data Access Manager. You use a constant to specify each data type, as follows:CONST        {data types}        typeAnyType                    =  0;                {can be any data type}         typeNone                    = 'none';                {no more data expected}        typeBoolea            n        = 'bool';                {Boolean}        typeSMInt                    = 'shor';                {short integer}        typeInteger                    = 'long';                {integer}        typeSMFloat                    = 'sing';                {short floating point}        typeFloat                    = 'doub';                {floating point}        typeDate                    = 'date';                {date}        typeTime                    = 'time';                {time}        typeTimeStamp                    = 'tims';                {date and time}        typeChar                    = 'TEXT';                {character}        typeDecimal                    = 'deci';                {decimal number}        typeMoney                    = 'mone';                {money value}        typeVChar                    = 'vcha';                {variable character}        typeVBin                    = 'vbin';                {variable binary}        typeLChar                    = 'lcha';                {long character}        typeLBin                    = 'lbin';                {long binary}        typeDiscard                    = 'disc';                {discard next data item}        typeUnknown                    = 'unkn';                {result handler for unknown }                                            { data type}        typeColBreak                    = 'colb';                {result handler for column break}        typeRowBreak                    = 'rowb';                {result handler for end of line}The writer of a database extension can define other data types to support specific data sources or data servers.Each data type has a standard definition, shown in Table 12-1. For example, if the DBGetItem function returns the typeInteger constant for the dataType parameter, you know that the data item represents an integer value and that a 4-byte buffer is necessary to hold it. Similarly, if you are using the DBSendItem function to send to the data server a data item that you identify as typeFloat, the data server expects to receive an 8-byte floating-point value. Notice that some of these data types are defined to have a specific length (referred to as an implied length), and some do not. The len parameter of the DBSendItem and DBGetItem functions indicates the length of an individual data item. The DBGetQueryResults function returns a handle to an array of lengths, decimal places, and flags in the colInfo field of the results record. The typeAnyType, typeColBreak, and typeRowBreak constants do not refer to specific data types, and therefore the length specification is not applicable for these constants.Table 12-1    Data types defined by the Data Access Manager (continued)Constant    Length    Definition    typeAnyType    NA    Any data type (used as an input parameter to the DBGetItem function only; never returned by the function).    typeNone    0    Empty.    typeBoolean    1 byte    TRUE (1) or FALSE (0).    typeSMInt    2 bytes    Signed integer value.    typeInteger    4 bytes    Signed long integer value.    typeSMFloat    4 bytes    Signed floating-point value.    typeFloat    8 bytes    Signed floating-point value.    typeDate    4 bytes    Date; a long integer value consisting of a year (most significant 16 bits), month (8 bits), and day (least significant 8 bits).    typeTime    4 bytes    Time; a long integer value consisting of an hour (0–23; most significant 8 bits), minute (8 bits), second (8 bits), and hundredths of a second (least significant 8 bits).    typeTimeStamp    8 bytes    Date and time. A long integer date value followed by a long integer time value.    typeChar    Any    Fixed-length character string, not NULL terminated. The length of the string is defined by the specific data source.    typeDecimal    Any    Packed decimal string. A contiguous string of 4-bit nibbles, each of which contains a decimal number, except for the low nibble of the highest-addressed byte (that is, the last nibble in the string), which contains a sign. The value of the sign nibble can be 10, 12, 14, or 15 for a positive number or 11 or 13 for a negative number; 12 is recommended for a positive number and 13 is recommended for a negative number. The most significant digit is the high-order nibble of the lowest-addressed byte (that is, the first nibble to appear in the string).The total number of nibbles (including the sign nibble) must be even; therefore, the high nibble of the highest-addressed byte of a number with an even number of digits must be 0.For example, the number +123 is represented as $123C.The number –1234 is represented as $01234D.The length of a packed decimal string is defined as the number of bytes, including any extra leading 0 and the sign nibble. A packed decimal string can have from 0 to 31 digits, not including the sign nibble.In addition to the length of a packed decimal string, each data item has an associated value that indicates the number of digits that follow the decimal place. The places parameter in the DBGetItem and DBSendItem functions indicates the number of decimal places in an individual data item. The DBGetQueryResults function returns the number of decimal places.    typeMoney    Any    Same as typeDecimal, but always has two decimal places.     typeVChar    Any    Variable-length character string, NULL terminated.            continued    typeVBin    Any    Not defined. Reserved for future use.    typeLChar    Any    Not defined. Reserved for future use.    typeLBin    Any    Not defined. Reserved for future use.    typeDiscard    NA    Do not retrieve the next data item (used as an input parameter to the DBGetItem function only; never returned by the function).    typeUnknown    NA    A dummy data type for the result handler that processes any data type for which no other result handler is available (used as an input parameter to the DBInstallResultHandler, DBRemoveResultHandler, and DBGetResultHandler functions only; never returned by the DBGetItem function).    typeColBreak    NA    A dummy data type for the result handler that the DBGetQueryResults function calls after each item that is not the last item in a row (used as an input parameter to the DBInstallResultHandler, DBRemoveResultHandler, and DBGetResultHandler functions only; never returned by the DBGetItem function).    typeRowBreak    NA    A dummy data type for the result handler that the DBGetQueryResults function calls at the end of each row (used as an input parameter to the DBInstallResultHandler, DBRemoveResultHandler, and DBGetResultHandler functions only; never returned by the DBGetItem function).    The DBGetQueryResults function retrieves all of the data that was returned by a data source in response to a query, unless insufficient memory is available to hold the data, in which case it retrieves as many complete rows of data as possible. The DBGetQueryResults function stores the data in a structure called a results record. You must allocate the results record data structure and pass this record to the DBGetQueryResults function. The Data Access Manager allocates the handles inside the results record. When your application is finished using the results record, you must deallocate both the results record and the handles inside the results record.The results record is defined by the ResultsRecord data type.TYPE ResultsRecord =     RECORD        numRows:                Integer;                        {number of rows retrieved}        numCols:                Integer;                        {number of columns per row}        colTypes:                ColTypesHandle;                        {type of data in each column}        colData:                Handle;                        {array of data items}        colInfo:                ColInfoHandle;                        {info about each data item}    END;The numRows field in the results record indicates the total number of rows retrieved. If the DBGetQueryResults function returns a result code other than rcDBValue, then not all of the data actually returned by the data source was retrieved. This could happen, for instance, if the user’s computer does not have sufficient memory space to hold all the data. In this case, your application can make more space available (by writing the data in the data record to disk, for example) and then call the DBGetQueryResults function again to complete retrieval of the data.NoteThe DBGetQueryResults function retrieves whole rows only; if it runs out of space in the middle of a row, it stores the partial row in a private buffer so that the data in the results record ends with the last complete row. Because the last partial row is no longer available from the data server, you cannot start to retrieve data with the DBGetQueryResults function and then switch to the DBGetItem function to complete the data retrieval.u The numCols field indicates the number of columns in each row of data.The colTypes field is a handle to an array of data types, specifying the type of data in each column. The number of elements in the array is equal to the value in the numCols field. Table 12-1 beginning on page 12-38 shows the standard data types. The colData field is a handle to the data retrieved by the DBGetQueryResults function.The colInfo field is a handle to an array of records of type DBColInfoRecord, each of which specifies the length, places, and flags for a data item. There are as many records in the array as there are data items retrieved by the DBGetQueryResults function. Here is the DBColInfoRecord type definition:TYPE DBColInfoRecord =     RECORD        len:                Integer;                    {length of data item}        places:                Integer;                    {places for decimal and }                                            { money data items}        flags:                Integer;                    {flags for data item}    END;The len field indicates the length of the data item. The DBGetQueryResults function returns a value in this field only for those data types that do not have implied lengths; see Table 12-1 beginning on page 12-38. The places field indicates the number of decimal places in data items of types typeMoney and typeDecimal. For all other data types, the places field returns 0. The least significant bit of the flags field is set to 1 if the data item is in the last column of the row. The third bit of the flags field is 1 if the data item is NULL. You can use the constants kDBLastColFlag and kDBNullFlag to test for these flag bits. Converting Query Results to TextThe DBResultsToText function provided by the high-level interface converts the data retrieved by the DBGetQueryResults function into strings of ASCII text. This function makes it easier for you to display retrieved data for the user. For the DBResultsToText function to convert data of a specific type to text, either the application or the system software must have a routine called a result handler. With System 7, Apple Computer, Inc., provides system result handlers for the data types listed here. (These data types are described in Table 12-1 beginning on page 12-38.) Data type    Constant    Data type    Constant    Boolean    typeBoolean    Time    typeTime    Short integer    typeSMInt    Date and time    typeTimeStamp    Integer    typeInteger    Character    typeChar    Short floating point    typeSMFloat    Decimal number    typeDecimal    Floating point    typeFloat    Money value    typeMoney    Date    typeDate    Variable character    typeVChar    NoteApple’s system result handler for the variable character (typeVChar) data type strips trailing spaces from the character string.u In addition to the result handlers for these standard data types, Apple provides the following three system result handlers, which correspond to no specific data type: Data type    Constant    Unknown     typeUnknown    Column break    typeColBreak    End of line    typeRowBreak    The typeUnknown result handler processes any data type for which no other result handler is available. The DBResultsToText function calls the typeColBreak result handler after each item that is not the last item in a row. This result handler does not correspond to any data type, but adds a delimiter character to separate columns of text. The default typeColBreak result handler inserts a tab character. Similarly, the DBResultsToText function calls the typeRowBreak result handler at the end of each row of data to add a character that separates the rows of text. The default typeRowBreak result handler inserts a return character. Your application can install your own typeColBreak and typeRowBreak result handlers to insert whatever characters you wish—or to insert no character at all, if you prefer.You can install result handlers for any data types you know about. When you call the DBInstallResultHandler function, you can specify whether the result handler you are installing is a system result handler. A system result handler is available to all applications that use the system. All other result handlers (called application result handlers) are associated with a particular application. The DBResultsToText function always uses a result handler for the current application in preference to a system result handler for the same data type. When you install a system result handler for the same data type as an already installed system result handler, the new result handler replaces the old one. Similarly, when you install an application result handler for the same data type as a result handler already installed for the same application, the new result handler replaces the old one for that application. Result handlers are stored in memory. The Data Access Manager installs its system result handlers the first time the Macintosh Operating System loads the Data Access Manager into memory. You must reinstall your own application result handlers each time your application starts up. You can also install your own system result handlers each time your application starts up, or you can provide a system extension (that is, a file with an 'INIT' resource) that installs system result handlers each time the user starts up the system.Here is a function declaration for a result handler function:FUNCTION MyResultHandler (dataType: DBType;                                   theLen, thePlaces, theFlags: Integer;                                   theData: Ptr; theText: Handle): OSErr;The dataType parameter specifies the data type of the data item that the DBResultsToText function is passing to the result handler. Table 12-1 beginning on page 12-38 describes the standard data types. The parameters theLen and thePlaces specify the length and number of decimal places of the data item that the DBResultsToText function wants the result handler to convert to text. The parameter theFlags is the value returned for the flags parameter by the DBGetItem function. If the least significant bit of this parameter is set to 1, the data item is in the last column of the row. If the third bit of this parameter is set to 1, the data item is NULL. You can use the constants kDBLastColFlag and kDBNullFlag to test for these flag bits.The parameter theData is a pointer to the data that the result handler is to convert to text.The parameter theText is a handle to the buffer that is to hold the text version of the data. The result handler should use the Memory Manager’s SetHandleSize function to increase the size of the buffer as necessary to hold the new text, and append the new text to the end of the text already in the buffer. The SetHandleSize function is described in the chapter “Memory Manager” in Inside Macintosh: Memory.If the result handler successfully converts the data to text, it should return a result code of 0 (noErr). You can use the DBInstallResultHandler function to install a result handler and the DBRemoveResultHandler function to remove an application result handler. You can install and replace system result handlers, but you cannot remove them. The following line of code installs an application result handler. The first parameter (typeInteger) specifies the data type that this result handler processes. The second parameter (MyTypeIntegerHandler) is a pointer to the result handler routine. The last parameter (FALSE) is a Boolean value specifying that this routine is not a system result handler.err := DBInstallResultHandler                             (typeInteger,@MyTypeIntegerHandler,FALSE);Listing 12-6 shows a result handler that converts the integer data type to text.Listing 12-6    A result handlerFUNCTION MyTypeIntegerHandler(datatype: DBType; theLen: Integer;                                        theData: Ptr;                                         theText: Handle): OSErr;VAR            theInt:                    LongInt;    theTextLen:                    LongInt;    temp:                    Str255;    atemp1:                    Ptr;    atemp2:                    LongInt;    atemp3:                    LongInt;BEGIN    BlockMove(theData, @theInt, sizeof(theInt));    NumToString(theInt, temp);                                                        {convert to text}    theTextLen := GetHandleSize(theText);                                                        {get current size }                                                            { of theText}                                                            {size text handle}    SetHandleSize(theText, theTextLen + LongInt(LENGTH(temp)));    IF (MemError <> noErr) THEN         MyTypeIntegerHandler := MemError    ELSE    BEGIN        atemp1 := Ptr(ORD(@temp));        atemp2 := LongInt(theText^) + theTextLen;        atemp3 := LongInt(LENGTH(temp));        {use BlockMove to append text}        BlockMove(P2CStr(atemp1), Ptr(atemp2), atemp3);        MyTypeIntegerHandler := MemError;    END;END;Creating a Query DocumentA query document is a file of type 'qery' that contains a 'qrsc' resource and one or more 'wstr' resources, and may contain a 'qdef' resource plus other resources. Query documents make it possible for you to write applications that can communicate with data servers without requiring familiarity with the command language used by the data server. Because a query document is most useful if it can be used by many different applications, no query document should depend on the presence of a particular application in order to function.An application can call the DBGetNewQuery function to convert a 'qrsc' resource into a query record in memory. A query record specifies connection information and also contains a handle to an array of queries; each query can be either a complete query or a template for a query. If the 'wstr' resource is a template, it contains the commands and data necessary to create a query, without any information that the user must add just before the query is sent. The 'qdef' resource contains a query definition function, which can modify the query record and, if necessary, fill in the query template to create a complete query. The DBStartQuery function sends the query pointed to by a query record to a data server. The following sections describe the contents of a query document, describe query records, and define the 'qrsc', 'wstr', and 'qdef' resources.User Interface Guidelines for Query DocumentsAll query documents should behave in fundamentally the same way. They should be self-explanatory and should never execute a query without an explicit command from the user. When your application opens a query document, the query document should display a dialog box with enough information about the query so that the user can decide if it’s the right query. The dialog box should describe the purpose of the query, what kind of data it transfers and in which direction, the type of data source it accesses, and any warnings or instructions. The dialog box can describe how the user interprets the data, such as the name of each field in a record. Figure 12-6 shows an example of a query document dialog box.Figure 12-6    A query document dialog boxThis dialog box should allow the user to cancel the request for data. In addition, it may be useful to allow the user to set parameters with text boxes, checkboxes, or radio buttons. For example, a query to a database of financial information could provide a list of these options: a trial balance, profit-and-loss statements, or net worth reports. Save the last set of user-specified parameters with the query document. This way the user can review the parameters used to generate the data or use the same parameters the next time. Once a query starts running, it must be able to complete its task without user intervention. If a query must run modally (that is, it must run to completion before returning control to the user), display a dialog box that shows the query’s progress and be sure to return control to the user as soon as possible. The philosophy of this process is similar to that of receiving electronic mail—that is, inform the user when the information arrives, but let the user decide when to read it. Whenever possible, query documents should check that data is compatible before transmitting it to a data source. Establish a connection with a data source only after you have checked the data.Contents of a Query DocumentThe query document must containn    one 'qrsc' resource, as defined in the next section, “Query Records and Query Resources”n    one 'STR#' resource that contains the name of the database extension to be used, plus any host, user name, password, and connection string needed for the DBInit function n    one or more 'wstr' resources containing queries—that is, strings of commands and data that the DBSend function sends to the data server and that the DBExec function executesA 'wstr' resource consists of a 2-byte length field followed by a character string. (The w in 'wstr' refers to the length word as opposed to the length byte used in an 'STR ' resource.) Each 'wstr' resource contains one query (or one query template, to be modified by the query definition function before it is sent to the data server). The 'qrsc' resource includes an array that lists the resource ID numbers of all of the 'wstr' resources in the query document and an index into the array that specifies which one of the 'wstr' resources should be sent to the data server.In addition, the query document may containn    a 'qdef' resource that contains a query definition functionn    any resources needed by the query definition function, such as 'DLOG' and 'DITL' resources (which support dialog boxes)n    resources to support an icon (to replace the default icon that the Finder uses for files of type 'qery'); see the chapter “Finder Interface” in Inside Macintosh: Macintosh Toolbox Essentials for more information on icon resources and for guidelines on designing iconsFigure 12-7 illustrates the relationship between the resources in a query document and the query record. Figure 12-7    The relationship between resources in a query document and the query recordThe query document in Figure 12-7 contains a 'qrsc' resource that specifies the resource ID of a 'qdef' resource, the resource IDs of three 'wstr' resources, and the resource ID of an 'STR#' resource. It also specifies which of the three 'wstr' resources represents the current query.The DBGetNewQuery function creates the query record and partial queries from this information. Your application can use the DBStartQuery function to send a query to a data server. The DBStartQuery function calls the query definition function referred to by the query record (if any). The query definition function can prompt the user for information and modify the query as needed. Figure 12-8 illustrates a query record that contains a handle to an array of queries, a handle to a query definition function, and an index that identifies the current query. The query definition function displays a dialog box and modifies the current query according to the user’s input. Once the query definition function modifies the current query and returns, the DBStartQuery function sends the query to the data server.Figure 12-8    The relationship between a query definition function and queriesQuery Records and Query ResourcesThe DBGetNewQuery function converts the 'qrsc' resource in the query document into a query record in memory. The query definition function can then modify the query record before the application sends the query to the data server. See “The Query Record” beginning on page 12-56 for a description of the query record. See “The Query Resource” beginning on page 12-90 for the format of a 'qrsc' resource. The next section provides information about query definition functions.Writing a Query Definition FunctionBefore the DBStartQuery function sends a query to a data server, it calls the query definition function specified by the queryProc field in the query record. The purpose of the query definition function is to modify the query and the query record before the query is sent to the data server. The query definition function can use dialog boxes to request information from the user. Because a query document is most useful if it can be used by many different applications, no query definition function should depend on the presence of a particular application.If you want to include a query definition function, you must make it the first piece of code in a resource of type 'qdef' in the query document. Here is a function declaration for a query definition function. FUNCTION MyQDef (VAR sessID: LongInt; query: QueryHandle): OSErr;If the application has already initiated a session with the data server, the DBStartQuery function passes the session ID for that session in the sessID parameter to the query definition function. If the query definition function receives a 0 in this parameter, then the Data Access Manager has not initiated a session. In this case, the query definition function can return a 0 in the sessID parameter, or it can call the DBInit function to initiate a session and then return the session ID in this parameter. If the query definition function returns a 0 in the sessID parameter, the DBStartQuery function calls the DBInit function and then calls the DBSend function to send a query to the data server. If the query definition function returns a session ID in this parameter, the DBStartQuery function calls the DBSend function immediately.The query parameter to the query definition function specifies a handle to the query record. The query definition function can modify any of the fields in the query record, including the currQuery field that specifies which query is to be sent to the data server. In addition, the query definition function can modify an existing query or create a new query, adding the handle to the new query to the query list. Note that, because a query in memory consists only of a 2-byte length value followed by a character string, the query definition function has to know the exact contents and structure of a query in order to modify it.The query definition function must return the noErr result code as the function result if the function executed successfully. If it returns any other value, the DBStartQuery function does not call the DBSend function. The query definition function can return any result code, including noErr, userCanceledErr, or rcDBError.When the DBStartQuery function calls the query definition function, the current resource file is the file that contains the 'qrsc' resource from which the Data Access Manager created the query record. When the query definition function returns control to the Data Access Manager, the current resource file must be unchanged. See the chapter “Resource Manager” in Inside Macintosh: More Macintosh Toolbox for more information on the current resource file.The query definition function can allocate memory and use the dataHandle field in the query record to store a handle to it. The query definition function must free any memory it allocates before terminating.Listing 12-7 shows a query definition function that uses a dialog box to prompt the user for a user name and password and then modifies the query record accordingly.Listing 12-7    A query definition functionFUNCTION MyQDef(VAR sessID: LongInt; query: QueryHandle): OSErr;CONST    myNameItem                         =     7;    myPassWordItem                         =     8;VAR    myNumRes:                        Integer;    myResList:                        ResListHandle;    myResLPtr:                        ResListPtr;    myIndex:                        Integer;    myDialog:                        DialogPtr;    myDlogID:                        Integer;    itemType:                        Integer;    itemHName:                        Handle;    itemHPasswd:                        Handle;    itemBox:                        Rect;    mySTR:                        ARRAY[1..2] OF Str255;    itemHit:                        Integer;    myQErr:                        OsErr;BEGIN    {If sessID = 0 no session has been initiated. Your qdef may }    { optionally initiate a session, or it can let DBStartQuery }    { take care of this.  In this example, the qdef doesn't }    { check the sessID parameter.}    HLock(Handle(query));    myNumRes := query^^.numRes;    myResList := query^^.resList;    HLock(Handle(myResList));    myResLPtr := myResList^;    myIndex := 0;    {look for a 'DLOG' resource}    WHILE (myIndex < myNumRes) AND            (myResLPtr^[myIndex].theType <> 'DLOG') DO    BEGIN        myIndex := myIndex + 1;    END;    IF (myIndex < myNumRes) THEN                                        {found the 'DLOG' resource}        myDlogID := myResLPtr^[myIndex].id    ELSE    BEGIN        {The 'DLOG' wasn't found; exit with no error.  This }        { is probably OK; it just means that the query }        { and the query record don't get modified.}        MyQDEF := noErr;        HUnlock(Handle(query));        HUnlock(Handle(myResList));        EXIT(MyQDef);    END;    {found the 'DLOG' and its ID; now display the dialog box}    myDialog := GetNewDialog(myDlogID, Ptr(NIL), WindowPtr(-1));    SetPort(GrafPtr(myDialog));    REPEAT        ModalDialog(@MyEventFilter, itemHit);    UNTIL ((itemHit = kOK) OR (itemHit = kCancel));    IF itemHit = kOK THEN    BEGIN        {The user clicked the OK button. Update the user }        { and password fields of the query record.}        GetDialogItem(myDialog, myNameItem, itemType, itemHName,                          itemBox);        GetDialogItemText(itemHName, mySTR[1]);        GetDialogItem(myDialog, myPassWordItem, itemType,                         itemHPasswd, itemBox);        GetDialogItemText(itemHPasswd, mySTR[2]);        {Now you can change the query record or the query itself. }        { What you change is entirely up to you. In this example, }        { the qdef changes only the user and password fields }        { of the query record.}        query^^.user := mySTR[1];        query^^.password := mySTR[2];        MyQDef := noErr;    END    ELSE         MyQDef := userCanceledErr;    HUnlock(Handle(query));    HUnlock(Handle(myResList));    DisposDialog(myDialog);END;Data Access Manager ReferenceThis section describes the data structures, routines, and resources that are specific to the Data Access Manager. The “Data Structures” section shows the data structures for the asynchronous parameter block, the results record, the query record, and the data item record. The “Data Access Manager Routines” section beginning on page 12-59 describes routines for using the high-level and low-level interfaces, including initializing the Data Access Manager, handling query documents and results, controlling sessions, sending and executing queries, retrieving results, and installing and removing result handlers. The “Resources” section beginning on page 12-90 describes the query resource, the query string resource, and the query definition function resource.Data StructuresThis section describes the data structures that you use to provide information to the Data Access Manager or that the Data Access Manager uses to provide information to your application.You provide a pointer to an asynchronous parameter block as a parameter to the DBStartQuery, DBGetQueryResults, DBInit, DBEnd, DBGetSessionNum, DBKill, DBSend, DBSendItem, DBExec, DBState, DBGetErr, DBBreak, DBGetItem, and DBUnGetItem functions.The query record specifies connection information and contains a handle to an array of one or more complete queries or query templates. The DBGetNewQuery function returns a handle to a query record, and you provide a handle to a query record as a parameter to the DBStartQuery and DBDisposeQuery functions.You use the results record to store the data that was returned by a data source in response to a query. The results record is a parameter to the DBGetQueryResults and DBResultsToText functions.The Asynchronous Parameter BlockEach Data Access Manager routine that can be called asynchronously (that is, that can return control to your application before it has completed execution) takes as a parameter a pointer to a parameter block known as the asynchronous parameter block. If you specify NIL for this parameter, the routine does not return control to your application until it has completed execution. NoteThe asynchronous parameter block is passed on to the database extension, which is responsible for implementing the asynchronous routine. If the database extension does not support asynchronous routines, the Data Access Manager returns the rcDBAsyncNotSupp result code and terminates execution of the routine.uThe DBAsyncParamBlockRec data type defines the asynchronous parameter block.TYPE     DBAsyncParamBlockRec =     RECORD        completionProc:                        ProcPtr;            {pointer to completion routine}        result:                        OSErr;            {result of call}        userRef:                        LongInt;            {reserved for use by application}        ddevRef:                        LongInt;            {reserved for use by database }                                            { extension}        reserved:                        LongInt;            {reserved for use by Data }                                            { Access Manager}    END;    DBAsyncParmBlkPtr = ^DBAsyncParamBlockRec;Field descriptionscompletionProcPoints to a completion routine that the database extension calls when it has completed executing the asynchronous function. Before calling the completion routine, the Data Access Manager places a pointer to the asynchronous parameter block in the A0 register. If you do not want to use a completion routine, set this parameter to NIL.result     Returns the result code for the called routine. The database extension sets this field to 1 while the routine is executing and places the result code in it when the routine completes. Your application can poll this field to determine when an asynchronous routine has completed execution. userRef    Reserved for the application’s use. Because the Data Access Manager passes a pointer to the parameter block to the completion routine, you can use this field to pass information to the completion routine.ddevRef    Reserved for use by the database extension.reserved    Reserved for use by the Data Access Manager.The Query RecordThe DBGetNewQuery function converts a 'qrsc' resource in a query document into a query record in memory and returns a handle to the query record. The query record specifies connection information and also contains a handle to an array of queries; each query can be either a complete query or a template for a query. The DBGetNewQuery function creates the queries from the 'wstr' resources stored in the query document. The QueryRecord data type defines a query record.TYPE QueryRecord =     RECORD        version:                Integer;                        {query record format version}        id:                Integer;                        {resource ID of 'qrsc'}        queryProc:                Handle;                        {handle to qdef}        ddevName:                Str63;                        {name of database extension}        host:                Str255;                        {name of host computer}        user:                Str255;                        {name of user}        password:                Str255;                        {user's password}        connStr:                Str255;                        {connection string}        currQuery:                Integer;                        {index of current query}        numQueries:                Integer;                        {number of queries in list}        queryList:                QueryListHandle;                        {handle to array of }                                                { handles to text}        numRes:                Integer;                        {number of resources in list}        resList:                ResListHandle;                        {handle to array of resource }                                                { list elements}        dataHandle:                Handle;                        {handle to memory for qdef}        refCon:                LongInt;                        {reserved for use by app}    END;QueryPtr                 = ^QueryRecord;                                {pointer to query record}QueryHandle     = ^QueryPtr;                                            {handle to query record}Field descriptionsversion    The version number of the query record format. For the Data Access Manager released with System 7, the version number is 0.id    The resource ID of the 'qrsc' resource from which the Data Access Manager created this query record.queryProc    A handle to the query definition function that the DBStartQuery function calls. This handle is NIL if there is no query definition function—that is, if the DBStartQuery function should send the query specified by this query record to the data server without modifications.ddevName    The database extension name used as a parameter to the DBInit function. host    The name of the host computer system used as a parameter to the DBInit function. user    The name of the user, used as a parameter to the DBInit function.password    The user’s password, used as a parameter to the DBInit function. connStr    The connection string used as a parameter to the DBInit function. currQuery    An index value from 1 through numQueries, indicating which element in the array of query handles represents the current query. The current query is the one actually sent to the data server. If the query document contains more than one 'wstr' resource, the query definition function can prompt the user to select a new current query and modify this field in the query record appropriately. numQueries    The number of queries referred to by the queryList field.queryList    A handle to an array of handles. Each handle in this array refers to a query. Each query is created from a 'wstr' resource in the query document and is stored in memory as a 2-byte length field followed by ASCII text. (The length does not include the 2 bytes of the length field.) The query definition function can create a new query. To add a new handle to the array of handles, use the Memory Manager’s SetHandleSize function to increase the size of the array. Don’t forget to change the value of the numQueries field as well.numRes    The number of resources referred to by the resList field.resList    A handle to an array of records of type ResListElem. Each record in the array contains the type and ID of a resource that is needed by the query definition function.                     TYPE ResListElem =                         RECORD                            theType:            ResType;                {resource type}                            id:            Integer;                {resource ID}                        END;dataHandle    A handle to memory for use by the query definition function. When the Data Access Manager first creates the query record, it sets this field to NIL. The query definition function can allocate memory and place a handle to it in this field. The query definition function should dispose of any memory it allocates before it returns control to the Data Access Manager.refCon    The query record’s reference value. The application can use this field for any purpose.The Results RecordThe results record describes the data that was returned by a data source in response to a query. To get the results of a query, allocate a results record and pass this record to the DBGetQueryResults function. The Data Access Manager allocates the handles inside the results record. When your application is finished using the results record, you must deallocate both the results record and the handles inside the results record.The results record is defined by the ResultsRecord data type.TYPE ResultsRecord =     RECORD        numRows:                Integer;                        {number of rows retrieved}        numCols:                Integer;                        {number of columns per row}        colTypes:                ColTypesHandle;                        {type of data in each column}        colData:                Handle;                        {array of data items}        colInfo:                ColInfoHandle;                        {info about each data item}    END;Field descriptionsnumRows    The total number of rows retrieved. If the DBGetQueryResults function returns a result code other than rcDBValue, then not all of the data actually returned by the data source was retrieved. This could happen, for instance, if the user’s computer does not have sufficient memory space to hold all the data. In this case, your application can make more space available (by writing the data in the data record to disk, for example) and then call the DBGetQueryResults function again to complete retrieval of the data.NoteThe DBGetQueryResults function retrieves whole rows only; if it runs out of space in the middle of a row, it stores the partial row in a private buffer so that the data in the results record ends with the last complete row. Because the last partial row is no longer available from the data server, you cannot start to retrieve data with the DBGetQueryResults function and then switch to the DBGetItem function to complete the data retrieval.u numCols    The number of columns in each row of data.colTypes    A handle to an array of data types, specifying the type of data in each column. The number of elements in the array is equal to the value in the numCols field. Table 12-1 beginning on page 12-38 shows the standard data types. colData    A handle to the data retrieved by the DBGetQueryResults function.colInfo     A handle to an array of records of type DBColInfoRecord, each of which specifies the length, places, and flags for a data item. There are as many records in the array as there are data items retrieved by the DBGetQueryResults function. Here is the DBColInfoRecord type definition:                    TYPE DBColInfoRecord =                         RECORD                            len:            Integer;                {length of data item}                            places:            Integer;                {places for decimal }                                                        { and money data items}                            flags:            Integer;                {flags for data item}                        END;    The len field indicates the length of the data item. The DBGetQueryResults function returns a value in this field only for those data types that do not have implied lengths; see Table 12-1 on page 12-38 for a list of these data types.     The places field indicates the number of decimal places in data items of types typeMoney and typeDecimal. For all other data types, the places field returns 0.     The least significant bit of the flags field is set to 1 if the data item is in the last column of the row. The third bit of the flags field is 1 if the data item is NULL. You can use the constants kDBLastColFlag and kDBNullFlag to test for these flag bits. Data Access Manager RoutinesThe Data Access Manager has high-level routines, low-level routines, and routines that manipulate result handlers. This section describes all of the Data Access Manager routines.All of the low-level routines and some of the high-level routines accept a pointer to an asynchronous parameter block as a parameter. For these routines, see “The Asynchronous Parameter Block” beginning on page 12-55 for a description of the fields in the parameter block.If you specify a nonzero value for the pointer to the asynchronous parameter block, the database extension executes the function asynchronously—that is, it returns control to the Data Access Manager before the routine has completed execution, and the Data Access Manager returns control to your application. If you specify NIL for this parameter, the database extension does not return control to your application until the routine has finished execution. Your application must call the Event Manager’s WaitNextEvent function periodically to allow an asynchronous routine to complete execution. The WaitNextEvent function is described in the chapter “Event Manager” in Inside Macintosh: Macintosh Toolbox Essentials.You can tell when an asynchronous routine has completed execution and check the result code by looking at values in the asynchronous parameter block. You can use the DBKill function to cancel an asynchronous routine.NoteA noErr result code returned by a routine that has been called asynchronously indicates only that the routine began execution successfully. You must check the result field of the asynchronous parameter block for the final result of the routine.uAssembly-Language NoteYou can invoke each of the Data Access Manager routines with a macro that has the same name as the routine, but preceded with an underscore; for example, the macro for the DBInit function is named _DBInit. Each of these macros places a routine selector in the D0 register and calls the trap _Pack13. The routine selectors are listed in each routine description and in “Assembly-Language Summary” beginning on page 12-103.uInitializing the Data Access ManagerYou must initialize the Data Access Manager before you can use it.InitDBPackUse the InitDBPack function to initialize the Data Access Manager. FUNCTION InitDBPack: OSErr;DESCRIPTIONThe InitDBPack function initializes the Data Access Manager. You must call the InitDBPack function before you call any other Data Access Manager routines. If the Data Access Manager has already been initialized, the InitDBPack function returns the noErr result code but does nothing else.The interface routine that implements the InitDBPack function includes a version number for the Data Access Manager. If the Data Access Manager is a different version from that specified by the interface routine, then the InitDBPack function returns the rcDBWrongVersion result code.SPECIAL CONSIDERATIONSThe InitDBPack function may move or purge memory. You should not call this routine from within an interrupt, such as in a completion routine or a VBL task.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the InitDBPack function areTrap macro    Selector    _InitDBPack    $0100    RESULT CODESnoErr    0    No error    rcDBWrongVersion    –812    Wrong version number    High-Level Interface: Handling Query DocumentsThe high-level interface to the Data Access Manager allows applications to manipulate query documents and to get the results of the query provided by a query document. The use and contents of query documents are discussed in “Creating a Query Document” beginning on page 12-46. The routines described in this section create query records, dispose of query records, and use query documents to establish communication with and send queries to a data server. For a general discussion of the high-level interface, see “The High-Level Interface” beginning on page 12-7 . For instructions on using the high-level interface, refer to “Using the High-Level Interface” beginning on page 12-14.DBGetNewQueryYou can use the DBGetNewQuery function to create a query record.FUNCTION DBGetNewQuery (queryID: Integer;                                 VAR query: QueryHandle): OSErr;queryID    The resource ID of a 'qrsc' resource. query    Returns a handle to the query record. DESCRIPTIONThe DBGetNewQuery function creates a query record from the specified 'qrsc' resource. The resource file that contains the 'qrsc' resource must remain open until after the DBStartQuery function has completed execution. If you do not already know the resource ID of the 'qrsc' resource (for example, if you call the StandardGetFile procedure to let the user select the query document), you can use Resource Manager routines to determine the resource ID. SPECIAL CONSIDERATIONSThe DBGetNewQuery function may move or purge memory. You should not call this routine from within an interrupt, such as in a completion routine or a VBL task.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the DBGetNewQuery function areTrap macro    Selector    _DBGetNewQuery    $030F    RESULT CODESnoErr    0    No error    rcDBPackNotInited    –813    The InitDBPack function has not yet been called    SEE ALSOSee Listing 12-1 beginning on page 12-18 for an example of the use of the DBGetNewQuery function. For a description of the query record, see page 12-56. For a description of the 'qrsc' resource, see “The Query Resource” beginning on page 12-90. The StandardGetFile procedure is described in the chapter “Standard File Package” in Inside Macintosh: Files, and Resource Manager routines are described in the chapter “Resource Manager” in Inside Macintosh: More Macintosh Toolbox. DBDisposeQueryWhen you are finished using a query record, call DBDisposeQuery to dispose of the query record.FUNCTION DBDisposeQuery (query: QueryHandle): OSErr;query    A handle to the query record to dispose.DESCRIPTIONThe DBDisposeQuery function disposes of a query record and frees all the memory that the Data Access Manager allocated when it created the query record.SPECIAL CONSIDERATIONSThe DBDisposeQuery function may move or purge memory. You should not call this routine from within an interrupt, such as in a completion routine or a VBL task.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the DBDisposeQuery function areTrap macro    Selector    _DBDisposeQuery    $0210    RESULT CODESnoErr    0    No error    rcDBPackNotInited    –813    The InitDBPack function has not yet been called    SEE ALSOSee Listing 12-1 beginning on page 12-18 for an example of the use of the DBDisposeQuery function in the high-level interface. For a description of the query record, see page 12-56.DBStartQueryUse the DBStartQuery function to initiate the process of sending a query to a data server.FUNCTION DBStartQuery (VAR sessID: LongInt; query: QueryHandle;                              statusProc: ProcPtr;                               asyncPB: DBAsyncParmBlkPtr): OSErr;sessID    A session ID that identifies a session with the data server. If you specify 0 for this parameter, then the DBStartQuery function initiates a session and returns the session ID in the sessID parameter.query    A handle to a query record. statusProcA pointer to a status routine that your application can use to update its windows after the query definition function has completed execution. (The DBStartQuery function does not attempt to update your application’s windows.) The DBStartQuery function also calls your status routine before it initiates a session with a data server, after it calls the DBInit function, after it calls the DBSend function, and after it calls the DBExec function. Status routines are discussed in “Writing a Status Routine for High-Level Functions” beginning on page 12-22.asyncPB    A pointer to an asynchronous parameter block. When specified, the DBStartQuery function calls the DBInit, DBSend, and DBExec functions asynchronously. As soon as the DBInit function has started execution, it returns control to your application. Your application must then call the Event Manager’s WaitNextEvent function periodically to allow these asynchronous routines to run, and it must check the result field of the asynchronous parameter block to determine when each routine has completed execution.DESCRIPTIONThe DBStartQuery function performs the following tasks, in the order specified:    1.    It calls the query definition function (if any) pointed to by the query record. The query definition function modifies the query record and the query, usually by asking the user for input. The query definition function can display a dialog box that gives the user the option of canceling the query; if the user does cancel the query, the DBStartQuery function returns the userCanceledErr result code.    2.    If you specify a nonzero value for the statusProc parameter, the DBStartQuery function calls your status routine with the kDBUpdateWind constant in the message parameter so that your application can update its windows.    3.    If you specify a nonzero value for the statusProc parameter, the DBStartQuery function calls your status routine with the kDBAboutToInit constant in the message parameter so that your application can display a dialog box informing the user that a session is about to be initiated with a data server, and giving the user the option of canceling execution of the function.    4.    If the sessID parameter is 0, the DBStartQuery function calls the DBInit function to initiate a session, and returns a session ID.     5.    If you specify a nonzero value for the statusProc parameter and the DBStartQuery function calls the DBInit function, the DBStartQuery function calls your status routine with the kDBInitComplete constant in the message parameter and the result of the DBInit function in the function result.    6.    The DBStartQuery function calls the DBSend function to send the query to the data server.    7.    If you specify a nonzero value for the statusProc parameter, the DBStartQuery function calls your status routine with the kDBSendComplete constant in the message parameter and the result of the DBSend function in the result parameter.    8.    The DBStartQuery function calls the DBExec function to execute the query.    9.    If you specify a nonzero value for the statusProc parameter, the DBStartQuery function calls your status routine with the kDBExecComplete constant in the message parameter and the result of the DBExec function in the result parameter.    10.    If you specify a nonzero value for the statusProc parameter, the DBStartQuery function calls your status routine with the kDBStartQueryComplete constant in the message parameter and the result of the DBStartQuery function in the result parameter.SPECIAL CONSIDERATIONSThe DBStartQuery function may move or purge memory. You should not call this routine from within an interrupt, such as in a completion routine or a VBL task.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the DBStartQuery function areTrap macro    Selector    _DBStartQuery    $0811    RESULT CODESnoErr    0    No error    userCanceledErr    –128    User canceled the query     rcDBError    –802    Error initiating session, sending text, or executing query    rcDBBadSessID    –806    Session ID is invalid    rcDBBadDDev    –808    Couldn’t find the specified database extension, or error occurred in opening database extension    rcDBAsyncNotSupp    –809    The database extension does not support asynchronous calls    rcDBPackNotInited    –813    The InitDBPack function has not yet been called    SEE ALSOSee “Using the High-Level Interface” beginning on page 12-14 for a general description of how the DBStartQuery function works in conjunction with other Data Access Manager routines. See Listing 12-1 beginning on page 12-18 for an example of the use of the DBStartQuery function. For a description of the query record, see page 12-56. For information on how to write a query definition function or status routine, see “Writing a Query Definition Function” beginning on page 12-51 and “Writing a Status Routine for High-Level Functions” beginning on page 12-22, respectively. Descriptions of the DBInit, DBSend, and DBExec functions begin on page 12-68, page 12-76, and page 12-78, respectively. High-Level Interface: Handling Query ResultsThe high-level interface to the Data Access Manager allows applications to manipulate query documents and to get the results of the query provided by a query document. The high-level routines in this section retrieve query results and convert them to text. DBGetQueryResultsYou can use the DBGetQueryResults function to retrieve the results of a query. FUNCTION DBGetQueryResults (sessID: LongInt;                                      VAR results: ResultsRecord;                                      timeout: LongInt; statusProc: ProcPtr;                                      asyncPB: DBAsyncParmBlkPtr): OSErr;sessID    The session ID of the session from which you wish to retrieve results.results    The results record, which contains handles to the retrieved data. timeout     The value that the DBGetQueryResults function uses for the timeout parameter each time it calls the DBGetItem function. The timeout parameter specifies the maximum amount of time that the database extension should wait to receive results from the data server before canceling the DBGetItem function. Specify the timeout parameter in sixtieths of a second. To disable the timeout feature, set the timeout parameter to the kDBWaitForever constant. Some database extensions ignore the timeout parameter when you specify a nonzero value for the asyncPB parameter.statusProcA pointer to a status routine that you provide. The DBGetQueryResults function calls your status routine after it calls the DBGetItem function to retrieve a data item. When it calls the status routine, the DBGetQueryResults function provides the result of the DBGetItem function, the data type, the data length, the number of decimal places, the flags associated with the data item, and a pointer to the data item. asyncPB    A pointer to an asynchronous parameter block. If specified, the DBGetQueryResults function calls the DBGetItem function asynchronously for each data item. As soon as the DBGetItem function has started execution, it returns control to your application. Your application must then call the Event Manager’s WaitNextEvent function periodically to allow this asynchronous routine to run, and it must check the result field of the asynchronous parameter block to determine when the routine has completed execution.DESCRIPTIONThe DBGetQueryResults function retrieves the results returned by a query and places them in memory. If there is sufficient memory available, this function retrieves all of the results at once. If the DBGetQueryResults function runs out of memory, it places as much data as possible in memory, up to the last whole row. You can then make more memory available and call the DBGetQueryResults function again to retrieve more data. You must allocate the results record and pass this record to the DBGetQueryResults function. The Data Access Manager allocates the handles inside the results record. When your application is finished using the results record, you must deallocate both the results record and the handles inside the results record.The DBGetQueryResults function can be used to retrieve the results of any query, not only queries sent and executed by the DBStartQuery function.SPECIAL CONSIDERATIONSThe DBGetQueryResults function may move or purge memory. You should not call this routine from within an interrupt, such as in a completion routine or a VBL task.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the DBGetQueryResults function areTrap macro    Selector    _DBGetQueryResults    $0A12    RESULT CODESnoErr    0    No error    userCanceledErr    –128    Function canceled by status routine    rcDBValue    –801    Data available     rcDBError    –802    Query execution ended in an error    rcDBBreak    –804    Function timed out    rcDBExec    –805    Query currently executing     rcDBBadSessID    –806    Session ID is invalid    rcDBAsyncNotSupp    –809    The database extension does not support asynchronous calls    rcDBPackNotInited    –813    The InitDBPack function has not yet been called    SEE ALSOSee Listing 12-1 beginning on page 12-18 for an example of the use of the DBGetQueryResults function. See page 12-55 for a description of the asynchronous parameter block. Descriptions of the DBStartQuery and DBGetItem functions begin on page 12-63 and page 12-83, respectively. For more information on results records, see “The Results Record” beginning on page 12-58 and “Getting Query Results” beginning on page 12-36. For more information on status routines, see “Writing a Status Routine for High-Level Functions” beginning on page 12-22. DBResultsToTextAfter retrieving a results record from DBGetQueryResults, you can use the DBResultsToText function to convert the returned data to text. FUNCTION DBResultsToText (results: ResultsRecord;                                   VAR theText: Handle): OSErr;results    The results record returned by the DBGetQueryResults function. theText    The DBResultsToText function returns a handle to the converted text in this parameter. This handle is allocated by the Data Access Manager.DESCRIPTIONThe DBResultsToText function calls result handlers to convert to text the data retrieved by the DBGetQueryResults function. SPECIAL CONSIDERATIONSThe DBResultsToText function may move or purge memory. You should not call this routine from within an interrupt, such as in a completion routine or a VBL task.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the DBResultsToText function areTrap macro    Selector    _DBResultsToText    $0413    RESULT CODESnoErr    0    No error    rcDBPackNotInited    –813    The InitDBPack function has not yet been called    SEE ALSOSee Listing 12-1 begining on page 12-18 for an example of the use of the DBResultsToText function. See “Converting Query Results to Text” beginning on page 12-42 for a discussion of result handlers. Low-Level Interface: Controlling the SessionThe low-level interface to the Data Access Manager allows applications to open and close sessions with a data server, send and execute queries, retrieve query results, and obtain information about any current session. DBInitUse the DBInit function to initiate a session with a data server. FUNCTION DBInit (VAR sessID: LongInt; ddevName: Str63;                       host: Str255; user: Str255; password: Str255;                      connStr: Str255;                       asyncPB: DBAsyncParmBlkPtr): OSErr;sessID    The DBInit function returns the session ID in this parameter. This session ID is unique; no other current session, for any database extension, has the same session ID. You must specify the session ID any time you want to send data to or retrieve data from this session. Depending on the database extension you are using, the DBInit function might return a session ID of 0 if it fails to initiate a session, or it might return a nonzero session ID and a result code other than noErr. In the latter case, you can pass the session ID to the DBGetErr function to determine the cause of the error.ddevName    A string of no more than 63 characters that specifies the name of the database extension. The name of the database extension is contained in the database extension file in a resource of type 'STR ' with a resource ID of 128. For the Data Access Language database extension provided by Apple, for example, this string is “DAL”.host    The name of the host system on which the data server is located. This name depends on the manner in which the database extension initiates communication with the data server and how the system administrator has set up the computer system.user    The name of the user.password    The password associated with the user name.connStr    A string that is passed to the data server, which might pass it on to the database management software on the host computer. This string is necessary in some systems to complete log-on procedures.asyncPB    A pointer to an asynchronous parameter block. If you do not want to call the function asynchronously, set this parameter to NIL.DESCRIPTIONYou must initiate a session before you call any Data Access Manager function that requires a session ID as an input parameter. If the DBInit function returns a nonzero session ID, you must call the DBEnd function to terminate the session, even if the DBInit function also returns a result code other than noErr.Because the high-level function DBStartQuery can call the DBInit function, you do not have to call the DBInit function if you have called the DBStartQuery function.SPECIAL CONSIDERATIONSThe DBInit function may move or purge memory. You should not call this routine from within an interrupt, such as in a completion routine or a VBL task.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the DBInit function areTrap macro    Selector    _DBInit    $0E02    RESULT CODESnoErr    0    No error    rcDBError    –802    Error initiating session    rcDBBadDDev    –808    Couldn’t find the specified database extension, or error occurred in opening database extension    rcDBAsyncNotSupp    –809    The database extension does not support asynchronous calls    rcDBPackNotInited    –813    The InitDBPack function has not yet been called    SEE ALSOFor a description of the asynchronous parameter block, see page 12-55. See Listing 12-5 beginning on page 12-33 for an example of the use of the DBInit function. See page 12-63 for a description of the DBStartQuery function. The DBEnd function is described next.DBEndYou must call the DBEnd function to terminate a session.FUNCTION DBEnd (sessID: LongInt;                      asyncPB: DBAsyncParmBlkPtr): OSErr;sessID    The session ID that was returned by the DBInit function.asyncPB    A pointer to an asynchronous parameter block. If you do not want to call the function asynchronously, set this parameter to NIL.DESCRIPTIONThe DBEnd function terminates a session with a data server and terminates the network connection between the application and the host computer. SPECIAL CONSIDERATIONSThe DBEnd function may move or purge memory. You should not call this routine from within an interrupt, such as in a completion routine or a VBL task.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the DBEnd function areTrap macro    Selector    _DBEnd    $0403    RESULT CODESnoErr    0    No error    rcDBError    –802    Error ending session    rcDBBadSessID    –806    Session ID is invalid    rcDBAsyncNotSupp    –809    The database extension does not support asynchronous calls    rcDBPackNotInited    –813    The InitDBPack function has not yet been called    SEE ALSOFor a description of the asynchronous parameter block, see page 12-55. DBGetConnInfoThe DBGetConnInfo function returns information about the specified session, including n    the version of the database extensionn    the name of the host system on which the session is runningn    the user namen    the connection string that was used to initiate communicationn    the name of the networkn    the time at which the session started, in ticks (sixtieths of a second)n    the status of the sessionFUNCTION DBGetConnInfo (sessID: LongInt; sessNum: Integer;                                 VAR returnedID: LongInt;                                VAR version: LongInt;                                 VAR ddevName: Str63;                                 VAR host: Str255; VAR user: Str255;                                VAR network: Str255; VAR connStr: Str255;                                 VAR start: LongInt; VAR state: OSErr;                                 asyncPB: DBAsyncParmBlkPtr): OSErr;sessID    The session ID that was returned by the DBInit function. If you include a nonzero value for the sessID parameter when you call the DBGetConnInfo function, the function returns the name of the database extension in the ddevName parameter. If you use 0 for the sessID parameter and specify the database extension and session number instead (in the ddevName and sessNum parameters), the function returns the session ID in the returnedID parameter.sessNum    The session number of the session about which you want information. If you specify a nonzero session number, you must also provide the database extension in the ddevName parameter.returnedIDReturns the session ID if you specify the session number and the database extension.version    Returns the version number of the database extension that is currently in use.ddevName    A string of no more than 63 characters that specifies the name of the database extension. If you specify 0 for the session ID, you must include the name of the database extension as well as a session number. If you specify a valid session ID, then the DBGetConnInfo function returns the name of the database extension in the ddevName parameter. The name of the database extension is contained in the database extension file in a resource of type 'STR ' with a resource ID of 128. For the Data Access Language database extension provided by Apple, for example, this string is “DAL”.host    Returns the host string used to initiate communication with the data server.user    Returns the user string used to initiate communication with the data server.network    Returns the name of the network through which the database extension is communicating with the data server. This parameter is an empty string if you are not communicating through a network.connStr    Returns the connection string used to initiate communication with the data server.start    Returns the time, in ticks (sixtieths of a second), at which this session was initiated.state    Returns one of the following values to provide information about the status of the session:            CONST        noErr                =    0;            {no error--ready for more }                                                { text}                    rcDBValue                = –801;            {output data available}                    rcDBError                = –802;            {execution ended in an }                                                { error}                    rcDBExec                = –805;            {busy--currently executing }                                                { query}asynchPB    A pointer to an asynchronous parameter block. If you do not want to call the function asynchronously, set this parameter to NIL.DESCRIPTIONYou can use the DBGetConnInfo function to get information about a particular session, or you can call the function repeatedly, incrementing the session number each time, to get information about all of the sessions associated with a particular database extension.The sessID parameter is the session ID that was returned by the DBInit function. The sessNum parameter is the session number of the session about which you want information. You can specify either the session ID or the session number when you call the DBGetConnInfo function. If you specify the sessID parameter, use 0 for the sessNum parameter. If you specify the sessNum parameter, then use 0 for the sessID parameter. If you specify the sessNum parameter, you must specify a value for the ddevName parameter as well. If you specify the session number and the database extension, then the DBGetConnInfo function returns the session ID in the returnedID parameter.SPECIAL CONSIDERATIONSThe DBGetConnInfo function may move or purge memory. You should not call this routine from within an interrupt, such as in a completion routine or a VBL task.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the DBGetConnInfo function areTrap macro    Selector    _DBGetConnInfo    $1704    RESULT CODESnoErr    0    No error    rcDBBadSessID    –806    Session ID is invalid or database extension name is invalid    rcDBBadSessNum    –807    Invalid session number    rcDBBadDDev    –808    Couldn’t find the specified database extension, or error occurred in opening database extension    rcDBAsyncNotSupp    –809    The database extension does not support asynchronous calls    rcDBPackNotInited    –813    The InitDBPack function has not yet been called    SEE ALSOFor a description of the asynchronous parameter block, see page 12-55. For more information on the use of the DBGetConnInfo function, see “Getting Information About Sessions in Progress” on page 12-35. DBGetSessionNumThe DBGetSessionNum function returns a session number when you specify the session ID.FUNCTION DBGetSessionNum (sessID: LongInt; VAR sessNum: Integer;                                   asyncPB: DBAsyncParmBlkPtr): OSErr;sessID    The session ID that was returned by the DBInit function.sessNum    Returns the session number of the session you specify with the sessID parameter. The session number is unique for a particular database extension, but the same session number might be in use for different database extensions at the same time.asyncPB    A pointer to an asynchronous parameter block. If you do not want to call the function asynchronously, set this parameter to NIL.DESCRIPTIONYou can use the DBGetSessionNum function to determine the session numbers for the sessions opened by your own application. You might want this information, for example, so you can distinguish your own sessions from those opened by other applications when you use the DBGetConnInfo function to get information about all open sessions.SPECIAL CONSIDERATIONSThe DBGetSessionNum function may move or purge memory. You should not call this routine from within an interrupt, such as in a completion routine or a VBL task.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the DBGetSessionNum function areTrap macro    Selector    _DBGetSessionNum    $0605    RESULT CODESnoErr    0    No error    rcDBBadSessID    –806    Session ID is invalid    rcDBAsyncNotSupp    –809    The database extension does not support asynchronous calls    rcDBPackNotInited    –813    The InitDBPack function has not yet been called    SEE ALSOA description of the asynchronous parameter block structure begins on page 12-55. The DBInit function description begins on page 12-68. A description of the DBGetConnInfo function begins on page 12-71. DBKillUse the DBKill function to cancel the execution of an asynchronous routine.FUNCTION DBKill (asyncPB: DBAsyncParmBlkPtr): OSErr;asyncPB    A pointer to an asynchronous parameter block.DESCRIPTIONThe DBKill function cancels the execution of the asynchronous call specified by the asyncPB parameter.SPECIAL CONSIDERATIONSThe DBKill function may move or purge memory. You should not call this routine from within an interrupt, such as in a completion routine or a VBL task.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the DBKill function areTrap macro    Selector    _DBKill    $020E    RESULT CODESnoErr    0    No error    rcDBError    –802    Error canceling routine    rcDBBadAsynchPB    –810    Invalid parameter block specified    rcDBPackNotInited    –813    The InitDBPack function has not yet been called    SEE ALSOFor a description of the asynchronous parameter block, see page 12-55. Low-Level Interface: Sending and Executing QueriesThe functions in this section send queries or portions of queries to the data server, execute queries that have been sent, return information about queries that have been sent, and halt execution of queries that are executing. DBSendYou can use the DBSend function to send a query or a portion of a query to a data server. FUNCTION DBSend (sessID: LongInt; text: Ptr; len: Integer;                       asyncPB: DBAsyncParmBlkPtr): OSErr;sessID    The session ID that was returned by the DBInit function.text    A pointer to the query or query fragment that you want to send to the data server. The query or query fragment must be a character string. len    The length of the character string. If the len parameter has a value of –1, then the character string is assumed to be NULL terminated (that is, the string ends with a NULL byte); otherwise, the len parameter specifies the number of bytes in the string.asyncPB    A pointer to an asynchronous parameter block. If you do not want to call the function asynchronously, set this parameter to NIL.DESCRIPTIONThe DBSend function sends a query or a portion of a query to the data server. The data server appends this portion of the query to any portion you sent previously. Because the Data Access Manager does not modify the string you send in any way, it does not insert any delimiter between fragments of queries that you send to the data server. If you want a blank or a semicolon to be included between query fragments, or if you want to use return characters to divide the query into lines of text, you must include them in the character string that you send with this function. The data server does not execute the query until you call the DBExec function.SPECIAL CONSIDERATIONSThe DBSend function may move or purge memory. You should not call this routine from within an interrupt, such as in a completion routine or a VBL task.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the DBSend function areTrap macro    Selector    _DBSend    $0706    RESULT CODESnoErr    0    No error    rcDBError    –802    Error trying to send text    rcDBBadSessID    –806    Session ID is invalid    rcDBAsyncNotSupp    –809    The database extension does not support asynchronous calls    rcDBPackNotInited    –813    The InitDBPack function has not yet been called    SEE ALSOFor a description of the asynchronous parameter block, see page 12-55. See Listing 12-4 beginning on page 12-31 for an example of the use of the DBSend function in sending a query fragment. See page 12-78 for a description of the DBExec function.DBSendItemYou can use the DBSendItem function to send to the data server the data that you wish to include in a query. FUNCTION DBSendItem (sessID: LongInt; dataType: DBType;                             len: Integer; places: Integer;                             flags: Integer; buffer: Ptr;                             asyncPB: DBAsyncParmBlkPtr): OSErr;sessID    The session ID that was returned by the DBInit function.dataType    The data type for the data item that you are sending to the data server.len    The length of the data item that you are sending to the data server. The database extension and data server ignore the len parameter if the data type has an implied length. places    The number of decimal places for the data item that you are sending to the data server. The database extension and data server ignore the places parameter for all values of the dataType parameter except typeDecimal and typeMoney.flags    Set the flags parameter to 0. There are no flags currently defined for the DBSendItem function. buffer    A pointer to the memory location of the data item that you want to send. When you use the DBSendItem function to send an item of data to a data server, the database extension and data server format the data according to the data type, length, and decimal places you specify, convert it to a character string, and append the data to the query. asyncPB    A pointer to an asynchronous parameter block. If you do not want to call the function asynchronously, set this parameter to NIL.DESCRIPTIONThe DBSendItem function sends a single data item to the data server. The database extension or the data server (depending on how the system is implemented) converts the data item to a character string and appends it to the query, just as the DBSend function appends a query program fragment to the query. The query is not executed until you call the DBExec function.SPECIAL CONSIDERATIONSThe DBSendItem function may move or purge memory. You should not call this routine from within an interrupt, such as in a completion routine or a VBL task.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the DBSendItem function areTrap macro    Selector    _DBSendItem    $0B07    RESULT CODESnoErr    0    No error    rcDBError    –802    Error trying to send item    rcDBBadSessID    –806    Session ID is invalid    rcDBAsyncNotSupp    –809    The database extension does not support asynchronous calls    rcDBPackNotInited    –813    The InitDBPack function has not yet been called    SEE ALSOFor a discussion of data types, see “Getting Query Results” beginning on page 12-36. For a description of the asynchronous parameter block, see page 12-55. See Listing 12-4 beginning on page 12-31 for an example of the use of the DBSendItem function in sending a query fragment. See page 12-76 for a description of the DBSend function. The DBExec function is described next. DBExecThe DBExec function initiates execution of a query that you have sent to a data server.FUNCTION DBExec (sessID: LongInt;                       asyncPB: DBAsyncParmBlkPtr): OSErr;sessID    The session ID that was returned by the DBInit function.asyncPB    A pointer to an asynchronous parameter block. If you do not want to call the function asynchronously, set this parameter to NIL.DESCRIPTIONThe DBExec function initiates execution of a query that you have sent to a data server. You can use the DBState function to determine the status of a query after you have initiated execution.SPECIAL CONSIDERATIONSThe DBExec function may move or purge memory. You should not call this routine from within an interrupt, such as in a completion routine or a VBL task.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the DBExec function areTrap macro    Selector    _DBExec    $0408    RESULT CODESnoErr    0    No error    rcDBError    –802    Error trying to begin execution    rcDBBadSessID    –806    Session ID is invalid    rcDBAsyncNotSupp    –809    The database extension does not support asynchronous calls    rcDBPackNotInited    –813    The InitDBPack function has not yet been called    SEE ALSOFor a description of the asynchronous parameter block, see page 12-55. See Listing 12-5 beginning on page 12-33 for an example of the use of the DBExec function. Descriptions of the DBSend and DBSendItem functions begin on page 12-76 and page 12-77, respectively. The DBState function is described next. DBStateYou can use the DBState function to determine whether the data server has successfully executed a query and whether it has data available for you to retrieve. FUNCTION DBState (sessID: LongInt;                         asyncPB: DBAsyncParmBlkPtr): OSErr;sessID    The session ID that was returned by the DBInit function.asyncPB    A pointer to an asynchronous parameter block. If you do not want to call the function asynchronously, set this parameter to NIL.DESCRIPTIONThe DBState function returns a result code that indicates the status of the data server.SPECIAL CONSIDERATIONSThe DBState function may move or purge memory. You should not call this routine from within an interrupt, such as in a completion routine or a VBL task.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the DBState function areTrap macro    Selector    _DBState    $0409    RESULT CODESnoErr    0    No error    rcDBValue    –801    Output data available    rcDBError    –802    Error executing function    rcDBExec    –805    Query currently executing     rcDBBadSessID    –806    Session ID is invalid    rcDBAsyncNotSupp    –809    The database extension does not support asynchronous calls    rcDBPackNotInited    –813    The InitDBPack function has not yet been called    SEE ALSOFor a description of the asynchronous parameter block, see page 12-55. DBGetErrThe DBGetErr function retrieves error codes and error messages from a data server. You can use this function to obtain information when a low-level function returns the result code rcDBError. FUNCTION DBGetErr (sessID: LongInt; VAR err1: LongInt;                         VAR err2: LongInt; VAR item1: Str255;                         VAR item2: Str255; VAR errorMsg: Str255;                         asyncPB: DBAsyncParmBlkPtr): OSErr;sessID    The session ID that was returned by the DBInit function.err1     Returns the primary error code. err2    Returns the secondary error code. item1    Returns a string that describes the object of the error message.item2    Returns a string that describes the object of the error message.errorMsg    Returns the error message.asyncPB    A pointer to an asynchronous parameter block. If you do not want to call the function asynchronously, set this parameter to NIL.DESCRIPTIONIf the DBState function returns the rcDBError result code, indicating that execution of a query ended in an error, the error information retuned by DBGetErr can help you debug the query. The meaning of each error code and error message returned by this function depends on the data server with which you are communicating; see the documentation for that data server for more information.SPECIAL CONSIDERATIONSThe DBGetErr function may move or purge memory. You should not call this routine from within an interrupt, such as in a completion routine or a VBL task.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the DBGetErr function areTrap macro    Selector    _DBGetErr    $0E0A    RESULT CODESnoErr    0    No error    rcDBError    –802    Error retrieving error information    rcDBBadSessID    –806    Session ID is invalid    rcDBAsyncNotSupp    –809    The database extension does not support asynchronous calls    rcDBPackNotInited    –813    The InitDBPack function has not yet been called    SEE ALSOFor a description of the asynchronous parameter block, see page 12-55. DBBreakYou can use the DBBreak function to cancel a query—for example, if you determine that it is taking too long to complete execution.FUNCTION DBBreak (sessID: LongInt; abort: Boolean;                         asyncPB: DBAsyncParmBlkPtr): OSErr;sessID    The session ID that was returned by the DBInit function.abort    A Boolean value that indicates how DBBreak should cancel the query. Specify TRUE (nonzero) to cause the data server to halt any query that is executing and terminate the current session. Specify FALSE (0) to cause the data server to halt any query that is executing and reinitialize itself.asyncPB    A pointer to an asynchronous parameter block. If you do not want to call the function asynchronously, set this parameter to NIL.DESCRIPTIONThe DBBreak function can halt execution of a query and reinitialize the data server, or it can unconditionally terminate a session with a data server.SPECIAL CONSIDERATIONSThe DBBreak function may move or purge memory. You should not call this routine from within an interrupt, such as in a completion routine or a VBL task.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the DBBreak function areTrap macro    Selector    _DBBreak    $050B    RESULT CODESnoErr    0    No error    rcDBError    –802    Error executing function    rcDBBadSessID    –806    Session ID is invalid    rcDBAsyncNotSupp    –809    The database extension does not support asynchronous calls    rcDBPackNotInited    –813    The InitDBPack function has not yet been called    SEE ALSOFor a description of the asynchronous parameter block, see page 12-55. Low-Level Interface: Retrieving ResultsThe functions in this section allow you to retrieve a data item from the data server, to obtain information about the next data item, and to retrieve the same data item more than once. DBGetItemAfter you have executed a query and the DBState function returns the rcDBValue result code, indicating that data is available, you can use the DBGetItem function to retrieve the next data item. You can also use this function to obtain information about the next data item without retrieving the data. FUNCTION DBGetItem (sessID: LongInt; timeout: LongInt;                           VAR dataType: DBType; VAR len: Integer;                          VAR places: Integer; VAR flags: Integer;                          buffer: Ptr; asyncPB: DBAsyncParmBlkPtr)                          : OSErr;sessID    The session ID that was returned by the DBInit function.timeout    The maximum amount of time that the database extension should wait to receive results from the data server before canceling the function. Specify the timeout parameter in ticks (sixtieths of a second). To disable the timeout feature, set the timeout parameter to the kDBWaitForever constant. If the timeout period expires, the DBGetItem function returns the rcDBBreak result code. The DBGetItem function ignores the timeout parameter if you call the function asynchronously.     One use for the timeout parameter is to call the DBGetItem function periodically with a short value set for this parameter in order to return control to your application while a query is executing. Your application can then retrieve the next data item as soon as execution of the query is complete without having to call the DBState function to determine when data is available.dataType    The data type that you expect the next data item to be. If the item is not of the expected data type, the database extension returns the rcDBBadType result code. If you want to retrieve the next data item regardless of type, set the dataType parameter to the typeAnyType constant. To skip the next data item, set the dataType parameter to the typeDiscard constant. The data server sets the dataType parameter to the actual type of the data item when it retrieves the data item or returns information about the data item.len    The length of the data buffer pointed to by the buffer parameter. If you use the DBGetItem function to obtain information only (by setting the buffer parameter to NIL), then the data server ignores the len parameter. The data server sets the len parameter to the actual length of the data item when it retrieves the data item or returns information about the data item.places    Returns the number of decimal places in data items of types typeMoney and typeDecimal. For all other data types, the data server returns 0 for the places parameter.flags    If the least significant bit of the flags parameter is set to 1, the data item is in the last column of the row. If the third bit of this parameter is set to 1, the data item is NULL. You can use the constants kDBLastColFlag and kDBNullFlag to test for these flag bits.buffer    A pointer to the location where you want the retrieved data item to be stored. You must ensure that the location you specify contains enough space for the data item that will be returned. To determine the data type, length, and number of decimal places of the next data item without retrieving it, specify NIL for the buffer parameter. asyncPB    A pointer to an asynchronous parameter block. If you do not want to call the function asynchronously, set this parameter to NIL.DESCRIPTIONThe DBGetItem function retrieves the next data item from the data server. You can repeat the DBGetItem function as many times as is necessary to retrieve all of the data returned by the data source in response to a query.SPECIAL CONSIDERATIONSThe DBGetItem function may move or purge memory. You should not call this routine from within an interrupt, such as in a completion routine or a VBL task.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the DBGetItem function areTrap macro    Selector    _DBGetItem    $100C    RESULT CODESnoErr    0    No error    rcDBNull    –800    The data item was NULL    rcDBValue    –801    Data available was successfully retrieved    rcDBError    –802    Error executing function    rcDBBadType    –803    Next data item not of requested data type    rcDBBreak    –804    Function timed out    rcDBBadSessID    –806    Session ID is invalid    rcDBAsyncNotSupp    –809    The database extension does not support asynchronous calls    rcDBPackNotInited    –813    The InitDBPack function has not yet been called    SEE ALSOFor a discussion of data types, see “Getting Query Results” beginning on page 12-36. To retrieve all of a query’s data items at once, use the high-level function DBGetQueryResults; a description of that function begins on page 12-65. For a description of the asynchronous parameter block, see page 12-55. See Listing 12-5 beginning on page 12-33 for an example that illustrates the use of the DBGetItem function. DBUnGetItemThe DBUnGetItem function reverses the effect of the last call to the DBGetItem function, in the sense that the next time you call the DBGetItem function it retrieves the same item a second time.FUNCTION DBUnGetItem (sessID: LongInt;                              asyncPB: DBAsyncParmBlkPtr): OSErr;sessID    The session ID that was returned by the DBInit function.asyncPB    A pointer to an asynchronous parameter block. If you do not want to call the function asynchronously, set this parameter to NIL.DESCRIPTIONThe DBUnGetItem function does not remove the just-retrieved data item from the input buffer. This function can reverse the effect of only one call to the DBGetItem function; you cannot use it to step back through several previously retrieved data items. SPECIAL CONSIDERATIONSThe DBUnGetItem function may move or purge memory. You should not call this routine from within an interrupt, such as in a completion routine or a VBL task.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the DBUnGetItem function areTrap macro    Selector    _DBUnGetItem    $040D    RESULT CODESnoErr    0    No error    rcDBError    –802    Error executing function    rcDBBadSessID    –806    Session ID is invalid    rcDBAsyncNotSupp    –809    The database extension does not support asynchronous calls    rcDBPackNotInited    –813    The InitDBPack function has not yet been called    SEE ALSOFor a description of the asynchronous parameter block, see page 12-55. See page 12-83 for a description of the DBGetItem function.Installing and Removing Result HandlersThe functions in this section install, remove, and return pointers to result handlers. DBInstallResultHandlerThe DBInstallResultHandler function installs a result handler for the data type specified by the dataType parameter. The result handler is then used by the DBResultsToText function to convert data of the specified type into a character string.FUNCTION DBInstallResultHandler (dataType: DBType;                                             theHandler: ProcPtr;                                             isSysHandler: Boolean): OSErr;dataType    The type of result handler to install.theHandlerA pointer to a result handler.isSysHandlerA Boolean value that specifies whether the result handler is an application result handler—to be used only when the DBResultsToText function is called by the application that installed the result handler—or a system result handler—to be used by every application running on the system. If the isSysHandler parameter is TRUE, the result handler is a system result handler.DESCRIPTIONWhen you install an application result handler, it replaces any result handler with the same name previously installed by that application. Similarly, when you install a system result handler, it replaces any existing system result handler with the same name. Before you temporarily replace an existing result handler, use the DBGetResultHandler function to obtain a pointer to the present handler, and save the present result handler in your application’s private storage. Then you can reinstall the original result handler when you are finished using the temporary one.Because an application result handler is used in preference to a system result handler if both are available, you can temporarily replace a system result handler for purposes of your application by installing an application result handler for the same data type. You can then use the DBRemoveResultHandler function to remove the application result handler and return to using the system result handler whenever you wish.SPECIAL CONSIDERATIONSThe DBInstallResultHandler function may move or purge memory. You should not call this routine from within an interrupt, such as in a completion routine or a VBL task.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the DBInstallResultHandler function areTrap macro    Selector    _DBInstallResultHandler    $0514    RESULT CODESnoErr    0    No error    rcDBPackNotInited    –813    The InitDBPack function has not yet been called    SEE ALSOSee page 12-67 for a description of the DBResultsToText function. For information on application and system result handlers, see “Converting Query Results to Text” beginning on page 12-42; that section also lists the data types for which Apple provides system result handlers. Listing 12-6 on page 12-45 shows a sample result handler. The DBRemoveResultHandler function is described on page 12-89, and the DBGetResultHandler function is described next. DBGetResultHandlerThe DBGetResultHandler function returns a pointer to a result handler for a specified data type.FUNCTION DBGetResultHandler (dataType: DBType;                                       VAR theHandler: ProcPtr;                                       getSysHandler: Boolean): OSErr;dataType    The data type for which to install a result handler.theHandlerReturns a pointer to the result handler.getSysHandlerIf you set the getSysHandler parameter to FALSE (0), the function returns a pointer to the current application result handler for the specified data type, or it returns NIL if there is no application result handler for that data type. If you set the getSysHandler parameter to TRUE (nonzero), the function returns a pointer to the current system result handler for the specified data type, or it returns NIL if there is no system result handler for that data type.DESCRIPTIONYou can use the DBGetResultHandler function to obtain a pointer to a result handler so that you can use it to convert to text an individual data item retrieved by the DBGetItem function. The DBGetQueryResults function automatically converts to text all of the data pointed to by the results record.SPECIAL CONSIDERATIONSThe DBGetResultHandler function may move or purge memory. You should not call this routine from within an interrupt, such as in a completion routine or a VBL task.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the DBGetResultHandler function areTrap macro    Selector    _DBGetResultHandler    $0516    RESULT CODESnoErr    0    No error    rcDBNoHandler    –811    There is no handler for this data type installed for the current application    rcDBPackNotInited    –813    The InitDBPack function has not yet been called    SEE ALSOThe DBGetQueryResults function is described on page 12-65, and the DBGetItem function is described on page 12-83. See “Converting Query Results to Text” beginning on page 12-42 for a list of the data types for which Apple provides system result handlers. Listing 12-6 on page 12-45 shows a sample result handler. DBRemoveResultHandlerYou can use the DBRemoveResultHandler function to remove an application result handler.FUNCTION DBRemoveResultHandler (dataType: DBType): OSErr;dataType    The type of result handler to remove.DESCRIPTIONThe DBRemoveResultHandler function removes from memory the specified application result handler. This function cannot remove a system result handler. SPECIAL CONSIDERATIONSThe DBRemoveResultHandler function may move or purge memory. You should not call this routine from within an interrupt, such as in a completion routine or a VBL task.ASSEMBLY-LANGUAGE INFORMATIONThe trap macro and routine selector for the DBRemoveResultHandler function areTrap macro    Selector    _DBRemoveResultHandler    $0215    RESULT CODESnoErr    0    No error    rcDBNoHandler    –811    There is no handler for this data type installed for the current application    rcDBPackNotInited    –813    The InitDBPack function has not yet been called    SEE ALSOFor a discussion of result handlers, see “Converting Query Results to Text” beginning on page 12-42. Application-Defined RoutinesYou can provide status functions, result handler functions, and query defintion functions for use with the Data Access Manager. For information on status functions, see “Writing a Status Routine for High-Level Functions” beginning on page 12-22. See “Processing Query Results” beginning on page 12-36 for information on result handlers. See “Writing a Query Definition Function” beginning on page 12-51 for information on query definition functions.ResourcesThis section describes the query resource, the query string resource, and the query definition function resource. You use the query resource to provide information that the Data Access Manager uses to create a query record in memory. You use the query string resource to define individual queries. You use the query definition function to modify a query and the query record before the query is sent to the data server.The Query ResourceEach query document should contain a single 'qrsc' resource. Figure 12-9 shows the format of the 'qrsc' resource.Figure 12-9    Structure of a compiled query ('qrsc') resourceA 'qrsc' resource contains these elements:n    The version number of the 'qrsc' format. For the Data Access Manager released with System 7, the version number is 0.n    The resource ID of the 'qdef' resource containing the query definition function that the Data Access Manager is to call when it opens this 'qrsc' resource. Use an ID of 0 if there is no query definition function for this resource—that is, if the Data Access Manager should send the query in this resource to the data server without modifications.n    The resource ID of an 'STR#' resource that contains five Pascal strings corresponding to some of the parameters used by the DBInit function. If the query definition function is going to prompt the user for the values of these parameters before entering them in the query record, they should be zero-length strings in the 'STR#' resource.n    An index value indicating which element in the array of 'wstr' IDs represents the current query. The current query is the one actually sent to the data server.n    The number of 'wstr' resources in the query document.n    An array of resource IDs of the 'wstr' resources in the query document. (The array elements are numbered starting with 1.) If the query document contains more than one 'wstr' resource, the query definition function can prompt the user to select the query to use and modify the current query field in the query record appropriately.n    The number of other resources in this query document.n    An array listing the resource types and IDs of all the resources in the query document other than the standard resources included in all query documents. The resources listed in this final array are those used by the query definition function. This list should include resources embedded in other resources, such as a 'PICT' resource that is included in a 'DITL' resource. The Query String ResourceA query document must contain one or more query string resources of type 'wstr'. These 'wstr' resources contain individual queries—that is, strings of commands and data that the DBSend function sends to the data server and that the DBExec function executes.A 'wstr' resource consists of a 2-byte length field followed by a character string. (The w in 'wstr' refers to the length word as opposed to the length byte used in an 'STR ' resource.) Each 'wstr' resource contains one query (or one query template, to be modified by the query definition function before it is sent to the data server). Figure 12-10 shows the structure of the 'wstr' resource.Figure 12-10    Structure of a compiled query string ('wstr') resourceThe 'qrsc' resource includes an array that lists the resource ID numbers of all of the 'wstr' resources in the query document and an index into the array that specifies which one of the 'wstr' resources should be sent to the data server.The Query Definition Function ResourceA query document may contain a query definition function, which can modify the query record and, if necessary, fill in the query template to create a complete query.If you want to include a query definition function, you must make it the first piece of code in a resource of type 'qdef' in the query document.Note that, because a query in memory consists only of a 2-byte length value followed by a character string, the query definition function has to know the exact contents and structure of a query in order to modify it. For a sample query definition function that uses a dialog box to prompt the user for a user name and password, see Listing 12-7 on page 12-52.Summary of the Data Access ManagerPascal SummaryConstantsCONST                gestaltDBAccessMgrAttr                                    = 'dbac';                {Gestalt selector for }                                                            { Data Access Manager}        {Gestalt selector response}        gestaltDBAccessMgrPresent                                    = 0;                {TRUE if Data Access Manager }                                                            { is present}        {DBStartQuery status messages}        kDBUpdateWind                                    = 0;                {update windows}        kDBAboutToInit                                    = 1;                {about to call DBInit}        kDBInitComplete                                     = 2;                {DBInit has completed}        kDBSendComplete                                     = 3;                {DBSend has completed}        kDBExecComplete                                     = 4;                {DBExec has completed}        kDBStartQueryComplete                                    = 5;                {DBStartQuery is about }                                                              { to complete}        {DBGetQueryResults status messages}        kDBGetItemComplete                                     = 6;                {DBGetItem has completed}        kDBGetQueryResultsComplete                                    = 7;                {DBGetQueryResults has }                                                            { completed data types}        {data type codes}        typeNone                                    = 'none';                {no more data expected}        typeDate                                    = 'date';                {date}        typeTime                                    = 'time';                {time}        typeTimeStamp                                    = 'tims';                {date and time}        typeDecimal                                    = 'deci';                {decimal number}        typeMoney                                    = 'mone';                {money value}        typeVChar                                    = 'vcha';                {variable character}        typeVBin                                    = 'vbin';                {variable binary}        typeLChar                                    = 'lcha';                {long character}        typeLBin                                    = 'lbin';                {long binary}        typeDiscard                                    = 'disc';                {discard next data item}        typeBoolean                                     = 'bool';                {Boolean}        typeChar                                     = 'TEXT';                {character}        typeSMInt                                     = 'shor';                {short integer}        typeInteger                                     = 'long';                {integer}        typeSMFloat                                     = 'sing';                {short floating point}        typeFloat                                     = 'doub';                {floating point}        {dummy data types for DBResultsToText}        typeUnknown                                    = 'unkn';                {result handler for unknown }                                                            { data type}        typeColBreak                                    = 'colb';                {result handler for column }                                                            { break}        typeRowBreak                                    = 'rowb';                {result handler for end of }                                                            { line}        {any data type in DBGetItem}        typeAnyType                                    = 0;                {any data type}        {infinite timeout value for DBGetItem}        kDBWaitForever                                    = -1;                {infinite timeout value for }                                                            { DBGetItem}        {flags for DBGetItem}        kDBLastColFlag                                     = $0001;                {data item is last column }                                                            { of the row}        kDBNullFlag                                     = $0004;                {data item is NULL}Data TypesTYPE DBType =                             OSType;                                {data type}    DBAsyncParamBlockRec =                                                         {asynchronous parameter block}    RECORD        completionProc:                        ProcPtr;                            {pointer to completion routine}        result:                        OSErr;                            {result of call}        userRef:                        LongInt;                            {reserved for use by }                                                            { application}        ddevRef:                        LongInt;                            {reserved for use by database }                                                            { extension}        reserved:                        LongInt;                            {reserved for use by }                                                            { Data Access Mgr}    END;    DBAsyncParmBlkPtr = ^DBAsyncParamBlockRec;    ResListElem =                                                         {resource list in QueryRecord}    RECORD        theType:                        ResType;                            {resource type}        id:                        Integer;                            {resource ID}    END;    ResListArray                     = ARRAY[0..255] OF ResListElem;    ResListPtr                     = ^ResListArray;    ResListHandle                     = ^ResListPtr;    QueryRecord =     RECORD        version:                    Integer;                        {query record format version}        id:                    Integer;                        {resource ID of 'qrsc'}        queryProc:                    Handle;                        {handle to query def proc}        ddevName:                    Str63;                        {name of database extension}        host:                    Str255;                        {name of host computer}        user:                    Str255;                        {name of user}        password:                    Str255;                        {user's password}        connStr:                    Str255;                        {connection string}        currQuery:                    Integer;                        {index of current query}        numQueries:                    Integer;                        {number of queries in list}        queryList:                    QueryListHandle;                        {handle to array of handles to text}        numRes:                    Integer;                        {number of resources in list}        resList:                    ResListHandle;                        {handle to array of resource list }                                                     { elements}        dataHandle:                    Handle;                        {handle to memory for query def proc}        refCon:                    LongInt;                        {reserved for use by application}    END;    QueryPtr                 = ^QueryRecord;                                {pointer to query record}    QueryHandle     = ^QueryPtr;                                            {handle to query record}    {query list in QueryRecord}    QueryArray                         = ARRAY[0..255] OF Handle;    QueryListPtr                         = ^QueryArray;    QueryListHandle                         = ^QueryListPtr;    {column types array in ResultsRecord}    ColTypesArray                     = ARRAY[0..255] OF DBType;    ColTypesPtr                     = ^ColTypesArray;    ColTypesHandle             = ^ColTypesPtr;    DBColInfoRecord =                                                 {column info in ResultsRecord}    RECORD        len:                Integer;                            {length of data item}        places:                Integer;                            {places for decimal and money }                                                    { data items}        flags:                Integer        ;                    {flags for data item}    END;    ColInfoArray                     = ARRAY[0..255] OF DBColInfoRecord;    ColInfoPtr                     = ^ColInfoArray;    ColInfoHandle                     = ^ColInfoPtr;    {structure of results returned by DBGetResults}    ResultsRecord =     RECORD        numRows:                    Integer;                        {number of rows retrieved}        numCols:                    Integer;                        {number of columns per row}        colTypes:                    ColTypesHandle;                        {type of data in each column}        colData:                    Handle;                        {array of data items}        colInfo:                    ColInfoHandle;                        {DBColInfoRecord array--info about }                                                    { each data item}    END;Data Access Manager RoutinesInitializing the Data Access ManagerFUNCTION InitDBPack:    OSErr;High-Level Interface: Handling Query DocumentsFUNCTION DBGetNewQuery    (queryID: Integer; VAR query: QueryHandle): OSErr;FUNCTION DBDisposeQuery    (query: QueryHandle): OSErr;FUNCTION DBStartQuery    (VAR sessID: LongInt; query: QueryHandle; statusProc: ProcPtr; asyncPB: DBAsyncParmBlkPtr): OSErr;High-Level Interface: Handling Query ResultsFUNCTION DBGetQueryResults    (sessID: LongInt; VAR results: ResultsRecord; timeout: LongInt; statusProc: ProcPtr; asyncPB: DBAsyncParmBlkPtr): OSErr;FUNCTION DBResultsToText    (results: ResultsRecord; VAR theText: Handle): OSErr;Low-Level Interface: Controlling the SessionFUNCTION DBInit    (VAR sessID: LongInt; ddevName: Str63; host: Str255; user: Str255; password: Str255; connStr: Str255; asyncPB: DBAsyncParmBlkPtr): OSErr;FUNCTION DBEnd    (sessID: LongInt; asyncPB: DBAsyncParmBlkPtr): OSErr;FUNCTION DBGetConnInfo    (sessID: LongInt; sessNum: Integer; VAR returnedID: LongInt; VAR version: LongInt; VAR ddevName: Str63; VAR host: Str255; VAR user: Str255; VAR network: Str255; VAR connStr: Str255; VAR start: LongInt; VAR state: OSErr; asyncPB: DBAsyncParmBlkPtr): OSErr;FUNCTION DBGetSessionNum    (sessID: LongInt; VAR sessNum: Integer; asyncPB: DBAsyncParmBlkPtr): OSErr;FUNCTION DBKill    (asyncPB: DBAsyncParmBlkPtr): OSErr;Low-Level Interface: Sending and Executing QueriesFUNCTION DBSend    (sessID: LongInt; text: Ptr; len: Integer; asyncPB: DBAsyncParmBlkPtr): OSErr;FUNCTION DBSendItem    (sessID: LongInt; dataType: DBType; len: Integer; places: Integer; flags: Integer; buffer: Ptr; asyncPB: DBAsyncParmBlkPtr): OSErr;FUNCTION DBExec    (sessID: LongInt; asyncPB: DBAsyncParmBlkPtr): OSErr;FUNCTION DBState    (sessID: LongInt; asyncPB: DBAsyncParmBlkPtr): OSErr;FUNCTION DBGetErr    (sessID: LongInt; VAR err1: LongInt; VAR err2: LongInt; VAR item1: Str255; VAR item2: Str255; VAR errorMsg: Str255; asyncPB: DBAsyncParmBlkPtr): OSErr;FUNCTION DBBreak    (sessID: LongInt; abort: Boolean; asyncPB: DBAsyncParmBlkPtr): OSErr;Low-Level Interface: Retrieving ResultsFUNCTION DBGetItem    (sessID: LongInt; timeout: LongInt; VAR dataType: DBType;VAR len: Integer; VAR places: Integer; VAR flags: Integer; buffer: Ptr;asyncPB: DBAsyncParmBlkPtr): OSErr;FUNCTION DBUnGetItem    (sessID: LongInt;asyncPB: DBAsyncParmBlkPtr): OSErr;Installing and Removing Result HandlersFUNCTION DBInstallResultHandler(dataType: DBType; theHandler: ProcPtr;isSysHandler: Boolean): OSErr;FUNCTION DBGetResultHandler    (dataType: DBType; VAR theHandler: ProcPtr;getSysHandler: Boolean): OSErr;FUNCTION DBRemoveResultHandler(dataType: DBType): OSErr;Application-Defined RoutinesFUNCTION MyStatusFunc    (message: Integer; result: OSErr; dataLen: Integer; dataPlaces: Integer; dataFlags: Integer; dataType: DBType; dataPtr: Ptr): Boolean;FUNCTION MyResultHandler    (dataType: DBType; theLen: Integer; thePlaces: Integer; theFlags: Integer; theData: Ptr; theText: Handle): OSErr;FUNCTION MyQDef    (VAR sessID: LongInt; query: QueryHandle): OSErr;C SummaryConstantsenum {    #define gestaltDBAccessMgrAttr                                            'dbac'            /*Gestalt selector for */                                                            /* Data Access Manager*/    /*Gestalt selector response*/    gestaltDBAccessMgrPresent                                        = 0                /*TRUE if Data Access Manager */                                                            /* is present*/};enum {                                                            /*DBStartQuery status messages*/    kDBUpdateWind                                        = 0,                /*update windows*/    kDBAboutToInit                                        = 1,                /*about to call DBInit*/    kDBInitComplete                                         = 2,                /*DBInit has completed*/    kDBSendComplete                                         = 3,                /*DBSend has completed*/    kDBExecComplete                                         = 4,                /*DBExec has completed*/    kDBStartQueryComplete                                        = 5                /*DBStartQuery is about */                                                            /* to complete*/};enum {    /*DBGetQueryResults status messages*/    kDBGetItemComplete                                         = 6,            /*DBGetItem has completed*/    kDBGetQueryResultsComplete                                        = 7,            /*DBGetQueryResults has */                                                        /* completed data types*/    /*data type codes*/    #define typeNone                                         'none'            /*no more data expected*/    #define typeDate                                         'date'            /*date*/    #define typeTime                                         'time'            /*time*/    #define typeTimeStamp                                         'tims'            /*date and time*/    #define typeDecimal                                         'deci'            /*decimal number*/    #define typeMoney                                         'mone'            /*money value*/    #define typeVChar                                         'vcha'            /*variable character*/    #define typeVBin                                         'vbin'            /*variable binary*/    #define typeLChar                                         'lcha'            /*long character*/    #define typeLBin                                         'lbin'            /*long binary*/    #define typeDiscard                                         'disc'            /*discard next data item*/    /*dummy data types for DBResultsToText*/    #define typeUnknown                                         'unkn'            /*result handler for unknown */                                                        /* data type*/    #define typeColBreak                                         'colb'            /*result handler for */                                                        /* column break*/    #define typeRowBreak                                         'rowb'            /*result handler for */                                                        /* end of line*/    /*any data type in DBGetItem*/    #define typeAnyType                                     (DBType)0                /*any data type*/    /*infinite timeout value for DBGetItem*/    kDBWaitForever                                        = -1    ,        /*infinite timeout value for */                                                        /* DBGetItem*/    /*flags for DBGetItem*/    kDBLastColFlag                                         = 0x0001,            /*data item is last column */                                                        /* of the row*/    kDBNullFlag                                         = 0x0004            /*data item is NULL*/};enum {    /*more data type codes*/    typeBoolean                                     = 'bool',                /*Boolean*/    typeChar                                     = 'TEXT',                /*character*/    typeSMInt                                     = 'shor',                /*short integer*/    typeInteger                                     = 'long',                /*integer*/    typeSMFloat                                     = 'sing',                /*short floating point*/    typeFloat                                     = 'doub'                /*floating point*/};Data Typestypedef OSType DBType;                                                /*data type*/struct DBAsyncParamBlockRec {                                                /*asynchronous parameter block*/    ProcPtr             completionProc;                                /*pointer to completion routine*/    OSErr             result;                                /*result of call*/    long             userRef;                                /*reserved for use by application*/    long             ddevRef;                                /*reserved for use by database */                                                /* extension*/    long             reserved;                                /*reserved for use by */                                                /* Data Access Manager*/};typedef struct DBAsyncParamBlockRec DBAsyncParamBlockRec;typedef DBAsyncParamBlockRec *DBAsyncParmBlkPtr;struct ResListElem {                                                /*resource list in QueryRecord*/    ResType             theType;                                /*resource type*/    short             id;                                /*resource ID*/};typedef struct ResListElem ResListElem;typedef ResListElem *ResLisPtr, **ResListHandle;typedef Handle **QueryListHandle;struct QueryRecord {                                                /*query record*/    short                         version;                    /*query record format version*/    short                         id;                    /*resource ID of 'qrsc'*/    Handle                         queryProc;                    /*handle to query def proc*/    Str63                         ddevName;                    /*name of database extension*/    Str255                         host;                    /*name of host computer*/    Str255                         user;                    /*name of user*/    Str255                         password;                    /*user's password*/    Str255                         connStr;                    /*connection string*/    short                         currQuery;                    /*index of current query*/    short                         numQueries;                    /*number of queries in list*/    QueryListHandle                         queryList;                    /*handle to array of handles to text*/    short                         numRes;                    /*number of resources in list*/    ResListHandle                         resList;                    /*handle to array of resource list */                                                /* elements*/    Handle                         dataHandle;                    /*handle to memory for query def proc*/    long                         refCon;                    /*reserved for use by application*/};typedef struct QueryRecord QueryRecord;typedef QueryRecord *QueryPtr, **QueryHandle;/*column types array in ResultsRecord*/typedef Handle ColTypesHandle;struct DBColInfoRecord {                                                /*column info in ResultsRecord*/    short len;                                            /*length of data item*/    short places;                                            /*places for decimal and money */                                                /* data items*/    short flags;                                            /*flags for data item*/};typedef struct DBColInfoRecord DBColInfoRecord;typedef Handle ColInfoHandle;struct ResultsRecord {                                                /*results returned by DBGetResults*/    short                     numRows;                        /*number of rows retrieved*/    short                     numCols;                        /*number of columns per row*/    ColTypesHandle     colTypes;                                        /*type of data in each column*/    Handle                     colData;                        /*array of data items*/    ColInfoHandle                     colInfo;                        /*DBColInfoRecord array--info about */                                                /* each data item*/};typedef struct ResultsRecord ResultsRecord;Data Access Manager RoutinesInitializing the Data Access Managerpascal OSErr InitDBPack                                     (void);High-Level Interface: Handling Query Documentspascal OSErr DBGetNewQuery    (short queryID, QueryHandle *query);pascal OSErr DBDisposeQuery    (QueryHandle query);pascal OSErr DBStartQuery    (long *sessID, QueryHandle query, ProcPtr statusProc, DBAsyncParmBlkPtr asyncPB);High-Level Interface: Handling Query Resultspascal OSErr DBGetQueryResults(long sessID, ResultsRecord *results, long timeout, ProcPtr statusProc, DBAsyncParmBlkPtr asyncPB);pascal OSErr DBResultsToText(ResultsRecord *results, Handle *theText);Low-Level Interface: Controlling the Sessionpascal OSErr DBInit    (long *sessID, ConstStr63Param ddevName, ConstStr255Param host, ConstStr255Param user, ConstStr255Param passwd, ConstStr255Param connStr, DBAsyncParmBlkPtr asyncPB);pascal OSErr DBEnd    (long sessID, DBAsyncParmBlkPtr asyncPB);pascal OSErr DBGetConnInfo    (long sessID, short sessNum, long *returnedID, long *version, Str63 ddevName, Str255 host, Str255 user, Str255 network, Str255 connStr, long *start, OSErr *state, DBAsyncParmBlkPtr asyncPB);pascal OSErr DBGetSessionNum(long sessID, short *sessNum, DBAsyncParmBlkPtr asyncPB);pascal OSErr DBKill    (DBAsyncParmBlkPtr asyncPB);Low-Level Interface: Sending and Executing Queriespascal OSErr DBSend    (long sessID, char *text, short len, DBAsyncParmBlkPtr asyncPB);pascal OSErr DBSendItem    (long sessID, DBType dataType, short len, short places, short flags, void *buffer, DBAsyncParmBlkPtr asyncPB);pascal OSErr DBExec    (long sessID, DBAsyncParmBlkPtr asyncPB);pascal OSErr DBState    (long sessID, DBAsyncParmBlkPtr asyncPB);pascal OSErr DBGetErr    (long sessID, long *err1, long *err2, Str255 item1, Str255 item2, Str255 errorMsg, DBAsyncParmBlkPtr asyncPB);pascal OSErr DBBreak    (long sessID, Boolean abort, DBAsyncParmBlkPtr asyncPB);Low-Level Interface: Retrieving Resultspascal OSErr DBGetItem    (long sessID, long timeout, DBType *dataType, short *len, short *places, short *flags, void *buffer, DBAsyncParmBlkPtr asyncPB);pascal OSErr DBUnGetItem    (long sessID, DBAsyncParmBlkPtr asyncPB);Installing and Removing Result Handlerspascal OSErr DBInstallResultHandler(DBType dataType, ProcPtr theHandler, Boolean isSysHandler);pascal OSErr DBGetResultHandler(DBType dataType, ProcPtr *theHandler, Boolean getSysHandler);pascal OSErr DBRemoveResultHandler(DBType dataType);Application-Defined Routinespascal Boolean MyStatusFunc    (short message, OSErr result, short dataLen, short dataPlaces, short dataFlags, DBType dataType, Ptr dataPtr);pascal OSErr  MyResultHandler(DBType dataType, short theLen, short thePlaces, short theFlags, Ptr theData, Handle theText);pascal OSErr MyQDef    (long *sessID, QueryHandle query);Assembly-Language SummaryTrap MacrosTrap Macros Requiring Routine Selectors_Pack13Selector    Routine    $0100    InitDBPack    $020E    DBKill    $0210    DBDisposeQuery    $0215    DBRemoveResultHandler    $030F    DBGetNewQuery    $0403    DBEnd    $0408    DBExec    $0409    DBState    $040D    DBUnGetItem    $0413    DBResultsToText    $050B    DBBreak    $0514    DBInstallResultHandler    $0516    DBGetResultHandler    $0605    DBGetSessionNum    $0706    DBSend    $0811    DBStartQuery    $0A12    DBGetQueryResults    $0B07    DBSendItem    $0E02    DBInit    $0E0A    DBGetErr    $100C    DBGetItem    $1704    DBGetConnInfo    Result CodesnoErr    0    No error    userCanceledErr    –128    User canceled the query     rcDBNull    –800    The data item was NULL    rcDBValue    –801    Data available or successfully retrieved    rcDBError    –802    Error executing function    rcDBBadType    –803    Next data item not of requested data type    rcDBBreak    –804    Function timed out    rcDBExec    –805    Query currently executing     rcDBBadSessID    –806    Session ID is invalid    rcDBBadSessNum    –807    Invalid session number    rcDBBadDDev    –808    Couldn’t find the specified database extension, or error occurred in opening database extension    rcDBAsyncNotSupp    –809    The database extension does not support asynchronous calls    rcDBBadAsynchPB    –810    Invalid parameter block specified    rcDBNoHandler    –811    There is no handler for this data type installed for the current application    rcDBWrongVersion    –812    Wrong version number    rcDBPackNotInited    –813    The InitDBPack function has not yet been called    Glossaryabstract superclassA superclass listed in the Apple Event Registry: Standard Suites, such as cObject or cOpenableObject, that is used only in definitions of object classes and not for real Apple event objects. See also object class.active functionA function called by a scripting component periodically during script compilation and execution. You must provide an alternative active function for the use of scripting components if you want your application to get time during script compilation and execution for tasks such as spinning the cursor or checking for system-level errors.additional parameterA keyword-specified descriptor record that a server application uses in addition to the data specified in the direct parameter. For example, an Apple event for arithmetic operations may include additional parameters that specify operands in an equation. Additional parameters may be required, or they may be optional.address descriptor recordA descriptor record of data type AEAddressDesc that contains the address of the target or source of an Apple event.AEIMPSee Apple Event Interprocess Messaging Protocol.AE recordA descriptor record of data type AERecord that usually contains a list of parameters for an Apple event. See also Apple event parameter. Apple eventA high-level event that adheres to the Apple Event Interprocess Messaging Protocol. An Apple event consists of attributes (including the event class and event ID, which identify the event and its task) and, usually, parameters (which contain data used by the target application for the event). See also Apple event attribute, Apple event parameter.Apple event arrayAn array in a descriptor list. The data for an Apple event array is specified by an array data record, which is defined by the data type AEArrayData.Apple event attributeA keyword-specified descriptor record that identifies the event class, event ID, target application, or some other characteristic of an Apple event. Taken together, the attributes of an Apple event identify the event and denote the task to be performed on the data specified in the Apple event’s parameters. Unlike Apple event parameters (which contain data used only by the target application of the Apple event), Apple event attributes contain information that can be used by both the Apple Event Manager and the target application. See also Apple event parameter.Apple event dispatch tableA table in either the application heap or the system heap that the Apple Event Manager uses to map Apple events to the appropriate Apple event handlers.Apple event handlerAn application-defined function that extracts pertinent data from an Apple event, performs the action requested by the Apple event, and returns a result. Apple Event Interprocess Messaging Protocol (AEIMP)A standard defined by Apple Computer, Inc., for communication and data sharing among applications. High-level events that adhere to this protocol are called Apple events. See also Apple event.Apple Event ManagerThe collection of routines that allows client applications to send Apple events to server applications for the purpose of requesting services or information.Apple event objectA distinct item in a target application or any of its documents that can be specified by an object specifier record in an Apple event sent by a source application. Apple event objects can be anything that an application can locate on the basis of such a description, including items that a user can differentiate and manipulate while using an application, such as words, paragraphs, shapes, windows, or style formats. See also object specifier record.Apple event object classSee object class.Apple event parameterA keyword-specified descriptor record containing data that the target application for an Apple event uses. Unlike Apple event attributes (which contain information that can be used by both the Apple Event Manager and the target application), Apple event parameters contain data used only by the target application of the Apple event. See also Apple event attribute, direct parameter, optional parameter, required parameter.Apple event recordA descriptor record of data type AppleEvent that contains a list of keyword-specified descriptor records. These descriptor records describe—at least—the attributes necessary for an Apple event; they may also describe parameters for the Apple event. Apple Event Manager functions are used to add parameters to an Apple event record.Apple event user terminology resourcesTwo resources with identical formats used by server applications to specify the Apple events and corresponding user terminology that the applications support. The 'aeut' resource, which is provided by scripting components, contains terminology information for all the standard suites of Apple events defined in the Apple Event Registry: Standard Suites. An 'aete' resource must be provided by every scriptable application; it describes which of the standard suites listed in the 'aeut' resource the application supports and provides additional terminology information for extensions to the standard suites and custom Apple events supported by the application. See also scripting component.AppleScript componentThe scripting component that implements the AppleScript scripting language. See also scripting component.AppleScript scripting languageThe standard user scripting language defined by Apple Computer, Inc. The AppleScript scripting language is implemented by the AppleScript scripting component. See also dialect.application result handlerA result handler that is associated with a particular application. Compare with system result handler.asynchronous parameter blockIn the Data Access Manager, the parameter block that allows a routine to return control to your application before the routine has completed execution.authenticationThe process of establishing the identity of a user. The authentication mechanism of the PPC Toolbox identifies each user through an assigned name and password.boundary objectsThe elements, specified in a range descriptor record, that identify the beginning and end of the range. See also range descriptor record.client applicationAn application that uses Apple events to request a service (for example, printing a list of files, checking the spelling of a list of words, or performing a numeric calculation) from another application (called a server application). These applications can reside on the same local computer or on remote computers connected to a network.coercion handlerA routine that coerces data from one descriptor type to another.coercion handler dispatch tableA table in either the application heap or the system heap that the Apple Event Manager uses to map desired coercions to the appropriate coercion handler. See also coercion handler.comparison descriptor recordA coerced AE record of type typeCompDescriptor that specifies an Apple event object and either another Apple event object or data for the Apple Event Manager to compare to the first object.compiled scriptCompiled code that a client application can decompile into source data or execute using the standard scripting component routines.compiled script fileA script file with the file type 'scpt' that contains script data as a resource of type 'scpt'. Before executing the script in a compiled script file, a user must first open the script from the Finder or from an application such as Script Editor.component-specific storage descriptor recordA descriptor record returned by OSAStore. The descriptor type for a component-specific storage descriptor record is the scripting component subtype value for the scripting component that created the script data.containerAn Apple event object that contains another Apple event object. A container is specified in an object specifier record by a keyword-specified descriptor record with the keyword keyAEContainer. The keyword-specified descriptor record is usually another object specifier record. It can also be a null descriptor record, or it can be used much like a variable when the Apple Event Manager determines a range or performs a series of tests. The objects a container contains can be either elements or properties. See also Apple event object, element, object specifier record, property.container hierarchyThe chain of containers that determine the location of one or more Apple event objects. See also container.core Apple eventAn Apple event defined as part of the Core suite of Apple events in the Apple Event Registry: Standard Suites. create functionA function called by a scripting component whenever it creates an Apple event during script execution. You must provide an alternative create function if you want to gain control over the creation and addressing of Apple events. If you don’t provide an alternative create function, scripting components call the standard Apple Event Manager function AECreateAppleEvent with default parameters.custom Apple eventAn Apple event you define for use by your own applications. Instead of creating custom Apple events, you should try to use the standard Apple events and extend their definitions as necessary for your application. If you think you need to define custom Apple events, you should check with the Apple Event Registrar to find out whether Apple events that already exist or are under development can be adapted to the needs of your application.database extensionThe interface between the Data Access Manager and a data server.data serverAn application that acts as an interface between a database extension on a Macintosh computer and a data source, which can be on the Macintosh computer or on a remote host computer. A data server can be a database server program that can provide an interface to a variety of different databases, or it can be the data source itself, such as a Macintosh application.default containerThe outermost container in an application’s container hierarchy; usually the application itself. See also container hierarchy.default scripting componentThe scripting component used by the generic scripting component when an application passes kOSANullScript rather than a valid script ID to OSACompile or OSAStartRecording.descriptor listA descriptor record of data type AEDescList whose data handle refers to a list of descriptor records.descriptor recordA data structure of type AEDesc that consists of a handle to data and a descriptor type that identifies the type of the data referred to by the handle. Descriptor records are the fundamental data structures from which Apple events are constructed.descriptor typeAn identifier for the type of data referred to by the handle in a descriptor record.dialectA version of a scripting language that resembles a specific human language or programming language; for example, the AppleScript scripting language provides dialects that resemble English, Japanese, and other languages. See also AppleScript scripting language.direct parameterThe parameter in an Apple event that contains the data or object specifier record to be used by the server application. For example, a list of documents to be opened is specified in the direct parameter of the Open Documents event. See also Apple event parameter.editionThe data written to an edition container by a publisher. A publisher writes data to an edition whenever a user saves a document that contains a publisher, and subscribers in other documents may read the data from the edition whenever it is updated. See also publisher, subscriber.edition containerA file that holds edition data, represented on the desktop by an edition icon. An edition container obtains its data from a publisher within a document. See also edition, publisher.Edition ManagerThe collection of routines that allows applications to automate copy and paste operations between applications, so that data can be shared dynamically.elementAn Apple event object contained by another Apple event object specified as the element’s container. An Apple event object can contain many elements of the same element class, whereas an Apple event object can have only one of each of its properties. See also Apple event object, container, element classes, property.element classesIn the Apple Event Registry: Standard Suites, a list of the object classes for the elements that an Apple event object of a given object class can contain. See also Apple event object, object class.error callback functionAn object callback function that gives the Apple Event Manager an address. The Apple Event Manager writes to this address the descriptor record it is currently working with if an error occurs during the resolution of an object specifier record. See also object callback function.event classAn attribute that identifies a group of related Apple events. The event class appears in the message field of the Apple event’s event record. The event class and the event ID identify the action an Apple event performs. See also Apple event attribute, event ID.event IDAn attribute that identifies a particular Apple event within a group of related Apple events. The event ID appears in the where field of the Apple event’s event record. The event ID and the event class identify the action an Apple event performs. See also Apple event attribute, event class.Event ManagerThe collection of routines that an application can use to receive information about actions performed by the user, to receive notice of changes in the processing status of the application, and to communicate with other applications.extensionAn object class that duplicates all the characteristics of an object class of the same name and adds some of its own. Like a word in a dictionary, a single object class ID can have several related definitions. factoringUsing Apple events to separate the code that controls an application’s user interface from the code that responds to the user’s manipulation of the interface. In a fully factored application, any significant user actions generate Apple events that a scripting component can record as statements in a compiled script. See also recordable application.functional-area Apple eventA standard Apple event supported by applications with related features; for example, an Apple event related to text manipulation for word-processing applications, or an Apple event related to graphics manipulation for drawing applications. Functional-area Apple events are defined by Apple Computer, Inc., in consultation with interested developers and are published in the Apple Event Registry: Standard Suites.generic script IDSpecial script IDs used by the generic scripting component to keep track of script IDs provided by multiple scripting components. The generic scripting component translates generic scripting IDs into the corresponding component-specific script IDs and vice versa when necessary.generic scripting componentA special scripting component that establishes connections dynamically with the appropriate scripting component for each script that a client application attempts to manipulate or execute. The generic scripting component also provides routines that you can use to determine which scripting component created a particular script, get an instance of a specific scripting component, and perform other useful tasks when you are using multiple scripting components. See also scripting component.generic storage descriptor recordA descriptor record of type kOSAGenericStorage that can be used by the generic scripting component or any other scripting component to store script data. The script data in a generic storage descriptor record is followed by a trailer that contains the subtype for the scripting component that created the script data.implied lengthThe definition of a specific length for a data type. An example of this is the Data Access Manager’s typeInteger data type, which has a defined length of 4 bytes.insertion location descriptor recordA record of type typeInsertionLoc that consists of two keyword-specified descriptor records. The first is an object specifier record, and the data for the second is a constant that specifies the insertion location in relation to the Apple event object described by the object specifier record.interapplication communication (IAC) architectureA standard and extensible mechanism for communication among Macintosh applications, including the Edition Manager, the Open Scripting Architecture, the Apple Event Manager, the Event Manager, and the PPC Toolbox.key dataThe data in an object specifier record that distinguishes one or more Apple event objects from other Apple event objects of the same object class in the same container. Key data is specified by a keyword-specified descriptor record with the keyword keyAEKeyData. The Apple Event Manager interprets key data according to the key form specified in the same object specifier record.key formThe form taken by the key data in an object specifier record. The key form is specified by a keyword-specified descriptor record with the keyword keyAEKeyForm. The keyword-specified descriptor record contains a constant that determines how the Apple Event Manager and a target application use the key data to locate specific Apple event objects. For example, the key form constant formName indicates that the key data consists of a name, which should be compared to the names of Apple event objects in the container specified by the object specifier record.keywordA four-character code that uniquely identifies a descriptor record inside another descriptor record. In Apple Event Manager functions, constants are typically used to represent the four-character codes.keyword-specified descriptor recordA record of data type AEKeyDesc that consists of a keyword and a descriptor record. Keyword-specified descriptor records are used to describe the attributes and parameters of an Apple event.location nameAn identifier for the network location of the computer on which a port resides. The PPC Toolbox provides the location name. It contains an object string, a type string, and a zone. An application can specify an alias for its location name by modifying its type string. See also port.logical descriptor recordA coerced AE record of type typeLogicalDescriptor that specifies a logical expression—that is, an expression that the Apple Event Manager evaluates to either TRUE or FALSE. The logical expression is constructed from a logical operator (one of the Boolean operators AND, OR, or NOT) and a list of logical terms to which the operator is applied. Each logical term in the list can be either another logical descriptor record or a comparison descriptor record. mark-adjusting functionA marking callback function that unmarks objects previously marked by a call to an application’s marking function. mark countThe number of times the Apple Event Manager has called the marking function for the current mark token. Applications that support marking callback functions should associate the mark count with each Apple event object they mark. marking callback functionsObject callback functions that allow your application to use its own marking scheme rather than tokens when identifying large groups of Apple event objects. See also mark-adjusting function, mark token function, object callback function, and object-marking function.mark token A token returned by a mark token function. A mark token identifies the way an application marks Apple event objects during the current sessions while resolving a single test. A mark token does not identify a specific Apple event object; rather, it allows an application that supports marking callback functions to associate a group of objects with a marked set.mark token functionA marking callback function that returns a mark token.message blockA byte stream that an open application uses to send data to and receive data from another open application (which can be located on the same computer or across a network). The PPC Toolbox delivers message blocks to an application in the same sequence in which they were sent.Name-Binding Protocol (NBP)An AppleTalk protocol that maintains a table containing the internet address and name of each entity in the node that is visible to other entities on the internet (that is, each entity that has registered a name with NBP).null descriptor recordA descriptor record whose descriptor type is typeNull and whose data handle is NIL.object accessor dispatch tableA table in either the application heap or the system heap that the Apple Event Manager uses to map descriptions of objects in an object specifier record to object accessor functions that can locate those objects.object accessor functionAn application- defined function that locates an Apple event object of a specified object class in a container identified by a token of a specified descriptor type.object callback functionAn application- defined function used by the Apple Event Manager to resolve object specifier records. See also error callback function,  marking callback functions, object-comparison function, object-counting function, and token disposal function.object classA category for Apple event objects that share specific characteristics listed in an object class definition in the Apple Event Registry: Standard Suites. Among these characteristics are properties, element classes, and Apple events that can specify objects of that class. An object class is specified in an object specifier record by a keyword-specified descriptor record with the keyword keyAEDesiredClass whose data handle refers to either a constant or an object class ID.object class IDA four-character code, which can also be represented by a constant, that identifies an object class for an Apple event object. The object class ID for a primitive object class is the same as the four-character value of its descriptor type.object class inheritance hierarchyThe hierarchy of subclasses and superclasses that determines which properties, elements, and Apple events object classes inherit from other object classes.object-comparison functionAn object callback function that compares an element to either another element or to a descriptor record and returns either TRUE or FALSE. object-counting functionAn object callback function that counts the number of elements of a specified class in a specified container, so that the Apple Event Manager can determine how many elements it must examine to find the element or elements that pass a test. object-marking functionAn object callback function called repeatedly by the Apple Event Manager to mark specific Apple event objects. See also marking callback functions.object specifier recordA description of one or more Apple event objects based on the Apple Event Manager and the classification system defined in the Apple Event Registry: Standard Suites. An object specifier record consists of a descriptor record of descriptor type typeObjectSpecifier that comprises four keyword-specified descriptor records: the object class ID, the container for the Apple event object (which is usually another Apple event object, specified by another object specifier record), the key form, and the key data. Open Application eventAn Apple event that asks an application to perform the tasks—such as displaying untitled windows—associated with opening itself; one of the four required Apple events.Open Documents eventAn Apple event that asks an application to open one or more documents specified in a list; one of the four required Apple events.Open Scripting Architecture (OSA)A mechanism based on the Apple Event Manager and the Apple Event Registry: Standard Suites that allows users to control multiple applications by means of scripts. The scripts can be written in any scripting language that supports the OSA.optional parameterA supplemental parameter in an Apple event used to specify data that the server application can use in addition to the data specified in the direct parameter. Source applications list the keywords for parameters that they consider optional in the attribute identified by the keyOptionalKeywordAttr keyword. Target applications use this attribute to identify any parameters that they are required to understand. If a parameter’s keyword is not listed in this attribute, the target application must understand that parameter to handle the event successfully. See also Apple event attribute, Apple event parameter.port(1) A portal through which an open application can exchange information with another open application using the PPC Toolbox. A port is designated by a port name and a location name. An application can open as many ports as it requires so long as each port name is unique within a particular computer. (2) A connection between the CPU and main memory or a device (such as a terminal) for transferring data. (3) A socket on the back panel of a computer where you plug in a cable for connection to a network or a peripheral device.port nameA unique identifier for a particular application within a computer. The port name contains a name string, a type string, and a script code. An application can specify any number of port names for a single port so long as each name is unique. See also port.primitive object classAn object class defined in the Apple Event Registry: Standard Suites for Apple event objects that contain a single value; for example, the cBoolean, cLongInteger, and cAlias object classes are all primitive object classes. An Apple event object that belongs to a primitive object class has no properties and contains only one element—the value of the data.Print Documents eventAn Apple event that requests that an application print a list of documents; one of the four required Apple events.Program-to-Program Communications (PPC) ToolboxThe collection of routines that allows applications to exchange blocks of data with other applications by reading and writing low-level message blocks. propertyAn Apple event object that defines some characteristic of another Apple event object, such as its font or point size, that can be uniquely identified by a constant. The definition of each object class in the Apple Event Registry: Standard Suites lists the constants and class IDs for properties of Apple event objects belonging to that object class. For example, the constants pName and pBounds identify the name and boundary properties of Apple event objects that belong to the object class cWindow. The pName property of a specific window is defined by an Apple event object of object class cProperty, such as the word “MyWindow,” which defines the name of the window. An Apple event object can contain only one of each of its properties, whereas it can contain many elements of the same element class. See also Apple event object, container, element classes.property IDA four-character code, which can also be represented by a constant, that identifies a property.publishTo make data available to other documents and applications through a publisher. When a user creates or edits the data in the publisher and then saves it, the current version of the data is stored in an edition. See also edition, publisher, subscriber.publisherA portion of a document that makes its data available to other documents or applications. A publisher stores its data in an edition whenever a user creates or edits the data in the publisher and then saves it. See also edition, section, subscriber.queryA string of commands and data sent to a database or other data source. A query does not necessarily extract data from a data source; it might only send data or commands to a database or other application.query definition functionA function contained in a query document that prompts the user for information and modifies the query before the Data Access Manager sends it to the data server.query documentA file of file type 'qery' containing commands and data in a format appropriate for a database or other data source. An application uses high-level Data Access Manager routines to open a query document.query recordA data structure in memory containing information provided by a 'qrsc' resource. The query record includes a pointer to a query.Quit Application eventAn Apple event that requests that an application perform the tasks—such as releasing memory, asking the user to save documents, and so on—associated with quitting; one of the four required Apple events. The Finder sends this event to an application immediately after sending it a Print Documents event or if the user chooses Restart or Shut Down from the Finder’s Special menu.range descriptor recordA coerced AE record of type typeRangeDescriptor that identifies two Apple event objects marking the beginning and end of a range of elements. See also boundary objects.recordable applicationAn application that uses Apple events to report user actions to the Apple Event Manager for recording purposes. When a user turns on recording (for example, by pressing the Record button in the Script Editor application), a scripting component translates the Apple events generated by the user’s subsequent actions into statements in a scripting language and records them in a compiled script. See also scriptable application.recordable eventAny Apple event that any recordable application sends to itself while recording is turned on for the local computer, with the exception of events that are sent with the kAEDontRecord flag set in the sendMode parameter of the AESend function.recording processAny process (for example, a script editor) that can turn Apple event recording on and off and receive and record recordable Apple events.required Apple eventOne of the four Apple events in the Required suite that the Finder sends to applications: Open Documents, Open Application, Print Documents, or Quit Application. required parameterAn Apple event parameter that must be included in an Apple event. For example, a list of documents to open is a required parameter for the Open Documents event. Direct parameters are often required, and other additional parameters may be required. Optional parameters are never required.resolveTo locate the Apple event object described by an object specifier record.result handlerA routine that the Data Access Manager calls to convert a data item to a character string.results recordA structure that the Data Access Manager uses to store the data retrieved by the DBGetQueryResults function. This data is returned by a data source in response to a query.resume dispatch functionAn application-defined function called by OSADoEvent or OSAExecuteEvent to dispatch an Apple event directly to an application’s default handler for that event.scriptAny collection of data that, when executed by the appropriate program, causes a corresponding action or series of actions. When a scripting component that supports the OSA executes a script, it sends Apple events as necessary to trigger actions in server applications.scriptable applicationAn application that can respond as a server application to Apple events sent to it by scripting components. To be scriptable, an application must respond to the appropriate standard Apple events, and it must provide an 'aete' resource that describes the nature of that support. See also Apple event user terminology resources.script applicationA script file with the file type 'APPL' that contains the script data as a resource of type 'scpt'. If a script application has the creator signature 'aplt', a user can double-click its icon to trigger the script. If a script application has the creator signature 'dplt', a user can drag the icon for another file or a folder over the script application’s icon to trigger its script. By default, when a user triggers the script in a script application, a splash screen appears that allows the user either to quit or to run the script. Users can also save a script application in a form that bypasses the splash screen, running the script immediately after the user double-clicks its icon.script application componentA component registered with the Component Manager at system startup. When a user opens a script application, the script application component loads the script and passes the resulting script ID to the appropriate scripting component for execution.script commentA description, in a script editor window, of what the script displayed in that window does.script contextA form of script that maintains context information for the execution of other scripts. A script context can also be used to handle Apple events. Like a compiled script, a script context can be decompiled as source data. In the AppleScript scripting language, a script context is called a script object.script dataA compiled script, script value, script context, or any other representation of a script in memory used internally by a scripting component. See also compiled script, script context, script value.script editorAn application that allows users to record, edit, save, and execute scripts; for example, the Script Editor application provided with AppleScript.script fileA file in which a script is stored. A script file can be a compiled script file, a script application file, or a script text file.script IDA data structure of type OSAID—that is, a long integer—used by scripting components to keep track of script data.scriptingWriting and executing scripts to control the behavior of multiple applications.scripting componentA component that responds appropriately to calls made to the standard scripting component routines. Most scripting components implement scripting languages; for example, the AppleScript component implements the AppleScript scripting language.script objectAppleScript term for script context. See also script context.script text fileUncompiled statements in a scripting language saved by a script editor as a text file. A user must open a script text file in a script editor and successfully compile it before it will execute. See also script editor.script valueAn integer, a string, a Boolean value, a constant, a 'PICT', or any other fixed data that a scripting component returns or uses in the course of executing a script.sectionA document or portion of a document that shares its contents with other documents. The Edition Manager supports two types of sections: publishers and subscribers. A publisher makes its data available to share and a subscriber subscribes to available data. See also publisher, subscriber.send functionA function called by a scripting component whenever it sends an Apple event during script execution. You can provide an alternative send function if you want your application to perform some action instead of or in addition to sending Apple events. If you don’t provide an alternative send function, scripting components call the standard Apple Event Manager function AESend with default parameters.server applicationAn application that responds to Apple events requesting a service or information sent by client applications or scripting components (for example, by printing a list of files, checking the spelling of a list of words, or performing a numeric calculation). Apple event servers and clients can reside on the same local computer or on remote computers connected to a network.session(1) A logical (as opposed to physical) connection between two entities (such as a Macintosh program and a database server) that facilitates the transmission of information between the two entities. (2) In the PPC Toolbox, an exchange of information between one open application with a port and another open application with a port. Sessions can occur between applications that are located on the same computer or across a network. An application has the option to accept or reject a session request. Authentication of the requesting user may be required before a session can commence. See also authentication, message block, port.session IDA number that uniquely identifies a session.source applicationThe application that sends a particular Apple event to another application or to itself. Typically, an Apple event client sends an Apple event requesting a service from an Apple event server; in this case, the client is the source application for the Apple event. The Apple event server may return a different Apple event as a reply; in this case, the server is the source for the reply Apple event.source dataStatements in a scripting language that constitute an uncompiled script.special handler dispatch tableA table in either the application heap or the system heap that the Apple Event Manager uses to keep track of various specialized handlers.status routineAn application-defined routine that can update windows, check the results of the low-level calls made by the Data Access Manager’s DBStartQuery and DBGetQueryResults functions, and cancel execution of these functions when appropriate to do so.subclassAn object class that inherits properties, element classes, and Apple events from another object class—its superclass. A subclass can also include properties, element classes, or Apple events that are not inherited from its superclass. Every object class, with the exception of cObject, is a subclass of another object class. See also object class, superclass.subscribeTo obtain data that a publisher makes available in an edition. A user subscribes to a publisher by choosing Subscribe To from the Edit menu and selecting the desired edition. See also edition, publish.subscriberA portion of a document that automatically obtains current data from other documents and applications. A subscriber reads data from an edition. See also edition, section.suiteIn the Apple Event Registry: Standard Suites, a group of definitions for Apple events, object classes, primitive object classes, descriptor types, and constants that are all used for a set of related activities. For example, the Text suite includes definitions of Apple events, object classes, and so on that are used for text processing.superclassThe object class from which a subclass inherits properties, elements, and Apple events. See also object class, subclass.system Apple event dispatch tableSee Apple event dispatch table.system coercion dispatch tableSee coercion handler dispatch table.system object accessor dispatch tableSee object accessor dispatch table.system result handlerA result handler that is available to all applications that use the system. Compare with application result handler.target addressAn application signature, a process serial number, a session ID, a target ID record, or some other application-defined type that identifies the target of an Apple event.target applicationThe application addressed to receive an Apple event. Typically, an Apple event client sends an Apple event requesting a service from a server application; in this case, the server is the target application of the Apple event. The server application may return a different Apple event as a reply; in this case, the client is the target of the reply Apple event.tokenA descriptor record returned by an object accessor function that identifies a requested Apple event object in a specified container.token disposal functionAn object callback function that disposes of a token.transactionA sequence of Apple events sent back and forth between the client and server applications, beginning with the client’s initial request for a service. All Apple events that are part of one transaction must have the same transaction ID.whose descriptor record A coerced AE record of descriptor type typeWhoseDescriptor. The Apple Event Manager creates whose descriptor records when it resolves object specifier records that specify formTest.whose range descriptor recordA coerced AE record of type typeWhoseRange. Under certain conditions, the Apple Event Manager coerces a range descriptor record to a whose range descriptor record when it resolves object specifier records that specify formTest.IndexSymbols'****' (wildcard) descriptor type4-10, 4-58, 4-63, 6-26'----' keyword3-15Aactive functionsroutines for manipulating10-45 to 10-46supplying alternative10-23additional parameters for Apple events3-9address descriptor recordsadding to an Apple event5-11 to 5-13defined3-14for direct dispatching5-13addresses in Apple events5-10 to 5-13'addr' keyword3-15AEAddressDesc data type3-14, 5-11 to 5-13AEArrayData data type4-60, 5-57AEArrayDataPointer data type4-61AEArrayType data type4-60AECallObjectAccessor function6-82 to 6-83AECoerceDesc function4-95 to 4-96AECoercePtr function4-94 to 4-95AECountItems function4-31, 4-74AECreateAppleEvent function5-4, 5-25 to 5-26AECreateAppleEventProcPtr data type10-24AECreateDesc function5-6, 5-11, 5-26 to 5-27AECreateList function5-28 to 5-29AECreateProcPtr function10-95 to 10-96AEDeleteItem function4-92AEDeleteKeyDesc function4-93AEDeleteParam function4-93AEDesc data type3-12, 4-56AEDescList data type3-17AEDisposeDesc function4-39 to 4-40, 4-94AEDisposeToken function6-41, 6-46, 6-54, 6-87 to 6-88AEDuplicateDesc function5-27 to 5-28AEEventClass data type4-59, 4-62AEEventID data type4-59, 4-62AEEventSource data type4-29AEGetArray function4-77 to 4-78AEGetAttributeDesc function4-73AEGetAttributePtr function4-28 to 4-31, 4-71 to 4-72AEGetCoercionHandler function4-98AEGetEventHandler function4-64 to 4-65AEGetInteractionAllowed function4-82AEGetKeyDesc function4-80 to 4-81AEGetKeyPtr function4-79 to 4-80AEGetNthDesc function4-32, 4-76 to 4-77AEGetNthPtr function4-32 to 4-33, 4-75 to 4-76AEGetObjectAccessor function6-81 to 6-82AEGetParamDesc function4-27 to 4-28, 4-31, 4-69 to 4-70AEGetParamPtr function4-27, 4-68 to 4-69AEGetSpecialHandler function4-101 to 4-102AEGetTheCurrentEvent function4-89AEIMP (Apple Event Interprocess Messaging Protocol)1-3AEInstallCoercionHandler function4-96 to 4-97AEInstallEventHandler function4-8 to 4-9, 4-62 to 4-64AEInstallObjectAccessor function6-22 to 6-27, 6-78 to 6-79AEInstallSpecialHandler function4-100 to 4-101AEInteractAllowed data type4-48, 4-82AEInteractWithUser function4-50, 4-83 to 4-84AEKeyDesc data type3-16AEKeyword data type3-15 to 3-16AEManagerInfo function4-104AEObjectInit function6-77AEProcessAppleEvent function4-66 to 4-68AEPutArray function5-31AEPutAttributeDesc function5-36 to 5-37AEPutAttributePtr function5-35 to 5-36AEPutDesc function5-30AEPutKeyDesc function5-33AEPutKeyPtr function5-32AEPutParamDesc function5-6, 5-34AEPutParamPtr function5-5, 5-33 to 5-34AEPutPtr function5-29 to 5-30AERecord data type3-17 to 3-18AE recordsadding data to5-32adding keyword-specified descriptor records to5-32 to 5-33creating5-28 to 5-29defined3-17 to 3-18deleting keyword-specified descriptor records from4-93getting data out of4-25 to 4-33, 4-78 to 4-80AE records (continued)getting descriptor records out of4-80 to 4-81getting sizes and descriptor types of keyword-specified descriptor records in4-90 to 4-91and other Apple Event Manager data structures3-18AERemoveCoercionHandler function4-99AERemoveEventHandler function4-65 to 4-66AERemoveObjectAccessor function6-84 to 6-85AERemoveSpecialHandler function4-102 to 4-103AEResetTimer function4-84 to 4-85AEResolve function6-4 to 6-8, 6-28 to 6-47, 6-85 to 6-87AEResumeTheCurrentEvent function4-86 to 4-88AESend function5-13 to 5-20, 5-37 to 5-41AESendPriority data type5-38AESendProcPtr data type10-25, 10-96AESetInteractionAllowed function4-81 to 4-82AESetObjectCallbacks function6-46, 6-79 to 6-80AESetTheCurrentEvent function4-88AESizeOfAttribute function4-91 to 4-92AESizeOfKeyDesc function4-90 to 4-91AESizeOfNthItem function4-90AESizeOfParam function4-91AESuspendTheCurrentEvent function4-85 to 4-86'aete' resourcesand AppleScript7-17 to 7-20creating8-13 to 8-23defined7-15 to 7-16dynamic loading of7-20recordable applications and1-18 to 1-19role of1-16 to 1-19, 7-17 to 7-20scriptable applications and1-16 to 1-17structure of8-8 to 8-13, 8-26 to 8-44supporting new suites8-23supporting standard suites with extensions8-16 to 8-23supporting standard suites without extensions8-14 to 8-16supporting subsets of suites8-23'aeut' resourcesadditional parameters array8-34 to 8-36and AppleScript7-17 to 7-20comparison operators array8-42 to 8-43defined7-15 to 7-16elements array8-40 to 8-41enumerations array8-43 to 8-44events array8-29 to 8-33header data8-27object classes array8-36 to 8-37properties array8-38 to 8-40resource type declaration8-9 to 8-13role of7-17 to 7-20structure of8-8 to 8-13, 8-26 to 8-44suites array8-27 to 8-29'aevt' descriptor type4-57'aevt' event class3-8alert boxesfor multiple publishers in a document2-58for new publishers2-19for PPC session termination11-7alias records, for publishers and subscribers2-16, 2-20'alis' descriptor type4-58'alis' format type2-25'alis' resource type2-19'aplt' creator signature7-7'appa' descriptor type4-58Apple event attributesadding to Apple events5-35 to 5-37defined3-7event classes3-8, 3-15event IDs3-8, 3-15event sources3-15getting data out of4-28 to 4-31, 4-71 to 4-72getting descriptor records out of4-73getting descriptor types of4-91 to 4-92getting sizes of4-91 to 4-92interaction level3-15, 4-45keywords for3-15missed keyword3-15, 4-30, 4-34 to 4-35optional keyword4-34, 5-7 to 5-10original source3-15return ID3-15setting with the AECreateAppleEvent function5-3 to 5-4target address3-15, 5-10 to 5-13timeout3-15, 5-21transaction ID3-15Apple event data structuresarrays4-60 to 4-61disposing of4-39 to 4-40summarized4-56 to 4-61AppleEvent data type3-18 to 3-19Apple event dispatch tablesdefined3-22getting entries from4-64 to 4-65installing entries in4-7 to 4-11, 4-62 to 4-64removing entries from4-65 to 4-66system4-7Apple event handlersadding to dispatch tables4-7 to 4-9, 4-62 to 4-64called from the AEProcessAppleEvent function4-66 to 4-67defined3-5getting from dispatch tables4-64 to 4-65introduced1-12removing from dispatch tables4-65 to 4-66tasks performed by3-23 to 3-27writing4-33 to 4-35Apple Event Interprocess Messaging Protocol (AEIMP)1-3Apple Event Manager3-3 to 6-116, 9-3 to 9-37application-defined functions for resolving object specifier records6-94 to 6-103getting information about4-103 to 4-104Object Support Library and6-3routines in4-61 to 4-104, 5-25 to 5-41, 6-77 to 6-94testing for availability4-4use of Notification Manager4-51user interaction with server application4-45 to 4-55, 4-81 to 4-84Apple event object classes. See object classes, Apple eventApple event objectsApple Event Registry: Standard Suites and1-11classification of3-39 to 3-46container hierarchy for3-45 to 3-46defined3-6described in Apple event parameters3-10, 3-12elements of3-42 to 3-46finding3-46 to 3-47hierarchy within an application3-33object accessor functions that find6-29 to 6-37object classes and1-11object specifier records and3-32 to 3-34properties of3-42 to 3-46tokens for6-4 to 6-7, 6-39 to 6-41, 6-47Apple event parametersadding5-5 to 5-7, 5-33 to 5-34additional3-9AppleScript and8-3 to 8-7checking for missing required4-34 to 4-35defined3-8deleting4-93direct3-9, 3-15error number4-36 to 4-37error string4-37 to 4-39getting data out of4-26 to 4-28, 4-68 to 4-71getting descriptor records out of4-27 to 4-28, 4-69 to 4-70getting descriptor types of4-91getting sizes of4-91optional3-9, 3-15, 5-7 to 5-10required3-9Apple event recordsdefined3-18disposing of4-39 to 4-40getting data out of4-25 to 4-33, 4-79 to 4-80getting descriptor records out of4-80 to 4-81and other Apple Event Manager data structures3-18Apple Event Registry: Standard Suites1-10 to 1-12Apple events. See also Apple event attributes; Apple event parametersaccepting3-20 to 3-22, 4-5 to 4-7addresses for5-10 to 5-13AppleScript and8-3 to 8-7attributes and parameters for3-7 to 3-12client applications using3-4 to 3-5Create Publisher4-22 to 4-25creating5-3 to 5-13data structures in3-12 to 3-19defined3-3determining current4-89direct dispatching5-13dispatching4-9 to 4-11, 4-66 to 4-68from Edition Manager2-13 to 2-14Get AETE8-23 to 8-26Get Data. See Get Data eventhandling1-12, 4-4 to 4-44and high-level events4-5 to 4-7introduced1-9Move. See Move eventOpen Application. See Open Application eventOpen Documents. See Open Documents eventPrint Documents. See Print Documents eventprocessing3-20 to 3-27, 4-67 to 4-68, 4-84 to 4-89Quit Application. See Quit Application eventReceive Recordable Event9-36Recorded Text10-27recording9-3 to 9-37Recording Off9-4Recording On9-4reply. See reply Apple eventsreplying to4-36 to 4-39, 5-24requesting more time to respond to4-84 to 4-85requesting services through3-28 to 3-32required1-10, 4-11 to 4-20Reset Timer4-85responding to1-9 to 1-13, 3-20 to 3-27, 4-5 to 4-7resuming handling of4-86 to 4-88Section Cancel2-13Section Read2-13Section Scroll2-13, 4-21Section Write2-13, 4-21sending1-9 to 1-13, 5-13 to 5-20sending to the current process5-13server applications using3-5Set Data. See Set Data eventstandard suites of1-10Start Recording9-36Stop Recording9-37suspending handling of4-85 to 4-86Apple event terminology extension resources. See 'aete' resourcesApple event user terminology resources. See 'aeut' resourcesAppleScript componentdefined7-4error numbers for OSAScriptError10-40routines for10-80 to 10-84AppleScript scripting languageApple events and8-3 to 8-7defined7-4dialects, defined7-17dialects, routines for manipulating10-67 to 10-71scriptable applications and8-3 to 8-7supporting1-13 to 1-22'APPL' file type7-7application-defined routinesMyActiveProc10-23, 10-95MyAdjustMarks6-53 to 6-54, 6-103MyAECreateProc10-24 to 10-25MyAESendProc10-25 to 10-26, 10-96MyCoerceDesc4-107MyCoercePtr4-106MyCompareObjects6-97 to 6-99MyCompletionRoutine11-78MyCountObjects6-96 to 6-97MyDisposeToken6-99MyEventHandler4-105 to 4-106MyExpDlgHook2-98MyExpModalFilter2-98MyGetErrorDesc6-100MyGetMarkToken6-53 to 6-54, 6-101 to 6-102MyIdleFunction5-42MyIO2-104MyMark6-102MyObjectAccessor6-95 to 6-96MyOpener2-102MyPortFilter11-78 to 11-79MyQDef12-51MyReplyFilter5-42 to 5-43MyResultHandler12-43MyResumeDispatch10-97MyStatusFunc12-22arrays, data types for4-60 to 4-61ASGetSourceStyleNames function10-84ASGetSourceStyles function10-82 to 10-83ASInit function10-80 to 10-82ASSetSourceStyles function10-83AssociateSection function2-20, 2-50, 2-79'****' (wildcard) descriptor type4-10, 4-58, 4-63, 6-26asynchronous parameter block record12-55 to 12-56authenticating sessions11-7, 11-10, 11-30B'bool' descriptor type4-57borders for publishers and subscribers2-9 to 2-10, 2-50 to 2-57in bitmapped graphics2-57in object-oriented graphics2-56 to 2-57in spreadsheets2-55 to 2-56in word processors2-54 to 2-55boundary objectsspecified in range descriptor records6-20specified in whose range descriptor records6-44CCallEditionOpenerProc function2-64, 2-103 to 2-104CallFormatIOProc function2-68, 2-104ccntTokenRecord data type6-21client applications, for Apple eventsdefined3-4 to 3-5introduced1-9and scripting components7-10setting user interaction preferences4-46 to 4-47CloseEdition function2-28, 2-88 to 2-89'CODE' resources, in script application files10-14coercion handlers for descriptor types4-41 to 4-44, 4-96 to 4-99comparison descriptor recordscomparison operators for6-51creating6-67 to 6-69, 6-89 to 6-90defined6-16'comp' descriptor type4-57compiled script files7-7compiled scriptsdefined7-23modifying and recompiling10-17 to 10-19compiling, scripting component routines for10-47 to 10-51completion routinesin PPC Toolbox11-16 to 11-17, 11-46 to 11-78for PPCAccept function11-38 to 11-39for PPCInform function11-36 to 11-37for PPCRead function11-41for PPCReject function11-39for PPCWrite function11-42complex object specifier records, creating6-64 to 6-75component description records, scripting component flags for10-5component instances, and scripting component routines10-4Component Manager, and scripting components10-3 to 10-7component-specific storage descriptor records10-12container hierarchydefined3-45described in object specifier records6-10for formTest6-17 to 6-19specifying6-61 to 6-63containersdefault6-10described in object specifier records3-35, 6-10specifying6-61 to 6-63specifying for a range of objects6-20Control Panels folder11-6'core' event class3-8Core suite of Apple events1-11, 3-41cProperty as object class ID3-42, 6-13, 6-27CreateCompDescriptor function6-68 to 6-69, 6-89 to 6-90CreateEditionContainerFile function2-32 to 2-34, 2-79 to 2-80Create Element event handler9-11create functionsroutines for manipulating10-55 to 10-57supplying alternative10-24CreateLogicalDescriptor function6-69 to 6-70, 6-91 to 6-92CreateObjSpecifier function6-55 to 6-75, 6-93 to 6-94CreateOffsetDescriptor function6-72, 6-88 to 6-89Create Publisher command (Edit menu)2-10Create Publisher event4-22 to 4-25CreateRangeDescriptor function6-73, 6-92 to 6-93DDAL (Data Access Language)12-4Data Access Language (DAL)12-4Data Access Manager12-3 to 12-104. See also sessions, data accessasynchronous calls12-12asynchronous parameter block record12-55 to 12-56canceling a function call12-75connection with a database, illustrated12-6data structures in12-54 to 12-59data types12-36 to 12-43disk-space limit12-13high-level interfacecompared to low-level12-11examples of12-7, 12-18 to 12-21retrieving data12-9routines12-61 to 12-68sending a query12-8 to 12-9status routines12-22 to 12-28using12-14 to 12-28high-level routines12-7 to 12-9flowchart12-8sequence of use12-14 to 12-17uses12-7initializing12-60 to 12-61local database and12-4low-level interface12-9 to 12-11compared to high-level12-11examples of12-9 to 12-11retrieving data12-11sending a query12-11using12-28 to 12-35low-level routines12-68 to 12-86flowchart12-29sequence of use12-28 to 12-35uses12-9queriesconverting results to text12-42 to 12-45, 12-67 to 12-68defined12-7executing12-78 to 12-79halting execution12-81 to 12-82processing results12-36 to 12-46retrieving results12-42sending12-30 to 12-31, 12-76 to 12-77starting12-63 to 12-65query definition function resources12-92query definition functions12-51 to 12-54query documentscontents12-48 to 12-51dialog boxes12-46 to 12-47query records12-56 to 12-57creating12-61defined12-46disposing of12-62 to 12-63query resources12-90 to 12-91query string resources12-91resources in12-90 to 12-92result handlers12-42 to 12-45, 12-86 to 12-89application12-43function declaration12-43installing12-84 to 12-85provided by Apple Computer12-42 to 12-43system12-43results records12-40 to 12-42routines in12-59 to 12-89status routines12-22 to 12-28sample12-26 to 12-28and status messages12-22 to 12-25suggested uses12-3testing for availability12-3user interface guidelines12-13for providing feedback12-13for query documents12-46 to 12-47database access. See Data Access Managerdatabase command strings. See queriesdatabase extensionsasynchronous execution and12-12defined12-4database queries. See queriesdatabases. See Data Access Managerdata serversdefined12-5status12-79DBAsyncParamBlockRec data type12-55DBBreak function12-81 to 12-82DBColInfoRecord data type12-42, 12-59DBDisposeQuery function12-62 to 12-63DBEnd function12-70 to 12-71DBExec function12-31, 12-78 to 12-79DBGetConnInfo function12-71 to 12-73DBGetErr function12-80 to 12-81DBGetItem function12-83 to 12-85DBGetNewQuery function12-61 to 12-62DBGetQueryResults function12-22 to 12-28, 12-65 to 12-67DBGetResultHandler function12-87 to 12-88DBGetSessionNum function12-74 to 12-75DBInit function12-68 to 12-70DBInstallResultHandler function12-86 to 12-87DBKill function12-75DBRemoveResultHandler function12-89DBResultsToText function12-67 to 12-68DBSend function12-76 to 12-77DBSendItem function12-77 to 12-78DBStartQuery function12-22 to 12-28, 12-63 to 12-65DBState function12-79 to 12-80DBUnGetItem function12-85 to 12-86ddev. See database extensionsdefault container6-5, 6-10default scripting componentdefined10-3getting and setting10-86 to 10-87DeleteEditionContainerFile function2-49, 2-81DeleteUserIdentity function11-44 to 11-45, 11-76 to 11-77descriptor listsadding array data to5-31adding descriptor records to5-30adding items to5-29 to 5-30counting descriptor records in4-74creating5-28 to 5-29defined3-17deleting descriptor records from4-92disposing of4-39 to 4-40getting data out of4-31 to 4-33, 4-75 to 4-76getting descriptor records out of4-76 to 4-77getting descriptor types of descriptor records in4-90getting sizes of descriptor records in4-90and other Apple Event Manager data structures3-18descriptor records. See also keyword-specified descriptor recordsadding as attributes5-36 to 5-37adding as parameters5-34adding to descriptor lists5-30coercing data in4-95 to 4-96counting in descriptor lists4-74creating5-26defined3-12 to 3-14deleting from descriptor lists4-92disposing of4-39 to 4-40, 6-58duplicating5-27 to 5-28getting data out of, in descriptor list4-75 to 4-76getting descriptor types of, in descriptor lists4-90getting from attributes4-73getting from descriptor lists4-76getting from keyword-specified descriptor records4-80getting from parameters4-26 to 4-28, 4-69 to 4-70getting sizes of, in descriptor lists4-90and other Apple Event Manager data structures3-12, 3-18descriptor typesin AE records4-90 to 4-91in Apple events4-89 to 4-92coercing4-41 to 4-44, 4-95 to 4-96defined3-13 to 3-14in descriptor lists4-90used by Apple Event Manager4-57 to 4-58DescType data type3-13dialects, of AppleScript scripting languagedefined7-17routines for manipulating10-67 to 10-71dialog boxescustomizing, for publishers and subscribers2-60 to 2-62to enable guest access11-9for incorrect passwords11-31for invalid user names11-31for program linking11-22 to 11-23, 11-32for publisher creation2-5, 2-29, 2-31for publisher options2-43for query documents12-46 to 12-47for subscriber creation2-6, 2-37for subscriber options2-44, 2-45for user identification11-30for users and groups11-8dialog hook functions, expandable2-97, 2-98direct dispatching, of Apple events5-13direct parameters for Apple events3-9, 3-15disks, free space limit for data access12-13dispatch tablesfor Apple event handlers4-7 to 4-9, 4-61 to 4-66for coercion handlers4-41 to 4-42dispatch tables (continued)for object accessor functions6-21 to 6-27for special handlers4-99 to 4-103'doub' descriptor type4-57'dplt' creator signature7-7, 10-14Eedition containers. See also editionsalias record reference to2-16, 2-22closing2-28creating2-32 to 2-34defined2-4deleting2-49opener functions2-63 to 2-67, 2-102 to 2-104opener verbs2-64 to 2-66opening2-26, 2-27, 2-68to read data2-41to write data2-35 to 2-36preview of2-37reading from2-27 to 2-28relocating2-60writing to2-27 to 2-28EditionContainerSpec data type2-39EditionHasFormat function2-41, 2-84 to 2-85Edition Manager2-3 to 2-122. See also editions; publishers; subscribersApple events sent by3-8, 4-20 to 4-21installing entries in Apple event dispatch table4-9introduced1-6 to 1-9routines in2-73 to 2-105and Translation Manager2-28, 2-41, 2-85, 2-86edition opener functions2-63, 2-102 to 2-104EditionOpenerParamBlock data type2-64, 2-103editions. See also edition containersdefined2-4formats for2-24 to 2-26preview of2-6Edit menuCreate Publisher command2-10Edition Manager commands in2-10Publisher/Subscriber Options command2-10, 2-43 to 2-44Show/Hide Borders command2-10Stop All Editions command2-10Subscribe To command2-10elements of Apple event objects3-42 to 3-46'enum' descriptor type4-58'erng' descriptor type10-39'errn' keyword3-15error callback function6-100error numbersreturned by AppleScript for OSAScriptError10-40returned by scripting components for OSAScriptError10-39 to 10-40errors in script compilation or execution, obtaining information about10-37 to 10-40'errs' keyword3-15'esrc' keyword3-15'evcl' keyword3-15event classes3-8event IDs3-8 to 3-9EventRecord data type2-13event records2-13, 3-8events, high-level. See high-level events'evid' keyword3-15expandable dialog hook functions2-97, 2-98expandable modal-dialog filter functions2-97, 2-98'exte' descriptor type4-57extensions of object classes3-41Ffactoring, for Apple event recording7-21, 9-6 to 9-13sending events without executing them9-12 to 9-13window movement9-12'fals' descriptor type4-58File menuNew command9-9 to 9-11Open Query command12-14Quit command4-14, 4-20, 9-6 to 9-9file types'APPL'7-7, 10-14'edtp'2-32'edts'2-32'edtt'2-32'osas'10-14'qery'12-46'scpt'7-7, 10-14Finder events3-8FindNextComponent function10-5'fmts' format type2-25formAbsolutePosition key formintroduced6-12key data for6-14specifying6-63FormatIOParamBlock data type2-69format I/O verbs2-69 to 2-70format marks2-27FormatsAvailable data type2-26format types2-24 to 2-26'form' keyword6-8formName key formintroduced3-36, 6-12key data for6-14specifying6-62 to 6-63formPropertyID key formintroduced3-36, 6-12key data for6-13specifying6-63formRange key formintroduced3-36, 6-12key data for6-20 to 6-21specifying6-72 to 6-75formRelativePosition key formintroduced3-36, 6-12key data for6-15specifying6-64formTest key formand formWhose6-42introduced3-36, 6-12key data for6-15 to 6-19specifying6-64 to 6-72formUniqueID key formintroduced3-36, 6-12key data for6-14formWhose key form6-12, 6-42 to 6-45'from' keywordas the keyAEContainer keyword6-8as the keyOriginalAddressAttr keyword3-15, 9-37'fss ' descriptor type4-58functional-area suites of Apple events1-11Ggeneric script IDs10-85generic scripting component10-84 to 10-92component-specific routines and10-87 to 10-92default scripting component, getting and setting10-86 to 10-87defined7-22and generic script IDs10-85name of component, obtaining10-47opening a connection to10-4and OSALoad function10-15generic storage descriptor recordsdefined10-12routines for manipulating trailer10-92 to 10-94Get AETE eventhandling8-23 to 8-26introduced7-20Get Data eventresolving object specifier record in6-5 to 6-7sample object accessor functions6-29 to 6-34sent by AppleScript component7-10GetDefaultUser function11-33, 11-75 to 11-76GetEditionFormatMark function2-27, 2-82 to 2-83GetEditionInfo function2-49, 2-98 to 2-99GetEditionOpenerProc function2-63, 2-102GetLastEditionContainerUsed function2-39, 2-90 to 2-91GetStandardFormats function2-101GoToPublisherSection function2-49 to 2-50, 2-100Hhandlers for Apple events. See Apple event handlershigh-level events. See also Apple eventshandling when accepting Apple events4-5 to 4-7processing while waiting for reply Apple event5-24I, Jidle functions5-21 to 5-23InitDBPack function12-60 to 12-61InitEditionPack function2-12, 2-74insertion location descriptor records8-5'inte' keyword3-15interapplication communication (IAC)1-3 to 1-22invalidating users11-44I/O functions2-68, 2-104 to 2-105IPCListPorts functiondescription11-54 to 11-55use of by PPCBrowser function11-25 to 11-27IPCListPortsPBRec data type11-46isHighLevelEventAware flag4-5IsRegisteredSection function2-14, 2-78KkAEAlwaysInteract flag4-46 to 4-47kAEAnswer event ID4-36kAECanInteract flag4-46 to 4-47kAECanSwitchLayer flag4-47kAECoreSuite event class3-8kAEDontExecute flag5-40, 9-12kAEDontRecord flag5-40, 9-3kAEInteractWithAll flag4-48kAEInteractWithLocal flag4-48kAEInteractWithSelf flag4-48kAENeverInteract flag4-46 to 4-47kAENoReply flag5-14 to 5-15kAEOpenDocuments event ID3-9kAEPrintDocuments event ID3-9kAEQueueReply flag4-37, 5-14 to 5-15kAEQuitApplication event ID3-9kAEWaitReply flag4-36, 5-14 to 5-15kCoreEventClass event class3-8keyAddressAttr keyword3-15keyAECompOperator keyword6-16keyAEContainer keyword3-34, 6-8, 6-55keyAEDesiredClass keyword3-34, 6-8, 6-55keyAEEditionFileLoc keyword4-22keyAEIndex keyword6-42keyAEKeyData keyword3-34, 6-8keyAEKeyForm keyword3-34, 6-8keyAELogicalOperator constant6-17keyAELogicalTerms constant6-17keyAEObject keyword8-5keyAEObject1 keyword6-16keyAEObject2 keyword6-16keyAEPosition keyword8-5keyAERangeStart constant6-20keyAERangeStop constant6-20keyAETest keyword6-42key data, in object specifier records6-12 to 6-21defined3-36for formAbsolutePosition6-14for formNameID6-14for formPropertyID6-13for formRange6-20for formRelativePosition6-15for formTest6-15 to 6-19for formUniqueID6-14for formWhose6-42specifying6-57 to 6-75keyDirectObject keyword3-15keyErrorNumber keyword3-15, 4-36 to 4-37keyErrorString keyword3-15, 4-37keyEventClassAttr keyword3-15keyEventIDAttr keyword3-9, 3-15keyEventSourceAttr keyword3-15, 4-29key form, in object specifier recordsdefined3-36introduced6-11 to 6-12specifying6-57keyInteractLevelAttr keyword3-15, 4-45keyMissedKeywordAttr keyword3-15, 4-30, 4-34 to 4-35, 5-10keyOptionalKeywordAttr keyword3-15, 4-34, 5-7 to 5-10keyOriginalAddressAttr keyword3-15keyOSASourceEnd keyword10-39keyOSASourceStart keyword10-39keyReturnIDAttr keyword3-15keyTimeoutAttr keyword3-15, 5-21keyTransactionIDAttr keyword3-15'keyw' descriptor type4-58keywords for Apple events3-15keyword-specified descriptor records. See also descriptor recordsadding to AE records5-32 to 5-33defined3-15 to 3-16deleting from AE records4-92 to 4-93disposing of4-39 to 4-40getting data out of4-79 to 4-80getting descriptor records out of4-80 to 4-81getting descriptor types of4-90 to 4-91getting sizes of4-90 to 4-92kHighLevelEvent message class4-5kOSAComponentType component type10-4kOSAGenericScriptingComponentSubtype component subtype10-4, 10-14kOSAScriptIsModified script information selector10-42kOSAScriptResourceType resource10-14kOSASupportsAECoercion flag10-52kOSASupportsAESending flag10-5, 10-56kOSASupportsCoercion flag10-5kOSASupportsCompiling flag10-5, 10-47kOSASupportsDialects flag10-5, 10-67kOSASupportsGetSource flag10-5, 10-51kOSASupportsRecording flag10-5, 10-59kOSASupportsTinkering flag10-5, 10-72kOSASupportsWindowEditing flag10-5Llinking programs. See program linking'list' descriptor type4-57localAndRemoteHLEvents flag4-5LocationNameRec data type11-19, 11-49logical descriptor recordscreating6-69 to 6-70, 6-91 to 6-92defined6-17'long' descriptor type4-57M'magn' descriptor type4-57mark-adjusting function6-54marking callback functions6-53 to 6-54mark token function6-53menu commandsCreate Publisher (Edit menu)2-10New (File menu)9-9 to 9-12Open Query (file menu) 12-14Publisher/Subscriber Options (Edit menu)2-10, 2-43 to 2-44Quit (File menu)4-14, 4-20, 9-6 to 9-9Show/Hide Borders (Edit menu)2-10Stop All Editions (Edit menu)2-10Subscribe To (Edit menu)2-10message blocksdefined11-5reading data using11-40 to 11-41writing data using11-42 to 11-43'miss' keyword3-15, 5-10modal-dialog filter functions, expandable2-97, 2-98'modi' script information selector10-42Move event, handled by script context7-25 to 7-28NNewPublisherDialog function2-29, 2-31, 2-93 to 2-94NewPublisherExpDialog function2-60 to 2-61, 2-96 to 2-98NewPublisherReply data type2-30 to 2-31new publisher reply records2-30, 2-80, 2-93 to 2-94NewSection function2-18, 2-75NewSubscriberDialog function2-37 to 2-39, 2-91 to 2-92NewSubscriberExpDialog function2-60, 2-96 to 2-98NewSubscriberReply data type2-38new subscriber reply records2-38 to 2-39, 2-91Notification Manager, used by Apple Event Manager4-50null descriptor recordsas default reply Apple event3-26, 4-36used to specify default container6-10'null' descriptor type4-58, 6-10, 9-17O'oapp' event ID3-9object accessor dispatch tablesdefined6-5getting entries from6-81 to 6-82installing entries in6-21 to 6-27, 6-78 to 6-79removing entries from6-84 to 6-85system6-22object accessor functionsadding to dispatch tables6-21 to 6-27, 6-78 to 6-79calling6-82 to 6-83defined6-4examples of6-29 to 6-38getting from dispatch tables6-81 to 6-82for properties6-37 to 6-38removing from dispatch tables6-84 to 6-85whose descriptor records and6-44 to 6-45writing6-28 to 6-45object callback functionsdefined6-4error callback function6-100mark-adjusting function6-54marking callback functions6-53 to 6-54mark token function6-53object comparison function6-50 to 6-52object-counting function6-48 to 6-49object-marking function6-54special handler dispatch tables and4-100specifying6-79 to 6-80token disposal function6-41writing6-45 to 6-75object classes, Apple eventApple event objects and1-11and classification of Apple event objects3-39 to 3-41defined3-6object class IDsin object specifier records3-35, 6-9for properties of Apple event objects3-42, 6-13object class inheritance hierarchy3-40 to 3-41object comparison function6-50 to 6-52object-counting function6-48 to 6-49object-marking function6-54object specifier recordsapplication-defined functions for resolving6-94 to 6-103complex6-64 to 6-75creating6-55 to 6-75, 6-88 to 6-94defined3-32 to 3-39descriptor types used in6-76keywords for3-34, 6-8resolving3-33, 6-4 to 6-8, 6-85 to 6-87simple, creating6-57 to 6-60specifying a property6-63specifying a range6-72 to 6-75specifying a relative position6-64specifying a test6-64 to 6-72specifying the container hierarchy6-61 to 6-63Object Support Librarydisabling4-103initializing6-77linking6-3'odoc' event ID3-9offset descriptor records6-72, 6-88 to 6-89Open Application eventdefined4-13event ID for3-9handling4-14 to 4-15OpenComponent function10-4OpenDefaultComponent function10-4Open Documents eventdefined4-13event ID for3-9handling4-15 to 4-17illustration of responding to3-27OpenEdition function2-26, 2-41, 2-83opener verbs2-64 to 2-66OpenNewEdition function2-26, 2-35, 2-86 to 2-87Open Query command (File menu)12-14. See also Data Access ManagerOpen Scripting Architecture (OSA)defined1-13and scripting components7-4optional parameters for Apple eventsdefined3-9and keyOptionalKeywordAttr attribute4-34specifying5-7 to 5-10'optk' keyword3-15, 5-7 to 5-10OSAActiveProcPtr data type10-23OSAAddStorageType function10-93 to 10-94OSAAvailableDialectCodeList function10-68 to 10-69OSAAvailableDialects function10-70 to 10-71OSACoerceFromDesc function10-52 to 10-54OSACoerceToDesc function10-54 to 10-55OSACompileExecute function10-10, 10-63 to 10-64OSACompile function10-7 to 10-9, 10-48 to 10-50'osa ' component type10-4OSACopyID function10-50OSADisplay function10-35 to 10-36OSADispose function10-41OSADoEvent function10-19 to 10-23, 10-76 to 10-78OSADoScript function10-10, 10-65 to 10-66OSAExactScriptingComponent function10-18OSAExecuteEvent function10-19 to 10-21, 10-74 to 10-76OSAExecute function10-7 to 10-9, 10-14 to 10-17, 10-33 to 10-35OSAGenericToRealID function10-90 to 10-91OSAGetActiveProc function10-46OSAGetCreateProc function10-56OSAGetCurrentDialect function10-68OSAGetDefaultScriptingComponent function10-86OSAGetDialectInfo function10-69 to 10-70OSAGetResumeDispatchProc function10-73 to 10-74OSAGetScriptInfo function10-43 to 10-44OSAGetScriptingComponentFromStored function10-88 to 10-89OSAGetScriptingComponent function10-89 to 10-90OSAGetSendProc function10-57OSAGetSource function10-17 to 10-18, 10-51 to 10-52OSAGetStorageType function10-93OSAID data type7-23, 10-29OSALoadExecute function10-61 to 10-63OSALoad function10-14 to 10-17, 10-32 to 10-33OSAMakeContext function10-79OSARealToGenericID function10-91 to 10-92OSARemoveStorageType function10-94OSAScriptError function10-10 to 10-11, 10-37 to 10-40OSAScriptingComponentName function10-47OSASetActiveProc function10-45OSASetCreateProc function10-56OSASetCurrentDialect function10-67OSASetDefaultScriptingComponent function10-87OSASetDefaultTarget function10-58 to 10-59OSASetResumeDispatchProc function10-72OSASetScriptInfo function10-41 to 10-42OSASetSendProc function10-57OSAStartRecording function10-59 to 10-60OSAStopRecording function10-60 to 10-61OSAStore function10-30 to 10-31P'pdoc' event ID3-9port filter function11-24 to 11-25PortInfoRec data type11-25port locations11-4port names11-4PPCAccept function11-38, 11-66, 11-68 to 11-69PPCAcceptPBRec data type11-46PPCBrowser function11-52 to 11-53use to locate a port11-22 to 11-27use with Apple events5-11, 5-12PPCClose function11-43 to 11-44, 11-58 to 11-59PPCClosePBRec data type11-46PPCEnd function11-43, 11-64 to 11-65PPCEndPBRec data type11-46PPCInform function11-35 to 11-37, 11-66 to 11-68PPCInformPBRec data type11-46PPCInit function11-11, 11-51PPCOpen function11-20 to 11-22, 11-56 to 11-57PPCOpenPBRec data type11-46PPCParamBlockRec data type11-15, 11-46PPC parameter blocks11-15, 11-17, 11-46 to 11-48PPCPortRec data type11-18 to 11-19, 11-48PPC portsclosing11-43 to 11-44defined11-4listing available11-22 to 11-27opening11-17 to 11-22specifying locations11-4, 11-19, 11-49specifying names11-4, 11-17PPCRead function11-40 to 11-41, 11-71 to 11-73PPCReadPBRec data type11-46PPCReject function11-39, 11-66, 11-70PPCRejectPBRec data type11-46PPC sessionsaccepting11-37 to 11-39defined11-5ending11-43exchanging message blocks during11-39 to 11-40initiating11-29 to 11-35receiving requests for11-35 to 11-37rejecting11-37 to 11-39PPCStart function11-29, 11-33 to 11-35, 11-59 to 11-62PPCStartPBRec data type11-46PPCWrite function11-42 to 11-43, 11-73 to 11-75PPCWritePBRec data type11-46primitive object classes3-41Print Documents eventdefined4-13event ID for3-9handling4-17 to 4-19program linkingdefined11-5dialog box11-22 to 11-27to server applications for Apple events4-5Program-to-Program Communications (PPC) Toolbox11-3 to 11-97calling conventions11-14 to 11-17data structures in11-46 to 11-48routines in11-50 to 11-77testing for availability11-11'prop' descriptor type4-58properties of Apple event objectsdefined3-42 to 3-46object accessor functions that find6-37 to 6-38object class ID for3-42, 6-13specifying in an object specifier record6-63'prvw' format type2-25'psn ' descriptor type3-14, 4-58Publisher Options command (Edit menu)2-10, 2-43publishersborders2-9 to 2-10, 2-50 to 2-54canceling2-48 to 2-49creating2-29 to 2-32defined2-4locating2-49 to 2-50multiple2-18, 2-58 to 2-59, 2-73options for2-43 to 2-50update modes2-47 to 2-48Publisher/Subscriber Options command (Edit menu)2-10publishing data. See Edition Manager; publishersQ'qdef' resource type12-90, 12-92'qery' file type12-46'qrsc' resource type12-90 to 12-91queriesconverting results to text12-42 to 12-45, 12-67 to 12-68defined12-7executing12-78 to 12-79halting execution12-81 to 12-82processing results12-36 to 12-46retrieving results12-42sending12-30 to 12-31, 12-76 to 12-77starting12-63 to 12-65query definition function resources12-92query definition functions12-51 to 12-54query documents12-46 to 12-54contents12-48 to 12-51dialog boxes12-46 to 12-47QueryRecord data type12-56query records12-56 to 12-57creating12-61defined12-46disposing of12-62 to 12-63query resources12-90 to 12-91query string resources12-91Quit Application eventdefined4-13event ID for3-9handling4-19 to 4-20Quit command (File menu)4-14, 4-20'quit' event ID3-9Rrange descriptor recordscreating6-92 to 6-93key data for6-20ReadEdition function2-27, 2-85 to 2-86Receive Recordable Event event9-36'reco' descriptor type4-57recordable applications1-18 to 1-19, 7-20 to 7-22, 9-3 to 9-5'aete' resources and1-18 to 1-19defined7-5direct dispatching and5-13factoring9-6 to 9-13guidelines for what to record9-14 to 9-35introduced1-15Recorded Text event10-27Recording Off event9-4Recording On event9-4recording scripts, routines for10-59 to 10-61reference constantsfor Apple event handlers4-8, 4-34for object accessor function6-24RegisterSection function2-22, 2-76 to 2-77relative position, specifying in an object specifier record6-64reply Apple events4-36 to 4-39disposing of4-39 to 4-40filter functions while waiting for5-24timeouts for4-84 to 4-85, 5-20 to 5-21required Apple events4-11 to 4-20required parameters for Apple events3-9, 4-34 to 4-35Required suite of Apple events1-10Reset Timer event4-85ResListElem record12-57resourcesalias2-19Apple event terminology. See 'aete' resources; 'aeut' resourcesquery12-90 to 12-91query definition function12-92query string12-91script7-7, 10-14scripting size8-45 to 8-46section2-19size4-5, 10-14resource types'aete'. See 'aete' resources'aeut'. See 'aeut' resources'alis'2-19'qdef'12-90, 12-92'qrsc'12-90 to 12-91'scpt'7-7, 10-14'scsz'8-45 to 8-46'sect'2-19'SIZE'4-5, 10-14'wstr'12-48, 12-91result handlers12-42 to 12-46, 12-86 to 12-89application12-43function declaration12-43installing12-86 to 12-87provided by Apple Computer12-42 to 12-43system12-43ResultsRecord data type12-41, 12-58results records12-40 to 12-42resume dispatch functionsdefined7-27example of use10-21'rtid' keyword3-15Ssample routinesDoEvent4-5DoHighLevelEvent4-6DoNewPublisher2-33 to 2-34DoNewSubscriber2-40DoOptionsDialog2-46 to 2-47DoPPCAccept11-38DoPPCReject11-39DoReadEdition2-42 to 2-43DoSectionRead2-15DoWriteEdition2-21, 2-34, 2-36, 2-46, 2-47MyAcceptCompProc11-38MyBrowserPortFilter11-24MyCompareObjects6-52MyConnectToScripting10-6MyCountObjects6-49MyCreateComparisonDescRec6-68MyCreateDocContainer6-61MyCreateFormNameObjSpecifier6-67MyCreateLogicalDescRec6-70MyCreateObjSpecRec6-70MyCreateOptionalKeyword5-9MyCreateRangeDescriptor6-74MyCreateTableContainer6-62MyDeleteNewUserRefNum11-45MyDoDragWindow9-13MyDoMenuNew9-9MyDoMenuQuit9-6MyDoNewScript10-9MyEditGenericScript10-18MyFindDocumentObjectAccessor6-30MyFindParaObjectAccessor6-32MyFindPropertyOfWindowObjectAccessor6-38MyFindWindowObjectAccessor6-35MyFindWordObjectAccessor6-34MyGeneralAppleEventHandler10-21MyGetAETE8-25MyGetQRCompRoutine12-21MyGetScriptErrorInfo10-11MyGetSectionHandleFromEvent2-15MyGetTargetAddress5-12MyGotRequiredParams4-35MyHandleCreateElement9-11MyHandleCreatePublisherEvent4-23MyHandleOApp4-15MyHandleODoc4-15MyHandlePDoc4-18MyHandleQuit4-19, 9-8MyHandler4-38MyHandleSectionReadEvent2-14MyHiLevel12-18MyIdleFunction5-23MyInformCompProc11-37MyIPCListPorts11-28MyLoadAndExecute10-16MyLoLevel12-33MyMultHandler4-39MyOpenExistingDocument2-23sample routines (continued)MyPPCBrowser11-26MyPPCClose11-44MyPPCEnd11-43MyPPCInform11-36MyPPCInit11-12MyPPCOpen11-21MyPPCRead11-41MyPPCStart11-34MyPPCWrite11-42MyQDef12-52MyReadComplete11-41MyRejectCompProc11-39MyRequestRowFromTarget6-59MySaveDocument2-21MySendAECreateElement9-10MySendAEQuit9-7MySendFragment12-31MySendMultiplyEvent5-17MySetTargetAddresses5-11MyStartCompRoutine12-21MyStartSecureSession11-32MyStartStatus12-26MyTypeIntegerHandler12-45MyWriteComplete11-43'scpt' component subtype10-4, 10-14'scpt' file type7-7'scpt' resource type7-7, 10-14scriptable applications'aete' resources and1-16 to 1-17, 8-13 to 8-23AppleScript and8-3 to 8-7defined7-4introduced1-15requirements for1-16 to 1-17, 7-14 to 7-20, 8-13 to 8-23script applicationscreator signature for10-14defined7-7script comments7-6, 10-14script contextsdefined7-23handling Apple events with7-25 to 7-28, 10-19 to 10-23introduced7-12routines for handling Apple events with10-71 to 10-79used for global contexts10-8script datacoercing a descriptor record to10-52 to 10-54coercing to a descriptor record10-54 to 10-55defined7-23disposing of10-41executing10-14 to 10-17, 10-33 to 10-35generic scripting component and trailer for10-15getting handle to10-30 to 10-31getting information about10-43 to 10-44loading and executing10-14 to 10-17resource and file types for10-13saving10-12 to 10-14, 10-30 to 10-31saving and loading, routines for10-30 to 10-33setting and getting information about10-41 to 10-44storage formats for10-12 to 10-13updating10-50Script Editor applicationand applications that execute scripts1-21scriptable applications and1-14 to 1-15script window for7-6script editorsand Apple event recording9-35 to 9-37defined7-6script error information selectors10-37 to 10-38script files7-7script IDsdefined7-23and generic script IDs10-85script information selectors10-43 to 10-44scripting components7-3 to 7-28, 10-3 to 10-125and Apple event recording9-35 to 9-37application-defined functions for10-94 to 10-98connecting with via Component Manager10-3 to 10-7defined7-4error numbers for OSAScriptError10-39 to 10-40flags for component description records10-5and generic scripting component7-22, 10-15introduced1-13optional routines for10-46 to 10-79required routines for10-30 to 10-46routines used by10-84 to 10-94and scriptable applications7-8 to 7-11using to manipulate and execute scripts7-11 to 7-14, 7-22 to 7-28writing10-27ScriptingComponentSelector data type10-85scripting languagesAppleScript. See AppleScript scripting languageand object specifier records3-33supporting1-13 to 1-22scriptsdefined7-4executing in one step, routines for10-61 to 10-66introduced1-13manipulating and executing1-19 to 1-22, 7-22 to 7-28multithreaded execution of10-4recording, Recorded Text event and10-27recording, routines for10-59 to 10-61script text files7-8script valuescoercing to readable text10-35 to 10-36coercion of, routines for10-52 to 10-55defined7-23'scsz' resource8-45 to 8-46'sect' descriptor type4-58Section Cancel event2-13SectionEventMsgClass event class4-21SectionOptionsDialog function2-43, 2-94 to 2-95SectionOptionsExpDialog function2-60 to 2-61, 2-96 to 2-98SectionOptionsReply data type2-45 to 2-46Section Read event2-13, 4-21preventing initial2-75SectionReadMsgID event ID4-21SectionRecord data type2-17 to 2-18, 2-72 to 2-73section records for publishers and subscribers2-15 to 2-24Section Scroll event2-13, 4-21SectionScrollMsgID event ID4-21sections. See also publishers; subscribers2-15 to 2-28canceling2-48 to 2-49defined2-4reading and writing2-24registering2-13 to 2-14renaming documents that contain2-50Section Write event2-13, 4-21SectionWriteMsgID event ID4-21'sect' resource type2-19'seld' keyword6-8Select event9-16 to 9-35send functionsroutines for manipulating10-55 to 10-57supplying alternative10-25 to 10-26sendMode flags for AESend5-39server applications, for Apple eventsdefined3-4 to 3-5introduced1-9setting user interaction preferences4-48user interaction with4-45 to 4-55session ID, data accessdefined12-16getting12-28session numbers, data accessgetting12-36, 12-74 to 12-75use of12-36sessions, data accesscontrolling12-68 to 12-75examples12-18, 12-33getting information about12-36, 12-71 to 12-73initiating12-16, 12-28, 12-68 to 12-70terminating12-17, 12-32, 12-70 to 12-71, 12-81 to 12-82sessions, PPC. See PPC sessionsSet Data eventhandling1-12recording9-27 to 9-30sent by AppleScript component7-10sent during script execution1-17SetEditionFormatMark function2-27, 2-82SetEditionOpenerProc function2-63, 2-102Sharing Setup control panel11-6'shor' descriptor type4-57Show/Hide Borders command (Edit menu)2-10'sign' descriptor type3-14, 4-58simple object specifier records, creating6-57 to 6-60'sing' descriptor type4-57'SIZE' resourceuse by Apple events4-5use in script application files10-14source applications, for Apple events3-4 to 3-5source data, for scriptsAppleScript routines for styles10-82 to 10-84compiling10-48 to 10-50compiling and executing10-7 to 10-11defined7-23obtaining from script data10-51 to 10-52'srce' keyword10-39'srcs' keyword10-39'ssid' descriptor type3-14, 4-58Start Recording event9-36StartSecureSession function11-30 to 11-31, 11-62 to 11-65status routines, Data Access Manager12-22 to 12-28for DBGetQueryResults function12-22 to 12-28for DBStartQuery function12-22 to 12-28defined12-14function declaration12-22sample12-26 to 12-28and status messages12-22 to 12-25Stop All Editions command (Edit menu)2-10Stop Recording event9-37subclasses, in object class definitions3-40Subscriber Options command (Edit menu)2-43 to 2-45subscribersborders2-9 to 2-10, 2-50, 2-54canceling2-48creating2-37 to 2-39defined2-4modifying the contents of2-59to non-edition files2-62 to 2-70options for2-43 to 2-50update modes2-48Subscribe To command (Edit menu)2-10subscribing. See Edition Manager; subscriberssuperclasses, in object class definitions3-40system Apple event dispatch table4-7system coercion dispatch table4-41system object accessor dispatch table6-22T'targ' descriptor type3-14, 4-58target addresses of Apple events5-10 to 5-13target applications, for Apple events3-4 to 3-5terminology in applications, recommended2-4terminology resources, Apple event8-3 to 8-46and AppleScript7-17 to 7-20defined7-15structure of8-8 to 8-13, 8-26 to 8-44'TEXT' descriptor type4-57timeouts for interacting with the user4-50timeouts for reply Apple events4-84 to 4-85, 5-20 to 5-21'timo' keyword3-15token disposal functionscalled by Apple Event Manager6-41, 6-46defined6-7marking callback functions and6-54tokens, for Apple event objectsdefined6-4defining descriptor types for6-39 to 6-41object accessor functions and6-28 to 6-29ranges of text and6-40'tran' keyword3-15'true' descriptor type4-57typeAbsoluteOrdinal descriptor type6-14, 6-76typeAEList descriptor type4-57typeAERecord descriptor type4-57typeAlias descriptor type4-58typeAppleEvent descriptor type4-57typeApplSignature descriptor type3-14, 4-58, 5-10typeAppParameters descriptor type4-58typeBoolean descriptor type4-57typeChar descriptor type4-57typeCompDescriptor descriptor type6-16typeComp descriptor type4-57typeCurrentContainer descriptor type6-20, 6-76'type' descriptor type4-58typeEnumerated descriptor type4-58, 6-76typeExtended descriptor type4-57typeFalse descriptor type4-58typeFSS descriptor type4-58typeKeyword descriptor type4-58typeLogicalDescriptor descriptor type6-17typeLongFloat descriptor type4-57typeLongInteger descriptor type4-57typeMagnitude descriptor type4-57typeNull descriptor type4-58, 6-10, 9-17typeObjectBeingExamined descriptor type6-16, 6-68, 6-76typeObjectSpecifier descriptor type4-22, 6-55 to 6-75, 6-76typeOSAErrorRange descriptor type10-39typeOSAGenericStorage descriptor type10-12, 10-14typeProcessSerialNumber descriptor type3-14, 4-58, 5-10, 5-13typeProperty descriptor type4-58typeRangeDescriptor descriptor type6-20typeSectionH descriptor type4-58typeSessionID descriptor type3-14, 4-58, 5-10typeShortFloat descriptor type4-57typeShortInteger descriptor type4-57typeTargetID descriptor type3-14, 4-58, 5-10typeTrue descriptor type4-57typeType descriptor type4-58typeWhoseDescriptor descriptor type6-42 to 6-45typeWhoseRange descriptor type6-44typeWildCard descriptor type4-10, 4-58, 4-63, 6-26 to 6-27U, VUnRegisterSection function2-22, 2-48, 2-77 to 2-78user interactionrequesting4-49 to 4-56, 4-81 to 4-84setting preferences for client application4-45 to 4-47setting preferences for server application4-48Users & Groups control panel11-7WWaitNextEvent function, use by the Apple Event Manager5-15'want' keyword6-8whose descriptor records6-42 to 6-45whose range descriptor records6-44WriteEdition function2-27, 2-88'wstr' resource type12-48, 12-91X, Y, ZXCMDs, as a script10-13This Apple manual was written, edited, and composed on a desktop publishing system using Apple Macintosh computers and FrameMaker software. Proof pages were created on an Apple LaserWriter IINTX printer. Final page negatives were output directly from text files on an Optrotech SPrint 220 imagesetter. Line art was created using Adobe™ Illustrator and Adobe Photoshop. PostScript™, the page-description language for the LaserWriter, was developed by Adobe Systems Incorporated.Text type is Palatino® and display type is Helvetica®. Bullets are ITC Zapf Dingbats®. Some elements, such as program listings, are set in Apple Courier.LEAD WRITERSharon EversonWRITERSSean Cotter, Paul Black, Laine RapinDEVELOPMENTAL EDITORSAntonio Padial, Anne SzablaINDEX SPECIALISTSanborn HodgkinsILLUSTRATORSBruce Lee, Ruth Anderson, Barbara Carey, Lisa HymelCOVER DESIGNERBarb SmythPRODUCTION EDITORTeresa LujanFORMATTERJudith RadinPROJECT MANAGERPatricia EastmanSpecial thanks to William Cook, Tony Francis, Warren Harris, Eric House, Ed Lai, Donald Olson, Beverly ZegarskiAcknowledgments to Jens Alfke, Gary Bond, Kevin Calhoun, Julie Callahan, Dave Curbow, Donn Denman, Laili Di Silvestro, Sue Dumont, Wendy Krafft, Bennet Marks, Cassandra Markham Nelson, and the entire AppleScript and Inside Macintosh teams.@@ˇ ˇˇˇˇ@
  2. ˇ·ˇ‚7^
  3. 4í∫◊, Palatino
  4. .°dONLNdˇˇ(ô∫    Addison-WÑ@°dONLNdˇˇ)4esley Publishing Company    °dONLNdˇˇ(´∫Reading, MassachusettsÀ†°dONLNdˇˇ)hMenlo Park, California쇰dONLNdˇˇ)dNew ˆ∞°dONLNdˇˇ)Y#°dONLNdˇˇ)ork°dONLNdˇˇ(∑∫Don Mills, Ontarioc °dONLNdˇˇ)TW膰dONLNdˇˇ)okingham, England@°dONLNdˇˇ)XAmsterÜ°dONLNdˇˇ)damwp°dONLNdˇˇ)Bonn°dONLNdˇˇ(√∫SydneyH °dONLNdˇˇ)'Singapor°dONLNdˇˇ)$ee∞°dONLNdˇˇ)T°dONLNdˇˇ)okyoÏP°dONLNdˇˇ)Madrid–°dONLNdˇˇ)(San Juan°dONLNdˇˇ(œ∫Parisl¿°dONLNdˇˇ)Seoulk`°dONLNdˇˇ)MilanËÄ°dONLNdˇˇ)  Mexico City °dONLNdˇˇ):T»Ä°dONLNdˇˇ)aipei(0∫4Ÿ∫˘
  5. {∂èÕ4zµ{∂ê{∂èÕ08x|˛˛ˇˇ?ˇ¯?ÔÔ«‡á‡É¿¿Äê{∂èÕ08||«‡É¿¿ÄÄ
  6. ˇ·ˇ‚7^3 ðdONLNdí∫´‘*tINSIDE MACINT∫ °dONLNdí‘´(§‘OSH
  7. ˙H 4˚H  H
  8. ˇ·ˇ‚7^ˇˇ≥>ˇ◊°dONLNdH.Ú(&HInterapplication Communicationˇ&Z@ˇ ˇˇˇˇ@
  9. ˇ·ˇ‚7^
  10. 4⁄ú˙¯4^*¿∫, Palatino
  11. .°dONLNdZ*f1+*c°dONLNd\6er) Apple Computer>Ä°dONLNd\reÇ)<, Inc.°dONLNdg*pE(n*© 1993, .Ä°dONLNdgFpÇ)Apple ComputerÌ°dONLNd-gÅpë);, Inc.°dONLNd4p*yP(w* All rights r˝Ä°dONLNd@pPyo)&    eserved. °dONLNdJ{*Ñ•(Ç*#No part of this publication may be °dONLNdmÑ*ç-*    rÑÄ°dONLNdnÑ-ç8)epr-°dONLNdqÑ9çd) oduced, storËÄ°dONLNd}ÑdçÄ)+    ed in a r°°dONLNdÜÑÅçù)    etrieval °dONLNdèç*ñ≤(î*'system, or transmitted, in any form or °dONLNd∂ñ*üû*     by any means, mechanical, electréÄ°dONLNd÷ñûü∞)tonic, °dONLNd‹ü*®b(¶*photocopying, rÔÄ°dONLNdÎüb®p)8ecor¥°dONLNdÔüq®µ)ding, or otherwise, °dONLNd®*±™(Ø*$without prior written permission of °dONLNd'±*∫f*    Apple Computer>Ä°dONLNd5±f∫´)<, Inc. Printed in the °dONLNdK∫*√d(¡*United States of iÄ°dONLNd\∫d√Ñ):America.°dONLNde≈*Œf(Ã*No licenses, exprúÄ°dONLNdv≈fŒ¢)<ess or implied, arX°dONLNdà≈£Œ®)=e °dONLNdäŒ*◊](’*granted with r`Ä°dONLNdòŒ]◊£)3espect to any of the °dONLNd≠◊*‡•(fi*#technology described in this book. °dONLNd–‡*ÈE*    Apple rÑÄ°dONLNd◊‡EÈó)etains all intellectual pr °dONLNdÒ‡òȱ)Soperty °dONLNd¯È*ÚØ(*&rights associated with the technology °dONLNdÚ*˚®*    %described in this book. This book is °dONLNdC˚*ì*    intended to assist application °dONLNdb*π*    (developers to develop applications only °dONLNdä*6*    for eÄ°dONLNdé6ú) Apple Macintosh computers.°dONLNd©*#f(!*Apple Computer>Ä°dONLNd∑f#v)<, Inc.°dONLNdæ#*,^(**20525 Mariani >Ä°dONLNdÃ#^,d)4AªÄ°dONLNdÕ#c,x)venue°dONLNd”,*5^(3*Cupertino, CA6Ä°dONLNd‡,^5t)4 95014°dONLNdÁ5*>W(<* 408-996-1010°dONLNdÙB*KQ* Apple, the MÄ°dONLNdˇBQK|)' Apple logo, Ö°dONLNd B|Kó)+APDA, °dONLNdK*TT(R* AppleLink, ÜÄ°dONLNdKTTn)*AppleT±Ä°dONLNd"KnTò) alk, LaserW&°dONLNd-KòTß)*riter•Ä°dONLNd2K¶T™), °dONLNd4T*]g([*Macintosh, MPWJ°dONLNdBTg]ô)=, and SANE arŒÄ°dONLNdOTô]û)2e °dONLNdQ]*f](d*trademarks of …Ä°dONLNd_]]fô)3Apple Computerà°dONLNdm]ôf≠)<, Inc., °dONLNduf*o-(m*rÑÄ°dONLNdvf-oD)egister˙°dONLNd}fDo•)ed in the United States and °dONLNdôo*xa(v*other countries.°dONLNd™z*Éo* AppleScript, Finder‡Ä°dONLNdΩzoÉù)E , Moof, New ⁄°dONLNd…zùÉ¢).Yt°dONLNd z¢ɱ)ork, °dONLNdœÉ*åS(ä*    QuickDraw;°dONLNdÿÉSåq)), QuickT"Ä°dONLNd‡Éqå≥)ime, and System 7 °dONLNdÚå*ï1(ì*arÑÄ°dONLNdÙå1ïj)e trademarks of £°dONLNdåjï¶)9Apple ComputeraÄ°dONLNdå¶ï∂)<, Inc.°dONLNdó*†g(û*Adobe IllustratorÄ°dONLNd*óg†k)=, “°dONLNd,ój†≠)Adobe Photoshop, °dONLNd=†*©f(ß*and PostScript arÍÄ°dONLNdN†f©ü)<e trademarks of     °dONLNd^††©π):Adobe °dONLNdd©*≤Æ(∞*#Systems Incorporated, which may be °dONLNdá≤*ª-*    rÑÄ°dONLNdà≤-ªD)egister˙°dONLNdè≤Dªü)ed in certain jurisdictions.°dONLNd¨Ω*Δ™(ƒ*$America Online is a service mark of °dONLNd–Δ*œ¢*    Quantum Computer Services, Inc.°dONLNd—*⁄k* CompuServe is a rÉÄ°dONLNd—k⁄Ç)Aegister˘°dONLNd—Ç⁄≥)ed trademark °dONLNd⁄*„r(·*of CompuServe, Inc.°dONLNd)Â*Ój* FrameMaker is a røÄ°dONLNd:ÂjÓÅ)@egister5°dONLNdAÂÇÓ≥)ed trademark °dONLNdNÓ*˜P(ı*
  12. of Frame T4°dONLNdXÓP˜§)&echnology Corporation.°dONLNdo˘*Ö(*Helvetica, Palatino, and THÄ°dONLNdâ˘Öû)[imes arÍ°dONLNdê˘û£)e °dONLNdí* -(    *rÑÄ°dONLNdì- D)egister˙°dONLNdöD §)ed trademarks of Linotype °dONLNd¥ *M(*Company°°dONLNdª LN)".°dONLNdΩ*M(*HyperCarÄ°dONLNd≈NÄ)$ d and HyperTôÄ°dONLNd—í)1alk are°dONLNd◊ìò)e °dONLNdŸ*(-(&*rÑÄ°dONLNd⁄-(D)egister˙°dONLNd·D(ô)ed trademarks of Claris °dONLNd˘(*1W(/* Corporation.°dONLNd3*<†* #Internet is a trademark of Digital °dONLNd)<*EÄ*    Equipment Corporation.°dONLNd@G*P* ITC Zapf Dingbats is a r]Ä°dONLNdXGPñ)Uegister”°dONLNd_GñP†)ed °dONLNdbP*Yé(W*trademark of International TΔ°dONLNd~PéY´)dypeface °dONLNdÜY*bW(`* Corporation.°dONLNdìf*o:*Optr9Ä°dONLNdóf;o∞)!otech is a trademark of Orbotech °dONLNd∏o*xW(v* Corporation.°dONLNd≈|*Öπ*'Simultaneously published in the United °dONLNdÏÖ*ém*    States and Canada.4^…¿Y°dONLNdˇ]…eÒ(c…    LIMITED W°dONLNd]Òe=)(ARRANTY ON MEDIAöp°dONLNd]=eQ)L AND °dONLNdf…nˇ(l… REPLACEMENT°dONLNd)s…{÷*ALL_0°dONLNd,s◊{)
  13.  IMPLIED WYê°dONLNd6s{M))ARRANTIES ON THIS °dONLNdH|…Ñ<(Ç…MANUAL, INCLUDING IMPLIED °dONLNdbÖ…ç–*    Wfl°dONLNdcÖœç2)ARRANTIES OF MERCHANTd°dONLNdxÖ2çP)cABILITY °dONLNdÄé…ñ(î…AND FITNESS FOR AÊ∞°dONLNdëéñ)H Ph¿°dONLNdìéñ!)ARÜP°dONLNdïé!ñC)
  14. TICULAR °dONLNdùó…ü?(ù…PURPOSE, ARE LIMITED IN DURA¶ °dONLNdπó?üS)vTION °dONLNd憅® (¶…TO NINETY (90) DAiÄ°dONLNdœ† ®I)BYS FROM THE DAÀ†°dONLNd›†H®R)=TE °dONLNd‡©…±
  15. (Ø…OF THE ORIGINAL∞°dONLNdÔ© ±)B RET30°dONLNdÛ©±&)AILÖ °dONLNdˆ©&±Q)
  16.  PURCHASE °dONLNd≤…∫ (∏…OF THIS PRODUCTæ`°dONLNd≤ ∫ )B.°dONLNdø…«B(≈…$Even though Apple has reviewed this °dONLNd5»…–-*    manual, APPLE MAKES NO Wa@°dONLNdM»-–R)dARRANTY °dONLNdU—…Ÿˇ(◊… OR REPRESENT{¿°dONLNda—ˇŸ)6AI °dONLNdb—ŸW)TION, EITHER EXPRESS °dONLNdw⁄…‚O(‡…!OR IMPLIED, WITH RESPECT TO THIS °dONLNdò„…Î*    MANUAL, ITS QUALITYf∞°dONLNd´„ÎH)S
  17. , ACCURACYõÄ°dONLNdµ„HÎK),, °dONLNd∑Ï…ÙÙ(Ú…MERCHANT°dONLNdøÏÙÙ)+ABILITY≠p°dONLNdΔÏÙU), OR FITNESS FOR A[†°dONLNdÿÏVÙW)F °dONLNdŸı…˝Õ(˚…PB°dONLNd⁄ıÕ˝◊)AR_†°dONLNd‹ı◊˝/)
  18. TICULAR PURPOSE. AS AÑê°dONLNdÒı/˝H)X RESUL‡°dONLNd˜ıH˝L)T†°dONLNd¯ıL˝O), °dONLNd˙˛…˝(… THIS MANUAL°dONLNd    ˛˛N)5 IS SOLD “AS IS,” AND °dONLNd    …X(…!YOU, THE PURCHASER, ARE ASSUMING °dONLNd    <…Q*    "THE ENTIRE RISK AS TO ITS QUALITY °dONLNd    ^…!*     AND ACCURACY0°dONLNd    j!)<.°dONLNd    l&….(,…IN NO EVENT WILLùp°dONLNd    |&.M)D APPLE BE LIABLE °dONLNd    ç/…7ı(5…
  19. FOR DIRECTˇ@°dONLNd    ó/Ù7)+
  20. , INDIRECT °dONLNd    °/7A)( , SPECIAL, °dONLNd    ¨8…@Ì(>…INCIDENTÃÄ°dONLNd    ¥8Ì@F)$AL, OR CONSEQUENTIALK°dONLNd    »8G@H)Z °dONLNd    …A…I(G…DAMAGES RESUL)–°dONLNd    ÷AIF)?TING FROM ANY °dONLNd    ‰J…RD(P…DEFECT OR INACCURACY IN THIS °dONLNd
  21. S…[X*    +MANUAL, even if advised of the possibility °dONLNd
  22. ,\…dˇ*    of such damages.°dONLNd
  23. =i…q‡*THE We†°dONLNd
  24. Bi‡qO)ARRANTY AND REMEDIES SET °dONLNd
  25. [r…z◊(x…FOR°dONLNd
  26. ^r◊zV)TH ABOVE ARE EXCLUSIVE AND IN °dONLNd
  27. |{…ÉÙ(Å… LIEU OF ALLQ°dONLNd
  28. á{ıÉ,), OTHERS, ORAL¸†°dONLNd
  29. î{,É:)7 OR °dONLNd
  30. òÑ…åJ(ä… WRITTEN, EXPRESS OR IMPLIED. No °dONLNd
  31. ∏ç…ïÚ*     Apple dealerÜ0°dONLNd
  32. ƒçÚï:)), agent, or employee is °dONLNd
  33. ‹ñ…û+(ú…authorized to make any modifi°dONLNd
  34. ˘ñ+ûA)bcation, °dONLNd ü…ßC(•…'extension, or addition to this warrantyÛ`°dONLNd (üBßC)y.°dONLNd *¨…¥N(≤…*Some states do not allow the exclusion or °dONLNd Tµ…ΩU*    .limitation of implied warranties or liability °dONLNd Çæ…ΔU*    ,for incidental or consequential damages, so °dONLNd Æ«…œO*    *the above limitation or exclusion may not °dONLNd ÿ–…ÿC*    &apply to you. This warranty gives you °dONLNd ˛Ÿ…·›*    specifi¿°dONLNd Ÿfi·T)&c legal rights, and you may also have °dONLNd +‚…ÍO(Ë…,other rights which vary from state to state.4^h™¯4∫h¿¯
  35. ∫h«¯4∫h«¯ ªhª¯
  36. ˇ·ˇ‚7^,     Helvetica°dONLNdˇˇ(ÃhISBN 0-201-62200-9°dONLNdˇˇ*    1 2 3 4 5 6 7 8 9-MU-9796959493°dONLNdˇˇ*    First Printing, June 1993ˇ@ˇ ˇˇˇˇ@
  37. ˇ·ˇ‚7^
  38. 4⁄∫˙, Palatino
  39. .Ñ`(‡ iii4^H¿ˇˇ¬òˇ◊°dONLNd\∫u(n∫Contents
  40. °dONLNd    ü∫´“*:FigurR¿°dONLNdü“´Ê)es, Tè °dONLNdü´6)ables, and Listings|@°dONLNd(üK´U)fxv
  41. …H–4 H– ÀHÀ
  42. ˇ·ˇ‚7^,     Helvetica °dONLNd+ΩH»m(≈HPreface°dONLNd3∫∫…‚)rAbout ∑@°dONLNd9∫‚… )(    This Book
  43. Û@°dONLNdDº4»G)Rxxiii°dONLNdK–∫‹ı(Ÿ∫Format of a T¿°dONLNdX–ı‹6);ypical ChapterM °dONLNdh–J‹\)Uxxiv°dONLNdm›∫ÈE(Ê∫Conventions Used in This BookÄ°dONLNdå›ZÈi)†xxv°dONLNdê̓ˆ˛(ÛƒSpecial Fonts°‡°dONLNdü͈!)Nxxv°dONLNd£˜ƒ (ƒT∫¿°dONLNd§˜…)ypes of Notes)`°dONLNd≥˜))Qxxv°dONLNd∑ƒV(ƒAssembly-Language Information?Ä°dONLNd÷k})ßxxvi°dONLNd€∫$(∫The Development Envirц°dONLNd$E)jonment|‡°dONLNd¯Zl)6xxvi
  44. MHT4NHT OHO
  45. ˇ·ˇ‚7^ °dONLNd˝AHLx(IH    Chapter 1°dONLNd>∫M⁄)r.Introduction to Interapplication Communication
  46. @°dONLNd7@ÔL¸(IÔ1-1°dONLNd<T∫`Ñ(]∫*Overview of Interapplication Communications†°dONLNdhTô`¶)fl1-3°dONLNdla∫mˆ(j∫Sharing Data m‡°dONLNdyaˆm)<Among ¿°dONLNdamR)$ Applicationsª‡°dONLNdçafms)L1-6°dONLNdën∫z7(w∫Sending and Responding to h@°dONLNd´n7zr)} Apple EventsB °dONLNdπnázî)P1-9°dONLNdΩ{ƒáÊ(уStandar¥@°dONLNdƒ{ÊáÓ)"d Ò†°dONLNdΔ{Óá)) Apple EventsÀÄ°dONLNd‘{>áP)P1-10°dONLNdŸàƒî(냠   Handling `°dONLNd‚àÒî,)- Apple EventsÎ@°dONLNdà@îR)O1-12°dONLNdıï∫°Ó(û∫ Supporting ‡ °dONLNdïÓ°∞)4)AppleScript and Other Scripting Languages˜†°dONLNd+÷)÷1-13°dONLNd0¢ƒÆÚ(´ƒ Scriptable ™¿°dONLNd;¢ÚÆ*). Applicationse‡°dONLNdI¢?ÆQ)M1-16°dONLNdN؃ª›(∏ƒRecor¢`°dONLNdSØ›ª˜)dable `°dONLNdYدª0) Applications‘Ä°dONLNdgØDªV)L1-18°dONLNdlºƒ»¢(≈ƒ0Applications That Manipulate and Execute Scriptsß@°dONLNdûº∂»»)Ú1-19°dONLNd£…∫’5(“∫Exchanging Message Blocksw°dONLNdæ…J’\)ê1-22
  47. H 4H  H
  48. ˇ·ˇ‚7^ °dONLNd√˘Hx(H    Chapter 2°dONLNdÕˆ∫)rEdition Manager
  49. i°dONLNdfi¯4A)z2-1°dONLNd„ ∫ (∫Intr∑@°dONLNdÁ  ˇ) oduction to È`°dONLNdÛ ˇ¢)5%Publishers, Subscribers, and Editionsm`°dONLNd ∑ƒ)∏2-4°dONLNd∫%3("∫About the Edition Manager¿°dONLNd9H%Z)é2-12°dONLNd>&∫21(/∫Using the Edition ManagerN°dONLNdY&F2X)å2-12°dONLNd^3ƒ?Ú(<ƒ
  50. Receiving *†°dONLNdh3Ú?9).Apple Events Frÿ†°dONLNdw39?§)Gom the Edition Manager£°dONLNdè3π?À)Ä2-13°dONLNdî@ƒLœ(IƒCr\°dONLNdñ@œL8) eating the Section Recor‡°dONLNdÆ@9LU)jd and Δ`°dONLNd¥@TLÜ) Alias Recor=¿°dONLNdø@áLç)3dYÄ°dONLNd¬@°L≥)2-15°dONLNd«MƒYu(Vƒ%Saving a Document Containing Sections’Ä°dONLNdÓMâYõ)≈2-19°dONLNdÛZƒfµ(cƒ2Opening and Closing a Document Containing SectionsP`°dONLNd'Z f‹(c 2-22°dONLNd,gƒs(pƒReading and Wå°dONLNd9gsJ)Driting a Section›Ä°dONLNdKg^sp)V2-24°dONLNdPtŒÄ-(}ŒFormats in an Editiong@°dONLNdgtBÄT)t2-24°dONLNdlÅŒç%(äŒOpening an Edition§¿°dONLNdÄÅ9çK)k2-26°dONLNdÖéŒö (óŒ Format MarksA†°dONLNdìé!ö3)S2-27°dONLNdòõŒß(§ŒReading and Wå°dONLNd•õßd)Driting Edition DataÉ`°dONLNd∫õyßã)g2-27°dONLNdø®Œ¥ (±ŒClosing an Edition›†°dONLNd”®4¥F)f2-28ˇ8@ˇ ˇˇˇˇ@
  51. ˇ·ˇ‚7^
  52. 4⁄*ˇ¯, Palatino
  53. .(·*iv4^*¿¯°dONLNd\¶h±(e¶Cr\°dONLNd\±h) eating a Publisher‰†°dONLNd\h&)c2-29°dONLNdi∞uª(r∞Cr\°dONLNdiªu8) eating the Edition Container∂°dONLNd;iLu^)ë2-32°dONLNd@v∞ÇM(∞!Opening an Edition Container to W5Ä°dONLNdavMÇs)ù    rite Dataú °dONLNdlváÇô):2-35°dONLNdqɶè±(å¶Cr\°dONLNdsɱè) eating a SubscriberKÄ°dONLNdàÉè+)h2-37°dONLNdçê∞úq(ô∞)Opening an Edition Container to Read Data‡°dONLNd∏êÜúò)÷2-41°dONLNdΩù∞©c(¶∞%Choosing Which Edition Format to Read?°dONLNd‰ùx©ä)»2-41°dONLNdÈ™¶∂W(≥¶&Using Publisher and Subscriber Options@°dONLNd™l∂~)Δ2-43°dONLNd∑∞√ò(¿∞1Publishing a New Edition While Saving or Manuallyq¿°dONLNdI∑≠√ø)˝2-47°dONLNdNƒ∞–"(Õ∞Subscribing to an Edition c†°dONLNdhƒ"–ö)rAutomatically or ManuallyŒÄ°dONLNdɃÆ–¿)å2-48°dONLNdà—∞›(⁄∞Canceling Sections Wo °dONLNdú—›X)_ithin Documents=Ä°dONLNd≠—m›)^2-48°dONLNd≤fi∞Í(Á∞Locating a Publisher Thrw†°dONLNd fiÍl)mough a SubscriberÔ`°dONLNd›fiÄÍí)c2-49°dONLNd‚ζ˜f(Ù¶'Renaming a Document Containing Sections Ä°dONLNd Î{˜ç)’2-50°dONLNd¯¶Y(¶'Displaying Publisher and Subscriber Bor6‡°dONLNd7¯Zm)¥dersK‡°dONLNd=¯Åì)'2-50°dONLNdB∞∂(∞Tµ¿°dONLNdCµ‘)ext Bor¿†°dONLNdJ‘Á)ders’†°dONLNdP˚)'2-54°dONLNdU∞ø(∞Spr܇°dONLNdXø˜) eadsheet Bor&Ä°dONLNdd¯ )9ders;Ä°dONLNdj1)'2-55°dONLNdo∞+3((∞Object-Oriented Graphics Bor◊ °dONLNdã3+F)ÉdersÏ °dONLNdëZ+l)'2-56°dONLNdñ,∞8(5∞Bitmapped Graphics Bor◊@°dONLNd¨,80)mdersÏ@°dONLNd≤,D8V)'2-57°dONLNd∑9∞E^(B∞&Duplicating Publishers and Subscribers»@°dONLNdfl9rEÑ)¬2-58°dONLNd‰F¶R(O¶Modifying a Subscriber5`°dONLNd¸F"R4)|2-59°dONLNdS¶_(\¶Relocating an Edition≥‡°dONLNdS_+)s2-60°dONLNd`¶l(i¶Customizing Dialog BoxesÎ`°dONLNd7`/lA)â2-60°dONLNd<múy,(vú Subscribing to Non-Edition Files¿¿°dONLNd^m@yR)§2-62°dONLNdcz¶ÜÔ(ɶGetting the CurrkÄ°dONLNdszÔÜC)Ient Edition Opener†°dONLNdázXÜj)i2-63°dONLNdåá¶ì(ê¶Setting an Edition Openero °dONLNdßá-ì?)á2-63°dONLNd¨î¶†(ù¶Calling an Edition Opener»¿°dONLNd«î.†@)à2-64°dONLNdð¶≠+(™¶Opening and Closing Editionsx@°dONLNdÍ°@≠R)ö2-68°dONLNdÔƶ∫P(∑¶&Listing Files That Can Be Subscribed TƆ°dONLNdÆO∫T)©o$ °dONLNdÆi∫{)2-68°dONLNdª¶«÷(ƒ¶
  54. Reading Fr0`°dONLNd'ª◊«)1om and W©†°dONLNd/ª«>)-riting to Files.@°dONLNd@ªS«e)O2-68°dONLNdE»¶‘-(—¶Calling a Format I/O FunctionQ`°dONLNdd»B‘T)ú2-68°dONLNdi’ú·(fiúEdition Manager Refer˝†°dONLNd~’·)dence“Ä°dONLNdÑ’(·:)(2-71°dONLNd₶Ӆ(ζData Str``°dONLNdë‚ Ó·)$ucturÊ@°dONLNdñ‚·ÓÍ)esχ°dONLNdö‚˛Ó)2-71°dONLNdüÔ∞˚.(¯∞The Edition Container RecorÖ‡°dONLNd∫Ô.˚4)~d°†°dONLNdΩÔH˚Z)2-71°dONLNd¬¸∞˛(∞The Section RecorI`°dONLNd”¸ˇ)Ode °dONLNd÷¸+)2-72°dONLNd€    ¶(¶Edition Manager Routines–‡°dONLNdı    .@)à2-73°dONLNd˙∞"=(∞ Initializing the Edition Manager]Ä°dONLNdR"d)¢2-74°dONLNd!#∞/ª(,∞Cr\°dONLNd##ª/H)  eating and Registering a Section¸‡°dONLNdE#\/n)°2-74°dONLNdJ0∞<ª(9∞Cr\°dONLNdL0ª<p) (eating and Deleting an Edition Container[@°dONLNdv0Ö<ó) 2-79°dONLNd{=∞IJ(F∞!Setting and Getting a Format Mark °dONLNdû=_Iq)Ø2-81°dONLNd£J∞V(S∞Reading in Edition Data' °dONLNdºJ/VA)2-83°dONLNd¡W∞c∫(`∞W¬†°dONLNd¬Wπc)    riting out Edition Data˘°dONLNd€W1cC)x2-86°dONLNd‡d∞p(m∞Closing an Edition ˇ@°dONLNdÛdpZ)TAfter Reading or W °dONLNdd[ps)WritingÜ@°dONLNddápô),2-88°dONLNdq∞}(z∞Displaying Dialog Boxesx@°dONLNd+q1}C)Å2-90°dONLNd0~∞äM(á∞#Locating a Publisher and Edition Frì@°dONLNdS~Mäì)ùom a Subscriberw`°dONLNdd~®ä∫)[2-98°dONLNdiã∞ó%(î∞Edition Container Formatsr`°dONLNdÑã:óQ)ä2-101°dONLNdäò∞§Ù(°∞Reading and Wå°dONLNdóòÙ§])Driting Non-Edition Files”‡°dONLNd±òq§à)}2-102°dONLNd∑•¶±(ƶApplication-Defi†°dONLNd«•±*)J ned RoutinesI¿°dONLNd’•?±V)O2-105ˇx@ˇ ˇˇˇˇ@
  55. ˇ·ˇ‚7^
  56. 4⁄∫˙, Palatino
  57. .‡(‡v4^H¿°dONLNd\∫hN(e∫Summary of the Edition Manager∫‡°dONLNd \bhy)®2-106°dONLNd&iƒu(rƒPascal Summary‡°dONLNd6i"u9)^2-106°dONLNd<vŒÇ˙(Œ    ConstantsÆ°dONLNdGvÇ%)@2-106°dONLNdMÉŒèÎ(åŒData T:`°dONLNdSÉÎèˇ)ypes“@°dONLNdYÉè*)(2-108°dONLNd_êŒúB(ôŒEdition Manager Routines–‡°dONLNdyêVúc)à2-1ò °dONLNd|êcúh)1 Ä°dONLNd}êhúm)1°dONLNdùŒ©(¶ŒApplication-Defi†°dONLNdèù©R)J ned RoutinesI¿°dONLNdùùg©t)O2-1°dONLNd†ùt©~)13°dONLNd£™ƒ∂˘(≥ƒ    C SummaryᆰdONLNdÆ™∂)I2-1N‡°dONLNd±™∂$)14°dONLNd¥∑Œ√˙(¿Œ    ConstantsÆ°dONLNdø∑√)@2-1u@°dONLNd¬∑√%)14°dONLNd≈ƒŒ–Î(ÕŒData T:`°dONLNdÀƒÎ–ˇ)ypes“@°dONLNd—ƒ– )(2-1ôÄ°dONLNd‘ƒ –*)16°dONLNd◊—Œ›B(⁄ŒEdition Manager Routines–‡°dONLNdÒ—V›c)à2-1ò °dONLNdÙ—c›m)19°dONLNd˜fiŒÍ(ÁŒApplication-Defi†°dONLNdfiÍR)J ned RoutinesI¿°dONLNdfigÍ~)O2-122°dONLNd΃˜˛(Ùƒ Result Codesï`°dONLNd)Θ))N2-122
  58. 'H.4(H. )H)
  59. ˇ·ˇ‚7^,     Helvetica °dONLNd/H&x(#H    Chapter 3°dONLNd9∫')rIntroduction to P@°dONLNdI'h)\ Apple Events
  60.  °dONLNdW|&â)f3-1°dONLNd\.∫:ÿ(7∫About ØÄ°dONLNdb.ÿ:) Apple Eventsâ`°dONLNdp.(:5)P3-3°dONLNdt;ƒG(DƒApple Events and ˆ°dONLNdÖ;Go)QApple Event Objectsy°dONLNdö;ÑGë)o3-6°dONLNdûHƒT˛(Qƒ Apple Event >Ä°dONLNd™H˛Tr):Attributes and Parametersˇ‡°dONLNd≈HÜTì)à3-7°dONLNd…UŒa(^Œ Apple Event >Ä°dONLNd’Ua4):
  61. Attributes=@°dONLNd·UIaV)A3-8°dONLNdÂbŒn9(kŒApple Event Parametersr`°dONLNd˝bNn[)Ä3-9°dONLNdoŒ{Ì(xŒInterpru†°dONLNdoÌ{)eting Ï °dONLNdo{?) Apple Event ™†°dONLNdo?{≥):Attributes and Parametersl°dONLNd5o»{⁄)â3-10°dONLNd:|ƒàÁ(ÖƒData Str``°dONLNdB|Ëàˇ)$ucturÊ@°dONLNdG|ˇà)es W‡@°dONLNdK|à+)ithin ∑¿°dONLNdQ|+àf) Apple Events놰dONLNd_|{àç)P3-12°dONLNddâŒï(íŒDescriptor Recorfi °dONLNdtâï")Jds6‡°dONLNdxâ7ïI)3-12°dONLNd}ñŒ¢Ò(üŒKeywor¨`°dONLNdÉñÒ¢)#d-Specifi凰dONLNdåñ¢o)'ed Descriptor RecorP`°dONLNdüñp¢z)Xds© °dONLNd£ñ领)3-15°dONLNd®£ŒØ(¨ŒDescriptor Lists|@°dONLNd∫£(Ø:)Z3-16°dONLNdø∞∫º˝(π∫Responding to ;¿°dONLNdÕ∞˝º8)C Apple Events†°dONLNd€∞Mº_)P3-20°dONLNd‡Ωƒ…(ΔƒAccepting and Pr:Ä°dONLNdΩ…8)M    ocessing Œ`°dONLNd˘Ω8…s)' Apple Events®@°dONLNdΩà…ö)P3-20°dONLNd  ƒ÷‚(”ƒAbout ØÄ°dONLNd ‚÷E)Apple Event HandlersÏÄ°dONLNd( Y÷k)w3-23°dONLNd-◊Œ„R(‡ŒExtracting and Checking Data[‡°dONLNdK◊g„y)ô3-23°dONLNdP‰Œ
  62. (ÌŒInteracting Wù`°dONLNd]‰
  63. =)< ith the User7`°dONLNdk‰Rd)H3-25°dONLNdpÒŒ˝D(˙ŒPerforming the Requested d°dONLNdâÒD˝ )vAction and Returning a ResultÆ¿°dONLNd®Òfi˝)ö3-25°dONLNd≠˛∫
  64. ≈(∫Cr\°dONLNdØ˛≈
  65. ) eating and Sending ˇ°dONLNd¬˛
  66. #)WAΔ@°dONLNd√˛$
  67. X) pple Eventsÿ‡°dONLNd–˛l
  68. ~)H3-28°dONLNd’ ƒœ(ƒCr\°dONLNd◊ œ˙)
  69. eating an #‡°dONLNd· ˙M)+Apple Event Recorc °dONLNdÚ MS)Sd~‡°dONLNdı gy)3-29°dONLNd˙ƒ$Ë(!ƒAdding È@°dONLNdË$")$ Apple Event ß¿°dONLNd"$ñ):Attributes and Parametersi °dONLNd(´$Ω)â3-29°dONLNd-%ƒ1¯(.ƒ Sending an 2`°dONLNd8%¯1ú)4"Apple Event and Handling the Reply˙¿°dONLNd\%∞1¬)∏3-30°dONLNda2∫>ƒ(;∫Wï°dONLNdb2√>Ï)    orking W»Ä°dONLNdj2Ï>6))ith Object Specifil°dONLNd|27>[)Ker Recor †°dONLNdÑ2[>e)$ds#`°dONLNdà2z>å)3-32°dONLNdç?ƒKÀ(HƒD=@°dONLNdé?ÃKË)ata Str``°dONLNdï?ËKˇ)ucturÊ@°dONLNdö?ˇK)es W‡@°dONLNdû?Kt)ithin an Object Specifi釰dONLNdµ?uKô)aer RecorÌÄ°dONLNdΩ?ôKü)$d    @°dONLNd¿?¥KΔ)3-34°dONLNd≈LƒX˜(Uƒ The Classifi*@°dONLNd—L¯X )4
  70. cation of w °dONLNd€L Xz)(Apple Event ObjectsÄ°dONLNdLèX°)o3-39°dONLNdıYŒe(bŒObject Classes∂Ä°dONLNdY!e3)S3-39°dONLNd
  71. fŒr◊(oŒPrN†°dONLNd fÿr:)
  72. operties and Elements] °dONLNd#fNr`)v3-42°dONLNd(sƒÈ(|ƒFinding O °dONLNd0sÈC)%Apple Event ObjectsflÄ°dONLNdEsWi)n3-46°dONLNdJÄ∫åË(â∫
  73. About the  ‡°dONLNdTÄÈåJ)/Apple Event Managerª¿°dONLNdiÄ^åp)u3-48°dONLNdnçƒô¯(ñƒ Supporting ‡ °dONLNdyç¯ôh)4Apple Events as a Server ˜ °dONLNdíçhôú)p Applicationu@°dONLNdüç±ô√)I3-48°dONLNd§öƒ¶¯(£ƒ Supporting ‡ °dONLNdØö¯¶f)4Apple Events as a Client ]¿°dONLNd»ög¶õ)o Application€‡°dONLNd’öض¡)H3-49°dONLNd⁄߃≥¯(∞ƒ Supporting ‡ °dONLNdÂ߯≥R)4Apple Event ObjectspÄ°dONLNd˙ßg≥y)o3-49°dONLNdˇ¥ƒ¿¯(Ωƒ Supporting ‡ °dONLNd
  74. ¥¯¿K)4Apple Event Recor`°dONLNd¥L¿`)TdingÑ°dONLNd!¥t¿Ü)(3-50ˇb@ˇ ˇˇˇˇ@
  75. ˇ·ˇ‚7^
  76. 4⁄*ˇ¯, Palatino
  77. .(·*vi4^*¿¯
  78. k*r¯4l*r¯ m*m¯
  79. ˇ·ˇ‚7^,     Helvetica °dONLNd_*jZ(g*    Chapter 4°dONLNd
  80. \úk˙)rResponding to ‡ °dONLNd\˘kK)] Apple Events
  81. Y‡°dONLNd&^`jm)g4-1°dONLNd+rú~»({ú    Handling `°dONLNd4r…~)- Apple EventsÎ@°dONLNdBr~%)O4-4°dONLNdF¶ã‚(à¶Accepting an Ò¿°dONLNdS‚ã)< Apple Event醰dONLNd`.ã;)L4-5°dONLNddå¶ò(ï¶Installing Entries in the í¿°dONLNd~åòy)iApple Event Dispatch TŒ °dONLNdîåxòé)iablesD¿°dONLNdõå£ò∞)+4-7°dONLNdüô∞•≥(¢∞IfiÄ°dONLNd†ô≥•;) nstalling Entries for the Requir∏†°dONLNd¿ô;•H)àed ø†°dONLNd√ôH•É) Apple EventsôÄ°dONLNd—ôò••)P4-8°dONLNd’¶∞≤(Ø∞Installing Entries for 7†°dONLNd϶≤…)](Apple Events Sent by the Edition ManagerΔ@°dONLNd¶›≤Í)–4-9°dONLNd≥∞ø»(º∞How øÄ°dONLNd≥»øD)Apple Event Dispatching W#°dONLNd7≥DøW)|orksW@°dONLNd=≥køx)'4-9°dONLNdA¿¶Ã(…¶Handling the Requirí`°dONLNdT¿Ã)[ed ô`°dONLNdW¿ÃI) Apple Eventss@°dONLNde¿^Ãk)P4-1:Ä°dONLNdh¿kÃp)1°dONLNdjÕ∞ŸÕ(÷∞RequirE@°dONLNdpÕŒŸ€)ed L@°dONLNdsÕ€Ÿ) Apple Events& °dONLNdÅÕ+Ÿ8)P4-1Ì`°dONLNdÑÕ7Ÿ<) 1°dONLNdÜ⁄∞Ê(„∞Handling the Open g¿°dONLNdò⁄ÊX)XApplication Event@°dONLNd´⁄mÊ)e4-14°dONLNd∞Á∞ÛV(∞!Handling the Open Documents Event~°dONLNd”ÁkÛ})ª4-15°dONLNdÿÙ∞T(˝∞"Handling the Print Documents Event˝`°dONLNd¸Ùhz)∏4-17°dONLNd∞(
  82. ∞Handling the Quit ¸Ä°dONLNdS)SApplication Eventö°dONLNd&hz)e4-19°dONLNd+¶“(¶    Handling `°dONLNd4”è)-(Apple Events Sent by the Edition Manager†°dONLNd^£µ)–4-20°dONLNdc∞'-($∞The Section Read, Section Wh@°dONLNd~-'Ñ)}rite, and Section Scrú†°dONLNdìÑ'Ø)W
  83. oll Events?@°dONLNdüƒ'÷)@4-21°dONLNd§(∞4¯(1∞Handling the Cr© °dONLNd≥(¯4R)Heate Publisher EventQ‡°dONLNd…(g4y)o4-22°dONLNdŒ5¶AŸ(>¶ Getting Dat8°dONLNdŸ5⁄A)4
  84. a Out of a¶¿°dONLNd„5A)+n ô¿°dONLNdÂ5AD) Apple Event6†°dONLNdÚ5YAk)L4-25°dONLNd˜B∞N(K∞Getting Data Out of an ô¿°dONLNdBN~)gApple Event ParameterO °dONLNd%BìN•)|4-26°dONLNd*O∞[(X∞Getting Data Out of an ô¿°dONLNdAO[?)g    Attribute[Ä°dONLNdLOT[f)=4-28°dONLNdQ\∞hS(e∞%Getting Data Out of a Descriptor ListÊ°dONLNdx\ghy)∑4-31°dONLNd}i¶u∞(r¶W¬†°dONLNd~iØu…)    riting JÄ°dONLNdÖi u-)Apple Event HandlersáÄ°dONLNdõiAuS)w4-33°dONLNd†v¶ÇÈ(¶Replying to an e°dONLNdØvÈÇ )C Apple Event‡°dONLNdºv5ÇG)L4-36°dONLNd¡ɶè‡(å¶Disposing of À °dONLNdŒɇè>):Apple Event Data Str»`°dONLNd‚É>èU)^ucturN@°dONLNdÁÉVè_)esT‡°dONLNdÎÉsèÖ)4-39°dONLNdê¶ú∞(ô¶W¬†°dONLNdÒêØú)    riting and Installing Coerz°dONLNd êú])pcion Handlersπ†°dONLNdêqúÉ)R4-41°dONLNdùú©ÿ(¶úInteracting Wù`°dONLNd,ùÿ© )< ith the User7`°dONLNd:ù ©2)H4-45°dONLNd?™¶∂Ù(≥¶Setting the Client  °dONLNdR™ı∂Ü)O!Application’s User Interaction PrΩ°dONLNds™Ü∂ñ)ëeferi °dONLNdw™ó∂Ø)ences{°dONLNd~™√∂’),4-46°dONLNdÉ∑¶√ˆ(¿¶Setting the Server ¥Ä°dONLNdñ∑ˆ√á)P!Application’s User Interaction PrV`°dONLNd∑∑à√ò)íeferÄ°dONLNdª∑ô√±)ences`°dONLNd¬∑≈√◊),4-48°dONLNd«ƒ¶–!(Õ¶Requesting User Interaction˙†°dONLNd‰ƒ5–G)è4-49°dONLNdÈ—ú›≥(⁄úRefer⁄ °dONLNdÓ—≥›)ence to Responding to "†°dONLNd—›S)e Apple Events¸Ä°dONLNd—g›y)O4-56°dONLNdfi¶Í…(Á¶Data Str``°dONLNdfi Í·)$ucturÊ@°dONLNd$fi·Í#)es Used by the l@°dONLNd3fi$ÍÖ)CApple Event Manager °dONLNdHfiöͨ)v4-56°dONLNdMÎ∞˜˙(Ù∞Descriptor Recorfi °dONLNd]Î˙˜b)Jds and Related Data Str  °dONLNdtÎc˜z)iucturí°dONLNdyÎz˜É)esò†°dONLNd}Îó˜©)4-56°dONLNdǯ∞Í(∞ Apple Event >Ä°dONLNdé¯Í$): Array Data T¥Ä°dONLNdö¯#7)9ypesL`°dONLNd†¯L^))4-60°dONLNd•¶"(¶Routines for Responding to % °dONLNd¿"])| Apple Eventsˇ°dONLNdŒqÉ)O4-61°dONLNd”∞ª(∞Cr\°dONLNd’ª,) eating and Managing the ;†°dONLNdÌ,ñ)qApple Event Dispatch Tw°dONLNdï´)iables̆°dONLNd
  85. ø—)*4-61°dONLNd∞+Ë((∞ Dispatching S@°dONLNdË+#)8 Apple Events- °dONLNd)8+J)P4-66°dONLNd.,∞8A(5∞ Getting Data or Descriptor Recor˛@°dONLNdN,A8G)ëd°dONLNdO,H8m)    s Out of g`°dONLNdX,m8t)%A.†°dONLNdY,u8Ô)pple Event Parameters and °dONLNds9∫EÊ(B∫
  86. Attributes~¿°dONLNd9˚E)A4-68°dONLNdÑF∞RX(O∞&Counting the Items in Descriptor Lists °dONLNd¨FmR)Ω4-74°dONLNd±S∞_¯(\∞Getting Items Frà°dONLNd¡S¯_N)Hom Descriptor ListsM¿°dONLNd÷Sc_u)k4-74°dONLNd€`∞l˛(i∞Getting Data and % °dONLNdÏ`ˇl")OKeyworQÄ°dONLNdÚ`"lH)#d-Specifi2°dONLNd˚`IlV)'ed ó`°dONLNd˛`Vl†)Descriptor RecorıÄ°dONLNd`†l¶)Jd@°dONLNd`ßlÃ)    s Out of ^†°dONLNd`Ãl”)%A%‡°dONLNd`‘l‹)E °dONLNdm∫y”(v∫Recor¢`°dONLNd m”y›)ds˚ °dONLNd$mÒy)4-78°dONLNd)z∞Ü+(É∞Requesting User Interaction˙†°dONLNdFz?ÜQ)è4-81°dONLNdKá∞ì˜(ê∞Requesting MorYÄ°dONLNdYá˜ì)Ge T7@°dONLNd\áìW)ime to Respond to Ë°dONLNdnáVìë)R Apple Events¡‡°dONLNd|á¶ì∏)P4-84°dONLNdÅî∞†)(ù∞Suspending and Resuming Ì°dONLNdôî)†ç)yApple Event Handlingy†°dONLNdØ¥)y4-85°dONLNd¥°∞≠G(™∞"Getting the Sizes and Descriptor T( °dONLNd÷°G≠≥)óypes of Descriptor RecorÁÄ°dONLNdÓ°≥≠Ω)lds@@°dONLNdÚ°“≠‰)4-89°dONLNd˜Æ∞∫"(∑∞Deleting Descriptor Recor"@°dONLNdÆ#∫-)sds{°dONLNdÆA∫S)4-92ˇ‡@ˇ ˇˇˇˇ@
  87. ˇ·ˇ‚7^
  88. 4⁄∫˙, Palatino
  89. .I (‡
  90. vii4^H¿°dONLNd\Œhä(eŒ(Deallocating Memory for Descriptor Recorχ°dONLNd(\ähî)ºdsE†°dONLNd,\©hª)4-93°dONLNd1iŒu„(rŒCoerõ °dONLNd5i„u/)cing Descriptor TJ¿°dONLNdFi/uC)Lypes‚†°dONLNdLiWui)(4-94°dONLNdQvŒÇŸ(ŒCr\°dONLNdSvŸÇ_) eating and Managing the Coerµ °dONLNdov_ÇÀ)Ücion Handler Dispatch TV@°dONLNdÜvÀÇ·)lablesÇ°dONLNdçvıÇ)*4-96°dONLNdíÉŒèŸ(åŒCr\°dONLNdîÉŸè√) 2eating and Managing the Special Handler Dispatch TË °dONLNdΔɬèÿ)Èables^¿°dONLNdÕÉÌèˇ)+4-99°dONLNd“êŒú)(ôŒGetting Information ãÄ°dONLNdÊê)úW)[
  91. About the `°dONLNdêXúπ)/Apple Event Manager«@°dONLNdêÕú‰)u4-103°dONLNd ùƒ©(¶ƒApplication-Defi†°dONLNdù©H)J ned RoutinesI¿°dONLNd)ù]©t)O4-104°dONLNd/™∫∂6(≥∫Summary of Responding to u¿°dONLNdH™6∂q)| Apple EventsO†°dONLNdV™Ü∂ù)P4-108°dONLNd\∑ƒ√(¿ƒPascal Summary‡°dONLNdl∑"√9)^4-108°dONLNdrƒŒ–˙(ÕŒ    ConstantsÆ°dONLNd}ƒ–%)@4-108°dONLNdÉ—Œ›Î(⁄ŒData T:`°dONLNdâ—Λˇ)ypes“@°dONLNdè—› )(4-1ôÄ°dONLNdí— ›*)12°dONLNdïfiŒÍı(ÁŒRoutines≠`°dONLNdùfiıÍI)' for Responding to % °dONLNd∞fiJÍÖ)U Apple Eventsˇ°dONLNdæfiôͶ)O4-1Δ@°dONLNd¡fi¶Í∞)14°dONLNdƒÎŒ˜(ÙŒApplication-Defi†°dONLNd‘ΘR)J ned RoutinesI¿°dONLNd‚Îg˜t)O4-1°dONLNdÂÎt˜~)18°dONLNd˯ƒ˘(ƒ    C SummaryᆰdONLNdÛ¯)I4-1N‡°dONLNdˆ¯$)18°dONLNd˘Œ˙(Œ    ConstantsÆ°dONLNd)@4-1u@°dONLNd%)18°dONLNd
  92. Œ’(ŒD=@°dONLNd ÷Î)ata T:`°dONLNdΡ)ypes“@°dONLNd*)(4-123°dONLNdŒ+ı((ŒRoutines≠`°dONLNd$ı+I)' for Responding to % °dONLNd7J+Ö)U Apple Eventsˇ°dONLNdEô+∞)O4-124°dONLNdK,Œ8(5ŒApplication-Defi†°dONLNd[,8R)J ned RoutinesI¿°dONLNdi,g8~)O4-128°dONLNdo9ƒEL(BƒAssembly-Language Summary~†°dONLNdä9aEx)ù4-128°dONLNdêFŒR‘(OŒT∫¿°dONLNdëF”R˚)rap Macr⁄°dONLNdôF˚R)(osåÄ°dONLNdùFR0)4-128°dONLNd£Sƒ_˛(\ƒ Result Codesï`°dONLNd±S_))N4-130
  93. èHñ4êHñ ëHë
  94. ˇ·ˇ‚7^,     Helvetica °dONLNd∑ÉHéx(ãH    Chapter 5°dONLNd¡Ä∫èE)rCreating and Sending ˇ‡°dONLNd÷ÄDèñ)ä Apple Events
  95. y†°dONLNd‰Ç´é∏)g5-1°dONLNdÈñ∫¢≈(ü∫Cr\°dONLNdÎñ≈¢)
  96. eating an #‡°dONLNdıñ¢')+ Apple Event¿¿°dONLNdñ;¢H)K5-3°dONLNd£ƒØ5(¨ƒAdding Parameters to an »°dONLNd£5Øl)q Apple Eventd‡°dONLNd+£ÅØé)L5-5°dONLNd/∞ƒºo(πƒ&Specifying Optional Parameters for an ÃÄ°dONLNdU∞oº¶)´ Apple Eventi`°dONLNdb∞ªº»)L5-7°dONLNdfΩƒ…(ΔƒSpecifying a TE¿°dONLNdtΩ…
  97. )>ar
  98. ¿°dONLNdvΩ …)    get «Ä°dONLNdzΩ…1)Addrã@°dONLNd~Ω2…?)essŒ‡°dONLNdÉΩS…e)!5-10°dONLNdà Œ÷Ÿ(”ŒCr\°dONLNdä Ÿ÷)
  99. eating an #‡°dONLNdî ÷)+AddrÁ†°dONLNdò ÷u)ess Descriptor Recor    `°dONLNd¨ v÷|)[d% °dONLNdØ ê÷ù)5-1Ï`°dONLNd≤ ú÷°) 1°dONLNd¥◊Œ„Â(‡ŒAddrC¿°dONLNd∏◊Ê„)
  100. essing an C@°dONLNd¬◊„h)+Apple Event for Dir¿°dONLNd’◊i„≠)Xect Dispatching¥†°dONLNdÊ◊¡„”)X5-13°dONLNdΉ∫Ó(Ì∫ Sending an 2`°dONLNdˆ‰Ó%)4 Apple Eventœ@°dONLNd‰9K)K5-13°dONLNdÒƒ˝Û(˙ƒ    Dealing W+Ä°dONLNdÒÛ˝)/ith T;¿°dONLNdÒ˝*)imeoutsΩ¿°dONLNdÒ>˝P)75-20°dONLNd$˛ƒ
  101. Œ(ƒW¬†°dONLNd%˛Õ
  102. 0)    riting an Idle Function°dONLNd>˛D
  103. V)w5-21°dONLNdC ƒŒ(ƒW¬†°dONLNdD ÕÁ)    riting ®‡°dONLNdK Ë)    a Reply F)@°dONLNdT G)*ilter Functio¿°dONLNda GL)5n¬ °dONLNdd as)5-24°dONLNdi∫$—(!∫Refer⁄ °dONLNdn—$˝)
  104. ence to CrB‡°dONLNdx˛$V)-eating and Sending ‡°dONLNdãU$ê)W Apple Eventsø¿°dONLNdô•$∑)P5-24°dONLNdû%ƒ1(.ƒRoutines for CrE`°dONLNd≠%1`)Deating and Sending Ë`°dONLNd¿%_1ö)W Apple Events¬@°dONLNdŒ%Ø1¡)P5-25°dONLNd”2Œ>Ÿ(;ŒCr\°dONLNd’2Ÿ>ˆ) eating “Ä°dONLNd‹2ˆ>1) Apple Events¨`°dONLNdÍ2F>X)P5-25°dONLNdÔ?ŒKŸ(HŒCr\°dONLNdÒ?ŸKã) 'eating and Duplicating Descriptor Recor‡°dONLNd?åKñ)≥dsg†°dONLNd?™Kº)5-26°dONLNd!LŒXŸ(UŒCr\°dONLNd#LŸXR) eating Descriptor Lists and ª‡°dONLNd?LRX{)yAE RecorA@°dONLNdGL|XÜ)*dsö°dONLNdKLöX¨)5-28°dONLNdPYŒe^(bŒ Adding Items to Descriptor Listsw@°dONLNdrYseÖ)•5-29°dONLNdwfŒrh(oŒ Adding Data and Descriptor RecoríÄ°dONLNdófhrÄ)öds to D¿°dONLNdùfÄr©)AE Recor  °dONLNd•f©r≥))ds"‡°dONLNd©f»r⁄)5-32°dONLNdÆsŒ:(|ŒAdding Parameters and ´‡°dONLNdƒs:t)lAttributes to  °dONLNd“su∞); Apple Eventsfi°dONLNd‡sƒ÷)O5-33°dONLNdÂÄŒåÙ(âŒSending ·°dONLNdÌÄÙå/)& Apple Events∫‡°dONLNd˚ÄDåV)P5-37°dONLNdçƒô(ñƒApplication-Defi†°dONLNdçô)JneĆ°dONLNdçôH)
  105. d RoutinesI¿°dONLNdç]ôo)D5-41ˇ0@ˇ ˇˇˇˇ@
  106. ˇ·ˇ‚7^
  107. 4⁄*ˇ¯, Palatino
  108. .(·*viii4^*¿¯°dONLNd\úh‡(eúSummary of Crñ°dONLNd\‡h8)Deating and Sending 9°dONLNd \8hs)X Apple Events‡°dONLNd.\àhö)P5-44°dONLNd3i¶uÔ(r¶Pascal Summary‡°dONLNdCiu)^5-44°dONLNdHv∞Ç‹(∞    ConstantsÆ°dONLNdSvÇ)@5-44°dONLNdXÉ∞èÕ(å∞Data T:`°dONLNd^ÉÕè·)ypes“@°dONLNddÉıè)(5-48°dONLNdiê∞ú◊(ô∞Routines≠`°dONLNdqê◊úÛ)' for CrE`°dONLNdxêÙúL)eating and Sending Ë`°dONLNdãêKúÜ)W Apple Events¬@°dONLNdôêõú≠)P5-50°dONLNdûù∞©˙(¶∞Application-Defi†°dONLNdÆù˙©4)J ned RoutinesI¿°dONLNdºùI©[)O5-51°dONLNd¡™¶∂€(≥¶    C SummaryᆰdONLNdÙÔ∂)I5-51°dONLNd—∑∞√◊(¿∞Constantq°dONLNdŸ∑ÿ√‹)(sÆ°dONLNd‹∑√)5-51°dONLNd·ƒ∞–Õ(Õ∞Data T:`°dONLNdÁƒÕ–·)ypes“@°dONLNd̃ı–)(5-56°dONLNdÚ—∞›◊(⁄∞Routines≠`°dONLNd˙—◊›Û)' for CrE`°dONLNd—Ù›L)eating and Sending Ë`°dONLNd—K›Ü)W Apple Events¬@°dONLNd"—õ›≠)P5-57°dONLNd'fi∞Í˙(Á∞Application-Defi†°dONLNd7fi˙Í4)J ned RoutinesI¿°dONLNdEfiIÍ[)O5-59°dONLNdJζ˜.(Ù¶Assembly-Language Summary~†°dONLNdeÎC˜U)ù5-59°dONLNdj¯∞∂(∞T∫¿°dONLNdk¯µ›)rap Macr⁄°dONLNds¯›Ê)(osåÄ°dONLNdw¯˚)5-59°dONLNd|¶‡(¶ Result Codesï`°dONLNdäÙ)N5-60
  109. A*H¯4B*H¯ C*C¯
  110. ˇ·ˇ‚7^,     Helvetica °dONLNdè5*@Z(=*    Chapter 6°dONLNdô2úAá)r$Resolving and Creating Object Specifi6†°dONLNdæ2àAÃ)Ï
  111. er Records
  112. ®Ä°dONLNd 4‡@Ì)X6-1°dONLNdœHúT(QúResolving Object Specifi)°dONLNdÁHT+)ker RecorᆰdONLNdÔH+T5)$ds‡`°dONLNdÛHITV)6-4°dONLNd˜UúaÊ(^úDescriptor Recorfi °dONLNdUÊaS)Jds Used in Object Specifiņ°dONLNd UTax)ner Recor‡@°dONLNd(UxaÇ)$ds9°dONLNd,Uóa§)6-8°dONLNd0b¶n‹(k¶ Object Class؇°dONLNd>bn˝)J6-9°dONLNdBo¶{“(x¶    Containerñ@°dONLNdMoÊ{Û)@6-9°dONLNdQ|¶à—(Ö¶Key Formf °dONLNd[|ÊàÛ)@6-1-`°dONLNd^|Ûà¯)1°dONLNd`â¶ïœ(í¶Key DataöÄ°dONLNdjâ„ïı)=6-12°dONLNdoñ∞¢¸(ü∞Key Data for a Pr• °dONLNdÄñ¸¢&)L    operty IDF@°dONLNdãñ;¢M)?6-13°dONLNdê£∞Ø8(¨∞Key Data for an Object’s NameO °dONLNdØ£MØ_)ù6-14°dONLNd¥∞¶º(π¶Key Data for a Unique Iü‡°dONLNdÀ∞º)iD] °dONLNdŒ∞+º=)6-14°dONLNd”Ω∞…Í(Δ∞Key Data for ¯ °dONLNd‡ΩÍ…8):Absolute Positionã °dONLNdÛΩM…_)c6-14°dONLNd¯ ∞÷5(”∞Key Data for Relative PositionÁ@°dONLNd I÷[)ô6-15°dONLNd◊∞„¯(‡∞Key Data for a T @°dONLNd-◊¯„)HestU@°dONLNd2◊„*) 6-15°dONLNd7‰∞(Ì∞Key Data for a RangeƆ°dONLNdM‰"4)r6-20°dONLNdRÒú˝$(˙ú!Installing Entries in the Object I@°dONLNdsÒ$˝})àAccessor Dispatch T;@°dONLNdÜÒ}˝ì)Yables±‡°dONLNdçÒß˝π)*6-21°dONLNdí˛¶
  113. (¶Installing Object !°dONLNd§˛Ò
  114. v)KAccessor Functions That Find 5¿°dONLNd¡˛v
  115. –)ÖApple Event ObjectsΔ °dONLNd÷˛‰
  116. ˆ)n6-23°dONLNd€ ¶(¶Installing Object !°dONLNdÌ ÒÄ)KAccessor Functions That Find Prb¿°dONLNd  Ä£)èoperties»°dONLNd ∑…)76-27°dONLNdú$¶(!úW¬†°dONLNd•$fi)    riting Object °dONLNd*fl$4):Accessor Functions[°dONLNd>H$Z)i6-28°dONLNdC%¶1∞(.¶W¬†°dONLNdD%Ø1Ë)    riting Object °dONLNdR%È1n):Accessor Functions That Find ¿°dONLNdo%n1ã)ÖApple @°dONLNdu%å1®)Event 2†°dONLNd{%®1»)Objects¶ °dONLNdÑ%‹1Ó)46-29°dONLNdâ2¶>∞(;¶W¬†°dONLNdä2Ø>Ë)    riting Object °dONLNdò2È>x):Accessor Functions That Find PrB¿°dONLNd∑2x>õ)èoperties®°dONLNd¡2Ø>¡)76-37°dONLNdΔ?¶K∏(H¶Defi†°dONLNd ?πK’)ning T„†°dONLNd–?‘KÌ)okens¿@°dONLNd◊?K).6-39°dONLNd‹L¶X˘(U¶Handling Whose Ts°dONLNdÏL˘X    )Sests˘°dONLNdÚLX/)$6-41°dONLNd˜Yúe¶(búW¬†°dONLNd¯Y•e3)     riting Object Callback Functions‘†°dONLNdYGeY)¢6-45°dONLNdf¶r∞(o¶W¬†°dONLNd fØrJ)    "riting an Object-Counting Function>`°dONLNdDf_rq)∞6-48°dONLNdIs¶∞(|¶W¬†°dONLNdJsØW)    $riting an Object-Comparison Function†°dONLNdpsl~)Ω6-50°dONLNduĶå∞(â¶W¬†°dONLNdvÄØåG)    !riting Marking Callback Functionsfi°dONLNdôÄ[åm)¨6-53°dONLNdûçúôß(ñúCr\°dONLNd†çßô) eating Object SpecifiX@°dONLNdµçô%)Zer Recor∂‡°dONLNdΩç%ô/)$ds†°dONLNd¡çDôV)6-55°dONLNdΔö¶¶±(£¶Cr\°dONLNd»ö±¶3) eating a Simple Object SpecifiÄ°dONLNdÊö4¶X)Éer Recorg °dONLNdÓöX¶^)$dLJ°dONLNdÒör¶Ñ)6-57°dONLNdˆß∞≥<(∞∞Specifying the Container Hierar>†°dONLNdß=≥L)çchy`°dONLNdßa≥s)$6-61ˇ™@ˇ ˇˇˇˇ@
  117. ˇ·ˇ‚7^
  118. 4⁄∫˙, Palatino
  119. ., (‡ix4^H¿°dONLNd\Œh(eŒSpecifying a Prfi†°dONLNd\h-)Boperty‰°dONLNd\AhS)16-63°dONLNdiŒuQ(rŒSpecifying a Relative Position†¿°dONLNd<ieuw)ó6-64°dONLNdAvƒÇœ(ƒCr\°dONLNdCvœÇ[) eating a Complex Object SpecifiïÄ°dONLNdbv[Ç)åer RecorÙ °dONLNdjvÇÖ)$d‡°dONLNdmvöǨ)6-64°dONLNdrÉŒè (åŒSpecifying a TE¿°dONLNdÄÉ è)>esté¿°dONLNdÖÉ,è>) 6-64°dONLNdäêŒú"(ôŒSpecifying a RangeË °dONLNdûê6úH)h6-72°dONLNd£ù∫©—(¶∫Refer⁄ °dONLNd®ù—©?)ence to Resolving and Cr1†°dONLNd¿ù@©ô)oeating Object Specifi-‡°dONLNd’ùö©æ)Zer RecoråÄ°dONLNd›ùæ©»)$dsÂ@°dONLNd·ù‹©Ó)6-75°dONLNdÊ™ƒ∂Á(≥ƒData Str``°dONLNdÓ™Ë∂ˇ)$ucturÊ@°dONLNdÛ™ˇ∂k)es Used in Object Specifi7†°dONLNd ™l∂ê)mer Recorñ@°dONLNd™ê∂ö)$dsÔ°dONLNd™Æ∂¿)6-75°dONLNd∑ƒ√I(¿ƒRoutines for Resolving and Cr4 °dONLNd:∑J√£)Üeating Object Specifi0`°dONLNdO∑§√»)Zer Recorè°dONLNdW∑»√“)$dsÁ¿°dONLNd[∑Ê√¯)6-77°dONLNd`ƒŒ–w(ÕŒ'Initializing the Object Support LibraryÊ@°dONLNdâƒã–ù)Ω6-77°dONLNdé—Œ›(⁄ŒSetting Object / °dONLNdù—›Ï)@0Accessor Functions and Object Callback Functions¢°dONLNdœ—›)Ú6-77°dONLNd‘fiŒÍ{(ÁŒ&Getting, Calling, and Removing Object fiÄ°dONLNd˙fi{Í–)≠Accessor Functions8Ä°dONLNdfiÂ͘)j6-81°dONLNdÎŒ˜8(ÙŒResolving Object Specifi)°dONLNd+Î9˜])ker RecorᆰdONLNd3Î]˜g)$ds‡`°dONLNd7Î{˜ç)6-85°dONLNd<¯ŒF(ŒDeallocating Memory for TƒÄ°dONLNdU¯E^)wokens° °dONLNd\¯sÖ).6-87°dONLNdaŒŸ(ŒCr\°dONLNdcŸ2) eating Object SpecifiX@°dONLNdx3W)Zer Recor∂‡°dONLNdÄWa)$ds†°dONLNdÑvà)6-88°dONLNdâƒ(ƒApplication-Defi†°dONLNdô)JneĆ°dONLNdõ9) d Routiq¿°dONLNd¢:H)!nesI¿°dONLNdß]o)#6-94°dONLNd¨Œ+Ï((ŒObject ÿ °dONLNd≥Ï+A)Accessor Functions2 °dONLNd«V+h)j6-94°dONLNdÃ,Œ8A(5ŒObject Callback Functions´¿°dONLNdÁ,U8g)á6-96°dONLNdÏ9∫E@(B∫Summary of Resolving and CrÑ¿°dONLNd9@Eô)Üeating Object SpecifiÅ°dONLNd9öEæ)Zer Recorfl†°dONLNd$9æE»)$ds8`°dONLNd(9›EÙ)6-104°dONLNd.FƒR(OƒPascal Summary‡°dONLNd>F"R9)^6-104°dONLNdDSŒ_˙(\Œ    ConstantsÆ°dONLNdOS_%)@6-104°dONLNdU`ŒlÎ(iŒData T:`°dONLNd[`Îlˇ)ypes“@°dONLNda`l*)(6-106°dONLNdgmŒyı(vŒRoutines≠`°dONLNdomıyS)' for Resolving and Cr4 °dONLNdÑmTy≠)_eating Object Specifi0`°dONLNdômÆy“)Zer Recorè°dONLNd°m“y‹)$dsÁ¿°dONLNd•my)6-106°dONLNd´zŒÜ’(ÉŒAG@°dONLNd¨z÷Ü)pplication-Defi†°dONLNdªzÜN)B ned Routine ¿°dONLNdΔzOÜS)7sI¿°dONLNd…zgÜ~)6-108°dONLNdœáƒìÛ(êƒC Summar¯Ä°dONLNd◊áÛì¯)/yᆰdONLNd⁄áì$)6-109°dONLNd‡îŒ†ı(ùŒConstantq°dONLNdË˙)(sÆ°dONLNdÎî†%)6-109°dONLNdÒ°Œ≠Î(™ŒData T:`°dONLNd˜°Î≠ˇ)ypes“@°dONLNd˝°≠ )(6-1ôÄ°dONLNd° ≠%)1 ‡°dONLNd°%≠*)1°dONLNdÆŒ∫ı(∑ŒRoutines≠`°dONLNd Æı∫S)' for Resolving and Cr4 °dONLNd ÆT∫≠)_eating Object Specifi0`°dONLNd5ÆÆ∫“)Zer Recorè°dONLNd=Æ“∫‹)$dsÁ¿°dONLNdAÆ∫˝)6-1Ø°dONLNdDÆ˝∫)12°dONLNdGªŒ«’(ƒŒAG@°dONLNdHª÷«)pplication-Defi†°dONLNdWª«N)B ned Routine ¿°dONLNdbªO«S)7sI¿°dONLNdeªg«t)6-1°dONLNdhªt«~)14°dONLNdk»ƒ‘L(—ƒAssembly-Language Summary~†°dONLNdÜ»a‘n)ù6-1E‡°dONLNdâ»n‘x)15°dONLNdå’Œ·‘(fiŒT∫¿°dONLNdç’”·˚)rap Macr⁄°dONLNdï’˚·)(osåÄ°dONLNdô’·&)6-1S¿°dONLNdú’&·0)15°dONLNdü‚ƒÓ˛(΃ Result Codesï`°dONLNd≠‚Ó)N6-1\†°dONLNd∞‚Ó))15
  120. H%4H%  H 
  121. ˇ·ˇ‚7^,     Helvetica °dONLNd≥Hx(H    Chapter 7°dONLNdΩ∫M)rIntroduction to Scripting
  122. ᇰdONLNdÿan)ß7-1°dONLNd›%∫1o(.∫&About Scripts and Scripting Componentsc¿°dONLNd%Ñ1ë) 7-4°dONLNd    2ƒ>F(;ƒScript Editors and Script Filesz°dONLNd*2[>h)ó7-6°dONLNd.?ƒKk(Hƒ$Scripting Components and Scriptable Ù °dONLNdR?kKü)ß Applicationr@°dONLNd]?†K§)5sØ@°dONLNd`?∏K≈)7-8°dONLNddLƒX=(UƒScripting Components and k°dONLNd}L=X“)y!Applications That Execute ScriptsxÄ°dONLNd†LÊXÛ)©7-1?¿°dONLNd£LÛX¯)1°dONLNd•Y∫efi(b∫Making †°dONLNd¨YfleÂ)%Y‡ °dONLNd≠Y‰eı)our q°dONLNd±YˆeY)Application Scriptablex@°dONLNd…Yme)w7-14°dONLNdŒfƒr‚(oƒAbout ØÄ°dONLNd‘f‚r")Apple Event T °dONLNd·f"rv)@erminology Resour¥°dONLNdÚfvrÉ)Tces*‡°dONLNd˜fòr™)"7-15°dONLNd¸sŒÊ(|ŒHow øÄ°dONLNdsÊ;)AppleScript Uses TM °dONLNds;•)Uerminology Information:@°dONLNd*s∫Ã)7-17°dONLNd/ÄŒå1(âŒDynamic Loading of T?`°dONLNdCÄ1åõ)cerminology Information,Ä°dONLNd[Ä∞å¬)7-20°dONLNd`ç∫ôfi(ñ∫Making †°dONLNdgçflôÂ)%Y‡ °dONLNdhç‰ôı)our q°dONLNdlçˆôF)Application RecorëÄ°dONLNd}çFôY)Pdabl@°dONLNdÅçZô^)eʇ°dONLNdÑçrôÑ)7-20°dONLNdâö∫¶Y(£∫"Manipulating and Executing Scripts∂ °dONLNd≠öm¶)≥7-22°dONLNd≤߃≥À(∞ƒCó°dONLNd≥ßÀ≥¯)
  123. ompiling, ¸@°dONLNdΩ߯≥)-Saving, + °dONLNd≈ß≥´)$Modifying, and Executing Script °dONLNd‰ß¨≥∞)êsP °dONLNdÁ߃≥÷)7-24°dONLNdÏ¥ƒ¿˛(ΩƒUsing a ScripZ@°dONLNd˘¥ˇ¿-); t Context t≥‡°dONLNd¥-¿e). o Handle an  ‡°dONLNd¥f¿ù)9 Apple Event©¿°dONLNd¥±¿√)K7-25ˇ¢@ˇ ˇˇˇˇ@
  124. ˇ·ˇ‚7^
  125. 4⁄*ˇ¯, Palatino
  126. .(·*x4^*¿¯
  127. k*r¯4l*r¯ m*m¯
  128. ˇ·ˇ‚7^,     Helvetica °dONLNd_*jZ(g*    Chapter 8°dONLNd
  129. \úkÎ)r Apple Event ù†°dONLNd\ÎkÛ)OTù†°dONLNd\Úk})erminology Resources
  130. ÿ¿°dONLNd-^ëjû)ü8-1°dONLNd2rú~Æ({úDefi†°dONLNd6rØ~À)ning T„†°dONLNd<r ~@)erminology for Use by the 懰dONLNdVr@~¨)vAppleScript Component¿°dONLNdmr¡~Œ)Å8-3°dONLNdqúã®(àúStr‡¿°dONLNdt®ãø) ucturf†°dONLNdy¿ã“)e of õ@°dONLNd~“ã)Apple Event Ṫ°dONLNdããe)?erminology Resourü¿°dONLNdúfãs)Uces†°dONLNd°àãï)"8-8°dONLNd•åúòß(ïúCr\°dONLNdßåßò“)
  131. eating an #‡°dONLNd±å“ò)+Apple Event TvÄ°dONLNdæåòì)?erminology Extension Resour6`°dONLNdŸåîòù)Écep@°dONLNd›å±ò√)8-13°dONLNd‚ô¶•˝(¢¶Supporting Standarr¿°dONLNdÙô˝•,)W
  132. d Suites Wz °dONLNd˛ô,•y)/ithout ExtensionsÄ@°dONLNdôç•ü)a8-14°dONLNd¶¶≤(ضExtending the Standar°dONLNd+¶    ≤,)cd Suites,°dONLNd5¶@≤R)78-16°dONLNd:≥¶ø$(º¶Supporting Subsets of Suites‘†°dONLNdX≥8øJ)í8-23°dONLNd]¿¶Ã(…¶Supporting New Suites¶@°dONLNdt¿!Ã3){8-23°dONLNdyÕúŸÎ(÷úHandling the Get õ‡°dONLNdäÕΟ!)O
  133. AETE Event⁄¿°dONLNdñÕ5ŸG)J8-23°dONLNdõ⁄úÊ≥(„úRefer⁄ °dONLNd†⁄≥ÊÃ)ence tq`°dONLNd¶⁄ÕÊ‘)o Ä°dONLNd®⁄’Ê‹)Aœ¿°dONLNd©⁄‹Ê)    pple Evenc°dONLNd≤⁄    Ê)-t T[ °dONLNdµ⁄Êh) erminology Resour°dONLNdΔ⁄iÊv)Ucesɇ°dONLNdÀ⁄äÊú)!8-26°dONLNd–Á¶Û˝(¶Header Data for an °†°dONLNd„Á˝Û=)WApple Event TÙ@°dONLNdÁ<Ûê)?erminology Resour¶ °dONLNdÁëÛö)Uce‡°dONLNdÁÆÛ¿)8-27°dONLNd
  134. Ù¶∑(˝¶SuitÒ†°dONLNdÙ∑Ú)e Data for an ȇ°dONLNdÙÚ&);
  135. Apple EvenD`°dONLNd&Ù'2)5t T<Ä°dONLNd)Ù2Ü) erminology ResourÓ`°dONLNd:ÙÜè)Tce(@°dONLNd>Ù§∂)8-27°dONLNdC∞∂(
  136. ∞Eõ¿°dONLNdD∂Δ)ven›°dONLNdGΔ‡)t Dataü°dONLNdOı)/8-29°dONLNdT∞·(∞ Object Clasr‡°dONLNd_‚˝)2s Data/Ä°dONLNdg$)08-36°dONLNdl∞')($∞Comparison Operator DataÖ‡°dONLNdÜ='O)ç8-42°dONLNdã(∞4‰(1∞
  137. Enumeratio§¿°dONLNdï(‰4L)4n and Enumerator Data‡°dONLNd¨(a4s)}8-43°dONLNd±5¶A(>¶The Scripting Size Resourº °dONLNd 5A )qceˆ°dONLNdŒ54AF)8-45
  138. q*x¯4r*x¯ s*s¯
  139. ˇ·ˇ‚7^ °dONLNd”e*pZ(m*    Chapter 9°dONLNd›búqfl)r
  140. Recording h °dONLNdÁbflq1)C Apple Events
  141. ·‡°dONLNdıdEpR)f9-1°dONLNd˙xúÑ”(Åú About Recor0@°dONLNdx‘ÑÓ)8dable ß@°dONLNd xÓÑ") Application%`°dONLNdx#Ñ')5sb`°dONLNdx;ÑH)9-3°dONLNdÖúë»(éú
  142. Factoring ≈ °dONLNd'Ö»ëŒ),YÖ†°dONLNd(ÖŒëfl)our Ä°dONLNd,Ö‡ë?)Application for Recors°dONLNdAÖ?ëS)_ding◊†°dONLNdGÖgët)(9-6°dONLNdKí¶û´(õ¶F °dONLNdLí¨ûñ)-actoring the Quit Command and the New Command[ °dONLNd{í™û∑)˛9-6°dONLNdü¶´Ã(®¶Sending ·°dONLNdáüô)&Apple Events WÆ@°dONLNdïü´y)Hithout Executing Them    ¿°dONLNd¨üé´†)z9-12°dONLNd±¨ú∏€(µúWhat to Recorn°dONLNd樀∏·)?dâ¿°dONLNd¡¨ı∏)9-14°dONLNdΔπ¶≈¨(¬¶R.°dONLNd«π≠≈ø)ecor¢`°dONLNdÀπø≈Ì)
  143. ding User i °dONLNd’πÌ≈).ActionsO@°dONLNdfiπ#≈5)69-15°dONLNd„Δ¶“ø(œ¶Recor¢`°dONLNdËΔø“!)ding the Selection of TÄ¿°dONLNdˇΔ!“Q)b ext Objects®‡°dONLNd Δe“w)D9-18°dONLNd”¶flø(‹¶Recor¢`°dONLNd”øfl)ding Insertion PointsZ°dONLNd-”0flB)q9-23°dONLNd2‡¶Ïø(ȶRecor¢`°dONLNd7‡øÏ‹)ding T¡¿°dONLNd=‡€ÏÙ)ypingõ‡°dONLNdD‡    Ï).9-27°dONLNdI̶˘ø(ˆ¶Recor¢`°dONLNdNÌø˘b)%ding the Selection of Nontext ObjectsK@°dONLNduÌw˘â)∏9-30°dONLNdz˙¶˙(¶Identifying Objectsfl`°dONLNdè˙ )h9-32°dONLNdî¶A(¶!Moving the Selection During Recorˆ¿°dONLNdµAO)õdinÃ@°dONLNd∏PU)g[`°dONLNdªj|)9-34°dONLNd¿¶ ø(¶Recor¢`°dONLNd≈ø )ding Interactions W«¿°dONLNdÿ ^)With Dialog Boxes°dONLNdÍs Ö)]9-35°dONLNdÔ!ú-¥(*úHow øÄ°dONLNdÛ!¥-)Apple Event Recor˛¿°dONLNd!-')Sding W¯`°dONLNd
  144. !'-:) orks,†°dONLNd!O-a)(9-35
  145. ]*d¯4^*d¯ _*_¯
  146. ˇ·ˇ‚7^ °dONLNdQ*\`(Y*
  147. Chapter 10°dONLNd Nú]%)rScripting Components
  148. 0Ä°dONLNd6P:\L)û10-1°dONLNd<dúpC(mú#Connecting to a Scripting ComponentÀÄ°dONLNdadWpi)ª10-3°dONLNdfqú}A(zú"Using Scripting Component Routines¿°dONLNdäqV}h)∫10-7°dONLNdè~¶ä.(á¶Compiling and Executing Sour˚`°dONLNd´~.äN)àce Data¥‡°dONLNd¥~cäu)510-7°dONLNdπã¶ó˜(î¶Saving Script Data~°dONLNdÕã ó#)f10-12°dONLNd”ò∞§;(°∞Storage Formats for Script Dataò¿°dONLNdÙòO§f)ü10-12°dONLNd˙•∞±œ(Æ∞Resourv@°dONLNd•œ±)ce and File TÅÄ°dONLNd•±])7ypes for Script Data$Ä°dONLNd#•r±â)l10-13ˇ÷@ˇ ˇˇˇˇ@
  149. ˇ·ˇ‚7^
  150. 4⁄∫˙, Palatino
  151. ., (‡xi4^H¿°dONLNd\ƒh^(eƒ!Loading and Executing Script DataB¿°dONLNd#\shä)Ø10-14°dONLNd)iƒuì(rƒ+Modifying and Recompiling a Compiled Script=@°dONLNdVi®uø)‰10-17°dONLNd\vƒÇe(ƒ$Using a Script Context to Handle an  ‡°dONLNdÄvfÇù)¢ Apple Event©¿°dONLNdçv±Ç»)K10-19°dONLNdìɃè…(åƒSø¿°dONLNdîÉ…èr)#upplying a Resume Dispatch Functionó °dONLNdπÉáèû)æ10-21°dONLNdøêƒú(ôƒSupplying an ˛Ä°dONLNdÃêú5)= Alternative :`°dONLNdÿê6ú|)5Active Function÷°dONLNdÈêêúß)Z10-23°dONLNdÔùƒ©Ù(¶ƒ
  152. Supplying ≠ °dONLNd˘ùÙ©3)0Alternative Cr#`°dONLNdù4©ü)@eate and Send Functions„ °dONLNd ù≥© )10-24°dONLNd&™Œ∂(≥ŒAlternative Crˆ@°dONLNd4™∂L)?eate Functions“`°dONLNdD™a∂x)T10-24°dONLNdJ∑Œ√F(¿ŒAlternative Send Functions@°dONLNdf∑[√r)ç10-25°dONLNdlƒƒ–›(ÕƒRecor¢`°dONLNdqƒ›–) ding ScriptsìÄ°dONLNdƒ&–=)I10-26°dONLNdÖ—∫›ƒ(⁄∫W¬†°dONLNdÜ—√›D)    riting a Scripting ComponentH °dONLNd§—Y›p)ñ10-27°dONLNd™fi∫Í7(Á∫Scripting Components Refer∂`°dONLNdƒfi7ÍJ)}enceã@°dONLNd fi_Ív)(10-28°dONLNd–΃˜Á(ÙƒData Str``°dONLNdÿ΢ˇ)$ucturÊ@°dONLNd›Îˇ˜)esχ°dONLNd·Î˜3)10-29°dONLNdÁ¯ƒ·(ƒRequirE@°dONLNd̯‚x)ed Scripting Component Routinesw@°dONLNd¯å£)™10-30°dONLNdŒZ(ŒSaving and Loading Script Dataa°dONLNd4oÜ)°10-30°dONLNd:Œh(Œ"Executing and Disposing of Scripts3¿°dONLNd^}î)Ø10-33°dONLNddŒ+w((Œ&Setting and Getting Script Information}Ä°dONLNdåå+£)æ10-41°dONLNdí,Œ8(5ŒManipulating the ™‡°dONLNd£,8c)OActive FunctionFÄ°dONLNd¥,x8è)[10-45°dONLNd∫9ƒEv(Bƒ%Optional Scripting Component Routines†°dONLNd·9ãE¢)«10-46°dONLNdÁFŒR(OŒCompiling Scriptsà¿°dONLNd˙F2RI)d10-47°dONLNdSŒ_(\Œ Getting Sourπ¿°dONLNd S_&)8ce Datas@°dONLNdS;_R)510-51°dONLNd`Œl„(iŒCoerõ °dONLNd`„l)cing Script Vp‡°dONLNd,`l1)8aluesg°dONLNd3`Fl])+10-52°dONLNd9mŒy((vŒManipulating the CrÂ@°dONLNdLm(yì)Zeate and Send Functions•°dONLNdem®yø)Ä10-55°dONLNdkzŒÜÁ(ÉŒRecor¢`°dONLNdpzÁÜ) ding ScriptsìÄ°dONLNd~z0ÜG)I10-59°dONLNdÑáŒìP(êŒExecuting Scripts in One Step†°dONLNd£áeì|)ó10-61°dONLNd©îŒ†◊(ùŒMı@°dONLNd™î◊†/)    anipulating DialectsÛ °dONLNd¿îD†[)m10-67°dONLNdΔ°Œ≠_(™Œ Using Script Contexts to Handle xÄ°dONLNdÊ°_≠ö)ë Apple EventsR`°dONLNdÙ°Ø≠Δ)P10-71°dONLNd˙ƃ∫Z(∑ƒAppleScript Component RoutinesÅ@°dONLNdÆn∫Ö)™10-80°dONLNd ªŒ«(ƒŒInitializing ˛@°dONLNd-ª«5)2 AppleScriptK@°dONLNd:ªJ«a)J10-80°dONLNd@»Œ‘f(—Œ#Getting and Setting Styles for Sour: °dONLNdc»g‘á)ôce DataÛ†°dONLNdl»õ‘≤)410-82°dONLNdr’ƒ·m(fiƒ#Generic Scripting Component Routine‡†°dONLNdï’m·q)©s†°dONLNdò’Ü·ù)10-84°dONLNdû‚ŒÓπ(ÎŒ3Getting and Setting the Default Scripting Component¿°dONLNd”‚ŒÓÂ(ÎŒ10-86°dONLNdŸÔŒ˚@(¯ŒUsing Component-Specifiò¿°dONLNdÔ@˚n)r
  153. c Routines∂`°dONLNd¸ÔÇ˚ô)B10-87°dONLNd¸ƒx(ƒ%Routines Used by Scripting Componentsä°dONLNd)¸å£)»10-92°dONLNd/    Œ(ŒManipulating Tʆ°dONLNd=    “)D,railers for Generic Storage Descriptor RecorQ`°dONLNdi    ”›)¡ds™ °dONLNdm    Ò)10-92°dONLNdsƒ"(ƒApplication-Defi†°dONLNdÉ")JneĆ°dONLNdÖ"H)
  154. d RoutinesI¿°dONLNdë]"t)D10-94°dONLNdó#∫/ø(,∫Sø¿°dONLNdò#ø/V)ummary of Scripting Components@°dONLNd∏#k/Ç)¨10-99°dONLNdæ0ƒ<(9ƒPascal Summary‡°dONLNdŒ0"<9)^10-99°dONLNd‘=ŒI˙(FŒ    ConstantsÆ°dONLNdfl=I%)@10-99°dONLNdÂJŒVÎ(SŒData T:`°dONLNdÎJÎV˚)ypeï@°dONLNdÓJ˚Vˇ)s“@°dONLNdÒJV/)10-105°dONLNd¯WŒcÎ(`ŒRequirE@°dONLNd˛WÏcÇ)ed Scripting Component Routinesw@°dONLNdWñc≤)™10-106°dONLNd&dŒpÄ(mŒ%Optional Scripting Component Routines†°dONLNdMdïp±)«10-107°dONLNdTqŒ}d(zŒAppleScript Component RoutinesÅ@°dONLNdtqx}ä)™10-1HÄ°dONLNdxqä}î)10°dONLNd{~Œäw(áŒ#Generic Scripting Component Routine‡†°dONLNdû~wä{)©s†°dONLNd°~êä¢)10-1‰‡°dONLNd•~°ä´)10°dONLNd®ãŒó}(îŒ$Routines Used by Scripting ComponentM°dONLNdÃã~óÇ)∞sä°dONLNdœãñó®)10-1Q@°dONLNd”ã®ó≠)1ƒ†°dONLNd‘ã¨ó±)1°dONLNd÷òŒ§’(°ŒAG@°dONLNd◊ò÷§)pplication-Defi†°dONLNdÊò§")BneĆ°dONLNdËò#§R)
  155. d RoutinesI¿°dONLNdÙòg§y)D10-1°dONLNd¯òy§~)1Ñ`°dONLNd˘ò}§Ç)1ˇT@ˇ ˇˇˇˇ@
  156. ˇ·ˇ‚7^
  157. 4⁄*ˇ¯, Palatino
  158. .(·*xii4^*¿¯°dONLNd\¶h€(e¶    C SummaryᆰdONLNd \Ôh)I10-1N‡°dONLNd\h )12°dONLNdi∞u‹(r∞    ConstantsÆ°dONLNdiu)@10-1u@°dONLNd!iu )12°dONLNd$v∞Ç∑(∞D=@°dONLNd%v∏ÇÕ)ata T:`°dONLNd*vÕÇ›)ypeï@°dONLNd-v›Ç·)s“@°dONLNd0vıÇ)10-1ôÄ°dONLNd4vÇ)18°dONLNd7É∞èÕ(å∞RequirE@°dONLNd=ÉŒèd)ed Scripting Component Routinesw@°dONLNd^Éxèä)™10-1>Ä°dONLNdbÉäèî)19°dONLNdeê∞úb(ô∞%Optional Scripting Component Routines†°dONLNdåêwúì)«10-120°dONLNdìù∞©F(¶∞AppleScript Component RoutinesÅ@°dONLNd≥ùZ©v)™10-123°dONLNd∫™∞∂Y(≥∞#Generic Scripting Component Routine‡†°dONLNd›™Y∂])©s†°dONLNd‡™r∂é)10-123°dONLNdÁ∑∞√_(¿∞$Routines Used by Scripting ComponentM°dONLNd ∑`√d)∞sä°dONLNd∑x√î)10-124°dONLNdƒ∞–∑(Õ∞AG@°dONLNdƒ∏–˙)pplication-Defi†°dONLNd%ƒ˙–)BneĆ°dONLNd'ƒ–4)
  159. d RoutinesI¿°dONLNd3ƒI–e)D10-124°dONLNd:—¶›‡(⁄¶ Result Codesï`°dONLNdH—Ù›)N10-125
  160. *¯4*¯ *¯
  161. ˇ·ˇ‚7^,     Helvetica °dONLNdO* Z(    *    Chapter 1˛p°dONLNdXY _)/1°dONLNdZ˛úå)C"Program-to-Program Communications ë`°dONLNd|˛åî)Të`°dONLNd}˛ìº)oolbox
  162. Œ@°dONLNdÖ– ’)=1A†°dONLNdÜ’ ‚)1-1°dONLNdãú Ê(úAbout the PPC TK@°dONLNdöÊ )JoolboxD`°dONLNd¢ )21∑¿°dONLNd£ ))1-4°dONLNdß!¶-D(*¶#Ports, Sessions, and Message BlocksÄ°dONLNdÃ!Y-^)≥1à‡°dONLNdÕ!]-j)1-4°dONLNd—.¶:◊(7¶ Setting Up ¬°dONLNd‹.◊:=)1Authenticated SessionsqÄ°dONLNdÙ.R:W){1‰‡°dONLNdı.V:c)1-6°dONLNd˘;úG‰(DúUsing the PPC TäÄ°dONLNd;‰G)HoolboxɆ°dONLNd;G)21˜°dONLNd;G,)1-10°dONLNdH¶T¡(Q¶PPC T`°dONLNdH¡T<)oolbox Calling Conventions◊Ä°dONLNd7HPTU)è1J‡°dONLNd8HUTg)1-14°dONLNd=U¶ai(^¶(Specifying Port Names and Location Names˜`°dONLNdgU}aÇ)◊1j¿°dONLNdhUÇaî)1-17°dONLNdmb∞nÛ(k∞Opening a Portˆ°dONLNd}bn )W1i`°dONLNd~b n)1-20°dONLNdÉo∞{∫(x∞Br`¿°dONLNdÖo∫{<)
  163. owsing for Ports Using the PrŸ`°dONLNd¢o<{±)Çogram Linking Dialog Box†°dONLNdºoΔ{À)ä1í°dONLNdΩo {‹)1-22°dONLNd¬|∞à(Ö∞Obtaining a List of °dONLNd÷|à )UAÛ@°dONLNd◊| àG)vailable Ports°dONLNdÁ|\àa)Q1à`°dONLNdË|`àr)1-27°dONLNdÌâ¶ïØ(í¶PrN†°dONLNdÔâ∞ï )
  164. eparing for a SessionDÄ°dONLNdâ ï%)p1∑‡°dONLNdâ$ï6)1-29°dONLNd ñ∞¢(ü∞Initiating a PPC Session´ °dONLNd&ñ-¢2)}1Ä°dONLNd'ñ2¢D)1-29°dONLNd,£∞Ø((¨∞Receiving Session RequestsYÄ°dONLNdH£=ØB)ç1Ç°dONLNdI£AØS)1-35°dONLNdN∞∞ºa(π∞'Accepting or Rejecting Session Requests ‡°dONLNdw∞uºz)≈1>@°dONLNdx∞zºå)1-37°dONLNd}Ω¶…T(Δ¶$Exchanging Data During a PPC Session ¿°dONLNd£Ωi…n)√1 °dONLNd§Ωm…)1-39°dONLNd© ∞÷¯(”∞Reading Data Fr∞°dONLNd∏ ¯÷)Hom an lÄ°dONLNdæ ÷J) Application͆°dONLNdÀ ^÷c)H1^°dONLNdàc÷u)1-40°dONLNd—◊∞„(‡∞Sending Data to an ȇ°dONLNd‰◊„:)V Applicationh°dONLNdÒ◊O„T)I1€`°dONLNdÚ◊S„e)1-42°dONLNd˜‰¶E(̶#Ending a Session and Closing a Port `°dONLNd‰Z_)¥1ì¿°dONLNd‰^p)1-43°dONLNd"Ò¶˝˜(˙¶Invalidating UsersK`°dONLNd6Ò ˝)f1æ¿°dONLNd7Ò˝")1-44°dONLNd<˛ú
  165. ∑(úPPC T`°dONLNdA˛∑
  166. Ô) oolbox Refer3@°dONLNdM˛Ô
  167. )8ence °dONLNdS˛
  168. )(1{Ä°dONLNdT˛
  169. -)1-46°dONLNdY ¶…(¶Data Str``°dONLNda  ·)$ucturÊ@°dONLNdf ·Í)esχ°dONLNdj ˛)1`@°dONLNdk )1-46°dONLNdp∞$fl(!∞    The PPC Tõ¿°dONLNdyfi$A).oolbox Parameter Bloc@°dONLNdéB$G)dk¶`°dONLNdë[$`)1¿°dONLNdí`$r)1-46°dONLNdó%∞1∂(.∞T†¿°dONLNdò%∂1)he PPC Port RecorºÄ°dONLNd©%1)Qdÿ@°dONLNd¨%!1&)1K†°dONLNd≠%&18)1-48°dONLNd≤2∞>"(;∞The Location Name Recor=¿°dONLNd…2#>))sdYÄ°dONLNdÃ2=>B)1Ç°dONLNdÕ2A>S)1-49°dONLNd“?∞K)(H∞The Port Information Recor√¿°dONLNdÏ?)K/)ydflÄ°dONLNdÔ?CKH)1R‡°dONLNd?HKZ)1-50°dONLNdıL¶X¨(U¶P↰dONLNdˆL¨X¡)PC T`°dONLNd˙L¡X)oolbox RoutinesÄ°dONLNd LX")\1y‡°dONLNd L!X3)1-50°dONLNdY∞e(b∞Initializing the PPC Tö°dONLNd'Ye+)^oolboxì °dONLNd/Y@eE)21Ä°dONLNd0YEeW)1-51°dONLNd5f∞rÁ(o∞ Using the Pry °dONLNdAfÁr\)7ogram Linking Dialog Boxæ`°dONLNd[fpru)â11¿°dONLNd\furá)1-51°dONLNdas∞(|∞Obtaining a List of PortsfÄ°dONLNd|s05)Ä1Ÿ‡°dONLNd}s4F)1-54°dONLNdÇÄ∞å+(â∞Opening and Closing a Port›‡°dONLNdûÄ?åD)è1Q@°dONLNdüÄDåV)1-56°dONLNd§ç∞ô3(ñ∞Starting and Ending a SessionqÄ°dONLNd√çHôM)ò1‰‡°dONLNdƒçLô^)1-59°dONLNd…ö∞¶‡(£∞ Receiving, ™†°dONLNd‘ö‡¶x)0"Accepting, and Rejecting a Session\†°dONLNd¯öç¶í)≠1–°dONLNd˘ö붣)1-66°dONLNd˛ß∞≥Ù(∞∞Reading and Wå°dONLNd ßÙ≥#)D riting Dataq‡°dONLNdß8≥=)D1Â@°dONLNdß<≥N)1-71°dONLNd¥∞¿É(Ω∞/Locating a Default User and Invalidating a UserU`°dONLNdO¥ò¿ù)Ë1»¿°dONLNdP¥ú¿Æ)1-75ˇ@ˇ ˇˇˇˇ@
  170. ˇ·ˇ‚7^
  171. 4⁄∫˙, Palatino
  172. .Ñ`(‡xiii4^H¿°dONLNd\ƒh(eƒApplication-Defi†°dONLNd\hH)J ned RoutinesI¿°dONLNd\]hb)O1Ω °dONLNd\ahs)1-77°dONLNd$iŒuY(rŒCompletion Routines for PPC TO†°dONLNdAiYu†)ãoolbox Routinesˆ °dONLNdRi¥uπ)[1iÄ°dONLNdSiπuÀ)1-77°dONLNdXvŒÇ((ŒPort Filter Functions °dONLNdov=ÇB)o1åÄ°dONLNdpvAÇS)1-78°dONLNduÉ∫èø(å∫Sø¿°dONLNdvÉøè)ummary of the PPC T˜`°dONLNdâÉè;)_oolboxÄ°dONLNdëÉPèU)21c‡°dONLNdíÉUèg)1-80°dONLNdóêƒú(ôƒPascal Summary‡°dONLNdßê"ú')^1É@°dONLNd®ê&ú8)1-80°dONLNd≠ùŒ©˙(¶Œ    ConstantsÆ°dONLNd∏ù©)@1!`°dONLNdπù©%)1-80°dONLNd晌∂Î(≥ŒData T:`°dONLNdƒ™Î∂ˇ)ypes“@°dONLNd ™∂)(1E†°dONLNdÀ™∂*)1-81°dONLNd–∑Œ√È(¿ŒPPC T`°dONLNd’∑È√0)oolbox RoutinesÄ°dONLNdÊ∑E√J)\1y‡°dONLNdÁ∑I√[)1-87°dONLNdσŒ–(ÕŒApplication-Defi†°dONLNd¸ƒ–R)J ned RoutinesI¿°dONLNd
  173. ƒg–l)O1Ω °dONLNd ƒk–})1-88°dONLNd—ƒ›˘(⁄ƒ    C SummaryᆰdONLNd—›)I1˚°dONLNd—›#)1-89°dONLNd!fiŒÍ˙(ÁŒ    ConstantsÆ°dONLNd,fiÍ)@1!`°dONLNd-fiÍ%)1-89°dONLNd2ÎŒ˜’(ÙŒD=@°dONLNd3Î÷˜Î)ata T:`°dONLNd8ÎΘˇ)ypes“@°dONLNd>Θ)(1E†°dONLNd?Θ*)1-90°dONLNdD¯ŒÈ(ŒPPC T`°dONLNdI¯È0)oolbox RoutinesÄ°dONLNdZ¯EJ)\1y‡°dONLNd[¯I[)1-95°dONLNd`Œ(ŒApplication-Defi†°dONLNdpR)J ned RoutinesI¿°dONLNd~gl)O1Ω °dONLNdk})1-96°dONLNdуL(ƒAssembly-Language Summary~†°dONLNdüaf)ù1Ú°dONLNd†ew)1-96°dONLNd•Œ+‘((ŒT∫¿°dONLNd¶”+˚)rap Macr⁄°dONLNdÆ˚+)(osåÄ°dONLNd≤+)1ˇ‡°dONLNd≥+/)1-96°dONLNd∏,ƒ8˛(5ƒ Result Codesï`°dONLNdΔ,8)N1¿°dONLNd«,8))1-97
  174. hHo4iHo jHj
  175. ˇ·ˇ‚7^,     Helvetica °dONLNdÃ\Hg~(dH
  176. Chapter 12°dONLNd◊Y∫h€)rData .¿°dONLNd‹Y€hC)!Access Manager
  177. lÄ°dONLNdÏ[Wgi)|12-1°dONLNdÚo∫{(x∫About the Data åÄ°dONLNdo{G)FAccess Manager⇰dONLNdo\{n)\12-5°dONLNd|ƒà2(ÖƒThe High-Level Interface#¿°dONLNd0|GàY)É12-7°dONLNd5âŒï*(íŒSending a Query Thr$‡°dONLNdHâ+ï∞)]ough the High-Level InterfaceG`°dONLNdgâƒï÷)ô12-8°dONLNdlñŒ¢&(üŒRetrieving Data ThrÑÄ°dONLNdñ&¢´)Xough the High-Level Interfaceß°dONLNdûñø¢—)ô12-9°dONLNd££ƒØ/(¨ƒThe Low-Level Interfaceq¿°dONLNdº£DØV)Ä12-9°dONLNd¡∞Œº*(πŒSending a Query Thr$‡°dONLNd‘∞+º≠)]ough the Low-Level Interfaceï`°dONLNdÚ∞¡ºÿ)ñ12-10°dONLNd¯ΩŒ…&(ΔŒRetrieving Data ThrÑÄ°dONLNd Ω&…®)Xough the Low-Level Interfaceı°dONLNd)Ωº…Œ)ñ12-1º@°dONLNd-ΩŒ…”)1°dONLNd/ ƒ÷Ω(”ƒ5Comparison of the High-Level and Low-Level Interfacest °dONLNdf “÷‰(”“12-1;`°dONLNdj ‰÷È)1°dONLNdl◊∫„˛(‡∫Using the Data À¿°dONLNd{◊˛„E)DAccess Manager… °dONLNdã◊Z„q)\12-12°dONLNd뉃(̃Executing Routines _†°dONLNd§‰A)XAsynchrÀ°dONLNd´‰Ad)%onouslyC°dONLNd¥‰yê)812-12°dONLNd∫Òƒ˝y(˙ƒ)General Guidelines for the User Interface†°dONLNdÂÒ齕) 12-13°dONLNdβŒ
  178. 3(ŒKeep the User in Contr`°dONLNd˛4
  179. <)folr@°dONLNd˛P
  180. g)12-13°dONLNd  Œ◊(ŒPrN†°dONLNd ÿP)
  181. ovide Feedback to the UserS°dONLNd) d{)å12-13°dONLNd/ƒ$L(!ƒUsing the High-Level InterfaceÄ°dONLNdOa$x)ù12-14°dONLNdU%ƒ1Œ(.ƒW¬†°dONLNdV%Õ1°)    0riting a Status Routine for High-Level Functionsê °dONLNdà%∂1Õ)È12-22°dONLNdé2ƒ>I(;ƒUsing the Low-Level Interface`Ä°dONLNd≠2^>u)ö12-28°dONLNd≥?ƒK(HƒGetting Information ãÄ°dONLNd«?Kz)[About Sessions in Prë`°dONLNd€?zKà)[ogr[°dONLNdfi?âKñ)essû†°dONLNd„?™K¡)!12-35°dONLNdÈLƒXÕ(UƒPrN†°dONLNdÎLŒX4)
  182. ocessing Query Results¿°dONLNdLIX`){12-36°dONLNd    YŒe0(bŒGetting Query Results
  183. @°dONLNd YEe\)w12-36°dONLNd&fŒrU(oŒConverting Query Results to T  °dONLNdCfUrb)áext?¿°dONLNdHfvrç)!12-42°dONLNdNs∫≈(|∫Cr\°dONLNdPs≈7) eating a Query Document∫¿°dONLNdisKb)Ü12-46°dONLNdoăåó(âƒ-User Interface Guidelines for Query Documents`°dONLNdûĨå√)Ë12-46°dONLNd§çƒôN(ñƒContents of a Query Document燰dONLNd¬çbôy)û12-48°dONLNd»öƒ¶˚(£ƒ Query RecorP¿°dONLNd”ö¸¶Z)8ds and Query Resour;@°dONLNdÊöZ¶g)^ces≤ °dONLNdÎö{¶í)!12-51°dONLNdÒ߃≥Œ(∞ƒW¬†°dONLNdÚßÕ≥ )    riting a Query Defij‡°dONLNdß!≥d)Tnition Function_¿°dONLNdßy≥ê)X12-51ˇÓ@ˇ ˇˇˇˇ@
  184. ˇ·ˇ‚7^
  185. 4⁄*ˇ¯, Palatino
  186. .(·*xiv4^*¿¯°dONLNd\úh≥(eúData °@°dONLNd\≥h)Access Manager Referx¿°dONLNd\h()benceM†°dONLNd\=hT)(12-54°dONLNd%i¶u…(r¶Data Str``°dONLNd-i u·)$ucturÊ@°dONLNd2i·uÂ)e؇°dONLNd3iÊuÍ)sχ°dONLNd6i˛u)12-54°dONLNd<v∞Ç√(∞The ]`°dONLNd@v√ÇË)Asynchr»¿°dONLNdGvËDz)%onouå@°dONLNdKvˇÇN)s Parameter Block⁄¿°dONLNd^vbÇy)c12-55°dONLNddÉ∞è˚(å∞The Query RecoråÄ°dONLNdsÉ˚è)Kd®@°dONLNdvÉè,)12-56°dONLNd|ê∞úˇ(ô∞The Results Recorņ°dONLNdçêˇú)Odù`°dONLNdêêú0)12-58°dONLNdñù¶©Ω(¶¶Data °@°dONLNdõùΩ©)Access Manager RÆ°dONLNd´ù©.)QoutinesL°dONLNd¥ùC©Z)512-59°dONLNd∫™∞∂
  187. (≥∞Initializing the Data €@°dONLNd–™
  188. ∂Q)ZAccess Managerÿ†°dONLNd‡™f∂})\12-60°dONLNdÊ∑∞√(¿∞High-Level Interface: H9`°dONLNd˝∑√é)iandling Query Documents†°dONLNd∑£√∫)ä12-61°dONLNdƒ∞–(Õ∞High-Level Interface: H9`°dONLNd3ƒ–|)iandling Query Results©†°dONLNdJƒê–ß)w12-65°dONLNdP—∞›(⁄∞Low-Level Interfacl`°dONLNdb—›')Te: Contrõ@°dONLNdj—'›t)#olling the Session∫`°dONLNd~—à›ü)a12-68°dONLNdÑfi∞Í(Á∞Low-Level Interface: Su¿°dONLNdöfiÍô)cending and Executing QueriesÅ`°dONLNd∏fi≠̓)ö12-76°dONLNdæÎ∞˜(Ù∞Low-Level Interface: R‰°dONLNd‘Θ^)detrieving Results'@°dONLNdÁÎs˜ä)_12-82°dONLNd̯∞g(∞'Installing and Removing Result Handlersχ°dONLNd¯{í)À12-86°dONLNd¶(¶Application-Defi†°dONLNd,*)J ned RoutinesI¿°dONLNd:?V)O12-89°dONLNd@¶≈(¶Resourv@°dONLNdF≈“)cesÌ °dONLNdKÊ˝)!12-90°dONLNdQ∞+((∞The Query Resour``°dONLNda+)Qc–†°dONLNdb+    )eö@°dONLNde+5)12-90°dONLNdk,∞8(5∞The Query String Resourû°dONLNdÇ,8')nce◊‡°dONLNdÜ,;8R)12-91°dONLNdå9∞E∂(B∞T†¿°dONLNdç9∂EÙ) he Query Defi˝¿°dONLNdö9ÙE)>nition © °dONLNd°9E:)    Function r†°dONLNd™9;EZ)*Resourh‡°dONLNd∞9ZE^)cŸ °dONLNd±9^Eb)e¢¿°dONLNd¥9wEé)12-92°dONLNd∫FúR˝(OúSummary of the Data 8†°dONLNdŒF˝RA)aAccess ManageC`°dONLNd€FARD)Dr6°dONLNdfiFYRp)12-93°dONLNd‰S¶_Ô(\¶Pascal Summary‡°dONLNdÙS_)^12-93°dONLNd˙`∞l‹(i∞    ConstantsÆ°dONLNd`l)@12-93°dONLNd m∞yÕ(v∞Data T:`°dONLNdmÕy·)ypes“@°dONLNdmıy )(12-94°dONLNdz∞Ü«(É∞Data °@°dONLNd"z«Ü)Access Manager †°dONLNd1zÜ9)KRoutinesL°dONLNd;zMÜd);12-96°dONLNdAá∞ì˙(ê∞Application-Defi†°dONLNdQá˙ì4)J ned RoutinesI¿°dONLNd_áIì`)O12-98°dONLNde€(ù¶    C SummaryᆰdONLNdpîÔ†)I12-98°dONLNdv°∞≠‹(™∞    ConstantsÆ°dONLNdÅ°≠)@12-98°dONLNdáÆ∞∫Õ(∑∞Data T:`°dONLNdçÆÕ∫·)ypes“@°dONLNdìÆı∫)(12-100°dONLNdöª∞««(ƒ∞Data °@°dONLNdüª««)Access Manager †°dONLNdƪ«9)KRoutinesL°dONLNd∏ªM«i);12-101°dONLNdø»∞‘˙(—∞Application-Defi†°dONLNdœ»˙‘4)J ned RoutinesI¿°dONLNd›»I‘e)O12-103°dONLNd‰’¶·.(fi¶Assembly-Language Summary~†°dONLNdˇ’C·_)ù12-103°dONLNd‚∞Ó∂(Î∞T∫¿°dONLNd‚µÓ›)rap Macr⁄°dONLNd‚›ÓÊ)(osåÄ°dONLNd‚˚Ó)12-103°dONLNdÔ¶˚‡(¯¶ Result Codesï`°dONLNd(ÔÙ˚)N12-104
  189. +*2¯4,*2¯ -*-¯
  190. ˇ·ˇ‚7^,     Helvetica°dONLNd/ú+”('úGlossary
  191. ∏Ä°dONLNd9Á*˝)KGL-1
  192. a*h¯4b*h¯ c*c¯
  193. ˇ·ˇ‚7^°dONLNd?Rúaæ(]úIndex
  194. º‡°dONLNdFT“`Ê)6IN-1ˇ–@ˇ ˇˇˇˇ@
  195. ˇ·ˇ‚7^
  196. 4⁄∫˙, Palatino
  197. .‡(‡ xv4^H¿ˇˇ—Úˇ◊°dONLNd[∫o‰(j∫Figur{z°dONLNd[‰o)*es, T5°dONLNd
  198. [oñ)"ables, and Listings
  199. ®HÆ4©HÆ ™∫™
  200. ˇ·ˇ‚7^,     Helvetica
  201. °dONLNdúH®j(•HPreface °dONLNd&ù∫®Ÿ)rAbout °dONLNd,ù⁄®
  202. )     This Book    °dONLNd7ù®+)Cxxiii
  203. ”HŸ4‘HŸ ’∫’
  204. ˇ·ˇ‚7^
  205. °dONLNd>«H”s(–H    Chapter 1 °dONLNdH»∫”ú)r.Introduction to Interapplication Communication    Y °dONLNdx»Ø”º)ı1-1°dONLNd}‹∫Á‰(‰∫
  206. Figure 1-1°dONLNdà‹ÁÔ)N7Principal methods of communication between applications䇰dONLNd¡‹Á)˘1-5°dONLNd≈Ë∫Û‰(∫
  207. Figure 1-2°dONLNd–ËÛ»)N0Sharing data with the aid of the Edition Manager燰dONLNdË⁄ÛÁ)“1-7°dONLNdÙ∫ˇ‰(¸∫
  208. Figure 1-3°dONLNdÙˇ)NA0°dONLNdÙˇ5)
  209.  publisherÖ °dONLNdÙ4ˇß)&, an edition, and a subscriber –°dONLNd<Ù∫ˇ«)Ü1-8°dONLNd@∫ ‰(∫
  210. Figure 1-4°dONLNdK ∫)N,Sharing dynamic data with other applications    `°dONLNdyÕ ⁄)≈1-8°dONLNd} ∫‰(∫
  211. Figure 1-5°dONLNdà v)NSending and responding to  °dONLNd¢ vı)n!Apple events with the aid of the p°dONLNd√ ı)Apple °dONLNd…!E(Event ManagerÑ°dONLNdÿW!i)O1-10°dONLNd›"∫-‰(*∫
  212. Figure 1-6°dONLNdË"-)NA0°dONLNdÈ"-L) Set Data event‡°dONLNd˙"^-p)P1-12°dONLNdˇ.∫9‰(6∫
  213. Figure 1-7°dONLNd
  214. .9∫)N+How a scripting component executes a script∞°dONLNd7.Õ9fl)≈1-14°dONLNd<:∫E‰(B∫
  215. Figure 1-8°dONLNdG:E)NA0°dONLNdH:Eº), Set Data event sent during script execution–°dONLNdv:ŒE‡)¿1-17°dONLNd{F∫Q‰(N∫
  216. Figure 1-9°dONLNdÜFQ≈)N0Recording user actions in a factored application
  217. `°dONLNd∏FÿQÍ)–1-19°dONLNdΩR∫]Í(Z∫ Figure 1-10°dONLNd…R]o)NControlling an application’[0°dONLNd‰Ro]„)gs own behavior by executing °dONLNd\g(da °dONLNd\g%)script‡°dONLNd
  218. \7gI)'1-20°dONLNdh∫sÍ(p∫ Figure 1-11°dONLNdhsÓ)N8Posting an invoice and updating a database by executing °dONLNdSr}*
  219. a °dONLNdUr}%)script‡°dONLNd]r7}I)'1-21
  220. °Hß4¢Hß £∫£
  221. ˇ·ˇ‚7^
  222. °dONLNdbïH°s(ûH    Chapter 2 °dONLNdlñ∫°
  223. )rEdition Manager    ö¿°dONLNd}ñ°))b2-1°dONLNdÇ™∫µ‰(≤∫
  224. Figure 2-1°dONLNd癵e)NThe default edition iconá °dONLNdß™wµÑ)o2-4°dONLNd´∂∫¡‰(æ∫
  225. Figure 2-2°dONLNd∂∂¡)NA0°dONLNd∑∂¡5)
  226.  publisherÖ °dONLNd¡∂4¡ß)&, an edition, and a subscriber –°dONLNd·∂∫¡«)Ü2-5°dONLNd¬∫Õ‰( ∫
  227. Figure 2-3°dONLNd¬Õj)NThe publisher dialog boxÜ@°dONLNd
  228. ¬|Õâ)t2-5°dONLNdŒ∫Ÿ‰(÷∫
  229. Figure 2-4°dONLNdŒŸo)NThe subscriber dialog boxÑ–°dONLNd4ŒÅŸé)y2-7°dONLNd8⁄∫‰(‚∫
  230. Figure 2-5°dONLNdC⁄Â)NA0°dONLNdD⁄Â≤)( document and its corresponding editions ¿°dONLNdn⁄ƒÂ—)∂2-8°dONLNdrÊ∫Ò‰(Ó∫
  231. Figure 2-6°dONLNd}ÊÒå)N Publisher and subscriber bordersÑ∞°dONLNdüÊûÒ´)ñ2-9°dONLNd£Ú∫˝‰(˙∫
  232. Figure 2-7°dONLNdÆÚ˝ª)N)Edition Manager commands in the Edit menu¿°dONLNdŸÚŒ˝‡)Δ2-10°dONLNdfi˛∫    ‰(∫
  233. Figure 2-8°dONLNdÈ˛    Ë)N3Edition Manager commands under the Publishing menu °dONLNd/*
  234. command†°dONLNd%BO):2-1VÄ°dONLNd(NS) 1°dONLNd*∫‰(∫
  235. Figure 2-9°dONLNd5)NA0°dONLNd6˚); document with a publisher and subscriber and its resource °dONLNdq)(&fork†°dONLNdw));)!2-16°dONLNd|*∫5Í(2∫ Figure 2-10°dONLNdà*5v)NThe new publisher alert box0°dONLNd•*â5õ)Å2-19°dONLNd™6∫AÍ(>∫ Figure 2-11°dONLNd∂6A)NA0°dONLNd∑6AÄ) sample publisher dialog box°dONLNd’6íA§)Ñ2-29°dONLNd⁄B∫MÍ(J∫ Figure 2-12°dONLNdÊBM)NA0°dONLNdÁBMÖ) sample subscriber dialog boxê°dONLNdBóM©)â2-37°dONLNd N∫YÍ(V∫ Figure 2-13°dONLNdNYÓ)N9The publisher options dialog box with update mode set to °dONLNdPXc*
  236. On °dONLNdSXc+)SaveÉp°dONLNdYX=cO)&2-43°dONLNd^d∫oÍ(l∫ Figure 2-14°dONLNdjdoÓ)N9The publisher options dialog box with update mode set to °dONLNd£ny,*
  237. ManuallyÄê°dONLNd≠n>yP)62-44°dONLNd≤z∫ÖÍ(Ç∫ Figure 2-15°dONLNdæzÖÛ)N:The subscriber options dialog box with update mode set to °dONLNd¯Ñè=*
  238. Automatically‡°dONLNdÑPèb)H2-44°dONLNd ê∫õÍ(ò∫ Figure 2-16°dONLNdêõÛ)N:The subscriber options dialog box with update mode set to °dONLNdRö•,*
  239. ManuallyÄê°dONLNd\ö>•P)62-45°dONLNda¶∫±Í(Æ∫ Figure 2-17°dONLNdm¶±÷)N-Edit menu with Show/Hide Borders menu commandÜ–°dONLNdú¶Ë±˙)‡2-51°dONLNd°≤∫ΩÍ(∫∫ Figure 2-18°dONLNd≠≤ΩN)NPublisher borders°dONLNd¿≤aΩs)Y2-52ˇ@ˇ ˇˇˇˇ@
  240. ˇ·ˇ‚7^
  241. 4⁄*ˇ¯, Palatino
  242. .(·*xvi4^*¿¯,     Helvetica    °dONLNd\úgÃ(dú Figure 2-19°dONLNd \Íg6)NSubscriber bordersÅp°dONLNd \HgZ)^2-53°dONLNd%húsÃ(pú Figure 2-20°dONLNd1hÍs)NA0°dONLNd2hss)  publisher with contents removedá¿°dONLNdThÖsó)ï2-54°dONLNdYtúÃ(|ú Figure 2-21°dONLNdetÍ)NA0°dONLNdft≤)/ publisher border within a spreadsheet documentå–°dONLNdótƒ÷)‘2-55°dONLNdúÄúãÃ(àú Figure 2-22°dONLNd®ÄÍã)NA0°dONLNd©ÄãÇ)% publisher border with resize handlesá`°dONLNd–Äîã¶)§2-56°dONLNd’åúóÃ(îú Figure 2-23°dONLNd·åÍó)NA0°dONLNd‚åó™)/ publisher and subscriber with clipped graphicsâ`°dONLNdåºóŒ)Ã2-57°dONLNdòú£Ã(†ú Figure 2-24°dONLNd$òÍ£~)N&Creating multiple publishers alert boxÉ °dONLNdLò꣢)¶2-58°dONLNdQ§úØÃ(¨ú Figure 2-25°dONLNd]§ÍØw)N$Saving multiple publishers alert box°dONLNdɧäØú)†2-58°dONLNdà∞úªÃ(∏ú Figure 2-26.°dONLNdî∞ͪM)NSubscribing directly to a ,
  243. Courier°dONLNdÆ∞Mªk)c'PICT'°dONLNd¥∞kªr) fi°dONLNd∑∞rªy)le°dONLNdª∞ãªù)2-62.°dONLNd¿»ú”»(–ú Listing 2-1°dONLNdû͔’)N<Accepting Section Read events and verifying if a section is °dONLNd“Í›*
  244.  
  245. registeredć°dONLNd“$›6):2-14°dONLNdfiúÈ»(Êú Listing 2-2°dONLNd%fiÍÈÜ)N%Saving a document containing sectionså0°dONLNdLfiòÈ™)Æ2-21°dONLNdQÍúı»(Úú Listing 2-3°dONLNd]ÍÍıå)N&Opening a document containing sections0°dONLNdÖÍüı±)µ2-23°dONLNdäˆú»(˛ú Listing 2-4°dONLNdñˆÍ:)NCreating a publisher °dONLNd¨ˆM_)c2-33°dONLNd±ú»(
  246. ú Listing 2-5°dONLNdΩÍÚ)NW’ê°dONLNdæÚM)riting data to an edition‹@°dONLNdŸ_q)m2-36°dONLNdfiú»(ú Listing 2-6°dONLNdÍÍ?)NCreating a subscriber∞°dONLNdRd)h2-40°dONLNdú%»("ú Listing 2-7°dONLNdÍ%F)NReading in edition dataá¿°dONLNd+X%j)n2-42°dONLNd0&ú1»(.ú Listing 2-8°dONLNd<&Í1Y)NResponding to action codesâ°dONLNdX&k1})Å2-46°dONLNd]2ú=»(:ú Listing 2-9°dONLNdi2Í=Ö)N&Using your own edition opener function    ∞°dONLNdë2ò=™)Æ2-67
  247. a*g¯4b*g¯ cúc¯
  248. ˇ·ˇ‚7^
  249. °dONLNdñU*aU(^*    Chapter 3 °dONLNd†Vúa‰)rIntroduction to ©–°dONLNd∞V‰a$)H Apple Events    {P°dONLNdæV7aD)S3-1°dONLNd√júuΔ(rú
  250. Figure 3-1°dONLNdŒjÍuV)NAn Open Documents eventàp°dONLNdÁjhuu)~3-4°dONLNdÎvúÅΔ(~ú
  251. Figure 3-2°dONLNdˆvÍÅ)NA0°dONLNd˜vÅ/) Get Data event@°dONLNdvAÅN)Q3-7°dONLNd ÇúçΔ(äú
  252. Figure 3-3°dONLNdÇÍçfl)N;Major attributes and direct parameter of an Open Documents °dONLNdRåÍó*
  253. eventÇê°dONLNdYåó$)(3-10°dONLNd^òú£Δ(†ú
  254. Figure 3-4°dONLNdiòÍ£Œ)N9Major attributes and direct parameter of a Get Data eventâ°dONLNd§ò‡£Ì)ˆ3-1fl–°dONLNdßòÏ£Ò) 1°dONLNd©§úØΔ(¨ú
  255. Figure 3-5°dONLNd¥§ÍØ)NA0°dONLNdµ§ØÌ)? descriptor record whose data handle refers to an unterminated °dONLNdÙÆÍπˇ(∂Ístring¿°dONLNd¸Æπ$)(3-13°dONLNd∫ú≈Δ(¬ú
  256. Figure 3-6°dONLNd ∫Í≈)NA0°dONLNd∫≈Ÿ); descriptor record whose data handle refers to event class °dONLNdHƒÍœ˚(ÃÍdataê°dONLNdNƒœ )$3-14°dONLNdS–ú€Δ(ÿú
  257. Figure 3-7°dONLNd^–Í€)NA0°dONLNd_–€0) keyword-specifiÇ`°dONLNdo–0€Ò)@3ed descriptor record for the event class attribute °dONLNd¢⁄ÍÂ(‚Í
  258. of an Open`°dONLNd¨⁄Â)- ÖÄ°dONLNd≠⁄Â_)Documents eventâê°dONLNdæ⁄qÂÉ)X3-16°dONLNd√ÊúÒΔ(Óú
  259. Figure 3-8°dONLNdŒÊÍÒ)NA0°dONLNdœÊÒr)& descriptor list for a list of aliases°dONLNd˜ÊÑÒñ)î3-17°dONLNd¸Úú˝Δ(˙ú
  260. Figure 3-9°dONLNdÚÍ˝Æ)N.Data structures within an Open Documents eventâ∞°dONLNd7Ú¿˝“)÷3-19°dONLNd<˛ú    Ã(ú Figure 3-10°dONLNdH˛Í    æ)N0Accepting and processing an Open Documents event–°dONLNdz˛—    „)Á3-21°dONLNd
  261. úÃ(ú Figure 3-11°dONLNdã
  262. ͸)NThe ê°dONLNdè
  263. ¸“)4Apple Event Manager calling the handler for an Open °dONLNd√Í0(ÍDocuments eventÑ°dONLNd‘BT)X3-22°dONLNdŸ ú+Ã((ú Figure 3-12°dONLNd Í+ë)N%Responding to an Open Documents event°dONLNd  §+∂)∫3-27°dONLNd,ú7Ã(4ú Figure 3-13°dONLNd,Í7C)NData structures within Å0°dONLNd4,C7l)Y
  264. a simple oÇ°dONLNd>,l7õ)) bject specifiÑ °dONLNdK,õ7æ)/    er recordÉê°dONLNdV,—7„)63-37°dONLNd[8úCÃ(@ú Figure 3-14°dONLNdg8ÍC+)NAn object specifi†°dONLNdx8,C†)Ber record in a Get Data event
  265. P°dONLNdó8≤Cƒ)Ü3-38°dONLNdúDúOÃ(Lú Figure 3-15°dONLNd®DÍO`)NSuperclasses and subclasses°dONLNd≈DsOÖ)â3-40°dONLNd Pú[Ã(Xú Figure 3-16°dONLNd÷PÍ[—)N<The object class inheritance hierarchy for the object class .°dONLNdZÍe*
  266. cWindow°dONLNdZe1)53-44.°dONLNd fúqÃ(nú Figure 3-17.°dONLNd,fÍq˜)NAn p°dONLNd/f˜qf)Apple event object of class p°dONLNdKffq)ocWordp°dONLNdPfq¿) contained in an LJ°dONLNdaføqÒ)@ Apple event °dONLNdmpÍ{'(xÍobject of class °dONLNd}p'{Y)=
  267. cParagraph°dONLNdâpk{})D3-46ˇ“@ˇ ˇˇˇˇ@
  268. ˇ·ˇ‚7^
  269. 4⁄∫˙, Palatino
  270. .I (‡xvii4^H¿
  271. hHn4iHn j∫j
  272. ˇ·ˇ‚7^,     Helvetica°dONLNd\Hhs(eH    Chapter 4 °dONLNd
  273. ]∫h)rResponding to ‰∞°dONLNd]hC)I Apple Events    ∂0°dONLNd&]Vhc)S4-1°dONLNd+q∫|‰(y∫
  274. Figure 4-1°dONLNd6q|)NA0°dONLNd7q|Ê)6 document with a button that triggers a Get Data event–°dONLNdoq¯|
  275. )Í4-51°dONLNdt}∫à‰(Ö∫
  276. Figure 4-2°dONLNd}à)NA0°dONLNdÄ}àÌ): server application displaying a dialog box that requests °dONLNd∫áíl(èinformation from the userÅ°dONLNd’á~íê)v4-52°dONLNd⁄ì∫û‰(õ∫
  277. Figure 4-3°dONLNdÂìûf)NHandling user interactio`°dONLNd˝ìgûl)_n0°dONLNdì~ûê)4-53°dONLNdü∫™‰(ß∫
  278. Figure 4-4.°dONLNdü™è)N#Handling user interaction with the ,
  279. Courier°dONLNd3üè™À)á kAEWaitReply°dONLNd?üÀ™“)< fl°dONLNdBü“™Ë)ag se°dONLNdGüË™Î)t°dONLNdJü˝™)4-54.°dONLNdO´∫∂‰(≥∫
  280. Figure 4-5.°dONLNdZ´∂è)N#Handling user interaction with the °dONLNd}´è∂–)ákAEQueueReply°dONLNdä´–∂◊)A fl°dONLNdç´◊∂„)ag °dONLNdê´„∂Ì) se°dONLNdí´Ì∂)
  281. t°dONLNdï´∂)4-55.°dONLNdö√∫Œ·(À∫    Table 4-1°dONLNd§√Œì)N"Coercion handling provided by the 
  282. ¿°dONLNdΔ√ìŒÈ)ãApple Event Managerëp°dONLNd€√˚Œ)h4-43°dONLNd‡œ∫⁄·(◊∫    Table 4-2°dONLNdÍœ⁄|)NDescriptor types used by the á`°dONLNdœ|⁄)tApple Event Manager (excluding °dONLNd&Ÿ‰}(·those used with object specifiᇰdONLNdDŸ}‰®)u er records)°dONLNdQŸª‰Õ)>4-57°dONLNdVÒ∫¸Ê(˘∫ Listing 4-1.°dONLNdbÒ¸)NAp°dONLNdcÒ¸) p°dONLNddÒ¸3)DoEventp°dONLNdkÒ3¸^)#
  283.  procedurep°dONLNdwÒp¸})=4-5.°dONLNd{˝∫Ê(∫ Listing 4-2.°dONLNdá˝)NAp°dONLNdà˝) p°dONLNdâ˝`)DoHighLevelEventp°dONLNdô˝`æ)P procedure for handling LJ°dONLNd±˝Ω)]Apple events and .°dONLNd¬b(other high-level events¿°dONLNd€uÇ)m4-6°dONLNdfl∫Ê(∫ Listing 4-3°dONLNdÎÉ)N Adding entries for the required à°dONLNd É˝){Apple events to an application’i`°dONLNd*˝)zs °dONLNd,(q(%Apple event dispatch table
  284. °dONLNdHÑ(ë)|4-8°dONLNdL)∫4Ê(1∫ Listing 4-4°dONLNdX)4Q)NAdding entries for P°dONLNdk)Q4)I/Apple events sent by the Edition Manager to an °dONLNdö3>5(; application’Y0°dONLNd¶35><)-s ⁄¿°dONLNd®3;>§)Apple event dispatch tabled¿°dONLNdƒ3∑>ƒ)|4-9°dONLNd»?∫JÊ(G∫ Listing 4-5°dONLNd‘?J)NA0°dONLNd’?Je) handler for the Open 
  285. @°dONLNdÎ?eJ©)WApplication eventè–°dONLNd˛?ªJÕ)V4-15°dONLNdK∫VÊ(S∫ Listing 4-6°dONLNdKV)NA0°dONLNdKV´)% handler for the Open Documents event凰dONLNd7KΩVœ)Ø4-15°dONLNd<W∫bÊ(_∫ Listing 4-7°dONLNdHWb)NA0°dONLNdIWb®)& handler for the Print Documents event
  286. °dONLNdqW∫bÃ)¨4-18°dONLNdvc∫nÊ(k∫ Listing 4-8°dONLNdÇcn)NA0°dONLNdÉcn`) handler for the Quit à°dONLNdôc_n£)QApplication event†°dONLNd¨c∂n»)W4-19°dONLNd±o∫zÊ(w∫ Listing 4-9°dONLNdΩoz)NA0°dONLNdæoz®)' handler for the Create Publisher eventä–°dONLNdÁo∫zÃ)¨4-23°dONLNdÏ{∫ÜÎ(É∫ Listing 4-10°dONLNd˘{Üõ)N'Extracting items from a descriptor list˛°dONLNd"{≠Üø)•4-33°dONLNd'á∫íÎ(è∫ Listing 4-11.°dONLNd4áí)NAp°dONLNd5áíy) function that checks for a p°dONLNdQáyí›)kkeyMissedKeywordAttrp°dONLNdeá›ífl)d .°dONLNdfëú((ô    attribute†°dONLNdqë;úM)34-35°dONLNdvù∫®Î(•∫ Listing 4-12.°dONLNdÉù®5)N Adding the °dONLNdéù5®{)-keyErrorString°dONLNdúù{®◊)F parameter to the reply p°dONLNd¥ù◊®)\Apple .°dONLNd∫ß≤(ØeventÇê°dONLNd¡ß0≤B)(4-38°dONLNdΔ≥∫æÎ(ª∫ Listing 4-13°dONLNd”≥æÖ)NAdding parameters to the reply á°dONLNdÚ≥Öæ¥)} Apple event °dONLNdˇ≥«æŸ)B4-39°dONLNdø∫ Î(«∫ Listing 4-14.°dONLNdø 0)N
  287. Using the °dONLNdø0 ä)(AEInteractWithUser°dONLNd-øä ≠)Z     function°dONLNd8øø —)54-50
  288. ÓHÙ4ÔHÙ ∫
  289. ˇ·ˇ‚7^
  290. .°dONLNd=‚HÓs(ÎH    Chapter 5 °dONLNdG„∫Ó')rCreating and Sending ]0°dONLNd\„'Óg)m Apple Events    .∞°dONLNdj„zÓá)S5-1°dONLNdo˜∫Ê(ˇ∫ Listing 5-1°dONLNd{˜„)N7Creating the optional keyword for the Create Publisher °dONLNd≤ *
  291. eventÇê°dONLNdπ0 =)(5-9°dONLNdΩ∫Ê(∫ Listing 5-2°dONLNd…m)NCreating a target address0°dONLNd‰Äç)x5-1[°dONLNdÁåë) 1°dONLNdÈ∫$Ê(!∫ Listing 5-3°dONLNdı$ç)N"Specifying a target address in an ä–°dONLNdç$Ú)ÖApple event by using the .°dONLNd0#.:(+
  292. PPCBrowser°dONLNd:#:.])2     function°dONLNdE#o.Å)55-12.°dONLNdJ/∫:Ê(7∫ Listing 5-4°dONLNdV/:8)N Sending an p°dONLNda/8:g)0 Apple event冰dONLNdn/y:ã)A5-17°dONLNds;∫FÊ(C∫ Listing 5-5°dONLNd;FE)NAn idle function‡°dONLNdë;XFj)P5-23
  293. jHp4kHp l∫l
  294. ˇ·ˇ‚7^
  295. °dONLNdñ^Hjs(gH    Chapter 6 °dONLNd†_∫js)r$Resolving and Creating Object Specifi√·°dONLNd≈_sj®)π
  296. er Records    è·°dONLNd—_ªj»)H6-1°dONLNd÷s∫~‰({∫
  297. Figure 6-1°dONLNd·s~r)NResolving an object specifi°dONLNd¸ss~’)ker record for a table in a °dONLNd}à/(Ödocument‡°dONLNd!}BàO):6-6°dONLNd%â∫î‰(ë∫
  298. Figure 6-2°dONLNd0âî)NNˇP°dONLNd1âî)esÄ °dONLNd3âî,)
  299. ted oÇ–°dONLNd8â,î[) bject specifiÑ°dONLNdEâ[îÂ)/$er records that specify a container °dONLNdiìû,(õ    hierarchy°dONLNdtì?ûQ)76-10°dONLNdyü∫™‰(ß∫
  300. Figure 6-3°dONLNdÑü™â)N!The container hierarchy for the fi °dONLNd¶üä™)Ç rst row in a table that meets a °dONLNdΔ©¥(±test°dONLNdé)¥;)!6-18ˇ(@ˇ ˇˇˇˇ@
  301. ˇ·ˇ‚7^
  302. 4⁄*ˇ¯, Palatino
  303. .(·*xviii4^*¿¯,     Helvetica    °dONLNd\úgΔ(dú
  304. Figure 6-4°dONLNd \Íg)NA0°dONLNd \g)& logical descriptor record that specifiÖ‡°dONLNd3\g°)è    es a testà–°dONLNd>\≥g≈)46-19°dONLNdChúsΔ(pú
  305. Figure 6-5°dONLNdNhÍsá)N(Descriptor record for an application-defi`°dONLNdwhàs›)ûned token that identifiã–°dONLNdéh›s)Ues a °dONLNdìrÍ}(zÍdocument‡°dONLNdùr$}6):6-39°dONLNd¢~úâΔ(Üú
  306. Figure 6-6°dONLNd≠~Íâá)N(Descriptor record for an application-defi`°dONLNd÷~àâ›)ûned token that identifiã–°dONLNdÌ~›âÈ)Ues .°dONLNdàÍì˘(êÍthe ,
  307. Courier°dONLNdÙà˘ì)pbounds°dONLNd˚àìp)# property of a window°dONLNdàÇìî)f6-40.°dONLNdîúüΔ(úú
  308. Figure 6-7°dONLNd"îÍü)NA0°dONLNd#îü})$ container hierarchy created by the ã °dONLNdGî|ü’)åApple Event Manager ë°dONLNd[î’üÙ)Yusing a °dONLNdcûÍ©J(¶Íwhose descriptor recordŇ°dONLNd|û\©n)r6-43°dONLNdÅ∂ú¡√(æú    Table 6-1.°dONLNdã∂Í¡})N$Standard descriptor types used with °dONLNdØ∂}¡π)ì keyAEKeyData°dONLNdΩ∂À¡›)N6-12.°dONLNd¬¬úÕ√( ú    Table 6-2°dONLNdìÍÕ))NKeyword-specifi–°dONLNd€¬*Õé)@ed descriptor records for .°dONLNdıÃÍ◊D(‘ÍtypeCompDescriptor°dONLNd    ÃV◊h)l6-16.°dONLNdÿú„√(‡ú    Table 6-3°dONLNdÿÍ„))NKeyword-specifi–°dONLNd'ÿ*„é)@ed descriptor records for .°dONLNdA‚ÍÌS(ÍÍtypeLogicalDescriptor°dONLNdX‚eÌw){6-17.°dONLNd]Óú˘√(ˆú    Table 6-4°dONLNdgÓ͢))NKeyword-specifi–°dONLNdvÓ*˘ı)@5ed descriptor records in a descriptor record of type .°dONLNd´¯ÍI(ÍtypeRangeDescriptor°dONLNd¿¯[m)q6-20.°dONLNd≈ú√( ú    Table 6-5°dONLNdœÍ))NKeyword-specifi–°dONLNdfi*é)@ed descriptor records for .°dONLNd¯ÍI(ÍtypeWhoseDescriptor°dONLNd[m)q6-42.°dONLNdú%√("ú    Table 6-6ˇˇÄ.°dONLNdÍ%+)NKeyword-specifi°dONLNd++%é)Aed descriptor records for ˇ˛¿°dONLNdEé%‘)ctypeWhoseRangeˇˇÄ°dONLNdUÊ%¯)X6-44.°dONLNdZ&ú1√(.ú    Table 6-7°dONLNdd&Í1˙)NNesÄ °dONLNdg&˙1)ted oÇ–°dONLNdl&1=) bject specifiÑ°dONLNdy&=1Õ)/%er records that describe a container °dONLNdû0Í;
  309. (8Íhierarchˇ°dONLNd¶0
  310. ;) y°dONLNd©0!;3)6-56°dONLNdÆ<úG√(Dú    Table 6-8°dONLNd∏<ÍG )NObject specifiÇ@°dONLNdΔ< Gg)6er record for the fiÉp°dONLNd⁄<gG‚)G!rst row that meets a test in the °dONLNd˚FÍQZ(NÍtable named “MyAddresses”–°dONLNdFmQ)É6-65°dONLNdRú]√(Zú    Table 6-9°dONLNd%RÍ]z)N%Logical descriptor record that specifiÖ°dONLNdKRz]ú)ê    es a testà°dONLNdVRÆ]¿)46-66°dONLNd[^úi»(fú
  311. Table 6-10°dONLNdf^Íi)NA0°dONLNdg^iO) range descriptor recordÑ`°dONLNdÅ^ais)q6-73°dONLNdÜjúu»(rú
  312. Table 6-11°dONLNdëjÍu))NKeyword-specifi–°dONLNd†j*ué)@ed descriptor records for .°dONLNd∫tÍI(|ÍtypeObjectSpecifier°dONLNdœt[m)q6-76.°dONLNd‘åúó»(îú Listing 6-1°dONLNd‡åÍóç)N+Installing object accessor functions that fi    ¿°dONLNd åéó’)§nd elements of difÂ@°dONLNdå‘óÌ)Fferent °dONLNd%ñÍ°û(ûÍ-classes for container tokens of the same type
  313. °dONLNdTñ±°√)«6-23°dONLNdY¢ú≠»(™ú Listing 6-2°dONLNde¢Í≠ö)N.Installing one object accessor function that fi P°dONLNdî¢õ≠›)±nds elements of °dONLNd§¨Í∑Û(¥Ídif◊0°dONLNdߨÛ∑´)    /ferent classes for container tokens of one type„‡°dONLNdÿ¨Ω∑œ) 6-25°dONLNd›∏ú√»(¿ú Listing 6-3°dONLNdÈ∏Í√ç)N+Installing object accessor functions that fi    ¿°dONLNd∏é√Û)§nd elements of the same °dONLNd-¬ÍÕf( Í!class for container tokens of dif]@°dONLNdN¬fÕï)| ferent types`Ä°dONLNd\¬ßÕπ)A6-25°dONLNdaŒúŸ»(÷ú Listing 6-4°dONLNdmŒÍŸfi)N@Installing object accessor functions that locate elements of difeÄ°dONLNd≠ŒfiŸ˜)Ùferent °dONLNd¥ÿÍ„e(‡Í classes in the default containerP°dONLNd÷ÿx„ä)é6-26°dONLNd€‰úÔ»(Ïú Listing 6-5°dONLNdÁ‰ÍÔã)N)An object accessor function that locates P°dONLNd‰ãÔÊ)°Apple event objects of .°dONLNd'Ó͢(ˆÍobject class °dONLNd4Ó˘J)3    cDocument°dONLNd?Ó\˘n)?6-30.°dONLNdD˙ú»(ú Listing 6-6°dONLNdP˙Íã)N)An object accessor function that locates P°dONLNdy˙ãÊ)°Apple event objects of .°dONLNdêÍ( Íobject class °dONLNdùO)3
  314. cParagraph°dONLNd©as)D6-32.°dONLNdÆú»(ú Listing 6-7°dONLNd∫Íã)N)An object accessor function that locates P°dONLNd„ãÊ)°Apple event objects of .°dONLNd˙Í%("Íobject class °dONLNd%6)3cWord°dONLNdH%Z)+6-34.°dONLNd&ú1»(.ú Listing 6-8°dONLNd&Í1ã)N)An object accessor function that locates P°dONLNdH&ã1Ê)°Apple event objects of .°dONLNd_0Í;(8Íobject class °dONLNdl0;@)3cWindow°dONLNdu0R;d)56-35.°dONLNdz<úG»(Dú Listing 6-9°dONLNdÜ<ÍGÜ)N(An object accessor function that identifiã°dONLNdØ<ÜGÿ)úes any property of a °dONLNdƒFÍQ(NÍwindowÄ`°dONLNdÕF#Q5)96-38°dONLNd“Rú]Õ(Zú Listing 6-10°dONLNdflRÍ]V)NAn object-counting function∞°dONLNd¸Ri]{)6-49°dONLNd    ^úiÕ(fú Listing 6-11°dONLNd    ^Íi¶)N-Object-comparison function that compares two @°dONLNd    ;^¶iÿ)º Apple event °dONLNd    GhÍs(pÍobjects‡°dONLNd    Phs+)/6-52°dONLNd    UtúÕ(|ú Listing 6-12°dONLNd    btÍO)NCreating an object specifiÖÄ°dONLNd    |tOç)eer record using .°dONLNd    å~ÍâD(ÜÍCreateObjSpecifier°dONLNd    †~Vâh)l6-58.°dONLNd    •äúïÕ(íú Listing 6-13.°dONLNd    ≤äÍï)NUsing °dONLNd    ∏äï])CreateObjSpecifier°dONLNd     ä]ï≤)Z in an application-defi°dONLNd    ·ä≤ï√)Uned .°dONLNd    ÂîÍü    (úÍfunction–°dONLNd    Ôîü.)26-59°dONLNd    Ù†ú´Õ(®ú Listing 6-14°dONLNd
  315. †Í´l)NSpecifying a document container    °dONLNd
  316. "†´ë)ï6-61ˇ!x@ˇ ˇˇˇˇ@
  317. ˇ·ˇ‚7^
  318. 4⁄∫˙, Palatino
  319. ., (‡    xix4^H¿,     Helvetica    °dONLNd\∫gÎ(d∫ Listing 6-15°dONLNd\gv)NSpecifying a table container°dONLNd+\âgõ)Å6-62°dONLNd0h∫sÎ(p∫ Listing 6-16°dONLNd=hsm)NCreating an object specifiÖÄ°dONLNdWhms⁄)eer record with the key form ,
  320. Courier.°dONLNdsr}0(zformName°dONLNd}rB}T):6-67.°dONLNdÇ~∫âÎ(Ü∫ Listing 6-17°dONLNdè~â®)N'Creating a comparison descriptor record†°dONLNd∏~ªâÕ)≥6-68°dONLNdΩä∫ïÎ(í∫ Listing 6-18°dONLNd äïì)N$Creating a logical descriptor record@°dONLNdä¶ï∏)û6-70°dONLNdıñ∫°Î(û∫ Listing 6-19°dONLNdñ°å)N Creating a complex object specifiÖ@°dONLNd#ñå°Ø)Ñ    er recordÑ∞°dONLNd.ñ¬°‘)66-70°dONLNd3¢∫≠Î(™∫ Listing 6-20°dONLNd@¢≠ë)N"Creating a range descriptor recordÉ–°dONLNdd¢£≠µ)õ6-74
  321. —H◊4“H◊ ”∫”
  322. ˇ·ˇ‚7^
  323. °dONLNdi≈H—s(ŒH    Chapter 7 °dONLNdsΔ∫—-)rIntroduction to Scripting    Ä°dONLNdéΔ@—M)Ü7-1°dONLNdì⁄∫‰(‚∫
  324. Figure 7-1°dONLNdû⁄Â)NA0°dONLNdü⁄ÂZ) script window in th°dONLNd≥⁄ZÂö)Le Script Editor a@°dONLNdƒ⁄ö¿)@
  325. pplication`°dONLNd–⁄“Âfl)87-6°dONLNd‘Ê∫Ò‰(Ó∫
  326. Figure 7-2°dONLNdflÊÒ%)NScript fi–°dONLNdËÊ&Ò‹).le icons in the Finder and corresponding user °dONLNd˚ (¯actionŇ°dONLNd ˚$)s‡°dONLNd7˚D)7-7°dONLNd#¸∫‰(∫
  327. Figure 7-3°dONLNd.¸)NHˇP°dONLNd/¸+)ow the LJ°dONLNd6¸+Œ)'AppleScript component executes a scriptå`°dONLNd_¸‡Ì)µ7-9°dONLNdc∫‰(∫
  328. Figure 7-4°dONLNdn{)NHow an application uses the     p°dONLNdä{)s!AppleScript component to execute °dONLNd´(a °dONLNd≠%)script‡°dONLNdµ7I)'7-13°dONLNd∫∫)‰(&∫
  329. Figure 7-5.°dONLNd≈)5)N Role of the °dONLNd—5)S)-'aete'°dONLNd◊S)f) and °dONLNd‹f)Ñ)'aeut'°dONLNd‚Ñ)◊) resources when the p°dONLNdˆ◊))S AppleScript .°dONLNd(3≤(0(component compiles and executes a script↰dONLNd,(ƒ3÷)º7-18°dONLNd14∫?‰(<∫
  330. Figure 7-6.°dONLNd<4?5)N Role of the °dONLNdH45?S)-'aete'°dONLNdN4S?f) and °dONLNdS4f?Ñ)'aeut'°dONLNdY4Ñ?◊) resources when the p°dONLNdm4◊?)S AppleScript .°dONLNdy>I∂(F)component records and decompiles a scriptá∞°dONLNd§>»I⁄)¿7-19°dONLNd©J∫U‰(R∫
  331. Figure 7-7°dONLNd¥JU)NUˇP°dONLNdµJU≈)0sing a handler in a script context to handle an P°dONLNdÂJΔUfl)∏Apple °dONLNdÎT_(\eventÇê°dONLNdÚT0_B)(7-26
  332. ÉHâ4ÑHâ Ö∫Ö
  333. ˇ·ˇ‚7^
  334. °dONLNd˜wHÉs(ÄH    Chapter 8 °dONLNdx∫ɯ)r Apple Event ≠∞°dONLNdx¯ɲ)>T-∞°dONLNdx˛Ék)erminology Resources    ùP°dONLNd$x}Éä)8-1°dONLNd)å∫ó‰(î∫
  335. Figure 8-1.°dONLNd4åóF)NStructure of an °dONLNdDåFód)>'aeut'°dONLNdJådóp) or °dONLNdNåpóé) 'aete'°dONLNdTåéó¥)     resource°dONLNd_åΔóÿ)88-26.°dONLNddò∫£‰(†∫
  336. Figure 8-2.°dONLNdoò£ê)N#Structure of the header data in an °dONLNdíòê£ï)à'°dONLNdìòï£Æ)aeut'°dONLNdòòÆ£∞) °dONLNdôò∞£∫)or°dONLNdõò∫£º)
  337.  °dONLNdúòº£⁄)'aete'°dONLNd¢ò⁄£‹) .°dONLNd£¢≠+(™resourceĆ°dONLNd≠¢=≠O)58-27°dONLNd≤Æ∫π‰(∂∫
  338. Figure 8-3.°dONLNdΩÆπr)NStructure of suite data in a°dONLNdŸÆrπw)jn°dONLNd⁄Æwπy) °dONLNd€Æyπó)'aeut'°dONLNd·Æóπô) °dONLNd‚Æôπ£)or °dONLNdÂÆ£π¡)
  339. 'aete'°dONLNdÎÆ¡π√) °dONLNdÏÆ√πÁ)resource°dONLNdˆÆ˘π )68-28.°dONLNd˚∫∫≈‰(¬∫
  340. Figure 8-4.°dONLNd∫≈|)NStructure of event data in an °dONLNd$∫|≈ö)t'aeut'°dONLNd*∫ö≈¶) or °dONLNd.∫¶≈ƒ) 'aete'°dONLNd4∫ƒ≈Í)     resource°dONLNd?∫¸≈)88-30.°dONLNdDΔ∫—‰(Œ∫
  341. Figure 8-5.°dONLNdOΔ—§)N(Structure of additional parameter data i°dONLNdwΔ§—∑)ún an °dONLNd|Δ∑—’)'aeut'°dONLNdÇΔ’—◊) °dONLNdÉΔ◊—·)or °dONLNdÜΔ·—ˇ)
  342. 'aete'°dONLNdåΔˇ—) .°dONLNdç–€+(ÿresourceĆ°dONLNdó–=€O)58-34°dONLNdú‹∫Á‰(‰∫
  343. Figure 8-6.°dONLNdß‹Áä)N"Structure of object class data in °dONLNd…‹äÁñ)Çan °dONLNdËñÁ¥) 'aeut'°dONLNd“‹¥Á∂) °dONLNd”‹∂Á¿)or °dONLNd÷‹¿Áfi)
  344. 'aete'°dONLNd‹‹fiÁ‡) .°dONLNd›ÊÒ%(Óresourc–°dONLNd‰Ê&Ò+)eĆ°dONLNdÁÊ=ÒO)8-36°dONLNdÏÚ∫˝‰(˙∫
  345. Figure 8-7.°dONLNd˜Ú˝á)N!Structure of property data in an °dONLNdÚὕ)'aeut'°dONLNdÚ•˝±) or °dONLNd"Ú±˝œ) 'aete'°dONLNd(Úœ˝—) .°dONLNd)¸%(resourc–°dONLNd0¸&+)eĆ°dONLNd3¸=O)8-38°dONLNd8∫‰(∫
  346. Figure 8-8.°dONLNdCù)N&Structure of element class data in an °dONLNdiùª)ï'aeut'°dONLNdoª«) or °dONLNds«Â) 'aete'°dONLNdyÂÁ) .°dONLNdz%(resourc–°dONLNdÅ&+)eĆ°dONLNdÑ=O)8-41°dONLNdâ∫)‰(&∫
  347. Figure 8-9.°dONLNdî)∂)N+Structure of comparison operator data in an°dONLNdø∂)∏)Æ °dONLNd¿∏)÷)'aeut'°dONLNdΔ÷)‚) or °dONLNd ‚)) 'aete'°dONLNd–)) .°dONLNd—(3%(0resourc–°dONLNdÿ(&3+)eĆ°dONLNd€(=3O)8-42°dONLNd‡4∫?Í(<∫ Figure 8-10.°dONLNdÏ4?ó)N$Structure of enumeration data in an °dONLNd4ó?µ)è'aeut'°dONLNd4µ?¡) or °dONLNd4¡?fl) 'aete'°dONLNd 4fl?·) .°dONLNd!>I%(Fresourc–°dONLNd(>&I+)eĆ°dONLNd+>=IO)8-43°dONLNd0J∫UÍ(R∫ Figure 8-11.°dONLNd<JUì)N#Structure of enumerator data in an °dONLNd_JìU±)ã'aeut'°dONLNdeJ±UΩ) or °dONLNdiJΩU€) 'aete'°dONLNdoJ€U›) .°dONLNdpT_%(\resourc–°dONLNdwT&_+)eĆ°dONLNdzT=_O)8-44°dONLNdl∫w·(t∫    Table 8-1°dONLNdâlw3)N Syntax for –°dONLNdîl3wÙ)+0AppleScript arguments that correspond to direct °dONLNdƒvÅ5(~
  348. parameters@°dONLNd–vHÅU)@8-5°dONLNd‘Ç∫ç·(ä∫    Table 8-2°dONLNdfiÇç3)N Syntax for –°dONLNdÈÇ3ç)+3AppleScript arguments that correspond to insertion °dONLNdåóS(îlocation descriptor P°dONLNd0åTóq)Lrecords °dONLNd9åÑóë)08-6°dONLNd=ò∫£·(†∫    Table 8-3.°dONLNdGò£I)NStructure of the °dONLNdXòI£g)A'aeut'°dONLNd^òg£z) and °dONLNdcòz£ò)'aete'°dONLNdiòò£√)
  349.  resources°dONLNduò’£‚)=8-8ˇp@ˇ ˇˇˇˇ@
  350. ˇ·ˇ‚7^
  351. 4⁄*ˇ¯, Palatino
  352. .(·*xx4^*¿¯,     Helvetica    °dONLNd\úg»(dú Listing 8-1.°dONLNd \Ígr)N"Resource type declaration for the ,
  353. Courier°dONLNd.\rgê)à'aeut'°dONLNd4\êg∂)     resource°dONLNd?\»g’)88-9.°dONLNdChús»(pú Listing 8-2.°dONLNdOhÍs+)NRez input for an °dONLNd`h+sI)A'aete'°dONLNdfhIs)+ resource for an application that supports .°dONLNdërÍ}ú(zÍ.the Required and Core suites in their entirety∞°dONLNd¡rØ}¡)≈8-15°dONLNdΔ~úâ»(Üú Listing 8-3.°dONLNd“~Íâ+)NRez input for an °dONLNd„~+âI)A'aete'°dONLNdÈ~Iâƒ) resource that extends the defi°dONLNd~ƒâÎ){ nitions of .°dONLNdàÍìL(êÍthe Required, Core, and ‹‡°dONLNd+àLìQ)bT\‡°dONLNd,àQìw)
  354. ext suites_°dONLNd8àâìõ)88-17°dONLNd=îúü»(úú Listing 8-4°dONLNdIîÍü)NA0°dONLNdJîü@) handler for the Get à¿°dONLNd_î?üo)O
  355. AETE eventç°dONLNdkîÅüì)B8-25°dONLNdp†ú´»(®ú Listing 8-5.°dONLNd|†Í´r)N"Resource type declaration for the °dONLNdû†r´ê)à'scsz'°dONLNd§†ê´∂)     resource°dONLNd؆»´⁄)88-45
  356. œ*’¯4–*’¯ —ú—¯
  357. ˇ·ˇ‚7^
  358. .°dONLNd¥√*œU(Ã*    Chapter 9 °dONLNdæƒúœ—)r
  359. Recording P°dONLNd»ƒ—œ)5 Apple Events    Ë–°dONLNd÷ƒ#œ0)R9-1°dONLNd€ÿú„»(‡ú Listing 9-1°dONLNdÁÿÍ„)NA0°dONLNdËÿ„fi)? function used by a factored application to send itself a Quit °dONLNd'‚ÍÌ.(ÍÍApplication eventê°dONLNd:‚AÌN)W9-7°dONLNd>Óú˘»(ˆú Listing 9-2°dONLNdJÓ͢)NA0°dONLNdKÓ˘Ã)9 routine used by a factored application to handle a Quit °dONLNdѯÍ.(ÍApplication eventê°dONLNdó¯AN)W9-8°dONLNdõú»( ú Listing 9-3°dONLNdßÍ)NA0°dONLNd®‰)@ routine used by a factored application to send itself a Create °dONLNdËÍ#(ÍElement event°dONLNd˜6H)L9-10°dONLNd¸ú%»("ú Listing 9-4°dONLNdÍ%≠)N0The Create Element event handler for a factored °dONLNd8$Í/*
  360. applicationÇ°dONLNdE$'/4)=9-1ÿ–°dONLNdH$3/8) 1°dONLNdJ0ú;»(8ú Listing 9-5°dONLNdV0Í;)NA0°dONLNdW0;“)9 routine used by a factored application to handle window °dONLNdê:ÍE(BÍmovementÄ¿°dONLNdö:&E8)<9-13
  361. i*o¯4j*o¯ kúk¯
  362. ˇ·ˇ‚7^
  363. °dONLNdü]*i[(f*
  364. Chapter 10 °dONLNd™^úi)rScripting Components    ∏‡°dONLNd¿^i,)~10-1°dONLNdΔrú}Ã(zú Figure 10-1°dONLNd“rÍ})NA0°dONLNd”r}v)" generic storage descriptor recordÖ‡°dONLNd˜rà}ü)ò10-12°dONLNd˝~úâÃ(Üú Figure 10-2°dONLNd    ~Íâ)NA0°dONLNd
  365. ~â;) component-specifiÖ†°dONLNd~;â¶)Kc storage descriptor recordá°dONLNd9~∏âœ)}10-13°dONLNd?ñú°Õ(ûú Listing 10-1°dONLNdLñÍ°π)N3Locating a scripting component that supports specifiçÄ°dONLNdÄñπ°‚)œ c optional °dONLNdã†Í´
  366. (®ÍroutinesÅ`°dONLNd.)210-6°dONLNdö¨ú∑Õ(¥ú Listing 10-2°dONLNdߨÍ∑)NA0°dONLNd®¨∑Ø)/ routine that compiles and executes source dataê°dONLNdŸ¨¡∑”)—10-9°dONLNdfi∏ú√Õ(¿ú Listing 10-3.°dONLNdÎ∏Í√)NAp°dONLNdÏ∏√E) procedure that uses p°dONLNd∏E√ã)UOSAScriptErrorp°dONLNd∏ã√Ó)F to get information about .°dONLNd)¬ÍÕ2( Ían execution error°dONLNd=¬EÕW)[10-1Y¿°dONLNdA¬VÕ[)1°dONLNdCŒúŸÕ(÷ú Listing 10-4°dONLNdPŒÍŸ)NA0°dONLNdQŒŸ„)> routine that loads and executes script data previously saved °dONLNdèÿÍ„ç(‡Í)using a generic storage descriptor record`°dONLNd∫ÿ†„∑)∂10-16°dONLNd¿‰úÔÕ(Ïú Listing 10-5°dONLNdÕ‰ÍÔ)NA0°dONLNdŒ‰ÔΔ)9 routine that displays a compiled script for editing and °dONLNdÓ͢(ˆÍ recompiles `°dONLNdÓ˘).it˛–°dONLNdÓ.˘E)10-18°dONLNd˙úÕ(ú Listing 10-6°dONLNd)˙Í)NA0°dONLNd*˙g) function that loads and modifiãP°dONLNdI˙gˆ)w&es script data, then saves it using a °dONLNdoÍn( Í!generic storage descriptor recordÉê°dONLNdíÄó)ñ10-19°dONLNdòúÕ(ú Listing 10-7.°dONLNd•Í)NAp°dONLNd¶)     general LJ°dONLNdØö)!"Apple event handler that uses the LJ°dONLNd—öÃ)â
  367. OSADoEventLJ°dONLNd€ÃŒ)2 .°dONLNd‹Í%    ("Ífunction–°dONLNdÊ%3)210-21
  368. I*O¯4J*O¯ KúK¯
  369. ˇ·ˇ‚7^
  370. °dONLNdÏ=*IU(F*    Chapter 1®¿°dONLNdı=UIZ)+1 °dONLNd˜>úIX)G"Program-to-Program Communications 1–°dONLNd>YI_)ΩT±–°dONLNd>^I~)oolbox    °dONLNd">ëIñ)31rP°dONLNd#>ïI¢)1-1°dONLNd(Rú]Ã(Zú Figure 11-1°dONLNd4RÍ])NA0°dONLNd5R]) PPC Z0°dONLNd:R] )T⁄0°dONLNd;R ]≠)'oolbox session between two applicationse∞°dONLNddR¿]≈)µ1º°dONLNdeRƒ]—)1-5°dONLNdi^úiÃ(fú Figure 11-2°dONLNdu^Íi¸)NThe Å °dONLNdy^¸i+)icon for the É–°dONLNdÜ^+i_)/ Sharing Setuàp°dONLNdí^_iö)4p control panel冰dONLNd£^¨i±)M1„°dONLNd§^∞iΩ)1-6°dONLNd®júuÃ(rú Figure 11-3°dONLNd¥jÍuk)NThe Sharing Setup control panelâ°dONLNd’j}uÇ)ì1‡P°dONLNd÷jÅué)1-6°dONLNd⁄vúÅÃ(~ú Figure 11-4°dONLNdÊvÍÅn)N!The session termination alert box°dONLNd    vÅÅÜ)ó1[P°dONLNd
  371. vÖÅí)1-7°dONLNdÇúçÃ(äú Figure 11-5°dONLNdÇÍçm)NThe users and groups dialog boxâ–°dONLNd;ÇçÑ)ï1‡0°dONLNd<ÇÉçê)1-8°dONLNd@éúôÃ(ñú Figure 11-6°dONLNdLéÍôa)NThe user termination alert boxÄ°dONLNdlétôy)ä1Y‡°dONLNdméxôÖ)1-8°dONLNdqöú•Ã(¢ú Figure 11-7°dONLNd}öÍ•9)NThe guest dialog boáp°dONLNdêö9•=)Oxp°dONLNdìöP•U)1]–°dONLNdîöT•a)1-9°dONLNdò¶ú±Ã(Æú Figure 11-8°dONLNd§¶Í±)NThe PPC Y°dONLNd¨¶±)'TŸ°dONLNd≠¶±å)oolbox authentication process‚p°dONLNdöû±£)â18–°dONLNdÕ¶£±µ)1-10ˇ%@@ˇ ˇˇˇˇ@
  372. ˇ·ˇ‚7^
  373. 4⁄∫˙, Palatino
  374. ., (‡    xxi4^H¿,     Helvetica    °dONLNd\∫gÍ(d∫ Figure 11-9°dONLNd \g‰)N4Database and spreadsheet applications using the PPC °dONLNd@fq*
  375. T°dONLNdAfq')oolboxÇê°dONLNdIf9q>),1ÿ°dONLNdJf=qO)1-13°dONLNdOr∫}Ô(z∫ Figure 11-10°dONLNd\r})NTÄ–°dONLNd]r}Ì)7wo Macintosh applications and their corresponding ports –°dONLNdñr})Û1b0°dONLNdór})1-18°dONLNdú~∫âÔ(Ü∫ Figure 11-11°dONLNd©~â/)NThe PPC Y°dONLNd±~/â4)'TŸ°dONLNd≤~3â‹)+oolbox and a dictionary service application‚∞°dONLNdfl~ÓâÛ)ª19°dONLNd‡~Ûâ)1-20°dONLNdÂä∫ïÔ(í∫ Figure 11-12°dONLNdÚäïÉ)NThe program linking dialog boxÑ∞°dONLNdäïïö)ç1€°dONLNdäôï´)1-22°dONLNdñ∫°Ô(û∫ Figure 11-13°dONLNd%ñ°Õ)N2The program linking dialog box without a zone listàÄ°dONLNdYñfl°‰)◊1fi‡°dONLNdZñ„°ı)1-23°dONLNd_¢∫≠Ô(™∫ Figure 11-14°dONLNdl¢≠)NTˇ`°dONLNdm¢≠u)he user identity dialog box܆°dONLNdä¢à≠ç){1›°dONLNdã¢å≠û)1-30°dONLNdêÆ∫πÔ(∂∫ Figure 11-15°dONLNdùÆπë)N!The incorrect password dialog boxÖÄ°dONLNd¿Æ£π®)õ1€‡°dONLNd¡Æßππ)1-31°dONLNdΔ∫∫≈Ô(¬∫ Figure 11-16°dONLNd”∫≈å)N The invalid user name dialog boxÜ°dONLNdı∫û≈£)ñ1›P°dONLNdˆ∫¢≈¥)1-31°dONLNd˚Δ∫—Ô(Œ∫ Figure 11-17°dONLNdΔ—)NT™p°dONLNd    Δ—|)ransmitting message blocks≠°dONLNd%Δé—ì)Å1p°dONLNd&Δì—•)1-40°dONLNd+“∫›Ô(⁄∫ Figure 11-18°dONLNd8“›/)NThe PPC Y°dONLNd@“/›4)'TŸ°dONLNdA“3›ï)oolbox parameter blocks›°dONLNdZ“ß›¨)t13`°dONLNd[“¨›æ)1-47°dONLNd`Í∫ıÎ(Ú∫ Listing 11-1.°dONLNdmÍıV)NInitializing the PPC V°dONLNdÇÍVı[)NTWê°dONLNdÉÍZıû)oolbox using the ,
  376. CourierWê°dONLNdîÍûı¡)DPPCInitWê°dONLNdõÍ¡ı‰)#     functionWê°dONLNd¶Íˆı˚)51≠ °dONLNdßÍ˙ı )1-12.°dONLNd¨ˆ∫Î(˛∫ Listing 11-2°dONLNdπˆX)NOpening a PPC port°dONLNdÕˆkp)c1\P°dONLNdŒˆoÅ)1-21°dONLNd”∫Î(
  377. ∫ Listing 11-3°dONLNd‡?)NUsing a port fi‡°dONLNdÔ@n)8lter functionÉ¿°dONLNd˛ÄÖ)@1⁄ °dONLNdˇÑñ)1-24°dONLNd∫Î(∫ Listing 11-4°dONLNd¨)N)Browsing through dictionary service ports†°dONLNd<øƒ)∑1[°dONLNd=√’)1-26°dONLNdB∫%Î("∫ Listing 11-5.°dONLNdO%0)N
  378. Using the °dONLNdY0%l)( IPCListPorts°dONLNdel%Í)<# function to obtain a list of ports°dONLNdä¸%)ê1’ê°dONLNdã%)1-28.°dONLNdê&∫1Î(.∫ Listing 11-6.°dONLNdù&10)N
  379. Using the °dONLNdß&01ä)(StartSecureSession°dONLNdπ&ä1Á)Z function to establish a .°dONLNd“0;&(8session¿°dONLNd€09;>)11X °dONLNd‹0=;O)1-32°dONLNd·<∫GÎ(D∫ Listing 11-7.°dONLNdÓ<G})NInitiating a session using the °dONLNd<}G•)uPPCStart°dONLNd<•G»)(     function°dONLNd <⁄Gfl)51’ê°dONLNd!<fiG)1-34.°dONLNd&H∫SÎ(P∫ Listing 11-8.°dONLNd3HS0)N
  380. Using the °dONLNd=H0S])(    PPCInform°dONLNdFH]SÏ)-& function to enable a port to receive .°dONLNdlR]+(ZsessionsÅ¿°dONLNdvR=]B)51ÿ °dONLNdwRA]S)1-36°dONLNd|^∫iÎ(f∫ Listing 11-9.°dONLNdâ^ii)NCompletion routine for a °dONLNd¢^iiñ)a    PPCInform°dONLNd´^ñiπ)-     function°dONLNd∂^Ài–)51’ê°dONLNd∑^œi·)1-37.°dONLNdºj∫u(r∫Listing 11-10.°dONLNd ju§)N&Accepting a session request using the °dONLNdj§u—)ú    PPCAccept°dONLNd˘j—u”)- .°dONLNd˙t'(|function–°dONLNdt:?)21Y0°dONLNdt>P)1-38°dONLNd
  381. Ä∫ã(à∫Listing 11-11.°dONLNdÄãi)NCompletion routine for a °dONLNd1Äiãñ)a    PPCAccept°dONLNd:Äñãπ)-     function°dONLNdEÄÀã–)51’ê°dONLNdFÄœã·)1-38.°dONLNdKå∫ó(î∫Listing 11-12.°dONLNdYåó°)N&Rejecting a session request using the °dONLNdå°óŒ)ô    PPCReject°dONLNdàåŒó–)- .°dONLNdâñ°'(ûfunction–°dONLNdìñ:°?)21Y0°dONLNdîñ>°P)1-39°dONLNdô¢∫≠(™∫Listing 11-13.°dONLNdߢ≠i)NCompletion routine for a °dONLNd¿¢i≠ñ)a    PPCReject°dONLNd…¢ñ≠π)-     function°dONLNd‘¢À≠–)51’ê°dONLNd’¢œ≠·)1-39.°dONLNd⁄Æ∫π(∂∫Listing 11-14.°dONLNdËÆπ0)N
  382. Using the °dONLNdÚÆ0πS)(PPCRead°dONLNd˘ÆSπÏ)#' function to read data during a session°dONLNd"Æ˛π)´1’ê°dONLNd#Æπ)1-41.°dONLNd(∫∫≈(¬∫Listing 11-15.°dONLNd6∫≈4)N Polling the °dONLNdB∫4≈\),ioResult°dONLNdJ∫\≈c)( fi°dONLNdM∫c≈≥)eld to determine if a °dONLNdc∫≥≈÷)PPPCRead°dONLNdj∫÷≈ )# function has .°dONLNdxƒœ1(à   completed0°dONLNdɃDœI)<1Xê°dONLNdуHœZ)1-41°dONLNdâ–∫€(ÿ∫Listing 11-16.°dONLNdó–€0)N
  383. Using the °dONLNd°–0€X)(PPCWrite°dONLNd©–X€“)(! function to write data during a .°dONLNd ⁄Â&(‚session¿°dONLNd”⁄9Â>)11X °dONLNd‘⁄=ÂO)1-42°dONLNdŸÊ∫Ò(Ó∫Listing 11-17.°dONLNdÁÊÒ)NPo°dONLNdÈÊÒ4)
  384. lling the °dONLNdÛÊ4Ò\)!ioResult°dONLNd˚Ê\Òc)( fi°dONLNd˛ÊcÒ≥)eld to determine if a °dONLNdÊ≥Ò€)PPPCWrite°dONLNdÊ€Ò)( function has .°dONLNd*˚1(¯    completed0°dONLNd5D˚I)<1Xê°dONLNd6H˚Z)1-43°dONLNd;¸∫(∫Listing 11-18.°dONLNdI¸ä)NEnding a PPC session using the °dONLNdh¸ä®)ÇPPCEnd°dONLNdn¸®À)     function°dONLNdy¸›‚)51’ê°dONLNdz¸·Û)1-43.°dONLNd∫(∫Listing 11-19.°dONLNdç|)NClosing a PPC port using the °dONLNd™|§)tPPCClose°dONLNd≤§«)(     function°dONLNdΩŸfi)51’ê°dONLNdæ›Ô)1-44.°dONLNd√∫(∫Listing 11-20.°dONLNd—0)N
  385. Using the °dONLNd€0ä)(DeleteUserIdentity°dONLNdÌä˝)Z function to invalidate a user .°dONLNd )$(&identityP°dONLNd7)<)/1W∞°dONLNd;)M)1-45
  386. MHS4NHS O∫O
  387. ˇ·ˇ‚7^
  388. °dONLNdAHMy(JH
  389. Chapter 12 °dONLNd'B∫M‘)rData /°dONLNd,B‘M%)Access Manager    –°dONLNd<B8MJ)d12-1°dONLNdBV∫aÍ(^∫ Figure 12-1°dONLNdNVa)NA0°dONLNdOVa}) connection with a databaseå`°dONLNdlVèa°)Å12-6°dONLNdqb∫mÍ(j∫ Figure 12-2°dONLNd}bm`)NUsing high-level Data –°dONLNdìb`m≈)XAccess Manager routinesàp°dONLNd¨b◊mÈ)w12-8°dONLNd±n∫yÍ(v∫ Figure 12-3°dONLNdΩny\)NUsing low-level Data ÅÄ°dONLNd“n\y¡)TAccess Manager routines °dONLNdÎn‘yÎ)x12-10°dONLNdÒz∫ÖÍ(Ç∫ Figure 12-4°dONLNd˝zÖ)NA0°dONLNd˛zÖ) flP°dONLNd    zÖ‹)3owchart of a session using the high-level interface °dONLNd    6zÓÖ)Ÿ12-15°dONLNd    <Ü∫ëÍ(é∫ Figure 12-5°dONLNd    HÜë)NA0°dONLNd    IÜë) flP°dONLNd    LÜëÿ)2owchart of a session using the low-level interface䆰dONLNd    ÄÜÍë)’12-29°dONLNd    Üí∫ùÍ(ö∫ Figure 12-6°dONLNd    ííù)NA0°dONLNd    ìíù|) query document dialog boxä0°dONLNd    Øíéù•)Ä12-47°dONLNd    µû∫©Í(¶∫ Figure 12-7°dONLNd    ¡û©)N?The relationship between resources in a query document and the °dONLNd
  390. ®≥:*
  391. query record°dONLNd
  392. ®M≥d)E12-49ˇê@ˇ ˇˇˇˇ@
  393. ˇ·ˇ‚7^
  394. 4⁄*ˇ¯, Palatino
  395. .(·*xxii4^*¿¯,     Helvetica    °dONLNd\úgÃ(dú Figure 12-8°dONLNd \ÍgÄ)N$The relationship between a query defiäP°dONLNd1\ÄgÀ)ñnition function and °dONLNdEfÍq(nÍqueries@°dONLNdNfq1)012-50°dONLNdTrú}Ã(zú Figure 12-9.°dONLNd`rÍ}e)NStructure of a compiled query (,
  396. Courier°dONLNdre}É){'qrsc'°dONLNdÖrÉ}¨)
  397. ) resource°dONLNdëræ}’);12-90.°dONLNdó~úâ—(Üú Figure 12-10.°dONLNd§~Íâ~)N&Structure of a compiled query string (°dONLNd ~~âú)î'wstr'°dONLNd–~úâ≈)
  398. ) resource°dONLNd‹~◊âÓ);12-91.°dONLNd‚ñú°»(ûú
  399. Table 12-1°dONLNdÌñÍ°&)NData types defiÑ∞°dONLNd¸ñ&°h)<ned by the Data  ∞°dONLNd ñh°´)BAccess Manager–°dONLNdñΩ°‘)U12-38°dONLNd"ÆúπÕ(∂ú Listing 12-1°dONLNd/ÆÍπ^)NUsing the high-level interfaceÑê°dONLNdOÆpπá)Ü12-18°dONLNdU∫ú≈Õ(¬ú Listing 12-2°dONLNdb∫Í≈Ô)NTÄ–°dONLNdc∫Ô≈K)wo completion routinesÑ°dONLNd{∫]≈t)n12-21°dONLNdÅΔú—Õ(Œú Listing 12-3°dONLNdéΔÍ—)NA0°dONLNdèΔ—H) sample status routine@°dONLNdßΔZ—q)j12-26°dONLNd≠“ú›Õ(⁄ú Listing 12-4°dONLNd∫“Í›Q)NSending a query fragmentP°dONLNd‘“d›{)z12-31°dONLNd⁄fiúÈÕ(Êú Listing 12-5°dONLNdÁfiÍÈZ)NUsing the low-level interface@°dONLNdfimÈÑ)É12-33°dONLNd ÍúıÕ(Úú Listing 12-6°dONLNdÍÍı)NA0°dONLNdÍı)) result handler@°dONLNd+Í;ıR)K12-45°dONLNd1ˆúÕ(˛ú Listing 12-7°dONLNd>ˆÍ)NA0°dONLNd?ˆ)
  400.  query defi0°dONLNdJˆQ)*nition functionâP°dONLNd[ˆcz)I12-52ˇ@ˇ ˇˇˇˇ@
  401. ˇ·ˇ‚7^
  402. 4⁄∫˙, Palatino
  403. .Ñ`(·xxiii    3, Ã(#∫PREFN )3ACE 4^H¿
  404. vHú4vHú óHó
  405. ˇ·ˇ‚7^ˇˇ¬òˇ◊°dONLNd\∫ui(n∫About This Book
  406. °dONLNdú∫®Ë*7
  407. This book,ô@°dONLNdúË®Í). @°dONLNdúή∫)0Inside Macintosh: Interapplication CommunicationA °dONLNdMú∫®˙)œ, describes the °dONLNd]©∫µS(≤∫!interapplication communication ar‰¿°dONLNd~©Sµy)ô    chitecturôÄ°dONLNdá©zµ´)' e, which pr¸†°dONLNdí©´µÛ)1ovides a standarT†°dONLNd¢©Ùµ)Id and °dONLNd®∂∫¬ü(ø∫.extensible mechanism for communication among M‰`°dONLNd÷∂ü¬¯)Âacintosh application Ä°dONLNdÍ∂˘¬)Zs. °dONLNdÌ√∫œ(Ã∫This book also deôÄ°dONLNd˛√œz)Mscribes the system softwar[@°dONLNd√{œÜ)te ri‡°dONLNd√Üœ˛) outines that you can use to °dONLNd7–∫‹Ê(Ÿ∫implemen_Ä°dONLNd?–Á‹Î)-:t various forms of interapplication communication in your °dONLNdy›∫ÈÓ(Ê∫ application.°dONLNdÜÔ∫˚fl*    If you ar °dONLNdèÔ‡˚)& e new to prΩ¿°dONLNdöÔ˚¡)1#ogramming on the Macintosh computer3‡°dONLNdΩÔ¡˚˙)∞, you should °dONLNd ¸∫Ω(∫rE°dONLNdÀ¸æ«)ea†°dONLNdÕ¸»–)
  408. d ™`°dONLNdœ¸–”)I˛@°dONLNd–¸”D)nside Macintosh: Overview }‡°dONLNd͸Eq)r for an intrÃ`°dONLNdı¸q˝), oduction to general concepts of °dONLNd    ∫Ù(∫ Macintosh pr,†°dONLNd!    ı-); ogramming; ¿°dONLNd,    .¨)9Inside Macintosh: Macintosh Tg@°dONLNdI    ´Ô)}oolbox Essentials,@°dONLNdZ    )E for °dONLNd_∫"≠(∫3information on how to use menus, windows, and contrzÄ°dONLNdí≠")Ûols in your application`°dONLNd©")d;Ñ`°dONLNd™") °dONLNd´#∫/Õ(,∫and Ì °dONLNdØ#Õ/o)%Macintosh Human Interface Guidelines |¿°dONLNd‘#p/)£"for a complete discussion of user °dONLNdˆ0∫<È(9∫Einterface guidelines and principles that every Macintosh application °dONLNd;=∫Iÿ*should °dONLNdA=ŸI€) è °dONLNdB=€I˜)follow
  409. ¿°dONLNdH=˜I˘).°dONLNdJO∫[Â(X∫AThis book describes how to implement publish and subscribe featurª °dONLNdãOÂ[(X es in your °dONLNdñ\∫h‘(e∫>application, how to communicate with other applications using 톰dONLNd‘\‘h(e‘Apple events, °dONLNd‚i∫ufl(r∫how to rö¿°dONLNdÍiflu˜)%>espond to scripts, and how to exchange information with other °dONLNd(v∫Ç9(∫applications using the PPC T>@°dONLNdDv9Ç)/oolbox. It also discusses how your application °dONLNdsÉ∫è(å∫can use the Data N°dONLNdÑÉè∂)K'Access Manager to access information fr˚†°dONLNd´É∂è˜)±om a database °dONLNdπê∫ú=(ô∫application or other data sour¡@°dONLNd◊ê=úH)Éce.°dONLNd€¢∫ÆH(´∫!For an overview of all the featurs`°dONLNd¸¢HÆ])ées pr¡ °dONLNd¢]ÆÂ)ovided by the interapplication °dONLNd Ø∫ª
  410. (∏∫communication arıÄ°dONLNd0Ø
  411. ª0)P    chitectur™@°dONLNd9Ø1ª)'e, see the chapter „‡°dONLNdLتî)N“Intr °dONLNdQØïª)oduction to Interapplication °dONLNdnº∫»(≈∫Communication”W@°dONLNd|º»?)M in this book.°dONLNdãŒ∫⁄¿(◊∫Tµ¿°dONLNdåŒø⁄–)o prr`°dONLNdꌗ⁄û).ovide support for publish and subscribe featur9 °dONLNdæŒü⁄)Œes in your application, °dONLNd÷€∫Á«(‰∫seeP@°dONLNdŸ€»Á ) –@°dONLNd⁄€ Á˛) the chapter °dONLNdÊ€˛ÁR)4“Edition Manager”ìÄ°dONLNd˜€SÁ    )U* in this book. This chapter describes how °dONLNd!Ë∫Ùj(Ò∫(your application can allow users to shar‹¿°dONLNdIËjÙÌ)∞e dynamic data among many °dONLNdcı∫Ì(˛∫
  412. documents.°dONLNdn∫¿*Tµ¿°dONLNdoøñ)/o communicate with other applications by using H°dONLNdûó—)ÿ Apple eventsœ¿°dONLNd™—‹):, fi‹Ä°dONLNdÆ‹˙) rst see °dONLNd∂∫ Ω(∫t¬`°dONLNd∑Ω «)he]`°dONLNdπ»  )  ›`°dONLNd∫  Î)chapter¿°dONLNd¡Ï Ó)" ü¿°dONLNd¬Ó )“Intr◊°dONLNd« 8) oduction to ™¿°dONLNd”8 x)5Apple Events”ц°dONLNd‡y ≈)A for a general intr–Ä°dONLNdÛ≈ Ó)L    oduction °dONLNd¸!∫-¬(*∫to7‡°dONLNd˛!√-≈)     YÄ°dONLNdˇ!≈-ˇ) Apple events·@°dONLNd !ˇ-):. For information on how to ruÄ°dONLNd(!Ä-¬)Åespond to the rª °dONLNd7!¬-Ÿ)Bequir“`°dONLNd<!Ÿ-Ê)ed °dONLNd?.∫:◊(7∫Apple }Ä°dONLNdE.ÿ:)
  413. events, se`°dONLNdO.:>)+e the chapter w¿°dONLNd].>:Ü);“Responding to 3Ä°dONLNdl.Ü:…)HApple Events.”ç`°dONLNdz.…:—)C TC °dONLNd|.—:·)o crm‡°dONLNdÄ.·:ı)eate °dONLNdÖ;∫G (D∫andm °dONLNdà;ÀGÕ) Ì °dONLNdâ;ÕG‰)send Ä°dONLNdé;ÂGh)Apple events, see the chapter ˙@°dONLNd¨;hGx)É“Cr÷@°dONLNdØ;xG–)eating and Sending y@°dONLNd¬;–G)XApple Events.”°dONLNd—M∫Y¿(V∫Y@Ä°dONLNd“M¿YØ)8ou can choose to write your application so that it can ró °dONLNd
  414. MØY–)Ôecognizè`°dONLNdM—Y)"e descriptions, °dONLNd!Z∫f≈(c∫in [`°dONLNd$Z≈f¥) 7Apple events, of objects in the application such as wor€‡°dONLNd[Z¥f˙)Ôds, paragraphs, °dONLNdkg∫s(p∫shapes, or documents.ˆ@°dONLNdÄgs$)b T¨°dONLNdÇg$sç)o do so, see the chapter ’@°dONLNdõgçsfi)i“Resolving and Cr†°dONLNd¨gfls¸)Reating °dONLNd≥t∫Ĉ(}∫Object Specifiß`°dONLNd¡tˆÄ)<er Recor°dONLNd…tÄ,)%ds.”°dONLNdŒÜ∫í,(è∫In addition to supporting ÷†°dONLNdËÜ,íà)rApple events, you caZ`°dONLNd¸Üâí±)]n make yÁ†°dONLNd    Ü±íÓ)(our applicatioº`°dONLNd    ÜÔí˜)>n °dONLNd    ì∫üæ(ú∫sΩ°dONLNd    ìæüfl)criptablº¿°dONLNd    ì‡üÚ)"e—t»¿°dONLNd     ìÚüB)hat is, capable of rº@°dONLNd    4ìBü~)Pesponding to  °dONLNd    Aì~üÒ)<Apple events sent to it by °dONLNd    \†∫¨ø(©∫a°dONLNd    ]†ø¨¡) °dONLNd    ^†¬¨
  415. )Lscripting component. By executing scripts, users of scriptable applications °dONLNd    ™≠∫π…(∂∫can¡†°dONLNd    ≠≠…πÀ) A†°dONLNd    Æ≠Ãπ¸)
  416. automate r%†°dONLNd    ∏≠¸πˆ)0;epetitive tasks or conditional tasks that involve multiple ˇ"@ˇ ˇˇˇˇ@
  417. ˇ·ˇ‚7^
  418. 4⁄*˙¯, Palatino
  419. .(·*xxiv    3, Ã(#úPREFN )3ACE 4^*¿¯
  420. °dONLNd\úh˙(eúapplications. For mor˘†°dONLNd\˙h)^e C@°dONLNd\h%)general í°dONLNd\%hY)# informationM`°dONLNd*\Zhü)5 about scripting©†°dONLNd:\ühË)E, see the chapter °dONLNdLiúu±(rú“Intr∑@°dONLNdQi±u)oduction to Scripting.”Å¿°dONLNdhiu])e See the chapter tÄ°dONLNdyi^u£)H“Apple Event T« °dONLNdái¢u◊)D erminology °dONLNdívúǪ(úResourv@°dONLNdòvªÇÕ)ces”Ì °dONLNdúvÕÇ8) for information on the rÕ¿°dONLNdµv8ÇP)kesour°dONLNd∫vQÇ‘)ces your application needs to °dONLNdÿÉúè•(åúprG °dONLNd⁄ɶè÷)
  421. ovide in or$‡°dONLNdÂÉ÷è,)0der to be scriptable.°dONLNd˚ïú°¢(ûúY@Ä°dONLNd¸ï¢°@)#ou can also make your application r@†°dONLNdï@°R)ûecorµ°dONLNd#ïR°¬)dable, that is, capable of r@@°dONLNd?ï√°’)qecor¥†°dONLNdCï’°Û)ding a °dONLNdJ¢úÆØ(´úuser=¿°dONLNdN¢∞Æ()’s actions for later playbackÄ°dONLNdk¢)ÆQ)y    . For morä@°dONLNdt¢QÆè)(e information,@°dONLNdÇ¢êÆ÷)? see the chapter °dONLNdìØúª∫(∏ú“Recor¢`°dONLNdôØ∫ª–)ding (†°dONLNdûØ—ª)Apple Events.”°dONLNd≠¡úÕ°( úF °dONLNdÆ¡¢Õ™);or information on how your application can execute a scriptö@°dONLNdÈ¡™Õˆ( ™ with the aid of a °dONLNd¸Œú⁄˘(◊úscripting component,u¿°dONLNdŒ˙⁄@)^ see the chapter e¿°dONLNd!ŒA⁄∞)G“Scripting Components.”°dONLNd9‡úÏ>(Èú$Although you’ll usually want to use A`°dONLNd]‡>Ï€)¢!Apple events to communicate with °dONLNd~Ìú˘≥(ˆúother≈Ä°dONLNdÉÌ≥˘µ) EÄ°dONLNdÑÌ∂˘g))applications, if you need low-level contr”@°dONLNd≠Ìg˘Ï)±ol of communication between °dONLNd…˙ú%(úapplications you can use the Pr˚°dONLNdË˙%[)â ogram-to-PrÙÄ°dONLNdÛ˙[Â)6ogram Communications (PPC) °dONLNdú¢(úTµ¿°dONLNd°Á)oolbox. For mor4†°dONLNdËm)Ge information, see the chapter ©†°dONLNd=m{)Ö“Prx@°dONLNd@|≤) ogram-to-Prq¿°dONLNdK≤—)6ogram °dONLNdQú (úCommunications TJ°dONLNda )Toolbox.”°dONLNdj&ú2"(/úApplications can use the Data â °dONLNdà&"2”)Ü'Access Manager to access information fr6¿°dONLNdØ&‘2‰)≤om °dONLNd≤3ú?°(<úa°dONLNd≥3°?£) °dONLNd¥3§?P)'database application or other data sour≠†°dONLNd€3P?¬)¨ce. For example, a user in °dONLNdˆ@úL¨(IúSanë °dONLNd˘@¨LÆ)  °dONLNd˙@ØL)Francisco might use a sprP¿°dONLNd@Lã)peadsheet application to rÕ‡°dONLNd,@ãL«)lequest data fr˜¿°dONLNd:@«Lfl)<om a °dONLNd?MúY(Vúcompany database in New Ñ`°dONLNdWMY)xYD‡°dONLNdXMYO) ork. The spr|°dONLNddMOYœ)5eadsheet application can use °dONLNdÅZúf©(cúthe]`°dONLNdÑZ™f¨) ›`°dONLNdÖZ¨f¿)Data›°dONLNdâZ¡f√) ˛†°dONLNdäZ√f)Access Manager to rx‡°dONLNdùZfi)Zequest the data fr °dONLNdØZjf )Mom the database. The °dONLNdƒgús¬(púdatabasel`°dONLNdÃg√s≈)' Ï`°dONLNdÕg≈s)application in New ‡°dONLNd‡gs#)XYfl`°dONLNd·g"sz)ork sends back the r0¿°dONLNdıg{s–)Yequested data, and °dONLNdtúÄ©(}úthe]`°dONLNd t™Ĩ) ›`°dONLNd t¨Ä∫)spr·Ä°dONLNdt∫ÄÌ)Geadsheet application can then use this data to generate a graph of the °dONLNdVÅúçi(äú-information. For information on sending and r£†°dONLNdÉÅiç—)Õetrieving information fr†°dONLNdõÅ“çÍ)iom a °dONLNd†éúö≈(óú    data sour‹¿°dONLNd©é≈ö))ce, see the chapter ܆°dONLNdΩéö4)S“Data ߇°dONLNd√é4ö{)Access ManagerÁ‡°dONLNd—é{öÇ)G.”°dONLNd‘†ú¨æ(©úFor defiÈ`°dONLNd‹†æ¨)"nitions of specifiâ@°dONLNdÓ†¨)Ic  °dONLNd†¨^)Apple events and 1†°dONLNd†^¨«)PApple event objects, seeŸ¿°dONLNd†«¨…)i Y¿°dONLNd† ¨⁄)the °dONLNd≠úπ≥(∂úApplec°dONLNd#≠¥π∂) „°dONLNd$≠∂πÈ) Event Regist”@°dONLNd0≠Íπ8)4ry: Standard Suitesm¿°dONLNdC≠9π;)O,Ì¿°dONLNdD≠;πn) available fr∑@°dONLNdQ≠oπ)4om "`°dONLNdT≠Äπü)APDA.°dONLNdZøúÀ"(»úFor information on handling fiv°dONLNdxø#ÀÄ)áles in your applicatiodž°dONLNdéøÄÀç)]n a‘°dONLNdëøçÀ‚)nd a description of °dONLNd•ÃúÿÈ(’úaliases and alias r‘@°dONLNd∏ÃÈÿ˚)MecorH†°dONLNdºøÿ)ds, see Ò†°dONLNdƒÃÿx)Inside Macintosh: Files∏Ä°dONLNd€Ãyÿ{)^.°dONLNd›fiú͸(ÁúFor information on pr¿†°dONLNdÚfi¸Í<)`ocesses and pr§‡°dONLNdfi<ͨ)@ocess serial numbers, see °dONLNdÎú˜¥(ÙúInsideÒÄ°dONLNd Î¥˜∂) qÄ°dONLNd!Î∑˜‰)
  422. Macintosh:‚°dONLNd+Ή˜Ê)- b°dONLNd,ÎÁ˜)Pr3¿°dONLNd.ÎÒ˜ )
  423. ocesses(°dONLNd5Θ).
  424. ˛*¯4ˇ*¯
  425. )*1¯4**1¯ +*+˛
  426. ˇ·ˇ‚7^ˇˇ©ˇÆ°dONLNd8*)ä($*Format of a T™∫°dONLNdEâ)Û)_ypical ChapterˇˇˇˇˇˇV˛($0
  427. °dONLNdU:úFr(Cú1Almost all chapters in this book follow a standar’`°dONLNdÜ:rFÜ)÷d strœ °dONLNdã:ÜFù)ucturU°dONLNdê:ûFÙ)e. For example, the °dONLNd§GúSø(Púchapter B`°dONLNd¨G¿S–)$“Cr`°dONLNdØG–S()eating and Sending ¡`°dONLNd¬G'Sg)WApple Events”õ@°dONLNdœGhS–)A contains these sections:,Zapf Dingbats°dONLNdÈ]úd°(cún
  428. °dONLNdÎZ®f∏) “Cr\°dONLNdÓZ∏f„)
  429. eating an #‡°dONLNd¯Z„f)+ Apple Event”¿¿°dONLNdZf2)< and-‡°dONLNdZ3f5) ≠‡°dONLNd    Z5fn) “Sending an `@°dONLNdZnf≠)9Apple Event.”} °dONLNd"Z≠fÀ)? These °dONLNd)f®rÀ(o®sections•Ä°dONLNd1fÀrÕ)# %Ä°dONLNd2fŒrq)$describe how your application can cr.`°dONLNdVfqr∞)£eate and send Ä°dONLNddf∞rÔ)?Apple events. °dONLNdrr®~¯({®They describe the à¿°dONLNdÑr¯~`)PApple Event Manager r|†°dONLNdôr`~ÿ)houtines that you can use to °dONLNdµ~®ä*(á®accomplish these tasks, give rÁ °dONLNd”~*äø)Ç#elated user interface information, B¿°dONLNdˆ~¿ä”)ñand °dONLNd˙ä®ñ±(ì®prG °dONLNd¸ä≤ñ)
  430. ovide code sample¿‡°dONLNd    äñ)Rs a}‡°dONLNd    äñ) nO@°dONLNd    äñ#)d aΰdONLNd    ä#ñÇ)dditional information†@°dONLNd    )äÉñÖ)`.°dONLNd    +üú¶°(•ún
  431. °dONLNd    -ú®®ƒ) “Refer⁄ °dONLNd    3úƒ®)
  432. ence to CrB‡°dONLNd    =úÒ®I)-eating and Sending ‡°dONLNd    PúH®ã)WApple Events.”?¿°dONLNd    ^úå®é)D ø¿°dONLNd    _ú鮌)This section pr܇°dONLNd    núœ®ˆ)A    ovides a °dONLNd    w®®¥÷(±®
  433. complete r>‡°dONLNd    Å®◊¥Á)/eferΰdONLNd    Ö®Á¥) ence to the v¿°dONLNd    ë®¥Å)2Apple Event Manager rj†°dONLNd    ¶®Å¥ù)houtine≠°dONLNd    ¨®ù¥©)s y˘ °dONLNd    Ø®©¥Â) ou can use to °dONLNd    Ω¥®¿∞(Ω®crµ@°dONLNd    ø¥∞¿Ô)eate and send ç`°dONLNd    Õ¥Ô¿%)? Apple eventÿ °dONLNd    ÿ¥%¿+)6s.ï °dONLNd    ⁄¥,¿J) Each r∑Ä°dONLNd    ·¥J¿€)"outine description also follows a ˇ@ˇ ˇˇˇˇ@
  434. ˇ·ˇ‚7^
  435. 4⁄∫˙, Palatino
  436. .‡(·xxv    3, Ã(#∫PREFN )3ACE 4^H¿
  437. °dONLNd\ΔhÁ(eΔstandar±Ä°dONLNd\Áh:)!d format, which prπ °dONLNd\:hk)S esents the r|Ä°dONLNd%\lh˝)2!outine declaration followed by a °dONLNdFhΔtp(qΔ'description of every parameter of the r‚¿°dONLNdmhpt∞)™outine. Some rΩ°dONLNd{h∞t)@outine descriptions °dONLNdètΔÄ(}ΔHalso give additional descriptive information, such as assembly-language °dONLNd◊ÄΔå* information or rhÄ°dONLNdÁÄå@)G esult codes.,Zapf Dingbats°dONLNdÙï∫úø(õ∫n
  438. °dONLNdˆíΔû) “Summary of Crñ°dONLNdíûg)Ieating and Sending 9°dONLNdígû™)XApple Events.”퇰dONLNd%í™ûÌ)C This section pr⁄°dONLNd5íÌû )Covides °dONLNd<ûΔ™≠(ßΔ7the Pascal and C interfaces for the constants, data str`†°dONLNdsûÆ™≈)ËucturÊÄ°dONLNdxû≈™÷)es, r≤ °dONLNd}û◊™)outines, and °dONLNdä™Δ∂…(≥ΔrE°dONLNdã™ ∂T) esult codes associated with the G†°dONLNd´™T∂º)äApple Event Manager r;Ä°dONLNd¿™º∂ˆ)houtines for cr¨ °dONLNdŒ™ˆ∂):eating °dONLNd’∂Δ¬ˇ(øΔ and sending K`°dONLNd·∂ˇ¬á)9 Apple events. It also includes rè¿°dONLNd∂á¬)àelevant assembly-language °dONLNd¬ΔŒ&(ÀΔinterface information.
  439. ‘HÔ4’HÔ
  440. ˇH4H H
  441. ˇ·ˇ‚7^ˇˇ©ˇÆ°dONLNd3ÏHˇ+(˙HConventions Used in This BookˇˇˇˇˇˇV˛(˙0
  442. °dONLNdR∫ˇ(∫Inside Macintoshb°dONLNdbâ)F uses various conventions to pr熰dONLNdÅâÊ)âesent information. W¬°dONLNdïÂÓ)\or¸Ä°dONLNdóÓ)    ds that °dONLNdü∫)Ω(&∫rE°dONLNd†æ)’)equir\@°dONLNd•’)) e special trw°dONLNd±)s)/eatment appear in specifiú¿°dONLNd s)Ù)o c fonts or font styles. Certain °dONLNdÍ*∫6](3∫&information, such as the contents of r˝¿°dONLNd*]6)£*egisters, use special formats so that you °dONLNd:7∫C(@∫can scan them quicklyU`°dONLNdO7C)a.
  443. hHo4iHo j∫jF
  444. ˇ·ˇ‚7^,     Helveticaˇˇ‹.ˇ◊°dONLNdQY∫h (d∫Special Fontsˇˇˇˇˇˇ€r(d0
  445. °dONLNd`o∫{(x∫All code listingsπ °dONLNdqo{    )G, r~ °dONLNdto
  446. {@)     eserved worfi °dONLNdo@{‹)6$ds, and the names of actual data str’°dONLNd£o‹{Û)úucturZ‡°dONLNd®oÙ{)es, .°dONLNd¨|∫à¡(Ö∫fi°dONLNdÆ|¡àW)"elds, constants, parameters, and rR`°dONLNd–|WàÉ)ñ
  447. outines ar$¿°dONLNd⁄|Éà‹),e shown in Courier (,
  448. Courier$¿°dONLNdÓ|‹à )Ythis is °dONLNdˆâ∫ï‰(í∫Courier°dONLNd˝â‰ïÎ)*)..°dONLNdõ∫߃(§∫Wï°dONLNdõ√ßÃ)    orœÄ°dONLNdõÃß)    ds that appear in ¯†°dONLNdõß@)Mboldfaceg°dONLNdõAßL)( ar¨°dONLNd õLß“) e key terms or concepts and ar˘‡°dONLNd>õ“ßÍ)Üe defi5†°dONLNdDõÎß    )ned in °dONLNdK®∫¥Ò(±∫ the Glossaryº`°dONLNdW®¥Ú)6.
  449. ŸH‡4⁄H‡ €∫€F
  450. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNdY ∫Ÿ¬(’∫T$é°dONLNdZ ¬Ÿ)ypes of Notesˇˇˇˇˇˇ€r(’0
  451. °dONLNdi‡∫ÏŒ(È∫Ther¿°dONLNdm‡œÏfl)e ar`°dONLNdq‡flÏï)+e several types of notes used in this book.
  452. ˙H4˚H    °dONLNdù˘∫Õ(∫Note
  453. ˇ·ˇ‚7^
  454. °dONLNd¢∫¡*A∫†°dONLNd£¡è)2 note like this contains information that is inter"°dONLNd’êˆ)œesting but possibly not °dONLNdÌ∫Ô(∫Eessential to an understanding of the main text. (An example appears oÊ@°dONLNd2Ô˜(Ôn °dONLNd4∫*—('∫page Z‡°dONLNd9“*‰)3-26Æ¿°dONLNd=‰*Ê)..¿°dONLNd>Á*Í))dž°dONLNd@!Ô)ı)u
  455. 7HE48HE°dONLNdB8∫@Ÿ(>∫IMPORTÄ°dONLNdH8Ÿ@È)ANT
  456. ˇ·ˇ‚7^
  457. °dONLNdLC∫O¡(L∫A∫†°dONLNdMC¡Oø)> note like this contains information that is essential for an °dONLNdãO∫[Æ(X∫5understanding of the main text. (An example appears oÎ@°dONLNd¿OÆ[∂)Ùn <†°dONLNd¬O∑[Œ)    page Ä°dONLNd«Oœ[·)3-33k`°dONLNdÀO·[„).Î`°dONLNdÃO„[Ê))?@°dONLNdŒRÏZÛ)    s
  458. hHv4iHv
  459. °dONLNd–h¶rÆ(p¶s°dONLNd—i∫q√(o∫WúÄ°dONLNd“i√qÓ)    ARNING
  460. ˇ·ˇ‚7^
  461. °dONLNdŸt∫ă(}∫Wï°dONLNd⁄t√Äe)    'arnings like this indicate potential pr*‡°dONLNdtfÄÛ)£oblems that you should be awar…@°dONLNdtÛÄ˙)çe °dONLNd!Ä∫åm(â∫)of as you design your application. Failur^†°dONLNdJÄmå¯)≥e to heed these warnings could °dONLNdiå∫òΩ(ï∫rE°dONLNdjåæòÁ)Cesult in system crashes or loss of data. (An example appears on pagº@°dONLNd≠åÁòÓ(ïÁe °dONLNdØò∫§—(°∫page Z‡°dONLNd¥ò“§‰)4-10Æ¿°dONLNd∏ò‰§Ê)..¿°dONLNdπòÁ§Í))dž°dONLNdªõÔ£ˆ)sˇ,@ˇ ˇˇˇˇ@
  462. ˇ·ˇ‚7^
  463. 4⁄*˙¯, Palatino
  464. .(·*xxvi    3, Ã(#úPREFN )3ACE 4^*¿¯
  465. k*r¯4l*r¯ múm(
  466. ˇ·ˇ‚7^,     Helveticaˇˇ‹.ˇ◊°dONLNd\úka(gúAssembly-Language Informationˇˇˇˇˇˇ€r(g0
  467. °dONLNdrú~Ë({úSome chapters pr`°dONLNd/rÈ~◊)M4ovide additional assembly-language information. For °dONLNdcúãº(àúexampl0¿°dONLNdiΩãΔ)!e, ˙`°dONLNdlΔã )    Inside Macintosh‹`°dONLNd| ã)F pr#Ä°dONLNdãü)ovides information about the rÓ`°dONLNdùüãÓ)Üegisters for specifi“@°dONLNd±Ôãı)Pc °dONLNd≥åúòü(ïúrE°dONLNd¥å†òË)outines like this:°dONLNd;ıú«(˛ú
  468. In additio°dONLNdEı«—)+n, ¡`°dONLNdHı“) Inside Macintosh£`°dONLNdXı$)F prÍÄ°dONLNd[ı$≠) ovides information about the fi˝ °dONLNdzı≠‘)â
  469. elds of a °dONLNdÑú$( úparameter block in this format:°dONLNdLúXº*JThe arrs`°dONLNdLºXÃ) ow ø‡°dONLNdLÃXŒ)i®@°dONLNdLœXí)-n the far left column indicates whether the fiɆ°dONLNdJLìX‘)ƒeld is an input °dONLNdZYúe…(bú    parameterS†°dONLNdcY…e)-, output parameter±‡°dONLNduYeD)R , or both. }@°dONLNdÄYEeK)*Y=¿°dONLNdÅYKeŒ)ou must supply values for all °dONLNdüfúr¥(oúinputÖ`°dONLNd§f¥r∂) `°dONLNd•f∑rã)-parameters and input/output parameters. The r.Ä°dONLNd“fãr≠)‘outine rµ‡°dONLNd⁄f≠rÍ)"eturns values °dONLNdËsú§(|úin9¿°dONLNdÍs•ß)     π¿°dONLNdÎsßÇ).output parameters and input/output parameters.°dONLNdÖúë)(éúThe second column shows the fi‡°dONLNd8Ö*ëq)éeld name as defi˝¿°dONLNdHÖqëŸ)Gned in the MPW Pascal °dONLNd^íúû (õú interface fiR‡°dONLNdjíÀû¸)/les; the thir``°dONLNdwí¸û“)11d column indicates the Pascal data type of that fií °dONLNd©í“û‰)÷eld. °dONLNdÆüú´˚(®úThe fourth column pr‘`°dONLNd¬ü˚´º)_.ovides a brief description of the use of the fiD`°dONLNdÒüΩ´Ë)¬ eld. For a °dONLNd¸¨ú∏#(µúcomplete description of each fiº†°dONLNd¨#∏Œ)á)eld, see the discussion that follows the °dONLNdDπú≈º(¬úBparameter block or the description of the parameter block in the rÄ°dONLNdÜπΩ≈Õ(¬Ωefer¡†°dONLNdäπÕ≈„)ence °dONLNdèΔú“˙(œúsection of the chapter@°dONLNd•Δ˙“¸)^.
  470. Ÿ*Ù¯4⁄*Ù¯
  471. * ¯4* ¯ *˛
  472. ˇ·ˇ‚7^ˇˇ©ˇÆ°dONLNd®Ò*◊(ˇ*The Development Envir§˙°dONLNdΩÒ◊)≠onmentˇˇˇˇˇˇV˛(ˇ0
  473. °dONLNd≈ú!Ú(úThe system softwar↰dONLNd◊Ú!˝)Ve rò@°dONLNd⁄˝!å) !outines described in this book ar+‡°dONLNd˚ç!Ÿ)êe available using °dONLNd"ú.¬(+úBPascal, C, or assembly-language interfaces. How you access these r+†°dONLNdO"√.Â(+√outines °dONLNdW/ú;6(8ú depends on the development envir‘¿°dONLNdw/6;v)öonment you arù¿°dONLNdÑ/w;·)Ae using. When showing °dONLNdö<úHfi(Eúsystem softwarM‡°dONLNd®<flHÍ)Ce r\Ä°dONLNd´<ÍHË) <outines, this book uses the Pascal interface available with °dONLNdÁIúUÁ(Rúthe Macintosh PrëÄ°dONLNd˜IÁU)Kogrammer™`°dONLNdˇIU))/’s WC†°dONLNdI)Ur)orkshop (MPW).°dONLNd[úg%(dú!All code listings in this book arr¿°dONLNd3[%g›)â,e shown in Pascal (except for listings that °dONLNd_hút«(qú
  474. describe rɇ°dONLNdih«tfl)+esourà°dONLNdnhflt)ces, which ar⁄`°dONLNd{ht“)9(e shown in Rez-input format). They show °dONLNd£uúÅ(~úmethods of using various rU‡°dONLNdΩuŘ)w4outines and illustrate techniques for accomplishing °dONLNdÒÇúéÂ(ãúparticular tasks. _°dONLNdÇÂé‚)I9All code listings have been compiled and, in many cases, °dONLNd<èúõ‰(òútested. However}`°dONLNdKè‰õÈ)H, °dONLNdMèÈõ4)Apple Computer«Ä°dONLNd[è3õÌ)J-, Inc., does not intend for you to use these °dONLNdàúú®3(•ú"code samples in your application. 醰dONLNd™ú3®9)óYO °dONLNd´ú9®^)ou can fi °dONLNd¥ú_®Û)&$nd the location of code listings in °dONLNdÿ©úµÕ(≤úthe list of fi†°dONLNdÊ©Œµ›)2gur^‡°dONLNdÈ©›µÊ)?es, tables, and listings. If you know the name of a particular     °dONLNd«•ú∞Í(≠úRegisters on entry
  475. °dONLNd‹≥úø®*A0G@°dONLNdfl≥Ωøˆ)!Contents of rê@°dONLNdÏ≥ˆø)9egister .†°dONLNdÙ≥øJ)  A0 on entry    °dONLNdœú⁄‰(◊úRegisters on exit
  476. °dONLNd›úÈ®*D0=@°dONLNd›ΩȈ)!Contents of rÜ@°dONLNd&›ˆÈC)9egister D0 on exit,    Symbolˇˇr¿ˇ°dONLNd§ú•(ú´,
  477. Courier.^@°dONLNd¶∫ Í)inAndOut[B°dONLNdØ 2)NInteger.X§°dONLNd∑P º)HInput/output parameterA§°dONLNdÕº æ)l.°dONLNd–$ú/•(-ú¨.^@°dONLNd“$∫0‰)output1[B°dONLNd⁄$0)NPtr.X§°dONLNdfi$P0†)HOutput parameterD°dONLNdÓ$†0¢)P.°dONLNdÒ4ú?•(=úÆ.^@°dONLNdÛ4∫@fi)input1[B°dONLNd˙4@)NPtr.X§°dONLNd˛4P@ò)HInput parameter'ƒ°dONLNd4ò@ö)H.ˇ∫@ˇ ˇˇˇˇ@
  478. ˇ·ˇ‚7^
  479. 4⁄∫˙, Palatino
  480. .I (·xxvii    3, Ã(#∫PREFN )3ACE 4^H¿
  481. .°dONLNd\∫hæ(e∫rR`°dONLNd\æh)outine (such as ,
  482. CourierR`°dONLNd\hJ)D MyHandleODocR`°dONLNd\JhW)H or R`°dONLNd!\Whü) MyHandleQuitR`°dONLNd-\üh)H) shown in a code listing, .°dONLNdHi∫uÂ(r∫    you can fi⁄ °dONLNdRiÂu[)+nd the page on which the r; °dONLNdli\u)w)outine occurs by looking under the entry °dONLNdïv∫ÇÂ(∫    “sample rä °dONLNdûvÂÇz)+#outines” in the index of this book.°dONLNd¬à∫îœ(ë∫In orj`°dONLNd«àœîò).der to make the code listings in this book mor(†°dONLNdıàôî§) e r7@°dONLNd¯à§î) eadable, they show only °dONLNdï∫°Ë(û∫ limited err6 °dONLNdïÈ°Ú)/orû@°dONLNdïÚ°Ù)     @°dONLNdïı°!)
  483. handling. ‡`°dONLNd(ï!°'),Y†‡°dONLNd)ï'°Ì)+ou need to develop your own techniques for °dONLNdT¢∫ÆÒ(´∫ handling errq°dONLNd`¢ÒÆ)7ors. °dONLNdf¥∫¿â(Ω∫0This book occasionally illustrates concepts by rч°dONLNdñ¥â¿ô)œefer1°dONLNdö¥ö¿)ence to sample applications °dONLNd∂¡∫Õ÷( ∫called &`°dONLNdΩ¡◊ÕÚ)SurfW- °dONLNd¬¡ÚÕ)riter5¿°dONLNd«¡Õ), 5¿°dONLNd…¡Õ')SurfDB·‡°dONLNdœ¡'Õ<), andœ°dONLNd‘¡=Õr) SurfCharter;≤†°dONLNd·¡sÕó)6     these ar[†°dONLNdÍ¡òÕ◊)%e not actual pró¿°dONLNd˘¡◊Õ)?
  484. oducts of °dONLNdŒ∫⁄(◊∫Apple Computer(Ä°dONLNdŒ⁄)K, Inc.°dONLNd‡∫Ï◊(È∫APDAH¿°dONLNd‡◊Ï„) is ¿°dONLNd ‡„ÏO) Apple’s worldwide sour¯ °dONLNd6‡NÏå)kce for over thr¿°dONLNdE‡çÏ¥)?ee hundrº†°dONLNdM‡¥Ï˛)'ed development °dONLNd\Ì∫˘(ˆ∫tools, technical rw¿°dONLNdnÌ˘)Hesour¿°dONLNdsÌ˘\)ces, training prµ†°dONLNdÉÌ\˘˚)B#oducts, and information for anyone °dONLNd¶˙∫Œ(∫inter
  485. ¿°dONLNd´˙œn)$ested in developing applications on M`°dONLNdœ˙nÚ)üApple platforms. Customers rj°dONLNdÎ˙Ú)Ñeceive °dONLNdÚ∫ı(∫the quarterly f`°dONLNdˆ)<APDA[@°dONLNd) T€@°dONLNdL)ools Catalog ~°dONLNdMó)4featuring all curr @°dONLNd%ò€)Kent versions of Ù`°dONLNd5⁄˜)BApple °dONLNd;∫ Ä(∫+development tools and the most popular thirÈ¿°dONLNdfÄ ˙)Δd-party development tools. °dONLNdÅ!∫-≈(*∫Or ‡°dONLNdÉ!Δ-) dering is easy; therü@°dONLNdó!-))Se ar≠‡°dONLNdõ!)-˚).e no membership fees, and application forms arΔ‡°dONLNd…!˚-)“e not °dONLNdœ.∫:Ω(7∫rE°dONLNd–.æ:’)equir\@°dONLNd’.’:1)ed for most of our prF@°dONLNdÍ.1:S)\oducts. o‡°dONLNdÚ.S:p)"APDA8†°dONLNdˆ.p:{) ofT`°dONLNd˘.{:˛) fers convenient payment and °dONLNd;∫Gr(D∫+shipping options, including site licensing.°dONLNdAM∫Y¿*Tµ¿°dONLNdBMøY–)o or¿°dONLNdFM–YÎ)der pr‡°dONLNdLMÏY')oducts or to rÒ‡°dONLNdZM&YΔ):#equest a complimentary copy of the Ç@°dONLNd}M«Y„)°APDAw °dONLNdÅM„YÎ) T˜ °dONLNdÉMÍY¸)ools °dONLNdàZ∫fŸ(c∫Catalogó`°dONLNdèZŸf˝)    , contact°dONLNdôl∫x◊(u∫APDAH¿°dONLNdùl◊xŸ) °dONLNdüy∫Ö(Ç∫Apple Computer(Ä°dONLNd≠yÖ)K, Inc. °dONLNdµÜ∫í¿(è∫P?†°dONLNd∂Üøí) .O. Box 319°dONLNd¬ì∫ü…(ú∫Buf… °dONLNd≈ì…üÌ)falo, NYG†°dONLNdÕìÓü )%  14207-0319°dONLNd®#∫/‡(,∫    If you pr@°dONLNd±#·/ı)'ovid% °dONLNdµ#ı/ )e commerã °dONLNdΩ# /7)+cial pN@°dONLNd√#8/;)r@°dONLNdƒ#</Û)+oducts and services, call 408-974-4897 for °dONLNdÔ0∫<m(9∫'information on the developer support pr  °dONLNd0n<¬)¥ograms available fr‹‡°dONLNd)0¬<“)Tom H°dONLNd,0”<)Apple.°dONLNd3B∫N(K∫For information on ræÄ°dONLNdGBNg)Zegistering signaturòÄ°dONLNdZBgN{)Ses, fi´‡°dONLNd`B{Nù)le types∏ °dONLNdhBùNß)", a∏ °dONLNdkBßN˘)
  486. nd other technical °dONLNd~O∫[(X∫information, contact°dONLNdìa∫m!*Macintosh Developer T.@°dONLNd®a!mk)gechnical Support°dONLNdπn∫z(w∫Apple Computer(Ä°dONLNd«nz)K, Inc.°dONLNdŒ{∫á˚(Ñ∫20525 Mariani +†°dONLNd‹{˚á)AA‡°dONLNd›{áQ)venue, M/S 75-3T°dONLNdÓà∫î˚(ë∫Cupertino, CA¿°dONLNd˚à˚î-)A  95014-6299°dONLNdÿ•∫±¿(Æ∫Tµ¿°dONLNdŸ•ø±Á)elephone°dONLNd‚•±ò)]800-282-2732 (United States)°dONLNdˇ∞º* 800-637-0029 (Canada)°dONLNdª«ó* 716-871-6555 (International)°dONLNd3À∫◊…(‘∫Fax°dONLNd7À◊O)b 716-871-651õ °dONLNdBÀO◊V)31 °dONLNdF€∫ÁÈ(‰∫    AppleLink°dONLNdP€Á9)bAPDA°dONLNdVÎ∫˜(Ù∫America Online°dONLNdeΘ9)bAPDA°dONLNdk˚∫Û(∫
  487. CompuServe°dONLNdv˚K)b
  488. 76666,2405°dONLNdÇ ∫›(∫Internet°dONLNdã õ)bAPDA@applelink.apple.comˇÆ@ˇ ˇˇˇˇ@
  489. ˇ·ˇ‚7^
  490. 4⁄*˙¯, Palatino
  491. .(·*xxviii    3, Ã(#úPREFN )3ACE 4^*¿¯
  492. °dONLNd\úhØ(eúThe ]`°dONLNd\ØhR)$Apple Event Registrar maintains the Ú@°dONLNd(\RhÓ)£%Apple Event Registry: Standard Suites‡°dONLNdM\ÔhÒ)ù °dONLNdNiúuõ(rú7and other information about the ongoing development of ¯°dONLNdÖiõuÚ)ˇApple event suites. °dONLNdôvúÇø(úFor mor¿°dONLNd†v¿Ç)$e information about Û°dONLNd¥vÇ‘)Y*Apple event suites, including those under °dONLNdfiÉúè
  493. (åúdevelopment, send electrM†°dONLNdˆÉ èQ)oonic mail to the »¿°dONLNdÉQèò)FAppleLink addr'`°dONLNdÉôè“)H ess REGISTRdÄ°dONLNd É“èÿ)9YÙ@°dONLNd!É◊èŸ).ˇ≤@ˇ ˇˇˇˇ@
  494. ˇ·ˇ‚7^
  495. 4⁄∫˙,     Helvetica    .(‡∫Contents, Palatino
  496. , (‡    1-1    3, Ã(#∫CHAPTER ÿ)h1
  497. ˇˇˇˇˇˇˇˇ4^4|lòÄ2^A|rMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""^A|r^A|r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  498. ^6|@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""^6|@^6|@˜˜˜˜˜˜˜˜˜˜˜˜˜˙ˇˇ˙ˇ˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜ˇˇˇˇˇˇ(JH
  499. Figure 1-0*     Listing 1-0*    T)able 1-0ˇˇ∫Ρ◊(qH1°dONLNd[∫xÂ)rIntr9°dONLNd[Âxq)+ oduction to °dONLNdx∫ï{(é∫Interapplication 
  500. ¥Hf
  501. 4¥Hf NHN°dONLNd/S∫d˘*“Contents
  502. ˇ·ˇ‚7^ˇˇ∫Ρ◊°dONLNd!ï∫≤x(´∫Communication
  503. °dONLNd8u∫ÅÑ*”*Overview of Interapplication Communications†°dONLNdduôŶ)fl1-3°dONLNdhÇ∫éˆ(ã∫Sharing Data m‡°dONLNduLjé)<Among ¿°dONLNd{ÇéR)$ Applicationsª‡°dONLNdâÇfés)L1-6°dONLNdçè∫õ7(ò∫Sending and Responding to h@°dONLNdßè7õr)} Apple EventsB °dONLNdµèáõî)P1-9°dONLNdπúƒ®Ê(•ƒStandar¥@°dONLNd¿úÊ®Ó)"d Ò†°dONLNd¬úÓ®)) Apple EventsÀÄ°dONLNd–ú>®P)P1-10°dONLNd’©ƒµ(≤ƒ    Handling `°dONLNdfi©Òµ,)- Apple EventsÎ@°dONLNdÏ©@µR)O1-12°dONLNdÒ∂∫¬Ó(ø∫ Supporting ‡ °dONLNd¸∂Ó¬∞)4)AppleScript and Other Scripting Languages˜†°dONLNd'∂ƒ¬÷)÷1-13°dONLNd,√ƒœÚ(à Scriptable ™¿°dONLNd7√Úœ*). Applicationse‡°dONLNdE√?œQ)M1-16°dONLNdJ–ƒ‹›(ŸƒRecor¢`°dONLNdO–›‹˜)dable `°dONLNdU–¯‹0) Applications‘Ä°dONLNdc–D‹V)L1-18°dONLNdh›ƒÈ¢(ʃ0Applications That Manipulate and Execute Scriptsß@°dONLNdö›∂È»)Ú1-19°dONLNdüÍ∫ˆ5(Û∫Exchanging Message Blocksw°dONLNd∫ÍJˆ\)ê1-22ˇJ@ˇ ˇˇˇˇ@
  504. ˇ·ˇ‚7^
  505. 4^*¿¯ˇ?d@ˇ ˇˇˇˇ@
  506. ˇ·ˇ‚7^, Palatino&e.3+ä"CHAPTER à)>1
  507. 4⁄ä˙,     Helvetica    (‡ä*Overview of Interapplication Communication
  508. , (‡    1-3
  509. ˇˇˇˇˇˇˇˇ4^4|lòÄ2^A|sMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""^A|s^A|s$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  510. ^6|?MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""^6|?^6|?˜˜˜˜˜˜˜˜˜˜˜˜˜˙ˇˇ˙ˇ˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜
  511. 4Å4w?òÄ
  512. Å6w?MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""Å6w?Å6w?$˜˙ˇ˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˛¸ˇˇ
  513. ˇ˛ˇ˛¸ˇ˛¸ˇ˝˚ˇ˛˛˛ˇ˝
  514. ˇ˛ˇ˛
  515. ˇ˛ˇ˛˛˛ˇ˝˜˛˛ˇ˝
  516. ˇ˛ˇ˛
  517. ˇ˛ˇ˛˙ˇ˜˛˝ˇ˛ˇ˙˛ˇ˚¸ˇ˛˜˛˛ˇ˝
  518. ˇ˛ˇ˛
  519. ˇ˛ˇ˛˛ˇˇ˝˜˛¸ˇˇ
  520. ˇ˛ˇ˛    ¸ˇˇ˜˛˛ˇ˝
  521. ˇ˛ˇ˛
  522. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˜˛¸ˇˇ
  523. ˇ˛ˇ˛˛˛ˇ˝
  524. ˇ˛ˇ˛
  525. ˇ˛ˇ˛˛˛ˇ˝˜˜˜˜˜˙ˇ¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˛¸ˇˇ
  526. ˇ˛ˇ˛˜˛˛ˇ˝
  527. ˇˇˇ˛
  528. ˇˇˇ˛    ˇˇˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˛ˇˇ˝
  529. ˇˇˇ˛
  530. ˇˇˇ˛˛˛ˇ˝ˇ˙˙ˇ˛
  531. ˇ˛ˇ˛
  532. ˇ˛ˇ˛˛˛ˇ˝˜˙ˇ˛
  533. ˇ˛ˇ˛
  534. ˇ˛ˇ˛˛˛ˇ˝˜˙ˇ˜    ¸ˇˇ˜˛˛ˇ˝
  535. ˇ˛ˇ˛
  536. ˇ˛ˇ˛˛ˇˇ˝˛ˇˇ˝
  537. ˇˇˇ˛
  538. ˇˇˇ˛˛˛ˇ˝ˇ˙˛¸ˇˇ
  539. ˇ˛ˇ˛˜    ¸ˇˇ˜˛˛ˇ˝
  540. ˇ˛ˇ˛
  541. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˝˛ˇ˛
  542. ˛ˇ˛ˇˇ    ˇ¸ˇ    ˇ¸ˇ
  543. ˛ˇ˛ˇˇ˜˜˛˛ˇ˝
  544. ˇ˛ˇ˛
  545. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛˚ˇ˛˝ˇ˝˚ˇ˛˚ˇ˛˝ˇ˝˜¸ˇ˛˚ˇ˛˝ˇ˝˚ˇ˛˚ˇ˛˝ˇ˝˜˜˛˝ˇ˛ˇ˙˛ˇ˚¸ˇ˛˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜    ¸ˇˇ˜˛˛ˇ˝
  546. ˇ˛ˇ˛
  547. ˇ˛ˇ˛˛ˇˇ˝˛ˇˇ˝
  548. ˇˇˇ˛
  549. ˇˇˇ˛˛˛ˇ˝ˇ˙˛¸ˇˇ
  550. ˇ˛ˇ˛˜    ¸ˇˇ˜˛˛ˇ˝
  551. ˇ˛ˇ˛
  552. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜    ˇˇ—ÚˇÆ°dONLNd8äC;(@ä.Introduction to Interapplication Communicationˇˇˇˇˇˇ≠>(@1
  553. °dONLNd/\äh¥(eäBThis chapter describes the interapplication communication (IAC) ar|`°dONLNdq\¥h⁄(e¥    chitectur1 °dONLNdz\€hfl)'e˙¿°dONLNd{\flh) for °dONLNdÄiäuÈ(räMacintosh computersd °dONLNdìiÍu
  554. )`@, summarizes how your application can take advantage of it, and °dONLNd”väÇ…(ätells you wher\Ä°dONLNd·v…Ç)?e in this book to fi_`°dONLNdıvÇË)O-nd the information you need to perform specifie¿°dONLNd#vËÇ)–c tasks.°dONLNd,àäîù(ëäThe ]`°dONLNd0àùî˛)Apple Event ManagerN‡°dONLNdCà˛îF)a, Event ManagerB‡°dONLNdRàFîh)H, and Pr~†°dONLNdZàhîû)" ogram-to-Prx °dONLNdeàûî )6ogram Communications °dONLNdzïä°¶(ûä(PPC) “°dONLNdÄﶰ¨)T¿°dONLNdÅ侮ˇ)Moolbox underlie all the IAC tasks your application can perform. This chapter °dONLNdŒ¢äÆô(´äintrA °dONLNd“¢öÆÀ) oduces the œ`°dONLNd›¢ÀÆ\)1Apple Event Manager and the Pró`°dONLNd˚¢]Æì)í ogram-to-PrꇰdONLNd¢ìÆ)6ogram Communications °dONLNdØäªê(∏äTµ¿°dONLNdØèªj)/oolbox. For information about the Event ManageryÄ°dONLNdKØjª)€, see …¿°dONLNdQت˜)Inside Macintosh: Macintosh °dONLNdmºä»ê(≈äT°dONLNdnºè»”)oolbox EssentialsE°dONLNdº‘»÷)E.≈°dONLNdĺ÷»˙) For defiÆ`°dONLNdâº˚»X)%nitions of the standaro°dONLNdüºY»a)^d ¨`°dONLNd°ºa»)&Apple events available for use by all °dONLNd«…ä’Â(“äapplications, see the !Ä°dONLNd›…Ê’i)\Apple Event Registry: Standard †°dONLNd¸…j’Ö)ÑSuites.°dONLNd€äÁ∫(‰ä
  555. The IAC ar=Ä°dONLNd€ªÁ·)1    chitecturÚ@°dONLNd€·Áe)&e includes the Open Scripting à °dONLNd5€fÁq)ÖAr`°dONLNd7€rÁò)     chitectur… °dONLNd@€òÁ∑)&e (OSAIÄ°dONLNdF€∏ÁË) 
  556. ). The OSA/`°dONLNdP€ËÁ)0 p±Ä°dONLNdR€ÁÛ)rvÄ°dONLNdS€ÙÁ)ovides °dONLNdZËäÙö(Òäa m‘°dONLNd]ËöÙª)echanis÷°dONLNdd˪م)!m tl`°dONLNdgË Ù5)hat allows users to contr °dONLNdÄË6ÙÚ)l+ol multiple applications by means of script[ °dONLNd´ËÚÙ)ºs, or °dONLNd±ıäº(˛äsets of instrÁ °dONLNdæıºÈ)2
  557. uctions, wd °dONLNd»ıÍö).*ritten in a variety of scripting languages˘¿°dONLNdÚıö•)∞. EÄ°dONLNdıı¶ ) ach scripting language °dONLNd ä¥( ä
  558. has a corr+¿°dONLNdµ    )+Fesponding scripting component that is managed by the Component Manager:¿°dONLNd\    (     . °dONLNd^äõ(ä=When a user executes a script, the scripting component sends [@°dONLNdõõ(õApple events to one or °dONLNd≤ä(ú(%ämoréÄ°dONLNdµú(ñ);e applications to perform the actions the script describes.°dONLNdÒ.ä:”(7äThis chapter intrõ°dONLNd.”:)Ioduces the OS£@°dONLNd.:)?A›‡°dONLNd.:`) and describes h@°dONLNd .a:)H(ow to make your application scriptable, °dONLNdH;äG…(Däor capable of r¢Ä°dONLNdW;…G)?esponding to ∞@°dONLNdd;G‡)<2Apple events sent to it by a scripting component. °dONLNdóHäT≠(QäFor mor¿°dONLNdûHÆTí)$/e information about using the Component Manageró@°dONLNdÕHëT¶)„, see ÁÄ°dONLNd”H¶T)Inside Macintosh: °dONLNdÂUäaõ(^äMorÄ°dONLNdËUúaü)e˙ °dONLNdÈUüa°) z °dONLNdÍU¢aÃ)    Macintoshj†°dONLNdÛUÕaœ)+ ͆°dONLNdÙUœa’)T͆°dONLNdıU‘a)oolbox.
  559. hHÉ4iHÉ
  560. ìHõ4îHõ ïHï
  561. ˇ·ˇ‚7^ˇˇ©ˇÆ°dONLNd˛ÄHìU(éHOÜB°dONLNdˇÄUìí))verview of Interapplication CommunicationˇˇˇˇˇˇV˛(é1
  562. °dONLNd*§ä∞ù(≠äThe ª¿°dONLNd.§ù∞Ñ)1interapplication communication (IAC) architectureˇÄ°dONLNd_§Ñ∞ê)Á prF†°dONLNdb§ë∞Ÿ)ovides a standarû†°dONLNdr§Ÿ∞ı)Hd and °dONLNdx±äΩe(∫ä-extensible mechanism for communication among o °dONLNd•±fΩñ)‹
  563. Macintosh T†°dONLNdرóΩ˘)1applications. The IAC °dONLNd≈æä í(«äarE°dONLNd«æì π)        chitectur˘¿°dONLNd–æπ r)&+e makes it possible for your application to,Zapf Dingbats°dONLNd¸‘ä€è(⁄än
  564. °dONLNd˛—ñ›ü) prG °dONLNd—†›2)
  565. ovide automated copy and paste †°dONLNd—3›d)ì operations } °dONLNd*—d›)1#between your application and other °dONLNdM›ñÈÀ(Êñ applications°dONLNdZÚä˘è(¯än
  566. °dONLNd\Ôñ˚3) "be manipulated by means of scripts°dONLNdä è(
  567. än
  568. °dONLNdÅñƒ)
  569. send and r%‡°dONLNdã≈Û)/
  570. espond to Í¿°dONLNdïÚ,)- Apple events°dONLNd¢äè(än
  571. °dONLNd§ñƒ)
  572. send and r%‡°dONLNdÆ≈q)/'espond to high-level events other than °dONLNd’q´)¨ Apple events°dONLNd‚(ä/è(.än
  573. °dONLNd‰%ñ1ô) rE°dONLNdÂ%ö1w)1ead and write blocks of data between applications°dONLNd6äBù(?äThe ª¿°dONLNd6ùB¿)chapter ~ °dONLNd#6¡B    )$“Event Manager/Ä°dONLNd16
  574. B)I” ió‡°dONLNd46B)
  575. n È@°dONLNd66Bö)Inside Macintosh: Macintosh T;¿°dONLNdS6öBfi)~oolbox Essentials¿°dONLNdd6flB )E  describes °dONLNdoCäOY(Lä,how your application can use Event Manager rò‡°dONLNdõCYO∂)œoutines to send and rv°dONLNd∞C∂O)]espond to high-level °dONLNd≈Pä\ı(Yäevents. High-level eventœ‡°dONLNd›Pı\))k s need not añÄ°dONLNdÈP*\>)5dher@°dONLNdÌP?\Ä)e to any specifi‚`°dONLNd˝PÄ\ê)Ac prô¿°dONLNd    Pë\Û)otocol, so their interpr†°dONLNd    PÛ\)betation °dONLNd    !]äi§(fäis defiÄ°dONLNd    (]•iO)'ned by each application that sends or r€ °dONLNd    O]Oiä)™eceives them.°dONLNd    ]oä{Ë(xäThe most important rΔ`°dONLNd    qoË{ˇ)^equir›†°dONLNd    voˇ{)=ement for high-level communication among all applications is °dONLNd    ≥|äà!(Öä a common vocabulary of events. Tb‡°dONLNd    ”|!à2)óo prÄ°dONLNd    ◊|3àé)ovide such a standar@@°dONLNd    Î|éàô)[d, ˝†°dONLNd    Ó|òà„)
  576. Apple Computer¶ °dONLNd    ¸|„à)K , Inc., has °dONLNd
  577. âäïö(íädefir °dONLNd
  578. âõïø)ned a pr°dONLNd
  579. âøï    )$otocol called the o@°dONLNd
  580. &â
  581. ï)K4Apple Event Interprocess Messaging Protocol (AEIMP).Ø¿°dONLNd
  582. Zâï    )˝ °dONLNd
  583. [ñä¢>(üä)High-level events that conform to this prX°dONLNd
  584. Ññ>¢d)¥    otocol aròÄ°dONLNd
  585. çñd¢á)&    e called àÄ°dONLNd
  586. ññࢃ)$ Apple events  °dONLNd
  587. ¢ñƒ¢Δ)<.J °dONLNd
  588. £ñ«¢…) ˇò@ˇ ˇˇˇˇ@
  589. ˇ·ˇ‚7^
  590. 4*\¯, Palatino&e.3+l"CHAPTER à)>1,     Helvetica    ˇˇ—ÚˇÆ(@l.Introduction to Interapplication Communication4⁄*˙¯
  591. (‡*1-4    )B*Overview of Interapplication Communication4^*¿¯
  592. °dONLNd\lh(el%The vocabulary of publicly available •†°dONLNd%\h†)£!Apple events is published in the ø@°dONLNdF\†h‘)ë Apple Event °dONLNdRilu÷(rlRegistry: Standard Suites,(`°dONLNdli◊u)k
  593.  which defil‡°dONLNdwiuK)1nes the standarS¿°dONLNdÜiKuS)Cd ë °dONLNdàiSuÍ)!Apple events that developers and °dONLNd©vlÇT(l4Apple have worked out for use by all applications. T @°dONLNd›vTÇt)Ëo ensur•‡°dONLNd‰vtÇÏ) e that your application can °dONLNdÉlè(ål%communicate at a high level with otheW¿°dONLNd%Éè )©r a `°dONLNd(É èS) pplications >@°dONLNd4ÉTèç)4that support (‡°dONLNdAÉçèœ)9Apple events n°dONLNdOÉ–èÛ)Cow and °dONLNdVêlúû(ôl in the futurĆ°dONLNdbêûú3)2!e, you should support the standarʇ°dONLNdÉê3ú;)ïd $@°dONLNdÖê<úï)    Apple events that ar« °dONLNdôêïú±)Ye appr⁄°dONLNdüê±ú‚) opriate for °dONLNd´ùl©∫(¶lyour application. °dONLNdæØlªu*Ef¬°dONLNd¿Øuª≠)    fective IAC rÏ °dONLNdÕØ≠ªƒ)8equir`°dONLNd“Ø≈ª¯)Ges close cooperation among applications at several levels. In addition °dONLNdºl»J(≈l3to the format for high-level events and the standar¢@°dONLNdLºJ»ë)fid vocabulary of -‡°dONLNd\ºí»—)HApple events, W@°dONLNdjº—»Ó)?Apple °dONLNdp…l’é(“lhas defiÄ°dONLNdx…è’ˇ)#ned several other standarˇ¿°dONLNdë…˛’Û)o6ds your application can use to communicate with other °dONLNd«÷l‚(fll#applications. These include standarf†°dONLNdÍ÷‚ñ)úd methods for dealing with shar{ °dONLNd    ÷ñ‚‰)éed dynamic data, °dONLNd„lÔ(Ïl'scripts, and low-level message blocks. °dONLNdBılú*
  594. The IAC ar=Ä°dONLNdLıù√)1    chitecturÚ@°dONLNdUı√M)&e comprises the following partsó`°dONLNdtıNS)ã: ,Zapf Dingbats°dONLNdw lq(ln
  595. °dONLNdyxã) The ª¿°dONLNd}ã◊)Edition Manager®@°dONLNdåÿ‡)M; allows applications to automate copy and paste operations °dONLNd«x B(x.between applications, so that data can be sharê °dONLNdıB Ü) ed dynamically‚Ä°dONLNdÖ á)C.°dONLNd)l0q(/ln
  596. °dONLNd&x2ã) The ª¿°dONLNd &ã2+)!Open Scripting Architecture (OSA)y¿°dONLNd,&,28)° pr¿‡°dONLNd/&82Ä) ovides a standar‡°dONLNd?&Å2Î)Id mechanism, based on °dONLNdU2x>à(;xthe °dONLNdY2à>È)Apple Event ManagerpÄ°dONLNdl2È>])a, that allows users to contrT†°dONLNdà2]>ı)t"ol multiple applications by means °dONLNd™>xJ^(Gx7of scripts written in a variety of scripting languages.°dONLNd‚SlZq(Yln
  597. °dONLNd‰Px\ã) The ª¿°dONLNdËPã\Ó)Apple Event Manager∑`°dONLNd˚PÔ\É)d" allows applications to send and r„@°dONLNdPÉ\±)î
  598. espond to ® °dONLNd'P±\Ó).Apple events.°dONLNd5ellq(kln
  599. °dONLNd7bxnã) The ª¿°dONLNd;bãn–)Event Manager‰¿°dONLNdHb–nd)E" allows applications to send and r†°dONLNdjben·)ïespond to high-level events °dONLNdÜnxz®(wx other than L@°dONLNdën®zÂ)0Apple events.°dONLNdüÉläq(âln
  600. °dONLNd°Äxåã) The ª¿°dONLNd•Äãå^))Program-to-Program Communications (PPC) TÑ`°dONLNdŒÄ^å})”oolbox°`°dONLNd‘Ä}å‚) allows applications to °dONLNdÏåxò<(ïx,exchange blocks of data with each other by rß°dONLNdå<òÊ)ƒ%eading and writing low-level message °dONLNd=òx§è(°xblockd‡°dONLNdBò꧿)s. It also pr§¿°dONLNdOò¿§)0ovides a standar¸¿°dONLNd_ò§‰)H3d user interface that allows a user working in one °dONLNdí§x∞¨(≠xFapplication to select another application with which to exchange data.°dONLNdŸµl¡Ñ(ælFigurR¿°dONLNdfiµÑ¡ò)e 1-1@°dONLNd„µò¡û) s≠@°dONLNdµü¡Ù)hows the primary r›`°dONLNd˜µÙ¡|)Uelationships among these partsπ°dONLNdµ}¡à)â. TŸ¿°dONLNdµà¡÷) he managers and °dONLNd(¬lŒæ(Àlcomponents towarÒ°dONLNd8¬æŒÌ)R d the top oô†°dONLNdC¬ÓŒ
  601. )0f the fi◊†°dONLNdK¬
  602. Œ)gur2‡°dONLNdN¬Œ%)e rAÄ°dONLNdQ¬%Œ:) ely ox °dONLNdV¬:Œ˜))n the managers beneath them. The Edition °dONLNdœl€˝(ÿl!Manager uses the services of the Å@°dONLNd†œ˝€˜)ë5Apple Event Manager to support dynamic data sharing. °dONLNd’‹lËÆ(ÂlHScripting components manipulate and execute scripts with the aid of the t°dONLNd‹ÆËË(ÂÆ Apple Event °dONLNd)Èlıì(ÚlManagerT†°dONLNd0Èìıû)'. Tu`°dONLNd3Èûı´) he 2°dONLNd6È´ı3)Apple Event Manager in turn rÌ °dONLNdSÈ3ı–)à#elies on the Event Manager to send ±°dONLNdvÈ–ıÌ)ùApple °dONLNd|ˆl‘(ˇlQevents as high-level events, and the Event Manager uses the services of the PPC TÛ`°dONLNdÕˆ”Û(ˇ”oolbox.lÄ°dONLNd‘ˆÙˆ)! °dONLNd÷lÑ(lFigurR¿°dONLNd€Ñò)e 1-1@°dONLNd‡ò„) also shows the fiç °dONLNdÚ‰ó)L&ve principal means of communication pr€†°dONLNd    óÎ)≥ovided by the IAC °dONLNd    *l!t(larE°dONLNd    ,u!õ)        chitectur˘¿°dONLNd    5õ!Ù)&Me. In addition to using the Edition Manager and scripting components to send °dONLNd    Ç"l.Z(+l7Apple events on their behalf, applications can use the ® °dONLNd    π"Z.À)ÓApple Event Manager dir† °dONLNd    –"À.Ì)q    ectly to °dONLNd    Ÿ/l;É(8lsend ï`°dONLNd    fi/É;)$Apple events to other applications. 0°dONLNd
  603. / ;ú)ùAll applications can use the 
  604. @°dONLNd
  605. /ú;÷)| Apple Event °dONLNd
  606. +<lH•(El Manager to r釰dONLNd
  607. 7<•H‹)9 espond apprCÄ°dONLNd
  608. B<›H)8opriately to s °dONLNd
  609. O<Hó)5Apple events, whether they arÓ`°dONLNd
  610. l<óH–)Öe sent by the °dONLNd
  611. zIlUè(RlEdition ëÄ°dONLNd
  612. ÇIèU∂)#Managerf °dONLNd
  613. âI∂UÉ)'0, a scripting component, or other applications. ü°dONLNd
  614. πIÉUœ)ÕApplications can °dONLNd
  615.  VlbÄ(_lalso ö‡°dONLNd
  616. œVÄbë)use (†°dONLNd
  617. ”Víbı)the Event Manager dirÄÄ°dONLNd
  618. ËVıb>)cectly to send or rM°dONLNd
  619. ˙V?b€)J$eceive high-level events other than °dONLNd cloâ(llApple }Ä°dONLNd $cäoÎ)events, and the PPC T≤@°dONLNd 9cÍo)`
  620. oolbox dirÙÄ°dONLNd Cco`)-ectly to send or r¡°dONLNd Ucaoæ)Jeceive blocks of data.ˇh@ˇ ˇˇˇˇ@
  621. ˇ·ˇ‚7^
  622. 4H\, Palatino&e.3+ä"CHAPTER à)>1,     Helvetica    ˇˇ—ÚˇÆ(@ä.Introduction to Interapplication Communication4⁄ä˙(‡ä*Overview of Interapplication Communication
  623. , (‡    1-5
  624. ˇˇˇˇˇˇˇˇ4^4|lòÄ2^A|rMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""^A|r^A|r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  625. ^6|@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""^6|@^6|@˜˜˜˜˜˜˜˜˜˜˜˜˜˙ˇˇ˙ˇ˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜
  626. 4Å4w?òÄ
  627. Å6w@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""Å6w@Å6w@$˜˙ˇ˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˛¸ˇˇ
  628. ˇ˛ˇ˛¸ˇ˛¸ˇ˝˚ˇ˛˛˛ˇ˝
  629. ˇ˛ˇ˛
  630. ˇ˛ˇ˛˛˛ˇ˝˜˛˛ˇ˝
  631. ˇ˛ˇ˛
  632. ˇ˛ˇ˛˙ˇ˜˛˝ˇ˛ˇ˙˛ˇ˚¸ˇ˛˜˛˛ˇ˝
  633. ˇ˛ˇ˛
  634. ˇ˛ˇ˛˛ˇˇ˝˜˛¸ˇˇ
  635. ˇ˛ˇ˛    ¸ˇˇ˜˛˛ˇ˝
  636. ˇ˛ˇ˛
  637. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˜˛¸ˇˇ
  638. ˇ˛ˇ˛˛˛ˇ˝
  639. ˇ˛ˇ˛
  640. ˇ˛ˇ˛˛˛ˇ˝˜˜˜˜˜˙ˇ¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˛¸ˇˇ
  641. ˇ˛ˇ˛˜˛˛ˇ˝
  642. ˇˇˇ˛
  643. ˇˇˇ˛    ˇˇˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˛ˇˇ˝
  644. ˇˇˇ˛
  645. ˇˇˇ˛˛˛ˇ˝ˇ˙˙ˇ˛
  646. ˇ˛ˇ˛
  647. ˇ˛ˇ˛˛˛ˇ˝˜˙ˇ˛
  648. ˇ˛ˇ˛
  649. ˇ˛ˇ˛˛˛ˇ˝˜˙ˇ˜    ¸ˇˇ˜˛˛ˇ˝
  650. ˇ˛ˇ˛
  651. ˇ˛ˇ˛˛ˇˇ˝˛ˇˇ˝
  652. ˇˇˇ˛
  653. ˇˇˇ˛˛˛ˇ˝ˇ˙˛¸ˇˇ
  654. ˇ˛ˇ˛˜    ¸ˇˇ˜˛˛ˇ˝
  655. ˇ˛ˇ˛
  656. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˝˛ˇ˛
  657. ˛ˇ˛ˇˇ    ˇ¸ˇ    ˇ¸ˇ
  658. ˛ˇ˛ˇˇ˜˜˛˛ˇ˝
  659. ˇ˛ˇ˛
  660. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛˚ˇ˛˝ˇ˝˚ˇ˛˚ˇ˛˝ˇ˝˜¸ˇ˛˚ˇ˛˝ˇ˝˚ˇ˛˚ˇ˛˝ˇ˝˜˜˛˝ˇ˛ˇ˙˛ˇ˚¸ˇ˛˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜    ¸ˇˇ˜˛˛ˇ˝
  661. ˇ˛ˇ˛
  662. ˇ˛ˇ˛˛ˇˇ˝˛ˇˇ˝
  663. ˇˇˇ˛
  664. ˇˇˇ˛˛˛ˇ˝ˇ˙˛¸ˇˇ
  665. ˇ˛ˇ˛˜    ¸ˇˇ˜˛˛ˇ˝
  666. ˇ˛ˇ˛
  667. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  668. gHw4gHw"hH]
  669. ˇ·ˇ‚7^    °dONLNd\äg¥(dä
  670. Figure 1-1°dONLNd \Ãg≥)B7Principal methods of communication between applications
  671. °dONLNdD•ä±ê(ÆäT†¿°dONLNdE•ê±£)he fi»Ä°dONLNdJ•£±)ve forms of IAC shown in qÄ°dONLNdc•±0)uFigurD@°dONLNdh•0±D)e 1-1·¿°dONLNdm•D±Œ) can be summarized as follows:,Zapf Dingbats°dONLNdåªä¬è(¡än
  672. °dONLNdé∏ñƒÒ) Sharing dynamic data.Ä°dONLNd£∏ÚƒŒ)\1 The Edition Manager allows users to copy data fr*@°dONLNd‘∏ŒƒÒ)‹om one °dONLNd€ƒñ–ˇ(ÕñOapplication’s document to another application’s document, updating information °dONLNd*–ñ‹‹* Hautomatically when the data in the original document changes. The verbs k@°dONLNdr–›‹˙(Ÿ›publishÄ°dONLNdy–˚‹) and °dONLNd~‹ñ˪(Âñ    subscribe∏¿°dONLNdዪËΩ)%: describe this form of dynamic data sharing, and the noun D‡°dONLNd¡‹æËŸ(Âæedition
  673. @°dONLNd»‹⁄Ë) describes a °dONLNd’ËñÙ
  674. (Òñcopy of the data to be sharÿ`°dONLNdË
  675. Ù)ted. _`°dONLNdÙËÙ
  676. )4Applications that support dynamic data sharing must °dONLNd(Ùñ‰(˝ñimplement the Cr[@°dONLNd8Ù‰k)Neate Publisher and Subscribe T/Ä°dONLNdVÙk˙)áo menu commands. The Edition °dONLNdsñ  (    ñ
  677. Manager prY °dONLNd}  ¨)45ovides the interface that allows applications to shar“†°dONLNd≤¨ Ÿ)‚ e editions.°dONLNdæñú(ñY@Ä°dONLNdøú∞)?ou can let users publish and subscribe on a local volume or acrvÄ°dONLNd˛∞˝(∞oss a network. In °dONLNdñ'($ñXgeneral, users should be able to publish or subscribe to anything that they can copy or °dONLNdh'ñ3≤* paste. À °dONLNdo'≤3Û)“Sharing Data π°dONLNd}'Û3)AAmong K‡°dONLNdÉ'3W)$Applications,”á°dONLNdë'W3§)@ which begins on ˜`°dONLNd¢'§3ª)Mpage “@°dONLNdß'º3…)1-6& °dONLNd™' 3), describes how °dONLNd∫3ñ?[(<ñ,you can use the publish and subscribe featurf‡°dONLNdÊ3[?Ω)≈es in your application.°dONLNd˛HäOè(Nän
  678. °dONLNdEñQæ)
  679. Scripting.ˆ °dONLNd
  680. EæQË)( The OSA °dONLNdEÈQ#)+ includes the C°dONLNd E#QÑ):Apple Event Manager4Ä°dONLNd3EÑQô)a, the 3Ä°dONLNd9EôQÊ)Apple events defi-`°dONLNdJEÁQ)Nned by °dONLNdQQñ]¶(Zñthe ›`°dONLNdUQ¶]E)&Apple Event Registry: Standard Suites,K °dONLNd{QF]p)†
  681.  and the rZ†°dONLNdÖQp]–)*outines supported by I°dONLNdöQ—]¸)a
  682. scripting °dONLNd§]ñi–(fñ components,âÄ°dONLNdØ]–i¸):A which applications can use via the Component Manager to execute °dONLNdiñuK(rñ+scripts. Script-editing applications such aˇ¿°dONLNdiKuè)µs Script Editor (™Ä°dONLNd,iêuÃ)Enot shown in ¿°dONLNd9iÕuÂ)=FigurÏÄ°dONLNd>i‰u¯)e 1-1ä°dONLNdCi˘u˛)) °dONLNdEuñŶ(~ñalloΔ@°dONLNdIu¶Å∂)w u§`°dONLNdLu∑Åd)(sers to manipulate and execute scripts. °dONLNduÑñê-(çñ"Each scripting language has a corr«Ä°dONLNdóÑ-ê)ó/esponding scripting component that can execute °dONLNdΔêñúÎ(ôñMscripts written in that language. Scripting components typically implement a °dONLNdúñ®D* 'text-based scripting language based on ≈¿°dONLNd:úD®œ)ÆApple events. For example, the úÄ°dONLNdYú–®
  683. )å AppleScript °dONLNde®ñ¥…(±ñ    componentô@°dONLNdn®…¥)3  implements ¯ °dONLNdz®¥<)9 AppleScript,˝‡°dONLNdÜ®<¥p):  the standar ¿°dONLNdí®q¥Ù)5d user scripting language defiŸ`°dONLNd∞®Ù¥)Éned by 
  684. wHé4vFwGò@@˜@˜wG∑>¡¡?Œˇ¿ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ0?¸ˇÄÄ˚ˇ¿@?˛ˇ¯˝ˇ‡ ˛ˇ‡ ¸ˇ‡ˆ0?¸ˇÄ@˚ˇ¿†?˛ˇ¯˝ˇ‡P˛ˇ‡P¸ˇ‡ˆ0?¸ˇÄ ˚ˇ¿?˛ˇ¯"˝ˇ‡à˛ˇ‡à¸ˇ‡ˆ0?¸ˇÄ˚ˇ¿?˛ˇ¯A˝ˇ‡˛ˇ‡¸ˇ‡ˆ0?¸ˇÄ˚ˇ¿?˛ˇ¯ÄÄ˝ˇ‡˛ˇ‡¸ˇ‡ˆ0?¸ˇÄ˚ˇ¿?˛ˇ¯@˝ˇ‡˛ˇ‡¸ˇ‡ˆ0?¸ˇÄ ˚ˇ¿?˛ˇ¯ ˝ˇ‡Ä˛ˇ‡Ä¸ˇ‡ˆ0?¸ˇÄ@˚ˇ¿ Ä?˛ˇ¯˝ˇ‡@˛ˇ‡@¸ˇ‡ˆ0?¸ˇÄÄÄ˚ˇ¿@@?˛ˇ¯˝ˇ‡  ˛ˇ‡  ¸ˇ‡ˆ0?¸ˇÅ@˚ˇ¿Ä ?˛ˇ¯˝ˇ‡@˛ˇ‡@¸ˇ‡ˆ0?¸ˇÇ ˚ˇ¡?˛ˇ¯ ˝ˇ‡Ä˛ˇ‡Ä¸ˇ‡ˆ0?¸ˇÑ˚ˇ¬?˛ˇ¯@˝ˇ·˛ˇ·¸ˇ‡ˆ0?¸ˇà˚ˇƒ?˛ˇ¯Äὡ‚˛ˇ‚¸ˇ‡ˆ0?¸ˇê˚ˇ»?˛ˇ˘˛G˝ˇ‰˛ˇ‰¸ˇ‡ˆ0?¸ˇ†Ç˚ˇ–¡?˛ˇ˙¯'˝ˇË‡ü˛ˇË‡ü¸ˇ‡ˆ0?¸ˇ¿ A˚ˇ‡ ø˛ˇ¸˝ˇ_˛ˇ_¸ˇ‡ˆ/?¸ˇ†@ ˙ˇ– ˛ˇ˙˝ˇË?˛ˇË?¸ˇ‡ˆ0?¸ˇêò˚ˇ»Lø˛ˇ˘    Å˝ˇ‰&_˛ˇ‰&_¸ˇ‡ˆ0?¸ˇà‰
  685. ˚ˇƒr?˛ˇ¯Ä@ß˝ˇ‚9ü˛ˇ‚9ü¸ˇ‡ˆ,?¸ˇÑ?«˙ˇ¬ü„˝ˇ¯@s¸˝ˇ·œÒ˝ˇ·œÒ˚ˇ‡ˆ,?¸ˇÇ˙ˇ¡å˝ˇ¯ Ä?˝ˇ‡ÄF˝ˇ‡ÄF˚ˇ‡ˆ,?¸ˇÅÄ˙ˇ¿Ä@˝ˇ¯?˝ˇ‡@ ˝ˇ‡@ ˚ˇ‡ˆ,?¸ˇÄÄ@˙ˇ¿@ ˝ˇ¯?˝ˇ‡ ˝ˇ‡ ˚ˇ‡ˆ,?¸ˇÄ@0˙ˇ¿ ˝ˇ¯?˝ˇ‡ ˝ˇ‡ ˚ˇ‡ˆ,?¸ˇÄ Û˙ˇ¿˘˝ˇ¯ˇ?˝ˇ‡¸˝ˇ‡¸˚ˇ‡ˆ+?¸ˇÄ˙ˇ¿á˝ˇ¯¸ˇ‡C˝ˇ‡C˚ˇ‡ˆ,?¸ˇÄ˙ˇ¿˝ˇ¯Ä ?˝ˇ‡Ä˝ˇ‡Ä˚ˇ‡ˆ0?¸ˇÄ˚ˇ¿?˛ˇ¯@@˝ˇ‡˛ˇ‡¸ˇ‡ˆ0?¸ˇÄ˚ˇ¿?˛ˇ¯ Ä˝ˇ‡Ç˛ˇ‡Ç¸ˇ‡ˆ0?¸ˇÄ˚ˇ¿à?˛ˇ¯˝ˇ‡D˛ˇ‡D¸ˇ‡ˆ0?¸ˇĆ˚ˇ¿P?˛ˇ¯
  686. ˝ˇ‡(˛ˇ‡(¸ˇ‡ˆ0?¸ˇÄ@˚ˇ¿ ?˛ˇ¯˝ˇ‡˛ˇ‡¸ˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆò@@Ę@Ę∑G˜>?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆò@Ä¿˜Ä¿˜˜G7>?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆò@¿˜¿˜7Gw>?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆò@@˜@˜wG∑>?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆ?Œˇ‡ˆŒˇ‡ˆ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  687. «`»
  688. "    ê»
  689. b»
  690. R »
  691. èë—@»
  692. ÑÄ»
  693. ƒ> »¡¡¡ò@@Ę@Ę∑G˜>¡¡%† p  ˝ @ ˝:HÂ$Äp8Ä  ¸@ ˝@Â)%'¢»⁄Ÿ•"5ã¨áp∏2÷÷F»À¢lQwR-Ç“í2ËõpÁ)%)e "jÆ•ï5JÅPUjjÀIU%4j°UVÖÔRUIMÄÁ)%I-8'$LDŒ∫&RrPâJJZR&I$OBû‰âJdâíIpÁ)%f:  FùÈh$#.ñ†∫êêt⁄ˇjLTb®âèî∂ø⁄ìÁ)%N.p8DíFG%I· Dîî\ë*DHc√Gy
  694. c$Jë‡Á˛˙˚ ÙÑ‚˛˙˚†ÙÑ‚˛˙˚@ÙÑ‚¡¡: p8†Ä8˛HÅ HÅ– ˛$¯6 (ƒ¸ @@˛Äb¸ ¯<8%‘û91Y€ë÷æ+-)#.â±5µ£¥eË∂€ŸËõÅ€ïñîëó$ÿÄZ⁄»Ÿ1tMÄ˙<8*T&¢RÖR©i*‘T^ı%Tî—öö‰‘™IZi"´%IM    Bi*/zí™*hÄ≠MYiR§¶Ä˙<8‹§$úóî¬JI“ò‰î¶Hô$ëíí¨ôíRJ$…híIBJrJS$LRHÅ)IKJÑ…$Ä˙<8P®IÜ¥    €õPV    <à˘Kk˝©0ç$$9=~⁄¶õEYÀ⁄ìÑõD|•µ˛tòGRõ∑ÌIÄ˙;7N–i<€ç="í#§ç(x¶2D© r%%-(îë$FíBmdëí<S"THê8ííãíEHâ˘Ù˛@ıĘ ÌÙ˛@ıĘ Ì @Í Ì¡¡"@0Ä ¿«úŸ† ˝ A @ †Ÿ§_ŸrMáNH ÉwQ»h!8+∏D†€¨°"¢¶àR†%®Rî8Bu@´–€    Eû$≈$áÖ¿?flÑ«
  695. d∏ Ç&8%‹ê€ÁGÁIÅ…        a
  696. µ†1HK- €E∫EDâûËÁN&‹Ÿ‰02r6Ó¿€Ù˙@⁄Ù˙@⁄Ù˙@⁄¡¡¡¡¡¡¡¡¡¡¡¡¡¡ p8Õ àÕ §Bk)¨åŒ ;‘¢5w)P&îŒ íô¬    %%sê$†Œ •-HI⁄ I¨Œ ÿ»‡‰J1q‡iŒ
  697. ˛!˝@ 
  698. ˛!˝@ 
  699. ˛!˝@ ¡¡ Ä@h ŒÄ˛@  Œò@Ä¿˜Ä¿˜˜G7>    ⁄&A@+‡Í—ÒXœ&J°
  700. †TAI*¢†œ    "—¬¿îÇQtD†œCó1¯¬⁄EÂ@œB»ÁŒË®Ér:B@œ˙…˙…¡¡¡à@˛    ú∏¸Ä◊Äà    @˛    àHÄ◊ëÀΔŒV±uíI÷\ñ‡Ÿ 2ç√T©
  701. —ÊZ™K(à©Iÿ
  702.     "e»Úë"íÙëg    2H‡Ÿ    ã$Ì52#§FŸ¡ë˙ê Ÿó>Ft∂Ò…">Gr•<ëoQ¿Ÿ ˆ˛Ä” ˆ”Û–¡¡ ˇ  Œ R     Œ JRGıØ%ÇŒ ≠(íÃ"RRŒ •)p§[¬îíŒ ≠JA6p‰ˆ§Œ ˆå9§_D§DLŒ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜7Gi>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜wG∑>¡¡Õ3ıÕ@ˆ Œ ˆÕ@ˆÕ@ˆÕ@ˆ Œ ˆÕ@ˆ Œ ˆÕ@ˆÕ@ˆÕ@ˆ Œ ˆÕ@ˆ ˙Ę@˙˘ ˙ ˙ ˆ˙@˜†˙˘P˙P˙@ˆ˙ ¯˙"˘à˙à˙@ˆ˙¯˙A˙˚˙@ˆ! ˚¯˙ÄÄ˚˚˙ ˆ ˙¯˚@˚˚˙@ˆ$ ˚ ¯˚ ˚ĸÄ˚ ˆ#˙@¯ Ä¸˚@¸@˚@ˆ$˙ÄĢ@@¸˚  ¸  ˚@ˆ%˚@˘Ä ¸˚@¸@˚@ˆ( ¸ ˙¸ ˚ĸÄ˚ ˆ(˚˙¸@¸˝˚@ˆ+ ¸˙¸ÄÄ˝˝˚ ˆ*˚˙˝˛@˝˝˚@ˆ,˚ Ç˙¡˝¯ ˝‡Ä˛‡Ä¸@ˆ-˚@ A˙  Ä˛˝@˛@¸@ˆ0 ¸ @ Ä˚ @˛˝ ˛ ¸ ˆ-˚ò˙LIJ    Å˝&@˛&@¸@ˆ- ¸‰
  703. ˙r¸Ä@†˝9IJ9ĸ ˆ-˚?«Ä˚ü„¿˝@s¸x˝œÒ‡˛œÒ‡¸@ˆ+˚Ä˚å¿˝ Ä8¸ÄF‡˝ÄF‡¸@ˆ*˚ÄÄ˙Ä@¿˝8¸@ ‡˝@ ‡¸@ˆ+ ˚Ä@Ä˙@ ¿˝8¸ ‡˝ ‡¸ ˆ)˙@0Ä˙ ¿˝8¸ ‡˝ ‡¸@ˆ+ ˚ ÛÄ˙˘¿˝ˇ8¸¸‡˝¸‡¸ ˆ)˙Ä˙á¿˝¯¸C‡˝C‡¸@ˆ(˙Ä˙¿¸Ä 8¸ć˝ć¸@ˆ˙¯˙@@˚˚˙@ˆ ˚¯˙ Ä˙Ç˙Ç˙ ˆ˙˜à˙˘D˙D˙@ˆ ˙†˜P˙
  704. ˘(˙(˙ ˆ˘@˜ ˙˘˙˙@ˆÕ@ˆÕ@ˆ Œ ˆ
  705. ÊÈ@ˆ ˙¿˜0˙˘8˙8˙ ˆ˙‡˜x˙Ä˙l˙l˙@ˆ˙0˜Ã˙0¿˙Δ˙Δ˙@ˆ˙ò¯é˙h‡˚ã˚ã˙@ˆ# ˚ ¯˙‡˚ĸÄ˚ ˆ!˙¯á˙Ä˚ÉĸÉÄ˚@ˆ" ˚0?ˇˇ˛˚§˙Ä˙¢˙¢˙ ˆ!˙?ˇˇ˛˚Ñ˚¯Ä˙Ç˙Ç˙@ˆ$˙??ˇˇ˛¸ƒ˚HÄ˚¬˚¬˙@ˆ$˙)ê8¸Ã˚àÄ˚ ˚ ˙@ˆ) ˚!;ˇ<¸
  706. DˇÄÄ˚B˚B˙ ˆ'˙1;ˇ~¸
  707.     D@ÄÄ˚    B˚    B˙@ˆò@@Ę@Ę∑G˜>) ˚#0;˛Á¸
  708.  
  709. d@¿*Ä˚
  710. b˚
  711. b˙ ˆ'˙!;˛√¸
  712. DOˇ@Ä˚B˚B˙@ˆ0˙%;˛√Ó¸ D@@HÄ@˝ BPA B @ˆ0˙)ê;˛ÁÓ¸ Ãg¸@àĆ˝ @A  @ˆ3 ˚!;‡~.¸D @ÄÆÈIJB◊q4¥B…K'  ˆ1˙1;Ï<.¸    D'ˇ@ÄÈõ¿˛    BYOz¸    B+oó†@ˆ2 ˚#08 .¸
  713. d @*Åö˝
  714. bYICD
  715. b&å  ˆ1˙!8? .¸D0@ÅÈ¿˛BWI:<Bƒãì†@ˆ+˙%8sèÓ¸ D7ˇ@HÄÄ˝ B˝ B˙@ˆ+˙)ê8·œÓ¸ à@àÄÄ˝ ˝ ˙@ˆ) ˚!9ˇ‡¸
  716. D/¸@Ä˚B˚B˙ ˆ'˙19ˇ‡¸
  717.     D‡@Ä˚    B˚    B˙@ˆ/ ˚#08¸
  718. d `¿*ÄIJ
  719. b˛
  720. b˙ ˆ1˙!?ˇˇfi¸D    ¿ÄÄ“›¯˛BKsBflÄ@ˆ1˙%?ˇˇ˛¸ D ¿ÄHÅÎÚ‡˛ BØ…¿ B?7ß¿@ˆ1˙)ê?ˇˇ˛¸Ã    ÄÄàÅò˛ 4I0  Ã¶˛@ˆ/ ˚!¯D˛ÄËÚp˛B£»‡Bªù¿ ˆ'˙1¯    Dˇ¸˛Ä˚    B˚    B˛˛@ˆ& ˚#0¯
  721. d˚*Ä˚
  722. b˚
  723. b˛8˛ ˆ&˙!‚ê˚DIJÄ˚B˚B˙@ˆ)˙% ˚ DIJHÄ˚ B˚ B@˝@ˆ*˙)êÛp¸Ã6˜˛àÄ˚ ˚ @˝@ˆ- ˚!Ú¥»¸Dà˛Ä˚B˚B3[IJ ˆ*˙1¥»¸    Dƒ ˛Ä˚    B˚    BLÊ˝@ˆ- ˚#0ÓìH¸
  724. d<Ò˛*Ä˚
  725. b˚
  726. bLQIJ ˆ&˙!¯D@˛Ä˚B˚B3fl˝@ˆ#˙%¯ D@˛HÄ˚ B˚ B˙@ˆ ˙)ê¯Ã˚àÄ˚ ˚ ˙@ˆ" ˚!¯D˚Ä˚B˚B˙ ˆ ˙1¯    |˚Ä˚    B˚    B˙@ˆ! ˚#˜
  727. @˚*Ä˚
  728. b˚
  729. b˙ ˆ˙!˜@˚Ä˚B˚B˙@ˆ˙%˜|@˚HÄ˚ B˚ B˙@ˆ!˚È¿¯h˚àÄ˚ ˚ ˙@ˆ" ˚¿¿¯0`˚Ä˚B˚B˙ ˆ ˙qį¿˚Ä˚    B˚    B˙@ˆ! ˚3˜Ä˚*Ä˚
  730. b˚
  731. b˙ ˆ˙˜˙Ä˚B˚B˙@ˆ˙ ˜˙HÄ˚ B˚ B˙@ˆÁàÄ˚ ˚ ˙@ˆ ËÄ˚B˚B˙ ˆÁÄ˚    B˚    B˙@ˆ  Û?˚ˇ˛*Ä˚
  732. b˚
  733. b˙ ˆ#ˆˇ‡ ˚˛Ä˚B˚B˙@ˆ#ˆ0 ˚˛HÄ˚ B˚ B˙@ˆ#ˆ0 ˚˛àÄ˚ ˚ ˙@ˆ& ˆ    0 ‡˛Ä˚B˚B˙ ˆ&ˆ    0  ˛Ä˚    B˚    B˙@ˆ& ˆ    0 Δfi~p˛*Ä˚
  734. b˚
  735. b˙ ˆ&ˆ    0 9ô9ê˛Ä˚B˚B˙@ˆ,ÒD!¸    0 ô9ê˛HÄ˚ B˚ B˙@ˆ,Å3¸    0 Áûp˛àÄ˚ ˚ ˙@ˆ. á\‹3g1ŸÄ0 ˛Ä˚B˚B˙ ˆ.˘M2-Ù˙}0 ‡˛Ä˚    B˚    B˙@ˆ+ âM2-î a0 ˚˛*Ä˚
  736. b˚
  737. b˙ ˆ+˜D“)tπ›0 ˚˛Ä˚B˚B˙@ˆ'˘@0 ¸Ä˛HÄ˚ B˚ B˙@ˆ*˙Ä0  ⁄qπù¿˛àÄ˚ ˚ ˙@ˆ& ˆ    0 5Jg“IJÄ˚B˚B˙ ˆ&ˆ    0 5JfIJÄ˚    B˚    B˙@ˆ& ˆ    0 ’q•“@˛*Ä˚
  738. b˚
  739. b˙ ˆ&ˆ0 @˛˛Ä˚B˚B˙@ˆ&ˆ0 @˛˛HÄ˚ B˚ B˙@ˆ#ˆ0 ˚˛àÄ˚ ˚ ˙@ˆò@Ä¿˜Ä¿˜˜G7># ˆ0?˚ˇ¯˛Ä˚B˚B˙ ˆ#ˆˇ˚ˇ¯˛Ä˚    B˚    B˙@ˆ ˆˇı*Ä˚
  740. b˚
  741. b˙ ˆÁÄ˚B˚B˙@ˆ˜˙˙HÄ˚ B˚ B˙@ˆ˜<˙Ä˚àÄ˚ ˚ ˙@ˆ! ¯f˙¿˚Ä˚B˚B˙ ˆ˜√˙0`˚Ä˚    B˚    B˙@ˆ# ˘£Ä˚b0˚*Ä˚
  742. b˚
  743. b˙ ˆ!¯√Ä˚pp˚Ä˚B˚B˙@ˆ˜B˙@˚HÄ˚ B˚ B˙@ˆ˜J˙¿˚àÄ˚ ˚ ˙@ˆ" ¯B˚¯@˚Ä˚B˚B˙ ˆ!¯‚˚@˚Ä˚    B˚    B˙@ˆ# ˘"˚*@˚*Ä˚
  744. b˚
  745. b˙ ˆ!¯"˚@˚Ä˚B˚B˙@ˆ!¯b˚H@˚HÄ˚ B˚ B˙@ˆ!¯™˚à¿˚àÄ˚ ˚ ˙@ˆ# ˘"˚@˚Ä˚B˚B˙ ˆ!¯"˚@˚Ä˚    B˚    B˙@ˆ# ˘"˚*@˚*Ä˚
  746. b˚
  747. b˙ ˆ!¯"˚@˚Ä˚B˚B˙@ˆ!¯b˚H@˚HÄ˚ B˚ B˙@ˆ!¯™˚à¿˚àÄ˚ ˚ ˙@ˆ# ˘"˚@˚Ä˚B˚B˙ ˆ!¯"˚@˚Ä˚    B˚    B˙@ˆ# ˘"˚*@˚*Ä˚
  748. b˚
  749. b˙ ˆ!¯"˚@˚Ä˚B˚B˙@ˆ!¯b˚H@˚HÄ˚ B˚ B˙@ˆ!¯æ˚è¿˚èÄ˚ ˚ ˙@ˆ! ˘ ˚˙˙B˚B˙ ˆ¯ ˚˙˙    B˚    B˙@ˆ! ˘ ˚(˙(˙
  750. b˚
  751. b˙ ˆ¯<8˚˙˙B˚B˙@ˆ¯X˚F˙F˙ B˚ B˙@ˆ¯ ∞˚å˙å˙ ˚ ˙@ˆ  ˘`˙ÿ˙ò˙B˚B˙ ˆ¯¿˙p˘˙    B˚    B˙@ˆ ˘Ä˙ ˘`˙
  752. b˚
  753. b˙ ˆfiB˚B˙@ˆfi B˚ B˙@ˆfi ˚ ˙@ˆ ˙Óˇ‡˚B˚B˙ ˆ˘Ó0˚    B˚    B˙@ˆ ˙Ó0˚
  754. b˚
  755. b˙ ˆ˘Ó0˚B˚B˙@ˆ˘Ó0˚ B˚ B˙@ˆ˘Ó0˚ ˚ ˙@ˆ ˙Ó0˚B˚B˙ ˆ˘Ó0˚    B˚    B˙@ˆ$ ˙˝Äx˘0˚
  756. b˚
  757. b˙ ˆ"˘˝Ä@0˘0˚B˚B˙@ˆ%˘˝    ÓòD≥ª6s9∞¸0˚ B˚ B˙@ˆ%˘˝    ôºz˙RflOÀ‡¸0˚ ˚ ˙@ˆ' ˙˝    "ô†CBRŸL  ¸0˚B˚B˙ ˆ%˘˝    "Óúz:JóKπ‡¸0˚    B˚    B˙@ˆ" ˙¸à˚˚0˚
  758. b˚
  759. b˙ ˆ ˘¸à˚p˚0˚B˚B˙@ˆ˘Ó0˚ B˚ B˙@ˆ˘Ó0˚ ˚ ˙@ˆ ˙Ó0˚B˚B˙ ˆ˘Ó0˚    B˚    B˙@ˆ ˙Ó0˚
  760. b˚
  761. b˙ ˆ˘Ó0˚B˚B˙@ˆò@¿˜¿˜7Gw>˘Óˇ˚ B˚ B˙@ˆ˘Óˇ˚ ˚ ˙@ˆ fl~˚B˙ ˆfi    @˚    B˙@ˆ fl
  762. @˚
  763. b˙ ˆfi8@˚B˙@ˆfi4x˚ B˙@ˆfi∞˚ ˙@ˆ fl `˚B˙ ˆfi¿˚    B˙@ˆ flÄ˚
  764. b˙ ˆfi˙B˙@ˆ ÷ B˙@ˆ ÷ ˙@ˆ ÌÓˇB˙ ˆÏÔÄ    B˙@ˆ ÌÔÄ
  765. b˙ ˆÏÔÄB˙@ˆÏÔÄ B˙@ˆÏÔÄ ˙@ˆ ÌÔÄB˙ ˆÏÔÄ    B˙@ˆ Ì¸‡@˘Ä
  766. b˙ ˆÏ¸å¿˘ÄB˙@ˆÏ¸›Ã€åÌĸÄ B˙@ˆÏ¸ÎÚã~_?˚Ä ˙@ˆ Ì¸ãfS1˚ÄB˙ ˆÏ¸ËÚJ^NÔ˚Ä    B˙@ˆ Ìˆ ˚Ä
  767. b˙ ˆÏ˜¿˚ÄB˙@ˆÏÔÄ B˙@ˆÏÔÄ ˙@ˆ ÌÔÄB˙ ˆÏÔÄ    B˙@ˆ ÌÔÄ
  768. b˙ ˆÏÔÄB˙@ˆÏÓˇÄ B˙@ˆÏÓˇIJ˙@ˆ ◊@˙ ˆ ÷    @˙@ˆ ◊:@˙ ˆ ÷0x˙@ˆ ÷p˙@ˆ ÷ ‡˙@ˆ ◊¿˙ ˆ ÷Ä˙@ˆ  ◊˘ ˆÕ@ˆÕ@ˆ ‚Ôˇ¸@ˆ „@Ô ˆ ‚@Ô@ˆ „@Ô ˆ ‚@Ô@ˆ ‚@Ô@ˆ ‚@Ô@ˆ „@˚8c‡ ˙ ˆ‚@˚•êÄ ˙@ˆ „@˚•åœ2@¸ ˆ‚@˚9ì,…ĸ@ˆ‚@˚!ì,…ĸ@ˆ‚@˚ ‡åœ2@¸@ˆ „@Ô ˆ ‚@Ô@ˆò@@˜@˜wG∑> „@Ô ˆ ‚@Ô@ˆ ‚@Ô@ˆ ‚@Ô@ˆ „@Ô ˆ ‚@Ô@ˆ „@Ô ˆ ‚Ôˇ˛@ˆ ‚?Ôˇ˛@ˆÕ@ˆ Œ ˆÕ@ˆ Œ ˆÕ@ˆÕ@ˆÕ@ˆ Œ ˆÕ@ˆ Œ ˆ ŒÃ¿ˆŒU@ˆ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  769. «`»
  770. "    ê»
  771. b»
  772. R »
  773. èë—@»
  774. ÑÄ»
  775. ƒ> »¡¡¡ò@@Ę@Ę∑G˜>¡¡%† p  ˝ @ ˝:HÂ$Äp8Ä  ¸@ ˝@Â)%'¢»⁄Ÿ•"5ã¨áp∏2÷÷F»À¢lQwR-Ç“í2ËõpÁ)%)e "jÆ•ï5JÅPUjjÀIU%4j°UVÖÔRUIMÄÁ)%I-8'$LDŒ∫&RrPâJJZR&I$OBû‰âJdâíIpÁ)%f:  FùÈh$#.ñ†∫êêt⁄ˇjLTb®âèî∂ø⁄ìÁ)%N.p8DíFG%I· Dîî\ë*DHc√Gy
  776. c$Jë‡Á˛˙˚ ÙÑ‚˛˙˚†ÙÑ‚˛˙˚@ÙÑ‚¡¡: p8†Ä8˛HÅ HÅ– ˛$¯6 (ƒ¸ @@˛Äb¸ ¯<8%‘û91Y€ë÷æ+-)#.â±5µ£¥eË∂€ŸËõÅ€ïñîëó$ÿÄZ⁄»Ÿ1tMÄ˙<8*T&¢RÖR©i*‘T^ı%Tî—öö‰‘™IZi"´%IM    Bi*/zí™*hÄ≠MYiR§¶Ä˙<8‹§$úóî¬JI“ò‰î¶Hô$ëíí¨ôíRJ$…híIBJrJS$LRHÅ)IKJÑ…$Ä˙<8P®IÜ¥    €õPV    <à˘Kk˝©0ç$$9=~⁄¶õEYÀ⁄ìÑõD|•µ˛tòGRõ∑ÌIÄ˙;7N–i<€ç="í#§ç(x¶2D© r%%-(îë$FíBmdëí<S"THê8ííãíEHâ˘Ù˛@ıĘ ÌÙ˛@ıĘ Ì @Í Ì¡¡"@0Ä ¿«úŸ† ˝ A @ †Ÿ§_ŸrMáNH ÉwQ»h!8+∏D†€¨°"¢¶àR†%®Rî8Bu@´–€    Eû$≈$áÖ¿?flÑ«
  777. d∏ Ç&8%‹ê€ÁGÁIÅ…        a
  778. µ†1HK- €E∫EDâûËÁN&‹Ÿ‰02r6Ó¿€Ù˙@⁄Ù˙@⁄Ù˙@⁄¡¡¡¡¡¡¡¡¡¡¡¡¡¡ p8Õ àÕ §Bk)¨åŒ ;‘¢5w)P&îŒ íô¬    %%sê$†Œ •-HI⁄ I¨Œ ÿ»‡‰J1q‡iŒ
  779. ˛!˝@ 
  780. ˛!˝@ 
  781. ˛!˝@ ¡¡ Ä@h ŒÄ˛@  Œò@Ä¿˜Ä¿˜˜G7>    ⁄&A@+‡Í—ÒXœ&J°
  782. †TAI*¢†œ    "—¬¿îÇQtD†œCó1¯¬⁄EÂ@œB»ÁŒË®Ér:B@œ˙…˙…¡¡¡à@˛    ú∏¸Ä◊Äà    @˛    àHÄ◊ëÀΔŒV±uíI÷\ñ‡Ÿ 2ç√T©
  783. —ÊZ™K(à©Iÿ
  784.     "e»Úë"íÙëg    2H‡Ÿ    ã$Ì52#§FŸ¡ë˙ê Ÿó>Ft∂Ò…">Gr•<ëoQ¿Ÿ ˆ˛Ä” ˆ”Û–¡¡ ˇ  Œ R     Œ JRGıØ%ÇŒ ≠(íÃ"RRŒ •)p§[¬îíŒ ≠JA6p‰ˆ§Œ ˆå9§_D§DLŒ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜7Gi>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜iG©>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę©GÈ>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜ÈG)>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜)Gi>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜iG©>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę©GÈ>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜ÈG)>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜)G[>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜iG©>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę©GÈ>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜ÈG)>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜)Gi>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜iG©>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę©GÈ>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜ÈG)>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜)G[>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ˇ@ˇ ˇˇˇˇ@
  785. ˇ·ˇ‚7^
  786. 4*\¯, Palatino&e.3+l"CHAPTER à)>1,     Helvetica    ˇˇ—ÚˇÆ(@l.Introduction to Interapplication Communication4⁄*˙¯
  787. (‡*1-6    )BSharing Data ¿)7Among à0) Applications4^*¿¯
  788. °dONLNd\xh√(exApple Computer(Ä°dONLNd\√h)K, Inc. When the ¥°dONLNd\hÙ)D5AppleScript component executes a script, it performs °dONLNdShxtc(qx7the actions described in the script, including sending ó °dONLNdähct„)ÎApple events to applications °dONLNdßtxÄæ(}xwhen necessaryx@°dONLNdµtΩĬ)E. °dONLNd∏Éxè±(åx “Supporting ‡ °dONLNdƒÉ±èz)9+AppleScript and Other Scripting Languages,”w†°dONLNdÔÉ{è»)  which begins on Ë°dONLNdÉ»èfl)Mpage ¬‡°dONLNdɇèÚ)1-13¿°dONLNd    ÉÛè¯), °dONLNd èxõfi(òxdescribes how the OSAÕ`°dONLNd èfiõî)f+ makes it possible for your application to ,Zapf Dingbats°dONLNdL†x©}(ßxn
  789. °dONLNdNûÑ™ç) prG °dONLNdPûé™8)
  790. $ovide human-language equivalents to ˇ‡°dONLNdtû7™‘)©$Apple event codes so that scripting °dONLNdò™Ñ∂Â(≥Ñcomponents can send RÄ°dONLNd¨™Ê∂1)byour application ¿°dONLNdΩ™2∂W)Lthe appr.`°dONLNd≈™W∂x)%opriate Ɔ°dONLNdÕ™x∂Æ)! Apple event˘`°dONLNdÿ™Æ∂∫)6s d“ °dONLNd€™ª∂Ò)uring script °dONLNdË∂ѬÆ(øÑ    execution°dONLNdÚ«x–}(Œxn
  791. °dONLNdÙ≈Ñ—») allow users to rWÄ°dONLNd≈»—⁄)DecorÀ‡°dONLNd≈⁄—)d their actionŇ°dONLNd≈—);s i'@°dONLNd≈—{)
  792. n the form of a script°dONLNd0÷xfl}(›xn
  793. °dONLNd2‘ч) manipulate and execute scripts°dONLNdQÈlq(Ôln
  794. °dONLNdSÊxÚ±) Sending and r熰dONLNd`ʱÚ)9esponding to Apple events.fl†°dONLNdzÊÚ)l 2°dONLNd{Ê Ú&)YÚÄ°dONLNd|Ê%Úî)our application can send Ô†°dONLNdïÊîÚ )o Apple event:`°dONLNd†ÊÀÚfi)7s dir¿Ä°dONLNd•ÊfiÚı)ectly °dONLNd´Úx˛‰(˚xto other applications to rÓ °dONLNd≈Ú‰˛)lequest s^°dONLNdÕÚ˛d)$ervices or informatioq‡°dONLNd‚Úd˛ç)\
  795. n or to pr™`°dONLNdÏÚç˛fl))ovide information.O@°dONLNd˛Ú‡˛Ë)S T°dONLNdÚ˲Ô)o °dONLNd˛x
  796. ù(xsupport îÄ°dONLNd
  797. ˛ù
  798. fi)%FAppleScript and most other scripting languages based on the OSA, your °dONLNdP
  799. xı(xapplication must be able to r °dONLNdm
  800. ˆ$)~
  801. espond to fi°dONLNdw
  802. #b)-Apple events. e¿°dONLNdÖ
  803. cÂ)@“Sending and Responding to °dONLNd†x"ª(xApple Events,”Ÿ‡°dONLNdƪ")C which begins on J@°dONLNdø    " )Npage % °dONLNdƒ!".)1-9y°dONLNd«."È)*, describes how applications can send and °dONLNdÒ"x.{(+xrE°dONLNdÚ"|.™)
  804. espond to     ‡°dONLNd¸"™.:).!Apple events with the aid of the †°dONLNd":.õ)êApple Event Manager °dONLNd0"õ.ù)a.°dONLNd27l>q(=ln
  805. °dONLNd44x@±) Sending and r熰dONLNdA4±@C)9%esponding to other high-level events.x‡°dONLNdf4D@˜)ì' The Event Manager allows applications °dONLNdç@xL&(Ix(to support high-level events other than ˘†°dONLNdµ@&LÃ)Æ%Apple events. See the chapter “Event °dONLNd⁄LxX≤(Ux Manager” in À¿°dONLNdÊL≤X0):Inside Macintosh: Macintosh T@°dONLNdL0Xt)~oolbox Essentials„@°dONLNdLtXÿ)D for information about °dONLNd+XxdΔ(axhigh-level events.°dONLNd>mltq(sln
  806. °dONLNd@jxvÈ) Exchanging message blocks.ᆰdONLNdZjÈv)q
  807.  The PPC T#`°dONLNddjvÛ)11oolbox allows applications to exchange blocks of °dONLNdïvxÇÊ(xdata with each other by r›¿°dONLNdÆvÊǘ)n<eading and writing low-level message blocks. This method of °dONLNdÍÇxéc(ãx5communication is most useful for applications that ar:‡°dONLNdÇdé⁄)Ïe closely integrated, specifi. °dONLNd<Ç€éÚ)wcally °dONLNdBéxöÏ(óxdesigned to work togetherz°dONLNd[éÏöÒ)t=, or dependent on each other for information. It can also be °dONLNdòöx¶,(£x*used in code that is not event-based. See —@°dONLNd¬ö,¶⁄)¥$“Exchanging Message Blocks” on page Í°dONLNdÊö⁄¶Ï)Æ1-22=‡°dONLNdÍö̶Ô) °dONLNdζx≤(Øx$for a summary of the capabilities pr¸@°dONLNd¶≤p)ùovided by the PPC TU†°dONLNd"¶p≤ê)[oolbox.°dONLNd*∑l√¡(¿lAll forms of IAC ar∞ °dONLNd=∑¡√ )Ue based on the pr °dONLNdN∑√Á)L1emise that applications cooperate with each otherÒ‡°dONLNd∑Ê√Î)Ÿ. °dONLNdŃl–‹(ÕlSBoth the application sending a high-level event or low-level message block and the °dONLNd‘—l›§*application r{‡°dONLNd·—§›˚)8eceiving it must agr∞@°dONLNdı—˚›/)W ee on the prƇ°dONLNd—/›•)4otocol for communication. i@°dONLNd—¶›¨)wY)¿°dONLNd—¨›‰) ou can ensurå °dONLNd(—‰›Î)8e °dONLNd*filÍt(Álefo‡°dONLNd,fitÍ€)Nfective high-level communication between your application and other Macintosh °dONLNdzÎl˜(Ùl&applications by supporting the standar’@°dONLNd†Î˜)´d †°dONLNd¢Î ˜m)    Apple events defi Ä°dONLNd≥În˜ú)N ned in the ⁄`°dONLNdæÎú˜–). Apple Event °dONLNd ¯l÷(lRegistry: Standard Suites.(`°dONLNd‰¯◊Ÿ)k 
  808.  *&¯4 *&¯
  809. 6*>¯47*>¯ 8*8˛
  810. ˇ·ˇ‚7^ˇˇ©ˇÆ°dONLNdÁ#*6å(1*Sharing Data ¸™°dONLNdÙ#ã6Δ)aAmong nÜ°dONLNd˙#Δ6"); ApplicationsˇˇˇˇˇˇV˛(11
  811. °dONLNd    GlS|(Pl<All Macintosh applications can use the Scrap Manager to shar‡ °dONLNd    DG|S¿(P|e static data by °dONLNd    UTl`í(]lallowingf °dONLNd    ]Tì`ï)' Ê °dONLNd    ^Tï`Ò)Lthe user to copy and paste data between documents. Dynamic data sharing, or °dONLNd    ™almË(jlUautomated copy and paste operations between applications, extends this capability to °dONLNd    ˇnlz¶*Edynamically changing data. The Edition Manager lets applications shar)¿°dONLNd
  812. Dnßz¯(wße dynamic data at °dONLNd
  813. V{láè(Ñlthe userõ °dONLNd
  814. ^{êáù)$’s r‰`°dONLNd
  815. b{ùáæ)equest. i†°dONLNd
  816. j{øá≈)"Y* °dONLNd
  817. k{≈á˜)Fou incorporate publish and subscribe capabilities in your application °dONLNd
  818. ±àlîV(ël4much as you incorporate copy and paste capabilities.ˇj@@ˇ ˇˇˇˇ@
  819. ˇ·ˇ‚7^
  820. 4H\, Palatino&e.3+ä"CHAPTER à)>1,     Helvetica    ˇˇ—ÚˇÆ(@ä.Introduction to Interapplication Communication4⁄ä˙(‡äSharing Data ¿)7Among à0) Applications
  821. , (‡    1-7
  822. ˇˇˇˇˇˇˇˇ4^4|lòÄ2^A|rMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""^A|r^A|r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  823. ^6|@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""^6|@^6|@˜˜˜˜˜˜˜˜˜˜˜˜˜˙ˇˇ˙ˇ˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜
  824. 4Å4w?òÄ
  825. Å6w@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""Å6w@Å6w@$˜˙ˇ˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˛¸ˇˇ
  826. ˇ˛ˇ˛¸ˇ˛¸ˇ˝˚ˇ˛˛˛ˇ˝
  827. ˇ˛ˇ˛
  828. ˇ˛ˇ˛˛˛ˇ˝˜˛˛ˇ˝
  829. ˇ˛ˇ˛
  830. ˇ˛ˇ˛˙ˇ˜˛˝ˇ˛ˇ˙˛ˇ˚¸ˇ˛˜˛˛ˇ˝
  831. ˇ˛ˇ˛
  832. ˇ˛ˇ˛˛ˇˇ˝˜˛¸ˇˇ
  833. ˇ˛ˇ˛    ¸ˇˇ˜˛˛ˇ˝
  834. ˇ˛ˇ˛
  835. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˜˛¸ˇˇ
  836. ˇ˛ˇ˛˛˛ˇ˝
  837. ˇ˛ˇ˛
  838. ˇ˛ˇ˛˛˛ˇ˝˜˜˜˜˜˙ˇ¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˛¸ˇˇ
  839. ˇ˛ˇ˛˜˛˛ˇ˝
  840. ˇˇˇ˛
  841. ˇˇˇ˛    ˇˇˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˛ˇˇ˝
  842. ˇˇˇ˛
  843. ˇˇˇ˛˛˛ˇ˝ˇ˙˙ˇ˛
  844. ˇ˛ˇ˛
  845. ˇ˛ˇ˛˛˛ˇ˝˜˙ˇ˛
  846. ˇ˛ˇ˛
  847. ˇ˛ˇ˛˛˛ˇ˝˜˙ˇ˜    ¸ˇˇ˜˛˛ˇ˝
  848. ˇ˛ˇ˛
  849. ˇ˛ˇ˛˛ˇˇ˝˛ˇˇ˝
  850. ˇˇˇ˛
  851. ˇˇˇ˛˛˛ˇ˝ˇ˙˛¸ˇˇ
  852. ˇ˛ˇ˛˜    ¸ˇˇ˜˛˛ˇ˝
  853. ˇ˛ˇ˛
  854. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˝˛ˇ˛
  855. ˛ˇ˛ˇˇ    ˇ¸ˇ    ˇ¸ˇ
  856. ˛ˇ˛ˇˇ˜˜˛˛ˇ˝
  857. ˇ˛ˇ˛
  858. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛˚ˇ˛˝ˇ˝˚ˇ˛˚ˇ˛˝ˇ˝˜¸ˇ˛˚ˇ˛˝ˇ˝˚ˇ˛˚ˇ˛˝ˇ˝˜˜˛˝ˇ˛ˇ˙˛ˇ˚¸ˇ˛˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜    ¸ˇˇ˜˛˛ˇ˝
  859. ˇ˛ˇ˛
  860. ˇ˛ˇ˛˛ˇˇ˝˛ˇˇ˝
  861. ˇˇˇ˛
  862. ˇˇˇ˛˛˛ˇ˝ˇ˙˛¸ˇˇ
  863. ˇ˛ˇ˛˜    ¸ˇˇ˜˛˛ˇ˝
  864. ˇ˛ˇ˛
  865. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähë(eäA∫†°dONLNd\ëh)T user can publish data by selecting a portion of text, graphics, or other data in a °dONLNdUiäu(rädocument and choosing Cr5†°dONLNdmiuJ)xeate Publisher frW‡°dONLNd~iJuÆ)Hom the Edit menu. In rL°dONLNdîiÆuÌ)desponse, your °dONLNd¢väÇÜ(ä:application saves the selected information in a separate fiÿ°dONLNd›vÜÇπ)¸le. This stor€`°dONLNdÍvπÇ)3ed information is °dONLNd¸Éäèç(åärE°dONLNd˝Ééè¢)eferr„¿°dONLNdÉ¢è”) ed to as an è`°dONLNdÉ‘è˜)2edition.—†°dONLNdɘè)#= The user can subscribe to an edition by choosing Subscribe Td@°dONLNdSÉè (åo °dONLNdUêäúë(ôäfrò‡°dONLNdWêëú )om the Edit menu; when the useΔ†°dONLNduê úJ)è r selects aaÄ°dONLNdÄêKúS)+ fiÓ@°dONLNdÉêSú·)"le that contains an edition, your °dONLNd•ùä©4(¶ä'application includes the information fr$`°dONLNdÃù5©•)´om the edition in the curr–¿°dONLNdÊù•©˙)pent document. The °dONLNd¯™ä∂-(≥ä%information in an edition can be sharl °dONLNd™-∂ó)£ed by many documents.°dONLNd3ºä»¢(≈äFigurR¿°dONLNd8º¢»∂)e 1-2@°dONLNd=º∂») shows the princil†°dONLNdNº»)Lpal rú °dONLNdSº» )&elationships among the Edition Manager„ °dONLNdyº…»)≥, the publishing °dONLNdä…ä’g(“ä3application, the subscribing application, and the fiΔ‡°dONLNdæ…g’·)›le that contains the edition. ‹°dONLNd‹…·’)z In addition °dONLNdË÷ä‚©(fläto the r⁄@°dONLNd÷©‚2)!elationships illustrated in the fi1†°dONLNd÷3‚B)ägur凰dONLNd÷B‚T)e, thj@°dONLNd÷U‚¢)e Edition Managed¿°dONLNd*÷£‚Ø)Nr ufiÄ°dONLNd-÷Ø‚œ) ses the ° °dONLNd5÷œ‚    )  Apple Event °dONLNdA„äÔ∑(Ïä    Manager t‘`°dONLNdJ„∑Ô)-o communicate with aÁ‡°dONLNd^„Ôi)bpplications that arˆ‡°dONLNdq„iÔ”)Pe sharing dynamic data.
  866. H"4H""H]
  867. ˇ·ˇ‚7^    °dONLNdâä¥(ä
  868. Figure 1-2°dONLNdîÃå)B0Sharing data with the aid of the Edition Manager
  869. °dONLNdΔ·äÌë(ÍäA∫†°dONLNd«·ëÌì) :†°dONLNd»·îÌ¿)    publisher•@°dONLNd—·¿Ì–),? is a portion of a document that is made available to other docé@°dONLNd·—Ìfl(Í—umi`°dONLNd·‡ÌÙ)ents °dONLNdÓä˙ó(˜äthrX¿°dONLNdÓó˙·)ough an edition. Ë@°dONLNd+Ó·˙Ë)JA"‡°dONLNd,ÓÈ˙Î) ¢‡°dONLNd-ÓÎ˙)
  870. subscriberb°dONLNd7Ó˙¢)0 is a portion of a document thaz`°dONLNdVÓ¢˙´)át r¿°dONLNdYÓ¨˙≈)
  871. eads tÊÄ°dONLNd_Ó≈˙    )he information °dONLNdn˚äë(äfrò‡°dONLNdp˚ë”)om an edition. °dONLNdÄä¢(äFigurR¿°dONLNdÖ¢∂)e 1-3@°dONLNdä∂p)( shows a document containing a publisher- °dONLNd≤qÉ)ª, a fiπ‡°dONLNd∏É ) le containing an edition, and a °dONLNdÿä&(#ä document containing a subscriberꆰdONLNd¯&_)ï. The bottom fi$Ä°dONLNd`&À)Ash in the Fishes of the W@°dONLNd À&)korld document °dONLNd.'ä3≈(0äis a publisher@°dONLNd<'≈3);. The information fr§@°dONLNdP'3)V7om this publisher is made available to other documents °dONLNdá4ä@ó(=äthrX¿°dONLNdä4ó@+)#ough the Illustration edition. The  °dONLNd≠4+@)î/Aquarium poster document contains a subscriber °dONLNd‹AäM˝(Jäthat gets its information frÍ@°dONLNd¯A˝M)s=om the Illustration edition. Note that when a user selects a °dONLNd5NäZÒ(WäPpublisher or subscriber within a document, your application should display a bor4`°dONLNdÖNÚZ(WÚder °dONLNdâ[ägú(däsurr{¿°dONLNdç[úg:)#ounding the publisher or subscriberz†°dONLNd∞[:g<)û.°dONLNd≤mäy(väIn general, when a user modifiú¿°dONLNd–my)á7es the contents of a publisher and saves the document, °dONLNdzäÜ(ÉäTyour application should write the new data to the edition. The Edition Manager then °dONLNd[áäì∞*    uses the I¿°dONLNddá∞ì)&LApple Event Manager to inform all open applications with subscribers to the °dONLNd∞î䆠   (ùäWedition that it has been updated. These applications can then automatically update the °dONLNd°ä≠*subscribers in the documents.
  872. !â 4 à!âò@@˜@˜!âaÄ¡¡?·ˇ¸„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?Áˇ¿˛ˇ˛„?Áˇ¿˛ˇ˛„?ˇ‡˛Ìˇ¡¿ˇ˛„?ˇ·ˇˇÌˇ¬ ˇ˛„?ˇ·Ìˇƒˇ˛„?ˇ·Ìˇƒˇ˛„?ˇ·?ˇêÌˇƒ<ˇˇ˛„?ˇ·%êÌˇ¬¿ˇ˛„?ˇ·?ˇêÌˇ¡x0ˇ˛„?ˇ·%êÌˇ¿@ ˇ˛„?ˇ·?ˇêÌˇ¿`2ˇ˛„?ˇ·&–Ìˇ¿Åˇ˛„?ˇ·80Ìˇ¿Ç<ɡ˛„?ˇ·0@ Ìˇ¡ jCˇ˛„?ˇ· 2Ìˇ¬@ï#ˇ˛„?ˇ·AÌˇ¬Å
  873. #ˇ˛„?ˇ·Ç<èÌˇƒÉ#ˇ˛„?ˇ· jOÌˇƒÇ#ˇ˛„?ˇ‚@ï/Ìˇƒ!BCˇ˛„?ˇ‚Åö/Ìˇƒ"
  874. !√ˇ˛„?ˇ‰Çï/ÌˇƒBˇ˛„?ˇ‰í/Ìˇ¬Bàˇ˛„?ˇ‰!OÌˇ¬DDˇ˛„?ˇ‰"œÌˇ¡¢ˇ˛„?ˇ‰BÌˇ¿ƒQˇ˛„?ˇ‚BÌˇ¿D®Éˇ˛„?ˇ‚DÌˇ¿$T√ˇ˛„?ˇ·Ìˇ¿+#ˇ˛„?ˇ‡ƒÌˇ¿
  875. #ˇ˛„ò@@Ę@Ęaâ°Ä?ˇ‡DÌˇ¿ #ˇ˛„?ˇ‡$Ìˇ¿cˇ˛„?ˇ‡Ìˇ¿„ˇ˛„?ˇ‡
  876. Ìˇ¿àˇ˛„?ˇ‡8Ìˇ¿pˇ˛„?ˇ‡¿Ìˇ¿˛ˇ˛„?ˇ‡˛Ìˇ¿˛ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„ò@Ä¿˜Ä¿˜°â·Ä?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„?·ˇ˛„·ˇ˛„¡¡¡¡¡¡¡¡¡¡¡¡    é8`3«
  877. DêLÄ»
  878. ƒÄàÄ»
  879. §pãÄ»
  880.     †à@»
  881. #0î@»
  882. à|¿cÄ»¡¡¡¡¡ ¿` @¡I #b@ç"fi Äpê@˛A     Ç@Ñ (fiò@¿˜¿˜·â!Ä$OF»˛YZ€¡Àäu]c¨Çß«YrMÖ1vWïÄ‚#R…  j¢lÇïI°5E*
  883. Çjá)"¶ÖRö©*·#íY8'@L§LѶ$)ë"'âRÑOJE$Öîì)r·#Ãr  Ä&_Δõø<*Ÿc.v\€gIâßÊD·#úZpïDóÍ(4íBI [    ìünDâ=%N<·"˙Ģ¯‡"˙Ģ¯‡˙¯¯‡¡¡8 pp0 ¡˛Ë ˛‡@‡@tà˝@    ˜6   P Å˛@1¸@@@@ ÄÄ˝˜;7'®;:9
  884. aZfl¨ÔäÀJHÀ¢l@MmhÌz-ÄvˆGD˙&« vÂe•$e…6 ∂≤6L]`˘;7*®MBR䢙j,45ΩIU%4@¶¶π5*íVÄöH™…RSBPöJãfi§™äö +SVZT©)†˘;7›HI<ó $ƒLK§&9%)í&I$A$§´&D§îÄíâ2Z$íDêíúíî…í JRR“°2I ˘;7QPì¥'fiûP¨O">R⁄ˇjL#I    O_∂©Å&—Vrˆ§Δ°&—)mù&‘ÑɶÌ˚R`˘;7O†“t€öu$î'IJ)åë*DHâIKJ%$I§êõY$DÑA§èΔHï$$§¢‰ëR"@˘ı˛ı ˜Ïı˛ı ˜Ï ÒÍÏ¡¡$Äc@!Ä!úÿ  ˝ $îÄ@Ä‚ ÿ$≤Ù[úêîäÁ:£ê–$8W8E@⁄    ,¬E$≠•@wH
  885. •(pIÍ@´†⁄
  886. EºII) Ä)    á…p@NÑL8%› ⁄gèmSí#)¡k@`H»ñ-@⁄EÙäHí=–Δ éMπ∞Á0dr6ÔÄ⁄ı˙ÄŸı˙ÄŸı˙ÄŸ¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  887. ‡pÃ
  888.  Ã §D÷R<¨-òÕ ;‘§jÓIPF®Õ íôƒ    JJ”êD¿Õ •-:êìö âÿÕ ÿ»·ƒîb—‡…"Õ
  889. !˝Ä…
  890. !˝Ä…
  891. !˝Ä…¡¡ ÄÄ– ÕIJÄ@ Õ     ⁄,ÅÄ[¡’ëÚXŒ &UA@§Çí*• Œ     "„Ç;Å%¢tI Œ CÆ"ÈÖ¥EÍ@Œò@@˜@˜!âaÄ B—«›—I‰:D@Œ˚ »˚ »¡¡¡ê@˛?¿Ä—Äê    @˛ÄÄ—£÷ÕéW…∞ëe≈`“ döΔî™–"≤ÑääÄ“
  892. -$•…‰ê%xìÄ“    9ñ)≠i0Gúï—≠$>Fy6Ûë ÂÈ    —˜Ã˜Ã¡¡¡ ˇ  Õ í Õ T íã˚.+"Õ ∫Qî$TT"Õ •2·$≥ƒòî"Õ ≠TÇ6‡Ë¸®$Õ ˆòs$∑H®HXÕ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ęaâ°Ä¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜°â·Ä¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜·âÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜!âaÄ¡¡‡30„‡„ ·„‡„‡„‡„ ·„‡„ ·„‡„‡„`àÏ0Ä„     @ÄÏ"„    ûgÔÌ<}ºÒ¿„ ôlú§Ì2”2 @„ôcú§Ì#212 @„~núú̸Ô<…¿„ ˚Ë@„ ¸8ÈÄ„‡„ @Í`„˛Í@„ùYπ∏ÌÓfnn„>Sg⁄dÌôiˆô„ &SbZdÌ    ôhñô„ù]…§ÌÓgri„ Èà˝„Èà˝„‡„‡„ ·„‡„ ·„‡„‡„ˆ˙ˇ˛˙¿˝„ ˇˇ¸˙˙ ˝„¸˙˙˝„ ¸˙˙˝„?ˇê¸˙˙<ˇ˛„%ê¸˛˛˙¿„?ˇê¸˛_Ä˙x0„ %ê¸˛| ˘@ „?ˇê¸}—8˘`2„ &–¸ˇ£˛˘Å„80¸ˇÁˇ˘Ç<Ä„#0@ ˛˛ˇ¿¸ j@„# 2˛˛ˇ‡¸ @ï „# A˛Ä˛ˇ¯¸Å
  893.  „%!Ç<ġˇ¿üˇˇ˜|ˇ˚ˇ¯ˇ˚É „%!  j@""`<˘ˇˇˇˇ¯"#ÄÇ „%!@ï 0ˇˇÔć8¿!B@„% Åö DD`˛ˇ«8¿Ô˝‡8DEÄ"
  894. !¿„%!Çï àà¿ˇˇÛG8‡Ô˝8àãB„%! í ˇ˝Äˇ˛p<Ô˚88ˇˆBà„%!!@ˇ¸¯Ô˙8DD„% "¿ˇ˛¯Ô˙∏¢„ B¸ˇ¯˝pÔ˚?∏¸ƒQ„ B˚ ˇˇÄpÔÅÒ∏¸D®Ä„ D˚ ˇ¯ ¿Ô±·∏¸$T¿„  ˚ ~~¸¿‡xa∏¸+ „˛ƒ˚ <?_¯?‡¸a∏¸
  895.  „ò@@Ę@Ęaâ°Ä  D˚ ˇfl¯>·Œ∏¸  „˛$˚ ?ˇÒ¯„á∏¸`„˛˚ _ˇˇÄÁˇ8¸‡„˛
  896. ˚ ü˜Áˇ8˚à˛„ 8˚ Ò‡‡8˚p˛„˛¿˚¡¿˛ˇ¯˜„ ˜JIJˇ¯˜„ˆ˙˛ˇ¯˜„ˆ˙Ù„ˆ˙Ù„ ˜˙Ù„ˆ˙Ù„ ˜˘ˇÙ„ ˆ˘ˇÙ„˝0È0˛„˝xÈx˛„ ˛ÃÈÃ˛„˛ñÍñ˛„ #˜xƒˆ#˛„˛á˜@àˆÉÄ„˝ƒ˜C‹ŒˆΔ˛„˝å˜|Õ)ˆä˛„ ˛Ñ˜DÕ)ˆÇ˛„˛‘˜{ƒ…˜“˛„ dÍ
  897. b˛„˛DÍB˛„˛DÍ F˛„˛ÃÍ ˛„ DÍB˛„˛TÍ    R˛„ dÍ
  898. b˛„˛DÍB˛„˛DÍ F˛„˛ÃÍ ˛„ DÍB˛„˛TÍ    R˛„ dÍ
  899. b˛„˛DÍB˛„˛DÍ F˛„˛ÃÍ ˛„ DÍB˛„˛TÍ    R˛„ dÍ
  900. b˛„˛DÍB˛„˛DÍ F˛„˛ÃÍ ˛„ DÍB˛„˛TÍ    R˛„ dÍ
  901. b˛„˛DÍB˛„˛DÍ F˛„˛ÃÍ ˛„ DÍB˛„˛TÍ    R˛„ dÍ
  902. b˛„˛|Í~˛„˛@Í @˛„˛¿Í¿˛„ @Í@˛„˛qpÍ9x˛„ 2`Í0˛„˛¿Í `˛„˛ÄÍ¿˛„˛ÈIJ„ò@Ä¿˜Ä¿˜°â·Ä È˝„
  903. „ˇ„  ‰Ä„ ‰Ä„ ‰Ä„ ‰Ä„  ‰Ä„ ‰Ä„  ‰Ä„ ‰Ä„˜≈ÑÛÄ„˜ ÃÛÄ„ ˜spÕú«fˆÄ„˜Â4»∑”ÈوĄ ˜%4»∂S)шÄ„˜›H•“ÁtˆÄ„ÒıÄ„ÒıÄ„  ‰Ä„ ‰Ä„  ‰Ä„ ‰Ä„ ‰Ä„
  904. „ˇÄ„
  905.  „ˇÄ„‡„ ·„‡„‡„‡„ ·„‡„ ·„‡„‡„‡„‡32„·UT„¡¡¡¡¡¡¡¡¡¡¡¡    é8`3«
  906. DêLÄ»
  907. ƒÄàÄ»
  908. §pãÄ»
  909.     †à@»
  910. #0î@»
  911. à|¿cÄ»¡¡¡¡¡ ¿` @¡I #b@ç"fi Äpê@˛A     Ç@Ñ (fiò@¿˜¿˜·â!Ä$OF»˛YZ€¡Àäu]c¨Çß«YrMÖ1vWïÄ‚#R…  j¢lÇïI°5E*
  912. Çjá)"¶ÖRö©*·#íY8'@L§LѶ$)ë"'âRÑOJE$Öîì)r·#Ãr  Ä&_Δõø<*Ÿc.v\€gIâßÊD·#úZpïDóÍ(4íBI [    ìünDâ=%N<·"˙Ģ¯‡"˙Ģ¯‡˙¯¯‡¡¡8 pp0 ¡˛Ë ˛‡@‡@tà˝@    ˜6   P Å˛@1¸@@@@ ÄÄ˝˜;7'®;:9
  913. aZfl¨ÔäÀJHÀ¢l@MmhÌz-ÄvˆGD˙&« vÂe•$e…6 ∂≤6L]`˘;7*®MBR䢙j,45ΩIU%4@¶¶π5*íVÄöH™…RSBPöJãfi§™äö +SVZT©)†˘;7›HI<ó $ƒLK§&9%)í&I$A$§´&D§îÄíâ2Z$íDêíúíî…í JRR“°2I ˘;7QPì¥'fiûP¨O">R⁄ˇjL#I    O_∂©Å&—Vrˆ§Δ°&—)mù&‘ÑɶÌ˚R`˘;7O†“t€öu$î'IJ)åë*DHâIKJ%$I§êõY$DÑA§èΔHï$$§¢‰ëR"@˘ı˛ı ˜Ïı˛ı ˜Ï ÒÍÏ¡¡$Äc@!Ä!úÿ  ˝ $îÄ@Ä‚ ÿ$≤Ù[úêîäÁ:£ê–$8W8E@⁄    ,¬E$≠•@wH
  914. •(pIÍ@´†⁄
  915. EºII) Ä)    á…p@NÑL8%› ⁄gèmSí#)¡k@`H»ñ-@⁄EÙäHí=–Δ éMπ∞Á0dr6ÔÄ⁄ı˙ÄŸı˙ÄŸı˙ÄŸ¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  916. ‡pÃ
  917.  Ã §D÷R<¨-òÕ ;‘§jÓIPF®Õ íôƒ    JJ”êD¿Õ •-:êìö âÿÕ ÿ»·ƒîb—‡…"Õ
  918. !˝Ä…
  919. !˝Ä…
  920. !˝Ä…¡¡ ÄÄ– ÕIJÄ@ Õ     ⁄,ÅÄ[¡’ëÚXŒ &UA@§Çí*• Œ     "„Ç;Å%¢tI Œ CÆ"ÈÖ¥EÍ@Œò@@˜@˜!âaÄ B—«›—I‰:D@Œ˚ »˚ »¡¡¡ê@˛?¿Ä—Äê    @˛ÄÄ—£÷ÕéW…∞ëe≈`“ döΔî™–"≤ÑääÄ“
  921. -$•…‰ê%xìÄ“    9ñ)≠i0Gúï—≠$>Fy6Ûë ÂÈ    —˜Ã˜Ã¡¡¡ ˇ  Õ í Õ T íã˚.+"Õ ∫Qî$TT"Õ •2·$≥ƒòî"Õ ≠TÇ6‡Ë¸®$Õ ˆòs$∑H®HXÕ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ęaâ°Ä¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜°â·Ä¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜·âÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜âSÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘSâìÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜ìâ”Ä¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜”âÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜âSÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘSâìÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜ìâ”Ä¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜”âÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜âSÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘSâìÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜ìâ”Ä¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜”âÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜âSÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘSâìÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜ìâ”Ä¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜”âÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ˇÉ@ˇ ˇˇˇˇ@
  922. ˇ·ˇ‚7^
  923. 4*\¯, Palatino&e.3+l"CHAPTER à)>1,     Helvetica    ˇˇ—ÚˇÆ(@l.Introduction to Interapplication Communication4⁄*˙¯
  924. (‡*1-8    )BSharing Data ¿)7Among à0) Applications4^*¿¯
  925. g*w¯4g*w¯"h*]
  926. ˇ·ˇ‚7^°dONLNd\lgñ(dl
  927. Figure 1-3°dONLNd \Æg¥)BA0°dONLNd \¥g€)
  928.  publisherÖ °dONLNd\⁄gM)&, an edition, and a subscriber
  929. °dONLNd6flrf(ol8For example, suppose the user changes the color of the fiÉ¿°dONLNdoffr—)˙sh in the Fishes of the WqÄ°dONLNdàf—rÂ)korld °dONLNdçslΔ(|ldocument shown in  °dONLNdüs«fl)[FigurÚ¿°dONLNd§sfiÚ)e 1-3ê@°dONLNd©sÛı):, then saves the document. This automatically changes the °dONLNd„Älåï(âlEIllustration edition, and the subscribing application can update the p‡°dONLNd(Äïå„(âïAquarium poster °dONLNd8çlô4(ñl-document if that’s what the user wants to do.°dONLNdfül´Ñ*FigurR¿°dONLNdküÑ´ò)e 1-4@°dONLNdpüò´) shows how a user might cr:‡°dONLNdäü´S)zeate a poster fr\†°dONLNdöüS´Ó)A"om information contained in other °dONLNdº¨l∏ú(µl    documentsw°dONLNd≈¨ù∏ü)1.
  930. ⁄*ί4€*ί"€*]
  931. ˇ·ˇ‚7^    °dONLNd«–l€ñ(ÿl
  932. Figure 1-4°dONLNd“–Æ€`)B,Sharing dynamic data with other applications
  933. w*N¯4v)w*ò@@˜@˜w*∑!¡¡?Õˇˆ?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜ò@@Ę@Ę∑*˜!?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜ò@Ä¿˜Ä¿˜˜*7!?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜ò@¿˜¿˜7*w!?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜?ÕˇÄ˜ÕˇÄ˜¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  934. Ò«é»    ˛àÇP»    ˛òÇ\»
  935. ÇB»
  936. #t<B»
  937. !D§»
  938. qÉ»¡¡¡¡¡¯ @#†@˛í˛ @(›˛
  939. ê@!@˛˛@›˛âËŸ¿§i'Y∞`é∫-Ä[(Ë”ù™+fi˛ Y"Ñ¡‹µ(j¿)°TíVÄ≠(Ql*-Tfi K'· ï¶GO@I#•$îÅ)HêÎK¬I‰fiò@@˜@˜w*∑! éD!'+a\Äzb-∂©ÅÛX.P‹jàfi ãCép≈≤NìÑRA˜$IRl°Àg$Lxfi˛@˝˝¸ ÷˛@˝˝¸ ÷ ˛Ä˝À¡¡9éC@@¿ÄËê˝Ä‡@ć@:H˝@Ģ6˛Dä@ÄÄ@Ä1¸@@Ä@@@Ä˝¯;˛5ƒıgG!L+[‚uÄÌ ÀJHÀ—l@-mdlåπ&¿[ÎC¢˘« [„eRíeË∂ ^≤;F^ã`˙;˛5•U    ®JQTUMEÜÅ4ïΩITí¥@V¶¨¥ïQS@çD•eQ+BPçEäÔR™IZ )´VMJ§ï†˙<8©    'í·dòââtÅ%9%)í%$§@•"bí@âÖ)."JDêâéíJeíR I*R…ë)% ˙<8
  940. *a÷ÇD˚” ÇM¢>R⁄˝µL#©    MØÛ§¡…K:ÛTΔ°…î∑~⁄¶“DÉì◊Ì™`˙<8âÙNõsN§íÑÈ#I)åë)"HIIE…¢Dëíàç≠"$ÑAíác$îë$"T¢“âI@˙Û@ı ˆÑÌÛ@ı ˆÑÌ ÈÑÌ¡¡˛@ÄF0 Ä@¿⁄˛§@¸ à $·@@⁄˛§èˆ^ãa”íêa\ÁTr#
  941. Á»®€%òH§ï¢®§£©T•EHït€H∑â)%!·p˚Ò0‚ô.Oâᪧ€l·—Ì™`r@"BX"≠h  B¡¢H€HæëICß∫ú·ë√I∑6<Á éF›€Ù˙˛@€Ù˙˛@€Ù˙˛@€¡¡¡¡¡¡¡¡¡¡¡¡¡¡˛ ¿Õ˛ ÄbÕ˛    bîàÄZ GïÖ≥Œ˛    gzîÄ≠]…*’Œ˛    íS8Å)IZròŒ •†GRsD;Œ;8íåZ<$@œ ˛ ˛  ˛ ˛  ˛ ˛ ¡¡ ‡pŒ  Œ;Eê! x:≤>Kœƒ ®"®êRET§œ$\pGp$†îNâ$œ(u¿D@=0∂àΩHœ»Z8˚∫) ‹áHàœ˙…˙…ò@@Ę@Ę∑*˜!¡¡¡‡‡¿¯Ä“˛ê @PÄ“z¡± ˘6R/Ï∏¨”lìA¿“ïBöVPëQP”E¢B$îπ<í¢œbP”'2¬ E5¢&ÛÉ£Ú†”ï§á»œ&fir$¢›"° ”ı Œı Œ¡¡¡˛
  942.  ¬?‡ÄÅÄœ˛
  943.  B@ÄB@œ˛
  944. a ÑQe≈`D@œ˛
  945. bóJ"rÑääŃ@œ˛
  946. î¶\$ñxìÄ$@œ™êF‹ï$Äœ >”dñÈ    ÀŒ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜˜*7!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜7*i!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜w*∑!¡¡Ã3ˆÕˆ ŒˆÃĘÕˆÃĘ ŒˆÕˆ ŒˆÃĘÕˆ˘ˇ‡ÍÛˇ‡˛Ä˜ ˘ ÍÛ0ˆ˘ ÍÛ8ˆ ˘ ÍÛ,ˆ˘"ÍÛ&˛Ä˜˛˝!ÍÛ#ˆ˛˝ ÍÛ#˛Ä˜ ˛˝ ÍÛ!Ĉ˛4˝ ÍÛ ¿ˆ Ô˝?‡ÎÛ `ˆ |q˛Ä`ÎÛ 0Ę˜˛`ÎÙD`ˆÄ ˛`ÎÙà†Ę  ˛ ˛`Î˙º˝  ˆ! õˇÒˆP`Î˙w˛ ˆ!  åü`Î˙b"p˛ ˆ"˛Üx`Î˙8˛ ÄĘ$˛Ã`ν‡DD\˛ ¿ˆ!˙0`ν?ˇËàÿü˛?ˇ¿Ä˜ ¯`νˇˇ¯˘øġ‡ˆ¯`ν˛ˇ˚‡˛`ˆ ¯`ν˛ˇ#ˇˇ˛ `ˆ¯`ν˛ˇᡡ¸˝`Ę¯`β˝ˇflˇˇ˛˝`ˆ˙H`΢ˇÄ˛`Ę ˚Ü8`β˘ˇ‡˛`ˆ˚Ûˇ`βˇ˚˚ˇ¯`ˆ" ˚Ú/`β¯Û˛ˇÔˇˇ¸ `ˆ%˛¿p¯`ν~˛ˇÁ¡ˇ˛`Ę%˛;ú@`β«˛ˇ·¸¿`ˆ&˛9Ë>fi`β˜Ô˛ˇ    ·¯ˇ‡`Ę$  Ä?¨øÄD`ν~?˛ˇ¯¯pfl¯`ˆ% ÿˇÒ‡`Ρ·˛ˇÒ¸`7¸`ˆ- «˛ˇ¿`˚?˙ˇ˛˙ˇ‡√øˇÁÒ˛xgˇ `ˆ.˛ˇÛΔ`˚ ˙˙ˇ¸Éˇ¯ˇpˇÄ`Ę,Ô˝ˇ`˚ ˙˙ˇˇÄˇ˛‡‡`ˆ. ˇ˝fiüˇ`˚ ˙˙ˇˇ¯˛¸p?`Ę,  ˇ˛˛`˚ ˙˙˝ˇ Ê~‡v¯`ˆ/ ˇ˛fl¸`˚ ˛
  947. ˛˙¸ˇ ¿Ê»<¯¯`ˆ0  ¸7˚ˇ`˚ ˛æ˛˙˝ˇ ø‡¿x˛| `ˆ1¿#ˇˇ˛`˚ ˛¯@˙˝ˇ‡03IJ~`Ę1˛!è¯˛`˚ ˘ƒp˙˛ˇ¸`˛bġˇ`ˆ/˛>ê˛`˚ ˇè¸˙˛ˇ‹@˚ˇˇÄ`Ę, ˛ ˛`˚ ˇœ˛˙˛ˇ¿˘Ô¿`ˆ&¯`˚ ?˛ˇÄ˙˛ˇÄ˘?œ–`ˆ% ¯`˚ ?˛ˇ¿˙˛ˇÄ¯‡`ˆ&¯`˚ ?˛ˇ˙˛ˇ¿¯¿`Ę(¯`˚  ?ˇˇÓ¯ˇ˜ˇ˝˛ˇ‡¯1Ä`ˆ*˘à`˚ yÛˇ˛˛ˇ˛ˇ˝˛ˇ‡¯Ä`Ę- ¯`¸  ˛ˇfi˛?¿p˛Dzˇfi˚x`ˆ.¯`¸0!˛ˇépÅfl˚¿p˛¬˛ˇ¸ `ˆò@@Ę@Ę∑*˜!1  ˙c¸ˇ ¯!ˇˇÊép?¡fl˚‡p˝ˇb˝˛ˇ Ä¿8 `ˆ1¯b¸ !ˇ¸‡x·flˆppIJ2?˛ˇÄˇ‡ Ä``Ę2@˙b¸DF!ˇ¯ ÒflÙ0pƒ˛DZ?p¸¿Éć`ˆ5˝@˛b¸àã!ˇ‡˛ÒflÙ?p˝àä˛ ˇ?√ˇÄ‡`Ę4 ˝¿˛b¸!ˇ˝·flˆpIJ¸ˇÄáˇÄ`ˆ5˝˛c¸!ˇˇ·fl„pë˛2‡ˇ‚?ˇ˛˛`ˆ4   2.c¸ˇ ¯ ˇˇ0Åflc√p˝ˇb˝£ˇˆˇ¯ `ˆ5˛ˇ·ˇ˛`¸ 0 ¸¸=¯Å¿√p˛¬¸ˇˇ˛ˇÄ‡`Ę6 @ˇ˝ˇ¿`¸   x~ø~¡¯√p˛Ç˛Oˇˇ?ˇ ¿`ˆ4˛ˇ`˚   ˇø|√úˇp˝˛à˝ˇ ?˛`Ę1 ˛ˇ¯`˚  ˇ„«ˇp˝˚ˇˇ˛dÅ˛`ˆ3˛ˇ˛`˚  ?ˇˇœ˛p˝˝ˇˇ˛nüÄ`ˆ2   Áˇˇ˝ˇ`˚  ?Ô‡œ˛p˝˝"˝ˇÍ˛ `ˆ1 >ˇflü¿`˚  ?„¿¿p˝˚?ˇÔ˙¿˝`Ę3 @ˇˇÛflè‡`˚ ˇÉIJˇ˝˛D_ˇ‡Ä:¿˝`ˆ3 ?ˇˇ„fi`˚ î˛ˇ˝˝àøˇ .¿˝`Ę-  ?ˇ¸Òï`˚ ˚˛ˇ˝˚ˇÄ}Ä˝`ˆ* ?ˇúã¸`˚ ˙˙¸ˇˇ˝`ˆ*   ?ˇ˛`˚ ˙˙¸ˇ¸˛˝ `ˆ)?¸˝˛`˚ ˙˙¸‡¸¸`Ę(@?˛˝`˚ ˙˙¸t¯¸`ˆ& ?ˇ‡Ä`˚?˙ˇ˛˙¯¸`Ę  ?ˇ˛0`Θ‡¸`ˆ Åáøp`ÎÛ`ˆ   /˜˛¿`ÎÛ" `ˆ˛ˇ¸`ÎÒ`Ę @Oˇ¸~`˚ÄıÒ`ˆ ˛èˇ˝‡`˚ÄıÒ`Ę  ˛˝¸˛`˚§˛ŒnˆÒ`ˆ ˛¸x˛`˚•çÊôˆÒ`ˆ    ‡`˚§m&ôˆÒ`ˆ.˛ ˛`˚ùƒ‚iˆ¡ŒÉ?¿Δĸ`Ę!@˙`Î Ã√1É Ê ¿¿`ˆ ¯`Î x√1É Ê`¿`Ę ¯`Î x√1É ˆ¿`ˆ¯`ο0√1É¿÷¸`ˆ!  ˙`Î xÉ? fi¿`ˆ ¯`Î x1É Œ`¿`Ę¯D`Î Ã1É Œ ¿¿`ˆ ¯`ηé¯1ɇΔIJ`Ę ¯`ÎÒ`ˆ¯`ÎÒ`ˆ ¯ˇ‡ÎÒ`ˆ¯ˇ‡ÎÒ`Ę flÒ`ˆ flÒ`Ę ‡˛‡ ˛¸`ˆ|DÊ˛ ` ¯`ˆ  @åÊ˛ |≥<ˆÃ˚Ä`ˆ"D¸«flÁ˛ fê≥FˆÃÿ`Ę!}ìÏ$åºÁ˛ gò1≥ΔÃÿ`ˆ"Ds$å†Á˛ g¯31≥~ΔÃÿ`Ę! E“ÓÑúÁ˛ gÄ?1≥fΔÃÿ`ˆfl˛ fò!≥fΔÃÿ`ˆ ‡˛ faüü>Δ|ÿ`ˆfl˙Ä˙`Ęí‰˙Ä˙`ˆí‰Ò`Ę ™m8‰Ò`ˆ¨ôH‰Ò`ˆ lôH‰Ò`ˆDi8‰Ò`Ę flÒ`ˆ flÒ`Ęò@Ä¿˜Ä¿˜˜*7! ‡Ò`ˆ flÒ`ˆ ‡¸˝¸`ˆfl¸˝¸`Ęfl˛˛ ˛`ˆfl_xœÔ¿Y˝˝‡`Ę ‡ˇˇ¯Ôˇ¿]ˇˇ‡`ˆfl@ÄÅ`ˆ ‡¸˝¸`ˆflüª∏˜˜v~˛Ë`Ęflfiª¸◊o˙Ë`ˆflÇ @@`Ę ‡¸˝¸`ˆfl˜¸˛ˇû_flÛ¿`ˆ ‡ˆ˛¯˛flfl€˚‡`ˆfl P@
  948. A`Ęfl˛˛ ˛`ˆflÛ{ÓfiO}Ç[…ÔÄ`Ę ‡˚˚˛ˇoÇ_ÌÔ`ˆfl˛@`ˆ ‡¸˝¸`ˆflÎœx}`oØ<`ĘflÎÔl˝`غ`ˆfl@`Ę ‡¸˝¸`ˆflS›@Í{®}Ou`ˆ ‡€˝@˚®oı`ˆflH     A `Ęfl¸˝¸`ˆflˇ~‡flˇ¿{ˇ¿`Ę ‡ˇ~‡ˇˇ¿ˇ¿`ˆflà   Ä`ˆ ‡¸˝¸`ˆflÓ¯]ˇkø‡`Ęfl˙¸ˇÄÔ`ˆfl @`Ę ‡¸˝¸`ˆfl¸˝¸`ˆ ‡¸˝¸`ˆfl¸˝¸`Ęfl¸˝¸`ˆfl¸˝¸`Ę ‡¸˝¸`ˆfl¸˝¸`ˆ ‡¸˝¸`ˆ flÒ`Ę flÒ`ˆ flÒ`Ę ‡Ò`ˆ flÒ`ˆ ‡Ò`ˆ flÒ`Ę flÒ`ˆ flÒ`Ę ‡Ò`ˆ flÒ`ˆ ‡Ò`ˆ flÒˇ‡Ä˜ flÒˇ‡ˆÃĘ ŒˆÕˆ Œˆ fiÚĘò@¿˜¿˜7*w!fi(¸˜ˆfi(ÚmñÉòˇ`˜Ä˜ fl92˘ïBe迯ˆfiE2ôïBdl@¯ˆ flDÓyuCô«¿¯ˆ› ÙĘ› ıˆÃĘ ŒˆÕˆ ŒˆÃĘÕˆÃĘ ŒˆÕˆ ŒˆÃĘÕˆÃĘÃ3ˆÕUˆ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  949. Ò«é»    ˛àÇP»    ˛òÇ\»
  950. ÇB»
  951. #t<B»
  952. !D§»
  953. qÉ»¡¡¡¡¡¯ @#†@˛í˛ @(›˛
  954. ê@!@˛˛@›˛âËŸ¿§i'Y∞`é∫-Ä[(Ë”ù™+fi˛ Y"Ñ¡‹µ(j¿)°TíVÄ≠(Ql*-Tfi K'· ï¶GO@I#•$îÅ)HêÎK¬I‰fiò@@˜@˜w*∑! éD!'+a\Äzb-∂©ÅÛX.P‹jàfi ãCép≈≤NìÑRA˜$IRl°Àg$Lxfi˛@˝˝¸ ÷˛@˝˝¸ ÷ ˛Ä˝À¡¡9éC@@¿ÄËê˝Ä‡@ć@:H˝@Ģ6˛Dä@ÄÄ@Ä1¸@@Ä@@@Ä˝¯;˛5ƒıgG!L+[‚uÄÌ ÀJHÀ—l@-mdlåπ&¿[ÎC¢˘« [„eRíeË∂ ^≤;F^ã`˙;˛5•U    ®JQTUMEÜÅ4ïΩITí¥@V¶¨¥ïQS@çD•eQ+BPçEäÔR™IZ )´VMJ§ï†˙<8©    'í·dòââtÅ%9%)í%$§@•"bí@âÖ)."JDêâéíJeíR I*R…ë)% ˙<8
  955. *a÷ÇD˚” ÇM¢>R⁄˝µL#©    MØÛ§¡…K:ÛTΔ°…î∑~⁄¶“DÉì◊Ì™`˙<8âÙNõsN§íÑÈ#I)åë)"HIIE…¢Dëíàç≠"$ÑAíác$îë$"T¢“âI@˙Û@ı ˆÑÌÛ@ı ˆÑÌ ÈÑÌ¡¡˛@ÄF0 Ä@¿⁄˛§@¸ à $·@@⁄˛§èˆ^ãa”íêa\ÁTr#
  956. Á»®€%òH§ï¢®§£©T•EHït€H∑â)%!·p˚Ò0‚ô.Oâᪧ€l·—Ì™`r@"BX"≠h  B¡¢H€HæëICß∫ú·ë√I∑6<Á éF›€Ù˙˛@€Ù˙˛@€Ù˙˛@€¡¡¡¡¡¡¡¡¡¡¡¡¡¡˛ ¿Õ˛ ÄbÕ˛    bîàÄZ GïÖ≥Œ˛    gzîÄ≠]…*’Œ˛    íS8Å)IZròŒ •†GRsD;Œ;8íåZ<$@œ ˛ ˛  ˛ ˛  ˛ ˛ ¡¡ ‡pŒ  Œ;Eê! x:≤>Kœƒ ®"®êRET§œ$\pGp$†îNâ$œ(u¿D@=0∂àΩHœ»Z8˚∫) ‹áHàœ˙…˙…ò@@Ę@Ę∑*˜!¡¡¡‡‡¿¯Ä“˛ê @PÄ“z¡± ˘6R/Ï∏¨”lìA¿“ïBöVPëQP”E¢B$îπ<í¢œbP”'2¬ E5¢&ÛÉ£Ú†”ï§á»œ&fir$¢›"° ”ı Œı Œ¡¡¡˛
  957.  ¬?‡ÄÅÄœ˛
  958.  B@ÄB@œ˛
  959. a ÑQe≈`D@œ˛
  960. bóJ"rÑääŃ@œ˛
  961. î¶\$ñxìÄ$@œ™êF‹ï$Äœ >”dñÈ    ÀŒ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜˜*7!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜7*i!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜i*©!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę©*È!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜È*)!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜)*i!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜i*©!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę©*È!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜È*)!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜)*[!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜i*©!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę©*È!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜È*)!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜)*i!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜i*©!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę©*È!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜È*)!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜)*[!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  962. Íl¿¯4ÈjÍkò@@˜@˜Ík*b¡¡?÷ˇ¸Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Óò@@Ę@Ę*kjb?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Óò@Ä¿˜Ä¿˜jk™b?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Óò@¿˜¿˜™kÍb?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó?÷ˇ˛Ó÷ˇ˛Ó¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡    ¯„Ä√«    DA$«    LA(«    äA2«    ë∫:=«    Ç"Q«    ∏á¡é«¡¡¡¡¡¡¡ ¸É `$D˛tàfi H†˛ ˛$D˛ Äfi"DÙY,∑lÈÿµëá/)’uÇÂïÖ•$e»∂p‡"e,¢ÇµI5!YiZíäRPU&ÖF™ fi§™âZć"â%ßĶJ%"JJR§îê¶DâÑÚî…Rp‡" «D    Ø”L¬Œõ‰5ñˆ´eä≈ƒ)mö¶‡"â≈√áJíI√jí•"§†“Iâ<ΔHï$‡‡ ˚ ˆ€ ˚ ˆ€¿˚¿ˆ€ò@@˜@˜Ík*b¡¡¡¡9«#É  ‡@tà˝@    p ¿Äp $IJ @¯7"≈ @@ ÄÄ˝  @    @˝˜;7b∫É≥ß ¶)≠Ú:¿vÂe•$e…6 ∂≤6L]¿;{!—|ìcê;r≤©J2Ù[ [Y#.I∞˘;7SJÑ‘*P™R¶•C@öJãfi§™äö +SVZT©+@M$R≤®©°(M%Ew™U$≠©´-%TT–˘;7èîÑ쓇≤îD…:@íúíî…í JRR“°2J@IDîóI"HINI%4âI)%))iHò§ê˘;7Ü    0ˆÅ"ıÈÍ
  963. ¡&—)mù&‘ÑɶÌ˚T¿ìh•ùy“cPìhèJ^ømSÍBA”k¸È0˘;7≈⁄'[qߢIDtë§èΔHï$$§¢‰ëR$à“HF÷ë"B “Gä1îJHíRQrD®ë ˘Ù ıˆBÏÙ ıˆBÏ ÒÈBÏ¡¡¡¡ˇ @ 1Ä`ÇŸR ˝J@ìÑŸRã˚.E∞È…JBªÉ™9†å+úD†€ìî$TJ—
  964. T;áT™Rć!u ´–€§≥ƒòíê∏ÇcÅLóÄA>&%‹ê€6‡Ë¸’09 îÑ∞ÅV¥¿ÅK- €§∑H®â!”›c'!§€É`Ûú2:6Ó¿€ı@˚@⁄ı@˚@⁄ı˘@⁄¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ‡¿Õ @1ÄÕ 1JH@-e#ä¿∂`Œ 3ΩT@VƆŒ I)∏@î§Æ9Õ äR‡#©    ;"'`Œ ùåúIF.#$àŒ˛@Ã˛@à ˛…¡¡¡¡8˛†ÄŒ àÄÄŒùƒ»à/É´G≈`œ‚…TT$™äÄœò@@Ę@Ę*kjbíZ8#∏í    E—Äœ r‡" £ iïŒ ‰Y}›‚»È    Œ˚»˚»¡¡¡¡¡     ˛ —H    ê ˛  —ä=`Äf«+rÿ(ø≤Ú∞“∂I†‡cJTÖh    9BE%@“¢—!íR‰yH
  965. K<II@“ìôa÷àònèjÄ“ “CÁ<õx‰ëKtäDÄ“¡¡¡¡¡¡¡ a‡@00Œ !    @@HHŒ 0ÂB    Hø≤‰∞àŒ 1K•YBEJ@8àŒ JS.ã<Ií@àŒ ä’H#Œè‘ÄDêŒ üiá2ãtäàÑ9`Œ˜Ã˜Ã¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜jk™b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜™k‹b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜Ík*b¡¡’30Ó’Ó ÷Ó’Ó’Ó’Ó ÷Ó’Ó ÷Ó’Ó’Ó’Ó ËÛˇÄÓÁÙ¿Ó ËÙ@ÓÁÙ`ÓÁÙ0ÓÁÙÓ ËÙ Ó˘ˇÄÚÙÓ ˘¿ÚÙÓ˘¿ÚÙÓ˘¿Ú˘@˛ÄÓ˛P˛¿Ú˘å@˛¿Ó ˛˛¿Ú˘ç¿˛`Ó ˛ì˛¿Ú˙    π˛0Ó 
  966.  
  967. !Ä¿Ú˙ "#˛Ó 
  968. ‡¿Ú˙
  969. ÄÓ"
  970. ˇ¸¿Ú¸ ÄtDD‡ Ó"˛ˇ¸¿Ú¸ >ààÓ" ˝ˇ¿Ú˝ˇˇÄÕ¯ˇˇÓ"˝ˇÄ¿Ú˝ˇˇÒfl˛˛ˇÓ"
  971.  ˇˇÔ‡¿Ú˝?ˇˇÚ'ˇˇ˝Ó"
  972. ˜ˇˇ˜˜¿Ú˝˛ˇ¯ˇˇ¿˛Ó$
  973. fioˇ˜≥¸¿Ú˛˛ˇ˛ˇˇ‡˛Ó#?ˇˇ¸˜Ò˛ˇ˚ˇÄı˛˙ˇ¯˛Ó!     ˇˇ¯ÛÄ?˛ˇÙ˛˙ˇ˛˛Ó"    ˇ˛hsÄˇè˛ˇÄı˛˘ˇÄÓ$ ˇé#¿ŒÄı˛Ôfl˚ˇ¿Ó'ˇ˛?ÓˇflÄı˛„˛ˇ?oˇÓ'¸˝Óˇ±Ĉ˛¸?˛ˇ?Á¸Ó'˛˝Œˇ†ÉĈ ˛?˛ˇá√˛Ó' ?ˇ¿0Œˇ†˚øˆˇ˛˛˛˝ˇ«ÉΔˇÄÓ'?ˇ¸`ˇ±˚±ˆ˛„˝ˇ«√Åˇ¿Ó( ?¸?ʼn¿¯¢ˆ"#à?¸˛ˇèÛ√øÓ'Ä√Ô¿˚†ı»ˇÄˇ¸?œ˚¿/¸Ó(o˚ˇ¯ɧˆDEàˇˇˇ¯?«ãÄ'˛Ó(øˇˇÉ‡√®ˆàã˛ˇˇáġÓ( ˇˇèÄ„˚øˆˇ˛˛ˇ‡?∑‡¿ˇÄÓ'ˇˇº8s˚Ĉ ˝ˇ ˛∞0œ¿Ó' #˛¯Ĉ˝ˇ ˛¡‡„‡Ó'˛¯Äı˛ˇ¸Ä–ÛÓ'¯>Äı˛ˇ7úÛ¯Ó'     ‡˛ˇÄıˇˇ˛‡˛ˇ¸Ó  ˙˛ˇÄıˇˇ˛`˚ˇ˛Ó˙ˇ˛ˇÄıˇˇ˛˘ˇÓ ˘¿Úˇˇ¸¯¸Ó˘¿Úˇˇ¸˜˛Ó˘ˇ¿Ú˛ˇ˜ûÓ˘ˇ¿Ú˛ˇ˜LӠˡˇ˛@˚¿xÓÁ˛ˇ¸¸¿pÓò@@Ę@Ę*kjb Ë˝ˇ‡˝˛‡ÓÁˇÁˇfl˛@ÄÓÌˇÛˇÄ`Ó@ ÌˇÄˆ ÄÓ  'ÛspÓ¸˛¯Ó ,g¥»Ó¿˛˛?¯xÓ #d¥»Ó˝"'ˇˇˇ‡ÓÓ#ìHÓ˝üˇ∞ˇ¿ÓÁ˝EˇˇÒˇ¯`?ÓÁ˝àø˛ˇ¯ ¸Ó Ë¸˛ˇ¯`Ó˙?˙ˇ¸˜˝˛ˇÒt˛Ó! ˚ ˙˜˝"'˛ˇÒı˛Ó˙ ˙˜¸ˇˇèˇ◊˝Ó˙ ˙˜˝Eˇˇ÷˝Ó˙ ˙˜˝àˇ˚÷˝Ó ˚ ˙˜¸ˇ˝Ä|˝Ó˙ ˙˜˝ˇ¸¸˝Ó ˚ ˙˜¸'ˇ¯¯˝Ó˙ ˙˜¸w‡˝Ó!˙ q.8Úq#˜¸4Δ‡˝Ó ˙ pœ8‚q§ú˜˚à¿˝Ó ˚ @» íAd꘯¸Ó˙ y(<íy#˜¯¸Ó ˚ ˙˜ÚÓ˙ ˙˜ÚÓ˙ ˙˜ÚÓ˙ t˜ÚÓ ˚ &C5]t˛ˇ¿˙ÚÓ'˙ %√Uıj˛ˇ¿˙~p¸ů~0<‡Ó) ˚ %d≥tͲˇ¿˙``Δå`0fÓ'˙ ˛¿˙`¿Δå`0√Ó'˙ ˛ÁÅ¿˙`¿Δå`∞¿Ó%˙ ˚Ô¡Ä˚~ÄΔÅå~∞¿‡Ó' ˚ ˚ÿa¿˚ `¿¸¯`¿Ó%˙ ˚ÿa¿˚`¿¿å`p√Ó' ˚ ˚ÿ|œ˚ˇ˚``¿å`pfÓ%˙ ˚| ≈»˚à p¿¡å0<Ó˙ ˚}áÖÃ˙D»ÚÓ˙ ˚¡Ö»˙à»ÚÓ ˚ ˚·Ö»˚àÚÓ˙ ˚q˝œ˚ˇ˚ÚÓ ˚ ˚9˝¿˚ÚÓ$˙ ˚?¸¿˚ ˇ`˛0˝Ó ˙ ˚?¸¿˚˛c`˘Ó$˙ ˚¿˙˛cÁÄ˝ôÁ∂g‹Ó& ˚ ˚ˇˇ˚¿˙˛c4Äçö7∂ffÓ$˙ ˚˛ˇ¿˙˛c<¿ëçòˆ6ffÓ& ˚ ˚˛ˇ¿˙˛c?¡ôçõˆ6ffÓ ˙ ˙˜˛c<˘çõ66ffÓ ˙ ˙˜˛c4¡çõ66ffÓ ˙?˙ˇ˛˜˛c7É ¸˘ˆ3ÊfÓ ˚˙ˇ˛˜˙ ˙ÓÁ˙ ˙Ó ËÚÓ ÁÚÓ ÁÚÓ ÁÚÓ ˚àÚÓ˙ÄÛÚÓ ˚πᔿÛÚÓ˙õ√ÏÄÛÚÓ˙ö ÄÛÚÓ˙â¡Ú@ÛÚÓò@Ä¿˜Ä¿˜jk™b ËÚÓ ÁÚÓ ˜?˙ˇ¸˚ÚÓˆ ˙˚¸@˝˝Ó ˆ ˙˚@˛@˛˛Ó ˆ ˙˚∫˜˜‡@_~ÎÔÔÓ" ˜ ˙˚ ø˜˜‡@ˇ˛˛ˇÓ ˆ ˙˚ÄÇ@Ó" ˜ ˚¸@˝˝Ó$ˆ ˚º˝fl¿@øª∞˜˜@Ó$ˆ!˚π˛?˛˚ˆ˝fl‡@˛ª¯◊@Ó$ˆ ˚@ @@Ó" ˜!ˇy»?Ë˚¸@˝˝Ó$ˆ ˚øΩ˜¿@˜¸˛ˇûÓ) ˜ !ˇ˘ø»?˜ˇ˜ˇ˛ˇøˇ`@ˆ˛¯˛flflÓ'ˆ ˛ˇ˛Ç@ P@
  974. Ó'ˆ!ˇyˇË>Ì˛ˇ˛@˛@˛˛Ó'ˆ  ¿p˛ø€fl@Û{Ó˛o|Ó) ˜ !˛˘‡?ŸflÛ¿p˛øˇfi@˚˚˛ˇxÓ'ˆ  fl˜‡p˛@@@Ó% ˜!ˇ°ˇà>˝flˆpp¸@˝˝Ó'ˆ! flÙ0p ˇ^k¿@Î}y‡Ó'ˆ!!ˇÒÓ?·flÙ?wˇˇ˛ø_k`@ν}‡Ó'ˆ flˆtààã@˛@ @Ó% ˜!Ÿ/Òfl„tà¸@˝˝Ó'ˆ  flc√u˛»∫flÊ@S›@Í{®Ó) ˜! ¿√v""#àæˇÊ@€˝@˚®Ó'ˆ! ¡¯√t Ç @H    Ó#ˆ √úˇwˇˇ˛¸@˝˝Ó'ˆ! « ˇp ˜˚˚@ˇ~flÓÓ& ˜ ˚œ˛pø˚˚@ˇ~ˇÓÓ#ˆ ˙¿`˛A@à Ó" ˜ ˚˛ˇ˛¸@˝˝Ó"ˆ ˙˛ˇ‡˛◊w@@Ó¯]flÓ$ˆ ˚ˇ˝ˇ˛ˇ◊‡@˙¸ˇ_ÄÓ ˆ ˙˚@ @Ó ˜ ˙˚¸@˝˝Óˆ?˙ˇ˛˚¸@˝˝Ó ˜˙ˇ˛˚¸@˝˝ÓÁ¸@˝˝ÓÁ¸@˝˝ÓÁ¸@˝˝Ó Ë¸@˝˝ÓÁ¸@˝˝Ó ˜ÄĈ¸@˝˝Óˆ!¯¸@˝˝Óˆ4ÛÏqüÊ˘ÚÓˆ{!òJqÙ˘ÚÓ ˜C!òJMÑ˘ÚÓˆ<ëhq∏Ù˘ÚÓ Û@˜ÚÓÚ@˜ÚÓ ÁÚÓ ÁÚÓ ËÚÓ ÁÚÓ ËÚÓ ÁÚÓ ÁÒˇÓ ÁÒˇÓ ÷Ó’Ó ÷Ó’Óò@¿˜¿˜™kÍb Ê ÛÓÊP¸ ˜Ó ÁS…µ:c¸¿¯ÓÊtÀÂ5    ñ>įÓ Áå e5    ë∞įÓÊãπ‰ıgįÓÂÄıÓÂÄıÓ ÷Ó’Ó ÷Ó’Ó’Ó’Ó ÷Ó’Ó ÷Ó’Ó’Ó ’ÃÓ÷32Ó¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡    ¯„Ä√«    DA$«    LA(«    äA2«    ë∫:=«    Ç"Q«    ∏á¡é«¡¡¡¡¡¡¡ ¸É `$D˛tàfi H†˛ ˛$D˛ Äfi"DÙY,∑lÈÿµëá/)’uÇÂïÖ•$e»∂p‡"e,¢ÇµI5!YiZíäRPU&ÖF™ fi§™âZć"â%ßĶJ%"JJR§îê¶DâÑÚî…Rp‡" «D    Ø”L¬Œõ‰5ñˆ´eä≈ƒ)mö¶‡"â≈√áJíI√jí•"§†“Iâ<ΔHï$‡‡ ˚ ˆ€ ˚ ˆ€¿˚¿ˆ€ò@@˜@˜Ík*b¡¡¡¡9«#É  ‡@tà˝@    p ¿Äp $IJ @¯7"≈ @@ ÄÄ˝  @    @˝˜;7b∫É≥ß ¶)≠Ú:¿vÂe•$e…6 ∂≤6L]¿;{!—|ìcê;r≤©J2Ù[ [Y#.I∞˘;7SJÑ‘*P™R¶•C@öJãfi§™äö +SVZT©+@M$R≤®©°(M%Ew™U$≠©´-%TT–˘;7èîÑ쓇≤îD…:@íúíî…í JRR“°2J@IDîóI"HINI%4âI)%))iHò§ê˘;7Ü    0ˆÅ"ıÈÍ
  975. ¡&—)mù&‘ÑɶÌ˚T¿ìh•ùy“cPìhèJ^ømSÍBA”k¸È0˘;7≈⁄'[qߢIDtë§èΔHï$$§¢‰ëR$à“HF÷ë"B “Gä1îJHíRQrD®ë ˘Ù ıˆBÏÙ ıˆBÏ ÒÈBÏ¡¡¡¡ˇ @ 1Ä`ÇŸR ˝J@ìÑŸRã˚.E∞È…JBªÉ™9†å+úD†€ìî$TJ—
  976. T;áT™Rć!u ´–€§≥ƒòíê∏ÇcÅLóÄA>&%‹ê€6‡Ë¸’09 îÑ∞ÅV¥¿ÅK- €§∑H®â!”›c'!§€É`Ûú2:6Ó¿€ı@˚@⁄ı@˚@⁄ı˘@⁄¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ‡¿Õ @1ÄÕ 1JH@-e#ä¿∂`Œ 3ΩT@VƆŒ I)∏@î§Æ9Õ äR‡#©    ;"'`Œ ùåúIF.#$àŒ˛@Ã˛@à ˛…¡¡¡¡8˛†ÄŒ àÄÄŒùƒ»à/É´G≈`œ‚…TT$™äÄœò@@Ę@Ę*kjbíZ8#∏í    E—Äœ r‡" £ iïŒ ‰Y}›‚»È    Œ˚»˚»¡¡¡¡¡     ˛ —H    ê ˛  —ä=`Äf«+rÿ(ø≤Ú∞“∂I†‡cJTÖh    9BE%@“¢—!íR‰yH
  977. K<II@“ìôa÷àònèjÄ“ “CÁ<õx‰ëKtäDÄ“¡¡¡¡¡¡¡ a‡@00Œ !    @@HHŒ 0ÂB    Hø≤‰∞àŒ 1K•YBEJ@8àŒ JS.ã<Ií@àŒ ä’H#Œè‘ÄDêŒ üiá2ãtäàÑ9`Œ˜Ã˜Ã¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜jk™b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜™k‹b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜‹kb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ęk\b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜\kúb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜úk‹b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜‹kb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ęk\b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜\kúb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜úkŒb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜‹kb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ęk\b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜\kúb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜úk‹b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜‹kb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ęk\b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜\kúb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜úkŒb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ˇ<í@ˇ ˇˇˇˇ@
  978. ˇ·ˇ‚7^
  979. 4H\, Palatino&e.3+ä"CHAPTER à)>1,     Helvetica    ˇˇ—ÚˇÆ(@ä.Introduction to Interapplication Communication4⁄ä˙(‡äSending and Responding to ç¿)q Apple Events
  980. , (‡    1-9
  981. ˇˇˇˇˇˇˇˇ4^4|lòÄ2^A|rMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""^A|r^A|r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  982. ^6|@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""^6|@^6|@˜˜˜˜˜˜˜˜˜˜˜˜˜˙ˇˇ˙ˇ˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜
  983. 4Å4w?òÄ
  984. Å6w@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""Å6w@Å6w@$˜˙ˇ˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˛¸ˇˇ
  985. ˇ˛ˇ˛¸ˇ˛¸ˇ˝˚ˇ˛˛˛ˇ˝
  986. ˇ˛ˇ˛
  987. ˇ˛ˇ˛˛˛ˇ˝˜˛˛ˇ˝
  988. ˇ˛ˇ˛
  989. ˇ˛ˇ˛˙ˇ˜˛˝ˇ˛ˇ˙˛ˇ˚¸ˇ˛˜˛˛ˇ˝
  990. ˇ˛ˇ˛
  991. ˇ˛ˇ˛˛ˇˇ˝˜˛¸ˇˇ
  992. ˇ˛ˇ˛    ¸ˇˇ˜˛˛ˇ˝
  993. ˇ˛ˇ˛
  994. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˜˛¸ˇˇ
  995. ˇ˛ˇ˛˛˛ˇ˝
  996. ˇ˛ˇ˛
  997. ˇ˛ˇ˛˛˛ˇ˝˜˜˜˜˜˙ˇ¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˛¸ˇˇ
  998. ˇ˛ˇ˛˜˛˛ˇ˝
  999. ˇˇˇ˛
  1000. ˇˇˇ˛    ˇˇˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˛ˇˇ˝
  1001. ˇˇˇ˛
  1002. ˇˇˇ˛˛˛ˇ˝ˇ˙˙ˇ˛
  1003. ˇ˛ˇ˛
  1004. ˇ˛ˇ˛˛˛ˇ˝˜˙ˇ˛
  1005. ˇ˛ˇ˛
  1006. ˇ˛ˇ˛˛˛ˇ˝˜˙ˇ˜    ¸ˇˇ˜˛˛ˇ˝
  1007. ˇ˛ˇ˛
  1008. ˇ˛ˇ˛˛ˇˇ˝˛ˇˇ˝
  1009. ˇˇˇ˛
  1010. ˇˇˇ˛˛˛ˇ˝ˇ˙˛¸ˇˇ
  1011. ˇ˛ˇ˛˜    ¸ˇˇ˜˛˛ˇ˝
  1012. ˇ˛ˇ˛
  1013. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˝˛ˇ˛
  1014. ˛ˇ˛ˇˇ    ˇ¸ˇ    ˇ¸ˇ
  1015. ˛ˇ˛ˇˇ˜˜˛˛ˇ˝
  1016. ˇ˛ˇ˛
  1017. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛˚ˇ˛˝ˇ˝˚ˇ˛˚ˇ˛˝ˇ˝˜¸ˇ˛˚ˇ˛˝ˇ˝˚ˇ˛˚ˇ˛˝ˇ˝˜˜˛˝ˇ˛ˇ˙˛ˇ˚¸ˇ˛˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜    ¸ˇˇ˜˛˛ˇ˝
  1018. ˇ˛ˇ˛
  1019. ˇ˛ˇ˛˛ˇˇ˝˛ˇˇ˝
  1020. ˇˇˇ˛
  1021. ˇˇˇ˛˛˛ˇ˝ˇ˙˛¸ˇˇ
  1022. ˇ˛ˇ˛˜    ¸ˇˇ˜˛˛ˇ˝
  1023. ˇ˛ˇ˛
  1024. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähê(eäY@Ä°dONLNd\êh)Wour application should save the new information in the edition whenever the user edits °dONLNdXiäu
  1025. (räUthe publisher and saves the document that contains the publisher—unless the user has °dONLNd≠väÇ™*Bindicated that the information should be saved in the edition on r– °dONLNdÔv™Ç‹(™ equest only•†°dONLNd˙v‹Ç)2 . When the °dONLNdÉäè§(åä?user saves new information in an edition, the Edition Manager r(°dONLNdDÉ•è·(å•eplaces the pr˜Ä°dONLNdRÉ·è)<evious °dONLNdYêäú±(ôä    contents.°dONLNdc¢äÆû*Whe°dONLNdf¢üƨ)n al`°dONLNdi¢¨ÆÕ)n editio+¿°dONLNdq¢ŒÆ)"n is updated,Ô@°dONLNd~¢Æ⁄)9/ the Edition Manager informs your application. ˛Ä°dONLNd≠¢⁄Ƈ)”Yø°dONLNdÆ¢‡ÆÒ)our °dONLNd≤ØäªW(∏ä-application should then update any subscriber °dONLNdflØXªb)Œs (/°dONLNd‚Øbª˜)
  1026. #unless the user has indicated that °dONLNdºä»+(≈ä#updates should be incorporated on r~`°dONLNd(º+»c)°equest only).°dONLNd6Œä⁄≈(◊äFor example, q†°dONLNdCŒΔ⁄Ì)<suppose ∂ °dONLNdKŒÌ⁄)'a useC‡°dONLNdPŒ⁄)r o,°dONLNdSŒ⁄ ) pen… °dONLNdVŒ ⁄$)s °dONLNdWŒ%⁄@) a woró†°dONLNd]Œ@⁄S)d-prŒ`°dONLNdaŒS⁄
  1027. )(ocessing document called My Stocks that °dONLNdâ€äÁÔ(‰äaccesses information fr°dONLNd†€ÔÁ˘)e<om an edition called Stock Report. The Stock Report edition °dONLNd‹ËäÙ0(Òä$might be updated twice a day by an oA`°dONLNdË1Ù9)ßnl˚ °dONLNdË9Ùt)ine database. åÄ°dONLNdËuÙ)<"As the information in the edition °dONLNd2ıä8(˛ä%changes, the My Stocks document can r °dONLNdWı8Î)Æ)eceive automatic updates with the latest °dONLNdÄä¡( ä information.°dONLNdçä ê*Y@Ä°dONLNdéê 
  1028. )Uou can implement publish and subscribe capabilities in your application by using the °dONLNd„!ä-ç(*ärE°dONLNd‰!é-∫)
  1029. outines pr Ä°dONLNdÓ!ª-£)-2ovided by the Edition Manager and supporting the rÛ†°dONLNd !¢-ø)Áelated Ô°dONLNd'!ø-)Apple events. The °dONLNd9.ä:E(7ä)chapter “Edition Manager” in this book pr°†°dONLNdb.E:)ª)ovides sample code that shows how to add °dONLNdã;äGΩ(Dä these featur°dONLNdó;æG.)4es to your application. Thı‡°dONLNd±;.G°)pe chapter “Responding to Ω†°dONLNd ;°G‰)sApple Events” Ä°dONLNdÿ;ÂG)Din this °dONLNd‡HäT¢(Qäbook ¿°dONLNdÂH£T©)dÄ°dONLNdÊH©T))escribes how to support the rh†°dONLNdH)TF)Äelated d°dONLNd
  1030. HFTÖ)Apple events. 
  1031. [Hv4\Hv
  1032. ÜHé4áHé àHà
  1033. ˇ·ˇ‚7^ˇˇ©ˇÆ°dONLNdsHÜ(ÅHSending and Responding to §°dONLNd4sÜu)à Apple EventsˇˇˇˇˇˇV˛)˙1
  1034. °dONLNdBóä£ö(†äAn :@°dONLNdEóö£â)7Apple event is a high-level event that conforms to the  °dONLNd|ó⣂)ÔApple Event Interpr†°dONLNdèó‚£˚)Yocess °dONLNdï§ä∞Δ(≠ä Messaging Pr_Ä°dONLNd°§Δ∞˘)< otocol. The 8`°dONLNd≠§˘∞|)3Apple Event Manager uses thE¿°dONLNd»§|∞â)Ée E´ °dONLNdÀ§â∞Î)vent Manager to send °dONLNd‡§Ï∞    )cApple °dONLNdʱäΩÎ(∫äMevents between applications on the same computer or between applications on rE°dONLNd3±ÏΩ    (∫Ïemote °dONLNd9æä Ω(«ä computers. ~†°dONLNdDææ ¿)4 ˛†°dONLNdEæ¿ ¬) °dONLNdG–䋡(ŸäApplications typically use ˆ†°dONLNdb–ˇ‹K)uApple events to r˚@°dONLNds–K‹·)L"equest services and information frn@°dONLNdï–‚‹Ú)óom °dONLNdò›äÈ°(Êäother≈Ä°dONLNdù›°È£) EÄ°dONLNdû›§È˝)applications or to pr†Ä°dONLNd≥›˝Èó)Y#ovide services and information in r0°dONLNd÷›òȉ)õesponse to such r‡°dONLNdÁ›‰È    )L    equests. °dONLNdÍäˆj(Ûä2For example, any application can use the Get Data Ñ °dONLNd"Íjˆ±)‡Apple event to rK¿°dONLNd2Í≤ˆ¸)Hequest that your °dONLNdC˜äÒ(äapplication locate and rC °dONLNd[˜Ú≥)h/eturn a particular set of data, such as a table;`°dONLNd䘥«)¬. If y¸‡°dONLNdꘫ)our application °dONLNd†ä(äsupports the Get Data event, io†°dONLNdæe)Ñt should be able to r»‡°dONLNd”e–)Wecognize the event and rgÄ°dONLNdΗ˘)lespond b⁄Ä°dONLNdÛ˘)(y °dONLNdıäƒ(älocating the r{¿°dONLNdƒ):equested data and r§@°dONLNd¯)W4eturning a copy of the data to the application that °dONLNdJä*ç('ärE°dONLNdKé*√)equested it. à°dONLNdX√*≈)5 °dONLNdZ0ä<Å(9ä4Communication between two applications that support 쇰dONLNdé0Å<Ù)˜Apple events is initiated b=@°dONLNd©0ı<)ty a °dONLNd≠=äIé(Fäc@°dONLNdÆ=éI€)lient application,©¿°dONLNd¿=‹I%)N which sends an ü‡°dONLNd–=%Il)IApple event to rgÄ°dONLNd‡=mI )H%equest a service or information. For °dONLNd    JäV+(Sä%example, a client application might rÛ‡°dONLNd    *J+V’)°'equest services such as printing specifiê °dONLNd    RJ÷V‚)´c fiç °dONLNd    VJ„VÛ)les, °dONLNd    [Wäc)(`ä&checking the spelling of a list of wor«†°dONLNd    ÅW)c°)üds, or performing a numeri‡°dONLNd    õW°c¨)xc cQ`°dONLNd    ûW≠c) alculation; or it might °dONLNd    ∂däpç(märE°dONLNd    ∑dépE)(equest information, such as one customer@`°dONLNd    fldFpd)∏’s addr¡ °dONLNd    ÊddpÍ)ess or a list of names and addrú°dONLNd
  1035. dÍp)Ü    esses of °dONLNd
  1036. qä}Z(zä0all customers living in Ohio. The application prH¿°dONLNd
  1037. >q[}—)—oviding the service or the r€ °dONLNd
  1038. Zq—}˚)v    equested °dONLNd
  1039. c~ääÏ(áäinformation is called a °dONLNd
  1040. z~ÌäC)c server application.Ô‡°dONLNd
  1041. é~CäÚ)V) The client and server applications can rç`°dONLNd
  1042. ∑~Ûä )∞eside °dONLNd
  1043. Ωãäó#(îä"on the same local computer or on rΰdONLNd
  1044. flã#ó”)ô%emote computers connected to a networ«@°dONLNd ã‘ófi)±k. ˇMP@ˇ ˇˇˇˇ@
  1045. ˇ·ˇ‚7^
  1046. 4*\¯, Palatino&e.3+l"CHAPTER à)>1,     Helvetica    ˇˇ—ÚˇÆ(@l.Introduction to Interapplication Communication4⁄*˙¯
  1047. (‡*1-10    )BSending and Responding to ç¿)q Apple Events4^*¿¯
  1048. °dONLNd\lhÑ(elFigurR¿°dONLNd\Ñhò)e 1-5@°dONLNd
  1049. \òhÕ)  shows the r*Ä°dONLNd\Œhê)6-elationships among a client application, the @°dONLNdC\êhÒ)¬Apple Event ManagerÛ¿°dONLNdV\hı)`, °dONLNdXiluS(rl6and a server application. The client application uses } °dONLNdéiSuª)ÁApple Event Manager rq°dONLNd£iªuÈ)h outines to °dONLNdÆvlÇt(lcrµ@°dONLNd∞vtÇ√)eate and send the Í¿°dONLNd¬v√Çâ)O-Apple event, and the server application uses °dONLNdÔväÇÓ)«Apple Event Manager °dONLNdÉlèo(ålrE°dONLNdÉpèº)outines to interpr˚¿°dONLNdɺè÷)Let the Ü¿°dONLNdÉ◊è')Apple event and rɆ°dONLNd.É'è^)P espond appr8@°dONLNd9É_èÜ)8    opriatelyÚ†°dONLNdBÉÖèÚ)&. If the client application °dONLNd^êlú|(ôlso rwÄ°dONLNdbê|ú¸)equests, the server applicatioÜ°dONLNdÄê¸új)Än adds information to a rÑ °dONLNdôêjú)neply È°dONLNdûêú≤)
  1050. Apple evenÒ`°dONLNd®ê≤ú€)3 t that the °dONLNd≥ùl©‘(¶lApple Event Manager rs‡°dONLNd»ù‘©_)h"eturns to the client application. 
  1051. À*‹¯4Ã*‹¯"Ã*]
  1052. ˇ·ˇ‚7^    °dONLNdΡlÃñ(…l
  1053. Figure 1-5°dONLNdˆ¡ÆÃ)BSending and responding to  °dONLNd¡Ãõ)n!Apple events with the aid of the p°dONLNd1¡õÃÒ)Apple Event Manager
  1054. °dONLNdFõlßÇ(§lIf an •`°dONLNdLõÇß)!Apple event is one of the standar~@°dONLNdmõßL)í d events defi`°dONLNdzõMß{)9 ned in the ‰@°dONLNdÖõ{ß◊).Apple Event Registry: °dONLNdõ®l¥®(±lStandard SuiteS@°dONLNd©®©¥Ø)=s,∂‡°dONLNd´®Ø¥=)" the client application can constr@@°dONLNdÕ®>¥Ô)è)uct the event and the server application °dONLNdˆµl¡ú(æl can interpr¡ °dONLNdµú¡Δ)0 et it accor‡°dONLNd µ«¡)+ding to the standaræ@°dONLNdµ¡3)Sd defiL °dONLNd%µ4¡ó)nition for that event. T冰dONLNd=µñ¡∂)bo ensur&@°dONLNdDµ∑¡È)! e that your °dONLNdP¬lŒµ(Àlapplication can r=Ä°dONLNda¬∂Œ‰)J
  1055. espond to `°dONLNdk¬‰ŒÚ).<Apple events sent by other applications, you should support °dONLNdßœl€ù(ÿl the standar‡°dONLNd≤œû€¶)2d L@°dONLNd¥œ¶€ˇ)Apple events that arÔ °dONLNd»œˇ€)Ye appr°dONLNdŒœ€ò)opriate for your application.
  1056. *¯4*¯ l¯
  1057. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNdÏÚlß(˝l    Standard )>°dONLNdıÚߘ); Apple Eventsˇˇˇˇˇˇ€r(˝1
  1058. °dONLNdlë(lThe currÍ¿°dONLNd ëŒ)%ent edition of P‡°dONLNdœk)>%Apple Event Registry: Standard Suites>†°dONLNd?l)ù defi∞¿°dONLNdD¬)nes the standaró†°dONLNdS¬ )Cd 3`°dONLNdUÀË)    suites W`°dONLNd\ËÛ)of °dONLNd_l “(lApple events, which arü °dONLNdu“ ‚)fe gr<‡°dONLNdy„ 
  1059. )    oups of rá°dONLNdÇ
  1060.  c)'elated events that arÜ °dONLNdóc Ô)Ye usually implemented together•`°dONLNdµÔ Ù)å. °dONLNd∑!l-(*lThe ]`°dONLNdª!-Ï)Apple Event Registrar m"°dONLNd“!Ì- )naintain◊‡°dONLNdŸ! -)s t◊@°dONLNd‹!-")
  1061. he Ú@°dONLNdfl!"-æ)%Apple Event Registry: Standard Suites‡°dONLNd!ø-Ã)ù an1`°dONLNd!Õ-Ô)d other °dONLNd.l:n(7lih`°dONLNd.o:ø)nformation about Ç°dONLNd!.ø:œ)Pthe fl`°dONLNd%.œ:>)ongoing development of ≈`°dONLNd<.>:ê)oApple event suites†°dONLNdN.ë:ñ)S. °dONLNdQ@lL†(Il The standarÌ@°dONLNd\@†L()4 d suites include the following: 
  1062. @°dONLNd|@)L+)â ,Zapf Dingbats°dONLNd~Vl]q(\ln
  1063. °dONLNdÄSx_§)
  1064. The Requir;‡°dONLNdäS•_√)-ed suite°dONLNdíSƒ_) consists of the four 5`°dONLNd®S_√)X&Apple events that the Finder sends to °dONLNdŒ_xk˜(hxapplications. These events arÖÄ°dONLNdÎ_˜k)e Open i¿°dONLNdÚ_k`)"Application, Op≈‡°dONLNd_`kü)G en Documentsy`°dONLNd_†k´)@, PÉ°dONLNd_´kı) rint Documents, °dONLNd kxw°(tx    and Quit Ä°dONLNd)k¢w8)*"Application. The Finder uses the rd`°dONLNdKk8wO)ñequir{†°dONLNdPkOw)$ed events as part of the mechanisms °dONLNdtwxÉz(Äxih`°dONLNduw{Éé)n Syà†°dONLNdywéÉö)ste—†°dONLNd|wöɱ) m 7 a•†°dONLNdÅw≤É«)?nd later versions for launching and terminating applications. T;@°dONLNd¿w«ÉÙ(Ä«
  1065. o support °dONLNd Éxè°(åx    System 7,k‡°dONLNd”É¢èB)*$ your application must support the r‡°dONLNd˜ÉCèZ)°equir( °dONLNd¸ÉZèg)ed / °dONLNdˇÉgèË)Apple events as described in °dONLNdèxõÙ(òxthe chapter “Responding to [Ä°dONLNd7èÙõp)|Apple Events” in this book. ™°dONLNdSèpõr)| 
  1066. €lѯ4⁄j€kò@@ˆ@ˆ€ka¡¡?Áˇ¯›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Óˇ˛˝ˇ¸›?Óˇ˛˝ˇ¸›?˛ˇ˛ˆˇ˛˛ˇ¸›?˛ˇˇˇ¯ˆˇ˛˛ˇ¸›?˛ˇĈˇ˛ Äˇ¸›?˛ˇĈˇ˛ @ˇ¸›?˛ˇüˇ»ˆˇ˛!Á¯ˇ¸›?˛ˇíàHˆˇ˛¯ˇ¸›?˛ˇüˇ»ˆˇ˛ ¿Äˇ¸›?˛ˇíàHˆˇ˛Ç`ˇ¸›?˛ˇüˇ»ˆˇ˛êˇ¸›?˛ˇìˈˇ˛ˇ¸›?˛ˇúˆˇ˛‰ˇ¸›?˛ˇò ˆˇ˛!Rˇ¸›?˛ˇêˆˇ˛"©ˇ¸›?˛ˇ†Äáˆˇ˛DQˇ¸›?˛ˇ¡Gˆˇ˛ Ñ)ˇ¸›?˛ˇÇ5'ˆˇ˛ à4ˇ¸›?˛ˇÒ Jóˆˇ˛!"ˇ¸›?˛ˇÒ@Õˆˇ˛!Qˇ¸›?˛ˇÚAJóˆˇ˛"hġ¸›?˛ˇÚÉ…ˆˇ˛‘@ˇ¸›?˛ˇÚÇ    'ˆˇ˛ ™ ˇ¸›?˛ˇÚÁˆˇ˛ ïˇ¸›?˛ˇÚ!¯ˆˇ˛ äàˇ¸›?˛ˇÒ!ˆˇ˛ ÖDˇ¸›?˛ˇÒ"ˆˇ˛ Ç¶ˇ¸›?˛ˇLjˇ˛êAYˇ¸›?˛ˇbˆˇ˛P@πˇ¸›ò@@Ĉ@Ĉk[a?˛ˇ"ˆˇ˛0 aˇ¸›?˛ˇˆˇ˛#ˇ¸›?˛ˇ    ˆˇ˛ ˇ¸›?˛ˇˆˇ˛@ˇ¸›?˛ˇˆˇ˛Äˇ¸›?˛ˇ‡ˆˇ˛˝ˇ¸›?˛ˇ˛ˆˇ˛˝ˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›ò@Ä¿ˆÄ¿ˆ[kõa?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›?Áˇ¸›Áˇ¸›¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  1067. Ò« »
  1068. àÇ    »
  1069. òÇ0»
  1070. ÇP»
  1071. #t—¯»
  1072. !f »
  1073. qò p»¡¡¡ò@¿ˆ¿ˆõk€a¡¡0¯Ä†˝–ÄÄ @H` ê@¿|`Ô0ê@Ä˝@IJ @H ê@Ä$†Ô40âËŸ≥≠ûgùDŸ÷œ9Ö) ]-˜WXΠ®·9÷@¬îê#•æ¬ÿæVÚ40 Y"Ñ ’&§)™    c™jìRÅéıP•V®RhMQIBêö†«z®8™‘Eid®Ú40K'·\ôD§I2 ù2L¢R$ÇD¶·…‰«
  1074. dHâ‚RDë¡"SpA<òIJe»Ú40éD—;iòzvTù¥Ã5IKÅ
  1075. â·
  1076. ∂XÀÉ⁄≈!ó$•¿EQ<$OõŸÚ40ãCé -…8R[˘àñ‰ú" Ê2p‰yN$êírìb!$Ês8¯è(4Íí∏Ú#@˙D˛˛"@ˆ  ˙DÒ#@˙D˛˛"@ˆ† ˙DÒ#Ä˙8˛˛@ˆ@ ˙8Ò¡¡8éC@@¿ÄËê˝Ä‡@ć@:H˝@į6Dä@ÄÄ@Ä1¸@@Ä@@@Ä˝˜;7ƒıgG!L+[‚uÄÌ ÀJHÀ—l@-mdlåπ&¿[ÎC¢˘« [„eRíeË∂ ^≤;F^ã`˘;7•U    ®JQTUMEÜÅ4ïΩITí¥@V¶¨¥ïQS@çD•eQ+BPçEäÔR™IZ )´VMJ§ï†˘;7©    'í·dòââtÅ%9%)í%$§@•"bí@âÖ)."JDêâéíJeíR I*R…ë)% ˘;7
  1077. *a÷ÇD˚” ÇM¢>R⁄˝µL#©    MØÛ§¡…K:ÛTΔ°…î∑~⁄¶“DÉì◊Ì™`˘;7âÙNõsN§íÑÈ#I)åë)"HIIE…¢Dëíàç≠"$ÑAíác$îë$"T¢“âI@˘Ù@ı ˆÑÏÙ@ı ˆÑÏ ÒÈÑÏ¡¡˛@Ä `01Ä@¿Ÿ§@˝íêB@@Ÿ§èˆ^ãa”ííë\ÁTrÑ
  1078. Á»®⁄%òH§ï¢®é„©T•    )Hït⁄H∑â)%!·pE!0‚ô.    fiâᪧ⁄l·—Ì™`r@e"X"≠h     í¡¢H⁄HæëICß∫ò¡ë√I∑6Á éF›⁄ı˙˛@⁄ı˙˛@⁄ı˙˛@⁄¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  1079.  ¿Ã
  1080.  Äbà bîàÄZ GïÖ≥Õ gzîÄ≠]…*’Õ íS8Å)IZròÕ •†GRsD;Õ ;8íåZ<$@Œ  ˛…  ˛…  ˛…¡¡ ‡pÕ  Õò@@ˆ@ˆ€ka ;Eê! x:≤>KŒ ƒ ®"®êRET§Œ $\pGp$†îNâ$Œ (u¿D@=0∂àΩHŒ »Z8˚∫) ‹áHàŒ˚»˚»¡¡¡‡‡¿¯Ä—ê @PÄ—z¡± ˘6R/Ï∏¨“lìA¿“ïBöVPëQP“E¢B$îπ<í¢œbP“'2¬ E5¢&ÛÉ£Ú†“ï§á»œ&fir$¢›"° “ˆ Õˆ Õ¡¡¡  ¬?‡ÄÅÄŒ  B@ÄB@Œ a ÑQe≈`D@Œ bóJ"rÑääŃ@Œ î¶\$ñxìÄ$@Œ ™êF‹ï$ÄŒ >”dñÈ    ÀÕ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ĉ@Ĉk[a¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿ˆÄ¿ˆ[kõa¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Úˆ¿ÚˆõkÕa¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@ˆ@ˆ€ka¡¡Ê30›Ê› ¬Ê ›Ê›Ê › ¬Ê› ¬Ê ›Ê›Ê › ˝(Û¿ÿ¸ †Ù ˝› ˝)ªÄıÜ“ÿ⁄¸+ÂÛoã ›¸™%Ù(相)‰Äı«à › ¬Ê› ¬˚PÛ
  1081.   ›˚@Û@›˝ ÓVg7ı‹ÍfÊp › ˛ôYÛLĘÚöüiH€˝ôXìLĘ2öâiH› ˛ÓWq4Ĉ¸Íw&H€¸àÚÄ˝ ›¸àÚÄ˝›Ê › ¬Ê› ¬Ê ›Ê›
  1082. ϸ › ˝ˇˇ¯Ù◊¸ÄÙ Ä˝› ˝ÄÙ @ÿ¸üˇ»Ù!Á¯˛ ›¸íàHÙ¯˛›¸üˇ»Ù ¿Ä › ˝íàHÙÇ`⁄¸üˇ»Ùê› ˝ìËÙ⁄¸úÙ‰ ›¸ò Ù!R›¸êÙ"© › ˝†ÄÄıDQ⁄¸¡@ı Ñ)› ˝Ç5 ı à4⁄˝ Jêı!" ›˝@Õı!Q›˝AJêı"hÄ › ˛É…ı‘@⁄˝Ç     ı ™ › ˛‡ı ï⁄˝!¯Ù äà ›˝!Û ÖD›˝"۠Ƕ › ˝ÇÚêAY⁄¸bÚP@π›ò@@Ĉ@Ĉk[a ˝"Ú0 a⁄¸Ú# ›¸    Ú ›¸Ú@˛ › ˝ÚÄŸ ¸‡Ì› ¬Ê ›Ê›Ê › ¬Ê› ¬Ê ›Ê›˚Ò@˛ ›  ¸Ò‡Ÿ˚Ú∞˛› ¸3ÄÛŸ˚`¿Û ˛ ›˚Ù‡Û˛›˚ÄÛ˛ › ¸ÄÛŸ˚ÄÛ˛› ˝˙ÄÛ>Ÿ¸Ģ ˛"˛ ›¸ ĢÄ ˛&˛›¸Ģ≥©˛*˛ › ˝Ģzi˛"Ÿ¸    Ä˘¬e˛2˛› ˝
  1083. Ģª¶˛"Ÿ¸į˛"˛ ›¸ į˛&˛›¸ÄÛ*˛ › ˝Ģ ˛"Ÿ     Ä˘ ˛2˛› P
  1084. Ģw&˛"ŸW:`ĢLØ˛"˛ ›t¶Û˛ ĢîˇˇÊ˛›å¶ÄĢ˜'˛*˛ › è:pįD˝"Ÿ     Ä¯D˝2˛›  
  1085. ÄÛ"Ÿ¸Ĉ(Ä"˛ ›¸ Ę!&˛›˝ ĢñÁKÄ*˛ › igpĢ_íI"ŸıÙ†    Ä˘híI2˛› Üц
  1086. ĢGëI"ŸttêĈ "˛ ›¸ Ĉ &˛›¸ÄÛ*˛ › ˝Äı"Ÿ¸    Äˆ2˛› ˝
  1087. Ģè&éÄ"Ÿ¸Ģ ”/«“Ä#¯˛ ›¸¯
  1088. (6Ä%˝›¸¯    ŒÁ„ŒÄ)˝ › ˝˜!ÿ¸˜Ò‡˛› ˝Ú‚¿Ÿ¸ ÚaIJ ›¸òÚ7˝›˚Ú˝ ›ò@Ä¿ˆÄ¿ˆ[kõa  ¸`Ú ÿÊ› ¬ ˝Ìˇ¸ › ˝@Ì› ˝@Ì ›  ˛@Ì€ ˝@Ì›  ˛@Ì€ ˝@Ì ›˝@˝Ä!¯›˝@˝Ä3¯ › ˛@˝
  1089. π”K;≥3ôÕĸ€˝@˝    •7áØ•-z~_˚› ˛@˝    e44%-JfQ˚€˝@˝    y”ᣧ©:]œ˚ ›˝@¸!˙@˚›˝@¸!˚Ä˚ ›  ˛@Ì€ ˝@Ì›  ˛@Ì€ ˝@Ì › ˝@Ì› ˝@Ì ›  ˛@Ì€ ˝Ìˇ˛›  ˛?Ìˇ˛€Ê ›Ê›Ê › ¬Ê› ¬Ê ›Ê›Ê › ¬Ê›Ê30› ÊÛ¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  1090. Ò« »
  1091. àÇ    »
  1092. òÇ0»
  1093. ÇP»
  1094. #t—¯»
  1095. !f »
  1096. qò p»¡¡¡ò@¿ˆ¿ˆõk€a¡¡0¯Ä†˝–ÄÄ @H` ê@¿|`Ô0ê@Ä˝@IJ @H ê@Ä$†Ô40âËŸ≥≠ûgùDŸ÷œ9Ö) ]-˜WXΠ®·9÷@¬îê#•æ¬ÿæVÚ40 Y"Ñ ’&§)™    c™jìRÅéıP•V®RhMQIBêö†«z®8™‘Eid®Ú40K'·\ôD§I2 ù2L¢R$ÇD¶·…‰«
  1097. dHâ‚RDë¡"SpA<òIJe»Ú40éD—;iòzvTù¥Ã5IKÅ
  1098. â·
  1099. ∂XÀÉ⁄≈!ó$•¿EQ<$OõŸÚ40ãCé -…8R[˘àñ‰ú" Ê2p‰yN$êírìb!$Ês8¯è(4Íí∏Ú#@˙D˛˛"@ˆ  ˙DÒ#@˙D˛˛"@ˆ† ˙DÒ#Ä˙8˛˛@ˆ@ ˙8Ò¡¡8éC@@¿ÄËê˝Ä‡@ć@:H˝@į6Dä@ÄÄ@Ä1¸@@Ä@@@Ä˝˜;7ƒıgG!L+[‚uÄÌ ÀJHÀ—l@-mdlåπ&¿[ÎC¢˘« [„eRíeË∂ ^≤;F^ã`˘;7•U    ®JQTUMEÜÅ4ïΩITí¥@V¶¨¥ïQS@çD•eQ+BPçEäÔR™IZ )´VMJ§ï†˘;7©    'í·dòââtÅ%9%)í%$§@•"bí@âÖ)."JDêâéíJeíR I*R…ë)% ˘;7
  1100. *a÷ÇD˚” ÇM¢>R⁄˝µL#©    MØÛ§¡…K:ÛTΔ°…î∑~⁄¶“DÉì◊Ì™`˘;7âÙNõsN§íÑÈ#I)åë)"HIIE…¢Dëíàç≠"$ÑAíác$îë$"T¢“âI@˘Ù@ı ˆÑÏÙ@ı ˆÑÏ ÒÈÑÏ¡¡˛@Ä `01Ä@¿Ÿ§@˝íêB@@Ÿ§èˆ^ãa”ííë\ÁTrÑ
  1101. Á»®⁄%òH§ï¢®é„©T•    )Hït⁄H∑â)%!·pE!0‚ô.    fiâᪧ⁄l·—Ì™`r@e"X"≠h     í¡¢H⁄HæëICß∫ò¡ë√I∑6Á éF›⁄ı˙˛@⁄ı˙˛@⁄ı˙˛@⁄¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  1102.  ¿Ã
  1103.  Äbà bîàÄZ GïÖ≥Õ gzîÄ≠]…*’Õ íS8Å)IZròÕ •†GRsD;Õ ;8íåZ<$@Œ  ˛…  ˛…  ˛…¡¡ ‡pÕ  Õò@@ˆ@ˆ€ka ;Eê! x:≤>KŒ ƒ ®"®êRET§Œ $\pGp$†îNâ$Œ (u¿D@=0∂àΩHŒ »Z8˚∫) ‹áHàŒ˚»˚»¡¡¡‡‡¿¯Ä—ê @PÄ—z¡± ˘6R/Ï∏¨“lìA¿“ïBöVPëQP“E¢B$îπ<í¢œbP“'2¬ E5¢&ÛÉ£Ú†“ï§á»œ&fir$¢›"° “ˆ Õˆ Õ¡¡¡  ¬?‡ÄÅÄŒ  B@ÄB@Œ a ÑQe≈`D@Œ bóJ"rÑääŃ@Œ î¶\$ñxìÄ$@Œ ™êF‹ï$ÄŒ >”dñÈ    ÀÕ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ĉ@Ĉk[a¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿ˆÄ¿ˆ[kõa¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Úˆ¿ÚˆõkÕa¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@ˆ@ˆÕka¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ĉ@ĈkMa¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿ˆÄ¿ˆMkça¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿ˆ¿ˆçkÕa¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@ˆ@ˆÕka¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ĉ@ĈkMa¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿ˆÄ¿ˆMkça¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Úˆ¿Úˆçkøa¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@ˆ@ˆÕka¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ĉ@ĈkMa¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿ˆÄ¿ˆMkça¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿ˆ¿ˆçkÕa¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@ˆ@ˆÕka¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ĉ@ĈkMa¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿ˆÄ¿ˆMkça¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Úˆ¿Úˆçkøa¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ˇE@ˇ ˇˇˇˇ@
  1104. ˇ·ˇ‚7^
  1105. 4H\, Palatino&e.3+ä"CHAPTER à)>1,     Helvetica    ˇˇ—ÚˇÆ(@ä.Introduction to Interapplication Communication4⁄ä˙(‡äSending and Responding to ç¿)q Apple Events
  1106. , (‡1-11
  1107. ˇˇˇˇˇˇˇˇ4^4|lòÄ2^A|rMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""^A|r^A|r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  1108. ^6|@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""^6|@^6|@˜˜˜˜˜˜˜˜˜˜˜˜˜˙ˇˇ˙ˇ˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜
  1109. 4Å4w?òÄ
  1110. Å6w@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""Å6w@Å6w@$˜˙ˇ˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˛¸ˇˇ
  1111. ˇ˛ˇ˛¸ˇ˛¸ˇ˝˚ˇ˛˛˛ˇ˝
  1112. ˇ˛ˇ˛
  1113. ˇ˛ˇ˛˛˛ˇ˝˜˛˛ˇ˝
  1114. ˇ˛ˇ˛
  1115. ˇ˛ˇ˛˙ˇ˜˛˝ˇ˛ˇ˙˛ˇ˚¸ˇ˛˜˛˛ˇ˝
  1116. ˇ˛ˇ˛
  1117. ˇ˛ˇ˛˛ˇˇ˝˜˛¸ˇˇ
  1118. ˇ˛ˇ˛    ¸ˇˇ˜˛˛ˇ˝
  1119. ˇ˛ˇ˛
  1120. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˜˛¸ˇˇ
  1121. ˇ˛ˇ˛˛˛ˇ˝
  1122. ˇ˛ˇ˛
  1123. ˇ˛ˇ˛˛˛ˇ˝˜˜˜˜˜˙ˇ¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˛¸ˇˇ
  1124. ˇ˛ˇ˛˜˛˛ˇ˝
  1125. ˇˇˇ˛
  1126. ˇˇˇ˛    ˇˇˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˛ˇˇ˝
  1127. ˇˇˇ˛
  1128. ˇˇˇ˛˛˛ˇ˝ˇ˙˙ˇ˛
  1129. ˇ˛ˇ˛
  1130. ˇ˛ˇ˛˛˛ˇ˝˜˙ˇ˛
  1131. ˇ˛ˇ˛
  1132. ˇ˛ˇ˛˛˛ˇ˝˜˙ˇ˜    ¸ˇˇ˜˛˛ˇ˝
  1133. ˇ˛ˇ˛
  1134. ˇ˛ˇ˛˛ˇˇ˝˛ˇˇ˝
  1135. ˇˇˇ˛
  1136. ˇˇˇ˛˛˛ˇ˝ˇ˙˛¸ˇˇ
  1137. ˇ˛ˇ˛˜    ¸ˇˇ˜˛˛ˇ˝
  1138. ˇ˛ˇ˛
  1139. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˝˛ˇ˛
  1140. ˛ˇ˛ˇˇ    ˇ¸ˇ    ˇ¸ˇ
  1141. ˛ˇ˛ˇˇ˜˜˛˛ˇ˝
  1142. ˇ˛ˇ˛
  1143. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛˚ˇ˛˝ˇ˝˚ˇ˛˚ˇ˛˝ˇ˝˜¸ˇ˛˚ˇ˛˝ˇ˝˚ˇ˛˚ˇ˛˝ˇ˝˜˜˛˝ˇ˛ˇ˙˛ˇ˚¸ˇ˛˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜    ¸ˇˇ˜˛˛ˇ˝
  1144. ˇ˛ˇ˛
  1145. ˇ˛ˇ˛˛ˇˇ˝˛ˇˇ˝
  1146. ˇˇˇ˛
  1147. ˇˇˇ˛˛˛ˇ˝ˇ˙˛¸ˇˇ
  1148. ˇ˛ˇ˛˜    ¸ˇˇ˜˛˛ˇ˝
  1149. ˇ˛ˇ˛
  1150. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿,Zapf Dingbats°dONLNd_äfè(eän
  1151. °dONLNd\ñh∂) The Cor— °dONLNd    \∂hœ) e suite¶@°dONLNd\–h+) consists of the basic $¿°dONLNd'\,hf)\ Apple events¨Ä°dONLNd3\fh ):&, including Get Data, Set Data, Move, °dONLNdYhñt·(qñDelete, and Save,a†°dONLNdjh‚t∞)L/ that nearly all applications use to communicat»`°dONLNdôh∞t∑)Œe.°dONLNdõh∏t∫) d`°dONLNdúh∫t¿)Y$‡°dONLNdùh¿t)ou should support °dONLNdØtñĶ(}ñthe °dONLNd≥t¶Ä)Apple events in the Coro`°dONLNd tÄ‘)i.e suite that make sense for your application. °dONLNd˘âäêè(èän
  1152. °dONLNd˚Üñíù) AY¿°dONLNd¸Üùí‘) functional-arù@°dONLNd
  1153. Ü‘íÚ)7ea suite‚†°dONLNdÜÚí5) consists of a grô°dONLNd#Ü6íU)Doup of Ç¿°dONLNd*ÜUí÷)Apple events that support a rÄ°dONLNdGÜ◊íÒ)ÇelatedÚ@°dONLNdMÜÒíÛ) °dONLNdNíñûŒ(õñfunctional arª†°dONLNd[íŒû)8ea. Functional-ar–°dONLNdlíûz)Jea suites include the T! °dONLNdÉízûÉ)bex`°dONLNdÖíÑûî)
  1154. t su‡°dONLNdâíîû
  1155. )ite and the Database suite. °dONLNd•ûñ™ú(ßñY@Ä°dONLNd¶ûú™#)ou can decide which functionaÇ¿°dONLNd√û#™.)ál-aø°dONLNdΔû.™1) rÑ°dONLNd«û2™¢)ea suites to support accorà‡°dONLNd·û¢™¸)pding to which featur£¿°dONLNdıû¸™)Zes °dONLNd¯™ñ∂Î(≥ñyour application pr¸`°dONLNd ™Î∂s)Uovides. For example, most worÓ‡°dONLNd(™s∂Ü)àd-pr%†°dONLNd,™á∂)ocessing applications should °dONLNdI∂ñ¬—(øñsupport the TÜ°dONLNdV∂—¬fl);=ext suite, and most database applications should support the °dONLNdì¬ñŒπ(ÀñDatabasD@°dONLNdö¬∫Œ¡)$e 燰dONLNdú¬¡ŒÀ)su“°dONLNdû¬ÀŒÿ)
  1156. ite.°dONLNd£”äflê(‹äY@Ä°dONLNd§”êfl ) ou do not need to implement all $ °dONLNdƒ” flÅ)êApple events at once. A`°dONLNd⁄”Åflá)aY‡°dONLNd€”áfl)ou should begin by supporting °dONLNd˘‡äÏû(Èäthe r¢`°dONLNd˛‡ûϵ)equirπ†°dONLNd‡µÏ¬)ed ¿†°dONLNd‡¬Ï )IApple events, then add support for the events sent by the Edition Managerπ¿°dONLNdO‡ Ï(È , °dONLNdQÌ䢮(ˆäthe corà °dONLNdXÌ®˘-)e events, and the functional-ar6°dONLNdwÌ.˘^)Ü ea events a⇰dONLNdÇÌ^˘y)0s appr °dONLNdàÌz˘∞)opriate for yπ‡°dONLNdïÌ∞˘¯)6our application. °dONLNdߡä æ(ä If necessaryg@°dONLNd≥ˇΩ ))3, you can extend the defioÄ°dONLNdÃˇ) Ü)lnitions of the standar0 °dONLNd‚ˇá è)^d mÄ°dONLNd‰ˇè œ)Apple events t∑†°dONLNdÚˇœ È)@o suit °dONLNd˘ äé(äsΩ°dONLNd˙ é¶)pecifiÓ °dONLNd ¶™)c^`°dONLNd ´≠) fi`°dONLNd ≠:)"capabilities of your application. 쇰dONLNd$ ;A)éYT`°dONLNd% AÖ)ou can also defi†°dONLNd5 Ü„)Ene your own custom °dONLNdHä%•("äApple˝Ä°dONLNdM•%ß) }Ä°dONLNdN®%Ú)events. Howeverî`°dONLNd]Ú%‹)J6, only those applications that choose to support your °dONLNdì&ä2¨(/äcustom ·‡°dONLNdö&¨2…)"Apple fl`°dONLNd†& 2´)5events explicitly will be able to make use of them. I'‡°dONLNd’&¨2˜)‚f all applications °dONLNdË3ä?“(<äcommunicated s#†°dONLNdˆ3”?„)Iolel3Ä°dONLNd˙3„?')y by means of cø°dONLNd    3'?E)Dustom ∞†°dONLNd3E?{) Apple event˚`°dONLNd3{?§)6
  1157. s, every as†°dONLNd$3•? )*pplication would have °dONLNd:@äL4(Iä(to support all other applications’ custoË`°dONLNdb@4LD)™m e°dONLNde@ELò)vents. Instead of crY‡°dONLNdy@òLÿ)Seating custom ꆰdONLNdá@ÿLı)@Apple °dONLNdçMäY¶(Väevents
  1158. @°dONLNdìMßYÃ)
  1159. , try to uç`°dONLNdùMÃY    )%se the standar¢‡°dONLNd´M    Y)=d ‡@°dONLNd≠MY™)!Apple events and extend their defiΰdONLNdœM™Y˚)ônitions as necessar—‡°dONLNd‚M¸Y)RyE@°dONLNd„MY).°dONLNdÂ_äk«(häHApple events describe actions to be performed by the applications that r%Ä°dONLNd-_»k(h»eceive them. In °dONLNd=läxc(uä3addition to a vocabulary of actions, or “verbs,” efµ†°dONLNdplcxÚ)Ÿfective communication between °dONLNdéyäÖΔ(Çäapplications r∏‡°dONLNdúyΔÖ›)<equir– °dONLNd°y›Ö$)es a method of rß¿°dONLNd±y$ÖL)G
  1160. eferring t`°dONLNdªyMÖR))oÙ‡°dONLNdºyRÖT) t‡°dONLNdΩyUÖ])wÀ‡°dONLNdæy]Ö–)indows, data (such as wor1 °dONLNd◊y—Ö)tds or graphic °dONLNdÂÜäíø(èä elements), fiJ†°dONLNdÚÜ¿íÒ)6Fles, folders, volumes, zones, and other items on which actions can be °dONLNd8ìäü (úäperformed. Th•‡°dONLNdEì ü—)@e ë °dONLNdGì—ü;)Apple Event Manager p¬ °dONLNd\ì;ü>)jrá °dONLNd]ì?ü’)"ovides a method for specifying strÄ°dONLNdì÷üÌ)óucturù`°dONLNdÑìÌü˙)ed °dONLNdá†ä¨(©äUnames, or “noun phrases,” that applications can use to describe the objects on which °dONLNd‹≠äπÿ*Apple events act. °dONLNdÔøäÀù*The ª¿°dONLNdÛøùÀ9)%Apple Event Registry: Standard Suites©Ä°dONLNdø:Àu)ù includes defi◊Ä°dONLNd&øuÀ•); nitions for ˚‡°dONLNd2ø•À˝)0Apple event object °dONLNdEÃäÿ´(’äclasses,‡°dONLNdMèÿ’)"     which ar,@°dONLNdVÃ’ÿ¯))Be simply names for objects that can be acted upon by each kind of °dONLNdòŸäÂ≈(‚äApple event. l`°dONLNd•Ÿ≈Â<);Applications use these defiã`°dONLNd¿Ÿ<Âp)w nitions and ÇÄ°dONLNdßpÂÿ)4Apple Event Manager rv`°dONLNd·ŸÿÂ)h outines to °dONLNdÏÊäÚí(Ôäcrµ@°dONLNdÓÊíÚ[)-eate complex descriptions of almost any discrë@°dONLNd    Ê[Ú˝)…'ete item in another application or its °dONLNd    BÛäˇj(¸ä1documents. For example, an application could use ë@°dONLNd    sÛjˇ“)‡Apple Event Manager rÖ °dONLNd    àÛ“ˇ)h outines and °dONLNd    îä ´(    ästandar±Ä°dONLNd    õ´ ¯)!d object class defi‚ °dONLNd    Æ¯ ?)Mnitions to constrÄ°dONLNd    ø@ ≥)Huct a Get Data event that rÊ`°dONLNd    ⁄≥ )sequests “the most °dONLNd    Ïäç(ärE°dONLNd    Ìé§)>ecent invoice to John Chapman in the Invoices database on the | °dONLNd
  1161. +§Ø(§Ar`°dONLNd
  1162. -∞) chives server in the °dONLNd
  1163. Bä&c(#ä/Accounting zone” and send the event to the appr{Ä°dONLNd
  1164. qc&Δ)Ÿopriate application acrΔ@°dONLNd
  1165. àΔ&)coss the network.°dONLNd
  1166. ô,ä8ö(5äAn ò†°dONLNd
  1167. ú,ö8)Apple event object¨‡°dONLNd
  1168. Æ,8)V  is any iteß °dONLNd
  1169. π,8„)*,m supported by an application, such as a worΔ†°dONLNd
  1170. Â,„8Ó)…d, °dONLNd
  1171. Ë9äEí(Bä;paragraph, shape, or document, that can be described in an 6†°dONLNd #9íE–(BíApple event. Ifl‡°dONLNd 19–E)>n the example °dONLNd ?FäRÊ(Oäjust given, the specifiaÄ°dONLNd VFÁRç)]'ed invoice, the Invoices database, the 2@°dONLNd }FçRò)¶AræÄ°dONLNd FòR—) chives server≥¿°dONLNd åF—R˘)9
  1172. , and the °dONLNd ñSä_‡(\äAccounting zone ar÷Ä°dONLNd ®S‡_)V    e nested AÄ°dONLNd ±S_Ô)'5Apple event objects. Nearly any item that a user can °dONLNd Ê`älñ(iädif™`°dONLNd È`ñl¢) fer凰dONLNd Ï`¢l„) Fentiate and manipulate on a Macintosh computer can be described as an b†°dONLNd 2`„l(i„Apple °dONLNd 8mäy(väevent object of a specifi‘‡°dONLNd Qmyâ)f$ed object class nested within other P¿°dONLNd umäy)öApple event objects. When °dONLNd èzäÜ¡(Éä handling an ‚¿°dONLNd õz¡Ü)7MApple event that includes such a description, an application must locate the °dONLNd Ëáäì¶(êäspecifiÓ °dONLNd Ôá¶ì≥)ed ı °dONLNd Úá≥ìV)$Apple event object and perform the rm‡°dONLNdáWì∑)§equested action on it. Ÿ†°dONLNd-á∑ìπ)` ˇQ>@ˇ ˇˇˇˇ@
  1173. ˇ·ˇ‚7^
  1174. 4*\¯, Palatino&e.3+l"CHAPTER à)>1,     Helvetica    ˇˇ—ÚˇÆ(@l.Introduction to Interapplication Communication4⁄*˙¯
  1175. (‡*1-12    )BSending and Responding to ç¿)q Apple Events4^*¿¯
  1176. °dONLNd\lh¡(elMost of the standarB`°dONLNd\¬h )Vd ¿°dONLNd\ h)Apple events defiy†°dONLNd&\hF)N ned in the GÄ°dONLNd1\Gh„)/%Apple Event Registry: Standard Suites5@°dONLNdV\‰hÊ)ù °dONLNdWiluo(rlrE°dONLNdXipuá)equir\@°dONLNd]iáuÈ)e your application to rX°dONLNdtiÈu.)becognize specifi°dONLNdÑi/u5)Fc ô‡°dONLNdÜi5uÛ),Apple event object classes. Support for the °dONLNd≤vlÇç(lstandar±Ä°dONLNdπvçÇï)!d Ó‡°dONLNdªvïÇ)Apple events, including `°dONLNd”vÇ)m7Apple event object classes, allows your application to °dONLNd
  1177. Élèo(ålrE°dONLNd Épè¢) espond to r-@°dONLNdÉ¢èD)2&equests for services or information frî@°dONLNd<ÉDèÀ)¢om any other application or prȇ°dONLNdZÉÀèÁ)áocess. 
  1178. ¥*ª¯4µ*ª¯ ∂l∂¯
  1179. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNdb•l¥•(∞l    Handling ò~°dONLNdk••¥ı)9 Apple Eventsˇˇˇˇˇˇ€r(∞1
  1180. °dONLNdyªl«Ñ(ƒlFigurR¿°dONLNd~ªÑ«ò)e 1-6@°dONLNdɪò«È) shows a common ~`°dONLNdìªÍ«*)RApple event frb°dONLNd°ª*«[)@
  1181. om the Cor⁄`°dONLNd´ª[«‰)1!e suite, the Set Data event. The °dONLNdûl‘Ê(—lYSurfDB application is the client; it sends a Set Data event to the SurfCharter applicatio@°dONLNd%»Á‘Ò(—Án. °dONLNd(’l·†(fil This event r©¿°dONLNd4’†·N)4&equests that SurfCharter use some new ¶†°dONLNdZ’O·f)Øsales R†°dONLNd`’g·m)fi_`°dONLNdb’m·|)gur∫†°dONLNde’|·Ò)es generated by SurfDB to °dONLNd‚lÓ’(ÎlMupdate the data for the chart named “Summary of Sales” in the document named À‡°dONLNdÂ’Ófl(Î’“S †°dONLNdŒ‚‡ÓÏ) aleΩ†°dONLNd—‚ÏÓÚ) s °dONLNd”Ôl˚ï(¯l    Chart.” Tæ °dONLNd‹Ôï˚¢))he z¿°dONLNdflÔ¢˚m)-Apple event contains information that identifiù‡°dONLNdÔm˚Ë)Àes an action—setting data—°dONLNd'¸l÷(land a description of the ‡°dONLNd@¸◊Ì)k=Apple event object on which to perform the action—“the chart °dONLNd}    lû(l@named Summary of Sales in the document named Sales Report.” The ˇ¿°dONLNdΩ    ûÍ(ûApple event also °dONLNdŒl"
  1182. (l%includes the new data for the chart. ˘`°dONLNdÛ
  1183. " )û 
  1184. D*U¯4E*U¯"E*]
  1185. ˇ·ˇ‚7^    °dONLNdı:lEñ(Bl
  1186. Figure 1-6°dONLNd:ÆE¥)BA0°dONLNd:¥EÚ) Set Data event
  1187. °dONLNd5lAr(>lTµ¿°dONLNd5qA|)o rp@°dONLNd5}A¥) espond appr$‡°dONLNd!5µA‹)8    opriatelyfl@°dONLNd*5€Af)&!, the SurfCharter application in î@°dONLNdK5gA)åFigurg°dONLNdP5Aì)e 1-6Ä°dONLNdU5îA ) can use the °dONLNdbBlNá(KlApple˝Ä°dONLNdgBáNâ) }Ä°dONLNdhBäNF)(Event Manager to determine what kind of \Ä°dONLNdêBFNÂ)º#Apple event has been sent and pass °dONLNd≥Ol[y(Xlthe]`°dONLNd∂Oz[|) ›`°dONLNd∑O|[«)event to the appr     °dONLNd»O»[È)Lopriate â`°dONLNd–OÈ[D)!Apple event handler˘‡°dONLNd„OC[H)Z. õÄ°dONLNdÂOH[X)An ¥ °dONLNdËOX[µ)Apple event handlerê@°dONLNd˚O∂[œ)^ is an °dONLNd\lh±(elapplication-defi|‡°dONLNd\≤hm)F,ned function that extracts pertinent data frΩ¿°dONLNd>\mhã)ªom an z@°dONLNdD\ãhÒ)Apple event, performs °dONLNdZiluÄ(rlthe r¢`°dONLNd_iÄu·)equested action, and rŒ†°dONLNdui·u )a
  1188. eturns a rß¿°dONLNdi uÎ)*5esult. In this case, the Set Data event handler must °dONLNd¥vlÇï(l
  1189. locate an Õ °dONLNdævïÇ>))&Apple event object—that is, the specifi/°dONLNdÂv?Çù)™ed chart in the specifiê@°dONLNd¸vùÇÙ)^ed document—and °dONLNd ÉlèŸ(ålchange the data displaye+†°dONLNd$É⁄è)n
  1190. d in the cŒ¿°dONLNd.Éè&)(    hart as r◊ °dONLNd7É&èR)$
  1191. equested. 
  1192. T*¯4S(T)ò@@ˆ@ˆT)î¡¡?…ˇ¯˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚ ?˛˝Œˇ¸˚?˛ˇˇŒˇ¸˚?˛Œˇ¸˚?˛ÊˇÄ¯Óˇ¸˚?˛ˇ˘ÊˇÄÓˇ¸˚?˛Q    ÊˇÄ ¿Óˇ¸˚?˛ˇ˘ÊˇÄA0Óˇ¸˚?˛Q    ÊˇÄĻӡ¸˚?˛ˇ˘ÊˇÅÓˇ¸˚?˛`ÊˇÇÚÓˇ¸˚?˛ÄÊˇÑÅ©Óˇ¸˚?˛¿ÊˇàTÌˇ¸˚?˛ Êˇà"(Ìˇ¸˚?˛ÊˇêBÌˇ¸˚?˛ »ÊˇêDÌˇ¸˚?˛B§ÊˇêÑ    Óˇ¸˚?˛ D    RÊˇêà Óˇ¸˚?˛ à¢Êˇë Óˇ¸˚?˛A)RÊˇâ@Óˇ¸˚?˛Ay"ÊˇâG¿Óˇ¸˚?˛BA$ÊˇÑO¿Óˇ¸˚?˛B ÅÊˇÉ¯¿Óˇ¸˚?˛D ˇÊˇÅì¯flÓˇ¸˚?˛$!ÊˇÄ~8ˇÓˇ¸˚?˛$AÊˇIJ8„Óˇ¸˚?˛AÊˇÄèx„Óˇ¸˚?˛ AÊˇÄéΩ„Óˇ¸˚?˛AÊˇÄèz˜Óˇ¸˚?˛AÊˇÄéΩÎÓˇ¸˚?˛ ÄÊˇÄflz˜Óˇ¸˚ò@@Ĉ@Ĉî)‘?˛†ÄÊˇÄÆΩÎÓˇ¸˚?˛cÄÊˇÄflz˜Óˇ¸˚?˛<ÊˇÄÆΩÎÓˇ¸˚?˛˝ÊˇÄflz˜Óˇ¸˚?·ˇÄ˚ÔæÓˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚ò@Ä¿ˆÄ¿ˆ‘)?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚ò@¿ˆ¿ˆ)T?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚?…ˇ¸˚…ˇ¸˚¡¡¡¡¡¡¡¡¡¡¡
  1193. ÿ„åx»
  1194. ÑA    »
  1195. åA»
  1196. 
  1197. A »
  1198. ÚÒ »
  1199. Ç&@»
  1200. 8áÿ @»¡¡¡¡¡ÙÅÅ¿@—êA @—ÑÙYÇ"‚Ö“fl—≈,¢Ñ    À%E
  1201. Uj—    %ßÓÑÄ^)âûL— «DàÑ”Oœ®û—    ≈√é√ääGî— ≈ ≈¿≈¡¡9éCÉ  ‡Ätê˝Ä    p Ä    p :DIJ į7D≈ @Ä ÄÄ˝  Ä  @ @˝˜;7ƒ∫É≥« ¶+;r:¿w≈e•$e—6 &∂¥våΩ¿;{#¢}cê;r≤“í2‰õ [Y&.â∞˘;7•JÑ‘JP™U-%C@öäãfi§™íö SS\öïI+@M$Ud©)°(M%EÔRUEM©´-*Tî–˘;7îÑìí‡≤òII:@ìíî…$í íRUì"RJ@IDô-I"HINIJdâäI%))iPô$ê˘;7
  1202.     0÷Å"˚sj
  1203. ¡'ë)mµ&§Ñá'Ø€T¿ìh´9{RcPìhèî∂øŒìÍBA”v˝©0˘;7â⁄'õqߧRDtë•ΔHï"$D§••í$à“HM¨í"B “Gäc$JâRQrH© ˘Ù ıˆÑÏÙ ıˆÑÏ ÒÈÑÏ¡¡˛ @Fc ¿Ÿî ¸ à îÄ @Ÿîã˚.I∞È…ê`Æ„™9îÖw»î⁄î$TT—
  1204. T§°’™Ráw®ïz⁄(≥ƒò§ê∏˚ò·Ló)«ªí⁄<‡Ë¸È09 "A,!V¥    )    a¢$⁄(∑H®ë!”›ú‡…¡§€õΔNF›ÿ⁄ı˙˛ ⁄ı˙˛ ⁄ı˙˛ ⁄ò@@ˆ@ˆT)î¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  1205.  ¿Ã
  1206.  Ä1à bîà@Me#ïɱČ gzî@¶ÆÂ*“ÄŒ íS8A$§ÆrîÕ •†#I    ;D    5ÄŒ ;âF.<" Œ  ˛…  ˛…  ˛…¡¡ ‡pÕ  Õ ;D» à|Z>+Œ ƒ…T!T
  1207. à)%TTŒ $Z8C∏êJ.àîŒ (r‡F [Hº®Œ »Y˘›nGHHŒ˚»˚»¡¡¡‡‡¿Äw‡Ä÷ê @"@)÷9aŸ ‹∂!"N≤@)"˙Àí‹ÿfQ°¿jï!Z!<ÀU@Ie) ÿB·"$LπR"DR^ÄR,·&Iÿ#±b Dù¢¶B Dtà¿õ82?Rÿí‚G»Œñfi9$G»ÓTßà“-‚*"8ÿ ˆÄ“ ˆĆ“Û¿–¡¡  ¡‡@Ä¿Œ  A
  1208. @@A Œ a…B
  1209. H˛µ‰∞B Œ bï•YÑJJA¬ Œ î•.ãxRí@" Œ ©H&Œû‘Ç"@Œ >—á4ãËîàÅ…ÄŒ¡¡¡¡¡¡¡ò@@Ĉ@Ĉî)‘¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿ˆÄ¿ˆ‘)¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Úˆ¿Úˆ)F¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@ˆ@ˆT)î¡¡»30˚»˚ ¬» ˚»˚» ˚ ¬»˚ ¬» ˚»˚» ˚   „‡‰(@ÊÎ˚ 
  1210. n‡ÂΔ“ÿÊ
  1211. ˘@Â?ãÌ ˚*â@ÊçÌ˚ y ÂÁàÌ ˚ ¬»˚ ¬˛@ÂÌ ˚˛Ä˙ Ô Ì˚;ïôÕ¿˚ ÛŒÊfspÓ ˚ ¶V|” ˚{fl∑wÄıÈñü4»Á ¶V$” ˚oüˇ˚Ù)ñâ4»Ó˚ ªï‹M ˚3o|Ï{ÛÓÊwHÁ"˜3{flè«˚ÄÙÄÎ ˚"ˆcÔÄÎ˚
  1212. Ûc◊ ˚ ¬»˚  ˘ıˇÿˇˇ˝ıfl ˚˝ı˘`Ë˚˛`ıàò˘p¯Ï ˚ ˇ˘˛pı˚ˇÿÂ!    Q    ˇÿıĸ  ¿Ì˚#     ˇ˘ ˝">"z¸"8ĸA0Ê(    Q    ˝f l˝ĸÄ»Ì ˚)    ˇ˘˝9fioˇÄ˛ĸÌ˚)    `˝àèÏÌ˚»˛àòĸ ÚÌ ˚$     Ä ˝g o~¿˛˚ˇÿÅ©Ê'    ¿ˇÿ˝=Óyˇ¿˛˘pTÄÓ˚      pı"8˘`"(ÄÁ    `ı˜BÄÓ ˚ »˛ı˜DÄÓ˚B§˛ıˇ¯˜Ñ    Ì ˚  D    R˛ı¿¯à Ê à¢˛ıx¯ Ï˚ A)R˛ı¯    @ÂAy"˛ı ¯    G¿Ì ˚BA$˛ı¯O¿Ì˚B Å˛ı¯¯¿Ì ˚ D ˇ˝ı¯ì¯flÊ$!¸ı˜~8ˇÌ˚ $A¸ı˜˛8„ÊA¸ı˜èx„Ì ˚ A¸ıp¸éΩ„Ì˚A¸ıH¸èz˜Ì ˚ A¸ıIùµfiŒ˝éΩÎÊ* Ä˝˛ IJ˛KÚe+)˝flz˜Ì˚ò@@Ĉ@Ĉî)‘& †Ä˝˛2IJJ%+)˝ÆΩÎÊ)˛cÄ˝˛ Ê|Êh«˛q˘ÂΔ…˝flz˜Ì ˚&˛<¸˛ üHüUÈ˛˛˚ÆΩÎÌ˚"¯˛"ôHôU    ˛˛˚flz˜Ì ˚ ˘˛óDóTÁ˛˜˚Ôæʯı‰˚ ˘ı(›¯ıg+ù0 ˚#]‡˛˝ ¿Äí:SxÂ˚*ì˛à˝ " Ä íFS@˛¿  Ï ˚(  ó”˛bthm#q屿bGù8˛ †Ê,îì‡˛jT˘$†~˚¯˝ì∏8€ÏÓ˚' îì˛äjTò§¢2¿¿¸s%Ò¯Á(tù‡˛qÍTx√!ŒªÄ˘3•1àÓ ˚¯˚ĸ˘œ$¯Ó˚¯¸˚˛‰ ˚ ˘ıd∑8›¯Ñ˝ º2Ú¸ê‰˚% ˘˛¢ ÉDêˆˇ‡˙ˇ˛Ù'¯3úÕ-‹iúÉç∏r<àˆ ˙˚ ˚)¯I%3*Ω(˚Ç_¸ˆ     æÊ»øÔ˚˚)¯I%1*°("ö äS¸ˆà    †¢ÊeúÃÕ¸Ø˚ ˚' ˘1ŒÍù$y¯rO¸ˆ     ¢‰eî建ØÙ&¯ı@¸¸¸     ¢ÊeúûøØ˚˚$ ˘ı¸"¶¸"     ¢Êeúû¸/Ù%¯ıgL‹¸Ñ¸ æ‡˝?Ô˚ ˚"¯ıîfl(¸ƒ¸ ˙˚˚ ¯ıî—¸àå¸à†˘ˇ˚ ˚! ˘ıgN‰¸Ñ¸ ˚3Ù#¯ı@¸î¸ ˚{˚˚! ˘ıĸ"¶¸" ˚œÙ$¯ı¸¸Ñ¸     @ œ˚ ˚$¯ı¸¸ƒ¸     %ÄÄ {˚˚$¯ı¸¸àå¸à    †!ãÜÕ,¿˚ ˚" ˘ı¸¸Ñ¸     %^âüΩ¿ˇÙ$¯ı ¸¸î¸     NÜôØÄ˚˚ ˘ı¸¸"¶¸" ˚Ù!¯ı¸¸Ñ¸ ˚˚ ˚$¯ı¸¸ƒ¸  ˛˚˚#¯ıˇ¯˚¸àå¸à    † ˚ ˚" ˘ı¿¸¸Ñ¸     :ù∂ßdÙ$¯ıx¸¸î¸     &ìJ©:Ó˚˚" ˘ı¸¸"¶¸"     96gwÙ#¯ı ¸¸Ñ¸ ˝˚ ˚#¯ı¸¸ƒ¸ ˝˚˚#¯ıp˛¸àå¸à†˚˚ ˚! ˘ıH¸Ñ¸ ˚Ù#¯ıIªÄ¸î¸ ˚˚˚! ˘ıK◊ä@¸"¶¸" ˚Ù,¯3Δ9òΔpJTä@¸Ñ¸ ˚˚ ˚,¯ÃÄ)Bd)ÄqÀÖĸƒ¸ ˚˚˚*¯ÃÄ)rd!‡¸¸àå¸à†˚˚ ˚) ˘LÄΔ
  1213. dΔ¯˝¸Ñ¸ ˚Ù*¯ÃÄ    )Jd(길˚˚˚( ˘3Δ1òœ`¸¸"¶¸" ˚Ù#¯ı ¸Ñ¸ ˚˚ ˚#¯ıvp¸ƒ¸ ˚˚˚$¯ıœ ˝àèè¸à†˚˚ ˚" ˘ı8 ˝¸ ˚Ù$¯ıÁ˝ñ¸ ˚˚˚ ˘ı¸¸"Ó¸" ˚Ù$¯ı ¸¸x¸ p˛˚ ˚%¯ı¸¸0¸
  1214.  ÑÎLËf~¸˚!¯ı¸ˆà
  1215. †d÷¶®î¸ ˚ò@Ä¿ˆÄ¿ˆ‘) ˘Ùˇ¸ˆ  ÷™òîĈ!¯ıˇ¯˚ˆ  „÷¶êdÄ˝˚ Âˆ" ˝¿ˆ‰ˆ ˝ @˝ ˚‰˘ˇ¯ ˚@˝˚‰⢠à† @˝ ˚ Â˘  §`@ˆ‰˘   ÍÄ@˝˚ Â#˘" n@@@˘‰˘  ‰‡@
  1216. @ ˚‰˘  ˚@
  1217. ÁL˚‰â˘ à†˚@îfi ˚ Â˘  ˚@î–˘‰8˛  ˚@ÁN˚ Â#"$" ˚@ѯ"‰n%ü  ˛  í@Ñ ˚!‰Ù'œÄ  ¯≠@˝˚!‰â"Ñ&LÄ à¢ fœ@˝ ˚" Âr9«Ä #ôª¡$Å@˘‰˘ ?ˇÑô1›¡@,Ó˚ Â#˘""ƒô#≥@æ˘  df`Ó‡@–î ˚!‰˝Ä¿ $DtD˜`@éí˚!‰â˛Ä¿ ®à‰hÃ@˝ ˚ ÂY‹Ê„ÿ  ƒˇ˚∞@ˆ!‰=}(üîfiÄ ?ˇÑ¿ˇ@˝˚! Â#!°(ôî–Ä"#@b0@¯"‰$óìŒÄ "@»†@ ˚‰˘  @ƒ`@…õÄ˚‰â˘ à†aà‡@+ ˚ Â˘  3"@@*!˘‰˘  Û¬«@…‹Ä˚ Â#˘" Lé#Ö$@¯‰˘  Ãáéf@ ˚‰˘  LůÅ@˝˚‰⢠à†≥Êˇ@˝ ˚ Â˘  ˚{¿ˆ‰˘  ˚KÄ˝˚ Â#˘ˇ˛" ˚œÄˆ‰˘ˇ¸ ˚oÄ˝ ˚‰ˆ ˚;Ä˝˚‰ˆà†˚3¸¸ ˚ Âˆ ˘ˇÙ‰ˆ ˚˚˚ Âˆ" ˚Ù‰ˆ ˚W˚ ˚‰ˆ ˚w˚˚‰ˆà†˚G˚ ˚ Âˆ ˚Ù‰ˆ ˘ˇ˚˚ Âˆ" ˘ˇÙ‰ˆ Ú ˚‰ˆ Ú˚‰ˆà†Ú ˚  Âˆ Î‰ˆ Ú˚  Âˆˇ‡Î» ˚»˚» ˚ ¬»˚ ¬» ˚ò@¿ˆ¿ˆ)T»˚» ˚ ¬»˚ ¬ »Ã˚…UT˚¡¡¡¡¡¡¡¡¡¡¡
  1218. ÿ„åx»
  1219. ÑA    »
  1220. åA»
  1221. 
  1222. A »
  1223. ÚÒ »
  1224. Ç&@»
  1225. 8áÿ @»¡¡¡¡¡ÙÅÅ¿@—êA @—ÑÙYÇ"‚Ö“fl—≈,¢Ñ    À%E
  1226. Uj—    %ßÓÑÄ^)âûL— «DàÑ”Oœ®û—    ≈√é√ääGî— ≈ ≈¿≈¡¡9éCÉ  ‡Ätê˝Ä    p Ä    p :DIJ į7D≈ @Ä ÄÄ˝  Ä  @ @˝˜;7ƒ∫É≥« ¶+;r:¿w≈e•$e—6 &∂¥våΩ¿;{#¢}cê;r≤“í2‰õ [Y&.â∞˘;7•JÑ‘JP™U-%C@öäãfi§™íö SS\öïI+@M$Ud©)°(M%EÔRUEM©´-*Tî–˘;7îÑìí‡≤òII:@ìíî…$í íRUì"RJ@IDô-I"HINIJdâäI%))iPô$ê˘;7
  1227.     0÷Å"˚sj
  1228. ¡'ë)mµ&§Ñá'Ø€T¿ìh´9{RcPìhèî∂øŒìÍBA”v˝©0˘;7â⁄'õqߧRDtë•ΔHï"$D§••í$à“HM¨í"B “Gäc$JâRQrH© ˘Ù ıˆÑÏÙ ıˆÑÏ ÒÈÑÏ¡¡˛ @Fc ¿Ÿî ¸ à îÄ @Ÿîã˚.I∞È…ê`Æ„™9îÖw»î⁄î$TT—
  1229. T§°’™Ráw®ïz⁄(≥ƒò§ê∏˚ò·Ló)«ªí⁄<‡Ë¸È09 "A,!V¥    )    a¢$⁄(∑H®ë!”›ú‡…¡§€õΔNF›ÿ⁄ı˙˛ ⁄ı˙˛ ⁄ı˙˛ ⁄ò@@ˆ@ˆT)î¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  1230.  ¿Ã
  1231.  Ä1à bîà@Me#ïɱČ gzî@¶ÆÂ*“ÄŒ íS8A$§ÆrîÕ •†#I    ;D    5ÄŒ ;âF.<" Œ  ˛…  ˛…  ˛…¡¡ ‡pÕ  Õ ;D» à|Z>+Œ ƒ…T!T
  1232. à)%TTŒ $Z8C∏êJ.àîŒ (r‡F [Hº®Œ »Y˘›nGHHŒ˚»˚»¡¡¡‡‡¿Äw‡Ä÷ê @"@)÷9aŸ ‹∂!"N≤@)"˙Àí‹ÿfQ°¿jï!Z!<ÀU@Ie) ÿB·"$LπR"DR^ÄR,·&Iÿ#±b Dù¢¶B Dtà¿õ82?Rÿí‚G»Œñfi9$G»ÓTßà“-‚*"8ÿ ˆÄ“ ˆĆ“Û¿–¡¡  ¡‡@Ä¿Œ  A
  1233. @@A Œ a…B
  1234. H˛µ‰∞B Œ bï•YÑJJA¬ Œ î•.ãxRí@" Œ ©H&Œû‘Ç"@Œ >—á4ãËîàÅ…ÄŒ¡¡¡¡¡¡¡ò@@Ĉ@Ĉî)‘¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿ˆÄ¿ˆ‘)¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Úˆ¿Úˆ)F¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@ˆ@ˆF)Ü¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ĉ@ĈÜ)Δ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿ˆÄ¿ˆΔ)¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿ˆ¿ˆ)F¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@ˆ@ˆF)Ü¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ĉ@ĈÜ)Δ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿ˆÄ¿ˆΔ)¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Úˆ¿Úˆ)8¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@ˆ@ˆF)Ü¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ĉ@ĈÜ)Δ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿ˆÄ¿ˆΔ)¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿ˆ¿ˆ)F¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@ˆ@ˆF)Ü¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ĉ@ĈÜ)Δ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿ˆÄ¿ˆΔ)¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Úˆ¿Úˆ)8¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ˇ@N@ˇ ˇˇˇˇ@
  1235. ˇ·ˇ‚7^
  1236. 4H\, Palatino&e.3+ä"CHAPTER à)>1,     Helvetica    ˇˇ—ÚˇÆ(@ä.Introduction to Interapplication Communication4⁄ä˙(‡ä Supporting P).)AppleScript and Other Scripting Languages
  1237. , (‡1-13
  1238. ˇˇˇˇˇˇˇˇ4^4|lòÄ2^A|rMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""^A|r^A|r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  1239. ^6|@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""^6|@^6|@˜˜˜˜˜˜˜˜˜˜˜˜˜˙ˇˇ˙ˇ˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜
  1240. 4Å4w?òÄ
  1241. Å6w@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""Å6w@Å6w@$˜˙ˇ˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˛¸ˇˇ
  1242. ˇ˛ˇ˛¸ˇ˛¸ˇ˝˚ˇ˛˛˛ˇ˝
  1243. ˇ˛ˇ˛
  1244. ˇ˛ˇ˛˛˛ˇ˝˜˛˛ˇ˝
  1245. ˇ˛ˇ˛
  1246. ˇ˛ˇ˛˙ˇ˜˛˝ˇ˛ˇ˙˛ˇ˚¸ˇ˛˜˛˛ˇ˝
  1247. ˇ˛ˇ˛
  1248. ˇ˛ˇ˛˛ˇˇ˝˜˛¸ˇˇ
  1249. ˇ˛ˇ˛    ¸ˇˇ˜˛˛ˇ˝
  1250. ˇ˛ˇ˛
  1251. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˜˛¸ˇˇ
  1252. ˇ˛ˇ˛˛˛ˇ˝
  1253. ˇ˛ˇ˛
  1254. ˇ˛ˇ˛˛˛ˇ˝˜˜˜˜˜˙ˇ¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˛¸ˇˇ
  1255. ˇ˛ˇ˛˜˛˛ˇ˝
  1256. ˇˇˇ˛
  1257. ˇˇˇ˛    ˇˇˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˛ˇˇ˝
  1258. ˇˇˇ˛
  1259. ˇˇˇ˛˛˛ˇ˝ˇ˙˙ˇ˛
  1260. ˇ˛ˇ˛
  1261. ˇ˛ˇ˛˛˛ˇ˝˜˙ˇ˛
  1262. ˇ˛ˇ˛
  1263. ˇ˛ˇ˛˛˛ˇ˝˜˙ˇ˜    ¸ˇˇ˜˛˛ˇ˝
  1264. ˇ˛ˇ˛
  1265. ˇ˛ˇ˛˛ˇˇ˝˛ˇˇ˝
  1266. ˇˇˇ˛
  1267. ˇˇˇ˛˛˛ˇ˝ˇ˙˛¸ˇˇ
  1268. ˇ˛ˇ˛˜    ¸ˇˇ˜˛˛ˇ˝
  1269. ˇ˛ˇ˛
  1270. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˝˛ˇ˛
  1271. ˛ˇ˛ˇˇ    ˇ¸ˇ    ˇ¸ˇ
  1272. ˛ˇ˛ˇˇ˜˜˛˛ˇ˝
  1273. ˇ˛ˇ˛
  1274. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛˚ˇ˛˝ˇ˝˚ˇ˛˚ˇ˛˝ˇ˝˜¸ˇ˛˚ˇ˛˝ˇ˝˚ˇ˛˚ˇ˛˝ˇ˝˜˜˛˝ˇ˛ˇ˙˛ˇ˚¸ˇ˛˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜    ¸ˇˇ˜˛˛ˇ˝
  1275. ˇ˛ˇ˛
  1276. ˇ˛ˇ˛˛ˇˇ˝˛ˇˇ˝
  1277. ˇˇˇ˛
  1278. ˇˇˇ˛˛˛ˇ˝ˇ˙˛¸ˇˇ
  1279. ˇ˛ˇ˛˜    ¸ˇˇ˜˛˛ˇ˝
  1280. ˇ˛ˇ˛
  1281. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähù(eäThe ]`°dONLNd\ùh )Apple Event Manager prS`°dONLNd\ h.)novides r懰dONLNd"\.h˘)#1outines that a server application can use in its °dONLNdSiäu3(rä&Apple event handlers to take apart an h°dONLNdyi3uÒ)©*Apple event and examine its contents. The °dONLNd£väÇ(äSurfCharter application in ◊†°dONLNdævÇ)vFigur™`°dONLNd√vÇ,)e 1-6G‡°dONLNd»v-Ç_)  can interpr    °dONLNd‘v`ÇÂ)3 et the contents of the Set Data °dONLNdÙvÂÇ)ÖApple °dONLNd˙Éäèº(åä event accorh@°dONLNdɺèˇ)2ding to the defi‘@°dONLNdɡèq)Cnition of that event in the Ä°dONLNd1Érè)s%Apple Event Registry: Standard SuitesÒ@°dONLNdVÉè)ú. °dONLNdXêäú0(ôä%The Set Data event handler uses both ¥¿°dONLNd}ê0úò)¶Apple Event Manager r®†°dONLNdíêòú)houtines and the SurfCharter °dONLNdÆùä©fl(¶äapplication’s own rû°dONLNd¡ùfl©ï)U*outines to locate the chart and make the rø†°dONLNdÎùï©·)∂equested change.°dONLNd¸Øäªù(∏äThe ]`°dONLNdØùª)Apple Event Manager also prn@°dONLNdتB)Çovides rŸ¿°dONLNd#ØBª˝)#-outines that a client application can use to °dONLNdPºä»•(≈äconstrï °dONLNdVº•»Ì)uct and send an ¢¿°dONLNdfºÌ»Q)HApple event. Howeverz °dONLNdzºQ»±)d, the most important r‚ °dONLNd꺱»»)`equir˘`°dONLNdﺻ»ı)
  1282. ement for °dONLNdü…ä’X(“ä1applications that support IAC is the ability to rãÄ°dONLNd–…X’Ü)Œ
  1283. espond to P`°dONLNd⁄…Ü’¿). Apple eventsÿ °dONLNdÊ…¿’˝):, because this °dONLNdı÷ä‚›(fläability is essential f}@°dONLNd ÷fi‚9)Tor an application tha`°dONLNd ÷:‚o)\t users can c≥°dONLNd-÷o‚Å)5ontr@°dONLNd1÷Ç‚á)ov¿°dONLNd2÷á‚ô)l thr∑‡°dONLNd7÷ô‚∂)ough sR°dONLNd=÷∑‚“)cripts.û¿°dONLNdD÷“‚˝)
  1284.  The next °dONLNdN„äÔ#(Ïä"section describes how you can use ˇ°dONLNdp„#Ô)ô6Apple events to support scripting in your application.°dONLNdßıä÷(˛äThe chapter “Intrµ`°dONLNd∏ı÷ )L oduction to â °dONLNdƒı é)5Apple Events” in this book pr¿°dONLNd·ıèÌ)Ñovides an overview oì`°dONLNdııÌÚ)^f ‡°dONLNd˜ıÛ˙)A– °dONLNd¯ı˙)pple °dONLNd˝ä¢( äeventÕ@°dONLNd¢≠)s aä@°dONLNdÆ≥) n[†°dONLNd¥Ì)d describes hD†°dONLNdÓE):ow you can use the k@°dONLNd&EÁ)W!Apple Event Manager to implement Ä°dONLNdGÁ)¢Apple °dONLNdMäÖ(ä8events in your application. The chapters “Responding to  °dONLNdÖÖ )˚Apple Events,”  °dONLNdîÀ–)F“ °dONLNdï–€)Cr¶°dONLNdó€ ) eating and °dONLNd¢ä(∞(%äSending ·°dONLNd™∞(G)& Apple Events,” “Resolving and CrÖ†°dONLNd H(°)òeating Object SpecifiŇ°dONLNdfl¢(Δ)Zer Recor‡Ä°dONLNdÁΔ(Ì)$    ds,” and °dONLNd)ä5®(2ä“Recor¢`°dONLNdˆ)®5æ)ding (†°dONLNd˚)ø5 )Apple Events” prI†°dONLNd ) 5±)M%ovide detailed information about the °dONLNd0)±5Î)• Apple Event °dONLNd<6äB±(?äManagerT†°dONLNdC6±B∂)'. T†°dONLNdE6∂B∏) 
  1285. IHd4JHd
  1286. tH|4uH| vHv
  1287. ˇ·ˇ‚7^ˇˇ©ˇÆ°dONLNdHaHtù(oH Supporting ’f°dONLNdSaùtŸ)U)AppleScript and Other Scripting LanguagesˇˇˇˇˇˇV˛(o1
  1288. °dONLNd~Öäëë(éäA∫†°dONLNdÖëëì) :†°dONLNdÄÖîë≠)script¬@°dONLNdÜÖ≠ë®): is any collection of data that, when executed by the apprÄ°dONLNd¿Ö©ë‘)¸
  1289. opriate pr©@°dONLNd Ö‘ë)+ogram, causes °dONLNdÿíäû£(õäa corrù`°dONLNdfií£û…)Cesponding action or series of actions. For example, some database, °dONLNd!üä´ (®ätelecommunications, and pag©‡°dONLNd<ü ´)Çe-lØ¿°dONLNd?ü´€) ,ayout applications allow users to automate rË@°dONLNdkü€´)ƒepetitive or °dONLNdx¨ä∏f(µä3conditional tasks by means of scripts written in prI@°dONLNd´¨g∏)›#oprietary scripting languages. The °dONLNdŒπä≈¨(¬äHyperTT†°dONLNd‘π¨≈π)"alkà°dONLNd◊∑π¿æ(æπ®
  1290. Δ °dONLNdÿπø≈q+) scripting language allows users to contrÄ°dONLNdπr≈Ó)≥ol the behavior of HyperCar´`°dONLNdπÓ≈Ù)|d« °dONLNd∑Ù¿˘(æÙ®
  1291. ¡ °dONLNdπ˙≈¸+ °dONLNdΔä“¿(œä stacks. MacrÊ@°dONLNd+Δ¿“—)6o pr¢‡°dONLNd/Δ““Û)Aograms can automate tasks at the level of mouse clicks and keystr8†°dONLNdpΔÙ“
  1292. (œÙokes.√‡°dONLNduΔ
  1293. “ ) C‡°dONLNdvΔ“) √‡°dONLNdwΔ“) °dONLNdyÿ䉂(·äThe Open Scripting Ó¿°dONLNdåÿ‚‰Ì)XAr{°dONLNdéÿÓ‰)     chitectur/¿°dONLNdóÿ‰D)'
  1294. e (OSA) prK °dONLNd°ÿD‰å)/ovides a standar£ °dONLNd±ÿ剸)Hd mechanism that allows °dONLNd…ÂäÒ≈(Óäusers to contr3¿°dONLNd◊ÂΔÒÛ)<Hol multiple applications with scripts written in a variety of scripting °dONLNdÚä˛S(˚ä-languages. Each scripting language has a corr≠@°dONLNdLÚS˛    )…&esponding scripting component. When a °dONLNdrˇä (äXscripting component executes a script, it performs the actions described in the script, °dONLNd  ä‹*including sending ‹`°dONLNd‹ ‹ê)R)Apple events to applications if necessary°dONLNd     êï)¥. °dONLNd    ä*≤('äThe OSA°dONLNd    ≤*:)( comprises the following parts:,Zapf Dingbats°dONLNd    /4ä;è(:än
  1295. °dONLNd    11ñ=©) The ]`°dONLNd    51©=t),Apple Event Manager allows applications to rW@°dONLNd    a1t=¢)À
  1296. espond to  °dONLNd    k1¢=).Apple events sent by °dONLNd    Ä=ñI (Fñscripting components (see V‡°dONLNd    ö= I)vthe ¥@°dONLNd    û=I%)pr{`°dONLNd    †=&Ii)
  1297. evious section, ı¿°dONLNd    ∞=iIÎ)C“Sending and Responding to fi°dONLNd    À=ÎI)ÇApple °dONLNd    —IñU∏(RñEvents”\`°dONLNd    ÿIπUæ)#).°dONLNd    €^äeè(dän
  1298. °dONLNd    ›[ñg©) The ª¿°dONLNd    ·[©gE)%Apple Event Registry: Standard Suites©Ä°dONLNd
  1299. [FgY)ù defi†°dONLNd
  1300. [Zgù)nes the standarÄ°dONLNd
  1301. [ùg‰)Cd vocabulary of °dONLNd
  1302. *gñs±(pñApple˝Ä°dONLNd
  1303. /g±s≥) }Ä°dONLNd
  1304. 0g¥s”)events.°dONLNd
  1305. 8|äÉè(Çän
  1306. °dONLNd
  1307. :yñÖ ) The standarÌ@°dONLNd
  1308. Ey ÖQ)4d scripting component data str∫‡°dONLNd
  1309. cyRÖi)àuctur@¿°dONLNd
  1310. hyjÖ{)es, r `°dONLNd
  1311. my|Ö∏)outines, and rΩ‡°dONLNd
  1312. {y∏Ö–)<esour °dONLNd
  1313. Äy—Ö¸)
  1314. ces allow °dONLNd
  1315. äÖñëá(éñ7applications to interact with any scripting component. °dONLNd
  1316. ¬öä°è(†än
  1317. °dONLNd
  1318. ƒóñ£©) The ]`°dONLNd
  1319. »ó©£\)%AppleScript component implements the h`°dONLNd
  1320. Ìó\£Ê)≥AppleScript scripting languages¿°dONLNd óÊ£Ë)ä.ˇQÿ@ˇ ˇˇˇˇ@
  1321. ˇ·ˇ‚7^
  1322. 4*\¯, Palatino&e.3+l"CHAPTER à)>1,     Helvetica    ˇˇ—ÚˇÆ(@l.Introduction to Interapplication Communication4⁄*˙¯
  1323. (‡*1-14    )B Supporting P).)AppleScript and Other Scripting Languages4^*¿¯
  1324. °dONLNd\lh(elThe ª¿°dONLNd\hÓ)AppleScript component,Z¿°dONLNd\ÔhV)p which implements the È`°dONLNd0\VhÁ)gAppleScript scripting language, °dONLNdO\ËhÙ)í is °dONLNdSiluı(rlthe implementation of the OSȦ°dONLNdpiıu)â pr5°dONLNdsiu1)
  1325. ovided by Ú†°dONLNd}i0u{).Apple Computerõ °dONLNdãi{ufl)K, Inc. Users can view a °dONLNd£vlÇ≈(lscript written in the ◊@°dONLNdπv≈Çä)Y-AppleScript scripting language in several difò@°dONLNdÊvãÇó)Δferz¿°dONLNdÈvóÇß) ent ÿ °dONLNdÌvßÇÃ)    dialects,P°dONLNdˆvÕÇ€)& or °dONLNd˙ÉlèØ(ålversions of the T °dONLNd
  1326. ÉØè))CAppleScript language that r°dONLNd%É)èk)zesemble specifi±°dONLNd4Élè–)Cc human languages or °dONLNdIêlúu(ôlprG °dONLNdKêvú€)
  1327. ogramming languages.°dONLNd`¢lÆÑ(´lFigurR¿°dONLNde¢ÑÆò)e 1-7@°dONLNdj¢òÆÕ)  shows the r*Ä°dONLNdv¢ŒÆ„)6?elationships among some of these parts. The client application °dONLNdµØlªt(∏lin9¿°dONLNd∑Øuªw)     π¿°dONLNd∏Øwªè)FiguråÄ°dONLNdΩØ誣)e 1-7*°dONLNd¬Ø§ª©) ií`°dONLNdƒØ©ªÁ)s Script Editor´‡°dONLNd”ØÁªÈ)>,+‡°dONLNd‘Øͪ7) an application pr˚@°dONLNdÊØ7ªf)M
  1328. ovided by ∏‡°dONLNdØfª±)/Apple Computera`°dONLNd˛Ø±ªΔ)K, Inc.ÅÄ°dONLNdØΔª»),Ä°dONLNdØ…ªfl) that °dONLNd ºl»¥(≈lallows users to rîÄ°dONLNdº¥»Δ)Hecor‡°dONLNd º«»Ú)Gd, edit, and execute scripts. The client application could also be any °dONLNdg…l’(“l'other application that uses the standar¨ °dONLNdé…’)©d scripting component r†°dONLNd•…Ä’Ô)koutines to execute scripts‡°dONLNdø…Ô’Ù)o. °dONLNd¡÷l‚¨(fllScript Editor u!°dONLNd–÷≠‚‹)ABses the Component Manager to open a connection with the scripting °dONLNd„lÔº(Ïlcomponent that crÎÄ°dONLNd#„ºÔA)Peated the script to be executedk °dONLNdB„BÔG)Ü. 
  1329. *"¯4*"¯"*]
  1330. ˇ·ˇ‚7^    °dONLNdElñ(l
  1331. Figure 1-7°dONLNdPÆ`)B+How a scripting component executes a script
  1332. "lį4!k"lò@@˜@˜"lbc¡¡?◊ˇ¯Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?ˆˇ¯Áˇ¸Ì?ˆˇ¯Áˇ¸Ì?ˆˇ¯Áˇ¸Ì?ˆˇ¯ÁÁˇ¸Ì?ˆˇ¯'Áˇ¸Ì?ˆˇ¯ÁÁˇ¸Ì?ˆˇ¯ «Áˇ¸Ì?ˆˇ¯@( áÁˇ¸Ì?ˆˇ¯ÄD˜Áˇ¸Ì?ˆˇ˘É.Áˇ¸Ì?ˆˇ˙\Áˇ¸Ì?ıˇÇ∫Áˇ¸Ì?ˆˇ¸D    qÁˇ¸Ì?ˆˇ¸(áÁˇ¸Ì?ˆˇ¸0–Áˇ¸Ì?ˆˇ˙  ‡?Áˇ¸Ì?ˆˇ˙?Áˇ¸Ì?ˆˇ˘?Áˇ¸Ì?ˆˇ¯Ä8‡?Áˇ¸Ì?ˆˇ¯@ ^?Áˇ¸Ì?ˆˇ¯ AÊˇ¸Ì?ˆˇ¯Ä?Áˇ¸Ì?ˆˇ¯Áˇ¸Ì?ˆˇ¯Áˇ¸Ì?ˆˇ¯
  1333. Áˇ¸Ì?ˆˇ¯Áˇ¸Ì?ˆˇ¯!Áˇ¸Ì?ˆˇ¯! Áˇ¸Ì?ˆˇ¯!@Áˇ¸Ì?ˆˇ¯ÄÁˇ¸Ìò@@Ę@Ębl¢c?ˆˇ¯Áˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ìò@Ä¿˜Ä¿˜¢l‚c?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?‰ˇ¯˝˙ˇ¸Ì?‰ˇ¯˝˙ˇ¸Ì?Èˇ˝¯8˛˙ˇ¸Ì?ÈˇˇˇÄ¯D˛˛‡ˇˇ¸Ì?ÈˇÄ¯Ç˛˛`ˇˇ¸Ì?ÈˇÄ¯Å˛˛Äˇˇ¸Ì?Èˇ    ˇ¸Ä¯áü‡˛¡ˇˇ¸Ì?Èˇ    (ÑįO‡˛!ˇˇ¸Ì?Èˇ    ˇ¸Ä¯/f˛ˇˇ¸Ì?Èˇ    (ÑÄ¯Ä˛ …ˇˇ¸Ì?Èˇ    ˇ¸Ä¯ @˛B•ˇˇ¸Ìò@¿˜¿˜‚l"c?Èˇ    0į  ˛ D    Sˇˇ¸Ì?Èˇ    ¿Ä¯@ê˛ à£ˇˇ¸Ì?Èˇ    Ç`¯ ÑH˛A Sˇˇ¸Ì?Èˇ    ê¯@à§˛A@#ˇˇ¸Ì?Èˇ
  1334. ¯A!D˛B@%ˇˇ¸Ì?Èˇ ‰¯Ç`§˛B Äˇˇ¸Ì?Èˇ!R¯Ç –D˛D Äˇˇ¸Ì?Èˇ"©¯Ñ àH˛$!ˇˇ¸Ì?ÈˇD —¯ÑAD8˛$Aˇˇ¸Ì?Èˇ Ñ©¯àA¢˛A?ˇˇ¸Ì?Èˇ à<ë¯HCQ˛ G„ˇˇ¸Ì?Èˇ! í¯HǮIJO„}ˇˇ¸Ì?Èˇ!@鯠ÇT@˛¯„˝ˇˇ¸Ì?Èˇ"įÇ* ˛¯„硡¸Ì?ÈˇÄ¯Ç˛=„硡¸Ì?Èˇ Ä¯Ç
  1335. ò˛:˜çˇˇ¸Ì?Èˇ Ä¯Ad˛=Λˇˇ¸Ì?Èˇ Ä¯A‰˛:˜≠ˇˇ¸Ì?Èˇ Ä¯¿ÅÑ˛}Λˇˇ¸Ì?Èˇ Ä¯@@å˛∫˜≠ˇˇ¸Ì?Èˇê@¯ Ä|˛}Λˇˇ¸Ì?ÈˇP@¯˛∫˜≠ˇˇ¸Ì?Èˇ1¿¯˛}Λˇˇ¸Ì?Èˇ¯˝˛Ôæ˘ˇˇ¸Ì?Èˇ˝¯˝˙ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ìò@@˜@˜"lbc?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ìò@@Ę@Ębl¢c?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì?◊ˇ¸Ì◊ˇ¸Ì¡¡¡¡¡¡¡¡¡¡¡¡
  1336. Ò« 0»
  1337. àÇ    H»
  1338. òÇH»
  1339. Çp»
  1340. #t—ê»
  1341. !fê»
  1342. qò `»¡¡¡¡¡¯∏˛ ˚˛flê˝˙˝fl"âËŸuÌ+≠ºk(õ-∏M#GìÖÌ+ć! Y"Ñ‚ï
  1343. !Qu&»*µuMVêßU…,
  1344. !Qufl!K'‰$©&D»D•&I‰°ƒËZsí&fl!éD%*„Ki∞]HJìâ±ãs@û„Kfl!ãCér49"2Ip"J1y ˚tZ?9"2fl@¯@à@˜@fl@¯@à@˜@flį@p@˜@fl¡¡ò@Ä¿˜Ä¿˜¢l‚c8éC@@¿ÄËê˝Ä‡@ć@:H˝@į6Dä@ÄÄ@Ä1¸@@Ä@@@Ä˝˜;7ƒıgG!L+[‚uÄÌ ÀJHÀ—l@-mdlåπ&¿[ÎC¢˘« [„eRíeË∂ ^≤;F^ã`˘;7•U    ®JQTUMEÜÅ4ïΩITí¥@V¶¨¥ïQS@çD•eQ+BPçEäÔR™IZ )´VMJ§ï†˘;7©    'í·dòââtÅ%9%)í%$§@•"bí@âÖ)."JDêâéíJeíR I*R…ë)% ˘;7
  1345. *a÷ÇD˚” ÇM¢>R⁄˝µL#©    MØÛ§¡…K:ÛTΔ°…î∑~⁄¶“DÉì◊Ì™`˘;7âÙNõsN§íÑÈ#I)åë)"HIIE…¢Dëíàç≠"$ÑAíác$îë$"T¢“âI@˘Ù@ı ˆÑÏÙ@ı ˆÑÏ ÒÈÑÏ¡¡˛@Ä `0Ä@¿Ÿ§@˝íê$$@@Ÿ§èˆ^ãa”ííë\ÁTrg
  1346. Á»®⁄%òH§ï¢®é„©T•†ùHït⁄H∑â)%!·pE!0‚ô.âᪧ⁄l·—Ì™`r@e"X"≠h "I¡¢H⁄HæëICß∫ò¡ë√I∑6Ê éF›⁄ı˙˛@⁄ı˙˛@⁄ı˙˛@⁄¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  1347.  ¿Ã
  1348.  Äbà bîàÄZ GïÖ≥Õ gzîÄ≠]…*’Õ íS8Å)IZròÕ •†GRsD;Õ ;8íåZ<$@Œ  ˛…  ˛…  ˛…¡¡ ‡pÕ  Õ ;Eê! x:≤>KŒ ƒ ®"®êRET§Œ $\pGp$†îNâ$Œ (u¿D@=0∂àΩHŒ »Z8˚∫) ‹áHàŒ˚»˚»¡¡¡‡‡¿#ÄÓ‡Ä÷ê @!D@)÷z¡± ˘6ADùb@)E˝óï∏ÿlìA¿“ïBöAyñ•@I )*@ÿò@¿Ú˜¿Ú˜‚lcE¢B$îπ<íBà§ÆÄRY‚JJ8ÿ'2¬ E5¢&Ç àÈ¿õpt{Tÿï§á»œ&fir$á—‹©Gà“[§R$pÿ ˜˛ “ ˜@“ÙÄ–¡¡  ¬?‡ÄÅÄŒ  B@ÄB@Œ a ÑQe≈`D@Œ bóJ"rÑääŃ@Œ î¶\$ñxìÄ$@Œ ™êF‹ï$ÄŒ >”dñÈ    ÀÕ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜"lbc¡¡÷30Ì÷Ì ¬÷ Ì÷Ì÷ Ì ¬÷Ì ¬÷ Ì÷Ì÷ Ì ¬ Ù`ÂÌ
  1349.  ı@— ÙfwÊ Ì ÙoJÊÌ ÙhJÊ Ì
  1350.  ıgI—÷Ì ¬÷ Ì Ù@ÊÌ ÙÊ Ì  ˆùL‹Œ“ı>SSÌ)ÁÌ  ˆ&SQ-)“ıùN‰…Á Ì ı‰Ì ı‰ Ì ¬÷Ì Ù– Ù Ì˛ˇ¿˙ÂÌ˛ @˙‡Á Ì 'ˇ‡˙ “˛  ˙‡ÁÌ 3˛ ˙ ¿“˛ ˙@( ÄÁ Ì˛ ˙ÄD˜ÊÌ˛ˇ†˚É.Ê Ì  ˝\—˛ ˇ†˝Ç∫ÊÌ  ˝D    q—˛˛ ˛ˇ˝Ä(ÄÁ Ì ˝D¿0–xÁÌê`˝à‡  ‡8Á Ì ∞@˝`8“‡@¸¿8ÁÌ @¿˝ˇÄÄ8‡8“¿Ä˝@ ^8Á Ìˇˇ¸ A¯ÁÌÙÄ8Á Ì ¿ ˘– @˙ÂÌ ÜÓ‡˙
  1351. –˛i©@˙ Ì(©@˙!ÂÌ«Æ ˙! Â Ì ˛˘!@–˝˘ÄÂÌò@@Ę@Ębl¢c ıœ÷ Ì÷Ì÷ Ì  ˜¿ ≈—ˆ B@ÁÌ ˜çÆ‚ÌÄ”ıs)CÂSÁ ̈1)B%SÁ̈œ.#›-Á Ì ıœ
  1352. ى̠¬÷ Ì
  1353. Û?ÂÌ
  1354. Û)Â Ì Ù!–
  1355. Û1ÂÌ Ù#–
  1356. Û! Ì
  1357. Û%ÂÌ
  1358. Û)Â Ì Ù!–
  1359. Û1ÂÌ Ù#–
  1360. Û! Ì
  1361. Û%ÂÌ
  1362. Û)Â Ì Ù!–
  1363. Û1ÂÌ Ù#–
  1364. Û! Ì
  1365. Û%ÂÌ
  1366. Û)Â Ì Ù!–
  1367. Û1ÂÌ     ı„– ÙÅ¿Ê Ì Û≈ÄÊÌ
  1368. Ûk ̠Ù6–
  1369. ÛÂÌ Ù–÷ Ì÷Ì÷ Ì ¬÷Ì
  1370.  ˘ˆˇ÷¯Ä˜Î ̯ĘÎÌ¯Ä˜Î Ì  ˘Ä˜÷¯Ä˜ÎÌ  ˘Ä˜÷¯Ä ˝ ˛Î ̯Ä2˝&`˛Î̯ Ä Õ8‹nvf„9∞Î Ì ˘ Ä!*•2˘%ØóÀ‡÷¯ Ä#*•2â%©î  ÎÌ ˘ Ä ∏“y'ìπ‡÷¯Ä ¸Î ̯Ġ¸pÎ̯ĘΠÌò@Ä¿˜Ä¿˜¢l‚c  ˘Ä˜÷¯Ä˜ÎÌ  ˘Ä˜÷¯Ä˜Î ̯ĘÎ̯ĘΠÌ
  1371.  ˘ˆˇ¯÷¯˜ˇ¯ÎÌ ¬÷ Ì
  1372. Û?ÂÌ
  1373. Û)Â Ì Ù!–
  1374. Û1ÂÌ Ù#–
  1375. Û! Ì
  1376. Û%ÂÌ
  1377. Û)Â Ì Ù!–
  1378. Û1ÂÌ Ù#–
  1379. Û! Ì
  1380. Û%ÂÌ
  1381. Û)Â Ì Ù!–
  1382. Û1ÂÌ Ù#–
  1383. Û! Ì
  1384. Û%ÂÌ
  1385. Û)Â Ì Ù!–
  1386. Û1ÂÌ Ù#– Ù·¿Ê Ì Ûƒ¿ÊÌÛiÄÙ˝0Ä˚ Ì Ù3Û˝ ÂÛÛ m-Üw33õé¸Ì Ù Û¯øL¥˘¶XÁ‰à—    L¥I¶F¸ ̉xèw3∏ö\¸Ì¯˜ˇ¯ıD¯ Ì ˘@˜ ıD„¯@˜ ÎÌ  ˘@˜ ÷¯@˜ Π̯@˜ Î̯@˜ Î Ì  ˘@˜ ÷¯@˜ ÎÌ  ˘@˜ ÷¯@˜ Π̯@˜ Î̯@˜ Î Ì  ˘@˜ ÷¯@˜ ˜8ˆÌ ˘@˜ ˝ˇˇÄD˚‡È¯@˜ ˝ÄÇ˚`˛ ̯@˜ ˝ÄÅ˚Ä˛Ì ¯@˜ ˝    ˇ¸Äáü‡˛¿ Ì ˘@˜ ˝    (ÑÄO‡˛ Í ¯@˜ ˝    ˇ¸Ä/f˛Ì ˘@˜ ˝    (ÑÄÄ »Í ¯@˜ ˝    ˇ¸Ä @B§ Ìò@¿˜¿˜‚l"c$¯@Ä˚ ˝    0Ä   D    RÌ$¯@Ä˚ ˝    ¿Ä@ê à¢ Ì& ˘ @7sπ√6ég3∏ ˝    Ç` ÑHA RÍ'¯ @ÕI¶DÕIî˙P ˝    ê@à§A@"Ì& ˘ @≈I¶DMIî¬P ˝
  1387. A!DB@$Í'¯ @=p•√µNd∫H ˝ ‰Ç`§B Ä Ì'¯@@@˛ ˝!RÇ –DD Ä˛Ì&¯@@IJ ˝"©Ñ àH$!˝ Ì ˘@˜ ˝D —ÑAD8$AÈ ¯@˜ ˝ Ñ©àA¢˛A?˛Ì ˘@˜ ˝ à<ëHCQ˛ G„È ¯@˜ ˝! íHÇ®ÄO„| Ì ¯@˜ ˝!@é ÇT@¯„¸Ì ¯@˜ ˝"ÄÇ* ¯„å Ì ˘@˜ ˝IJ    Ç=„åÍ ¯@˜ ˝ Ä˛ Ç
  1388. ò:˜åÌ ˘@˜ ˝ Ä˛    Ad=΋͠¯@˜ ˝ Ä˛ A‰:˜¨ ̯@˜ ˝ Ä˝ ¿ÅÑ}΋̯@˜ ˝ Ä˝ @@å∫˜¨ Ì ˘@˜ ¸ê@˝ Ä|}΋ͯ@˜ ¸P@˝˝∫˜¨Ì ˘@˜ ¸1¿˝˝}΋ͯ@˜ ¸˜Ôæ¯ Ì¯@˜ Î̯@˜ Î Ì  ˘@˜ ÷¯@˜ ÎÌ  ˘˜ˇ¸÷¯?˜ˇ¸Î Ì÷Ì÷ Ì ¬ÛĈ`¸‡¸p˛Ì Ù¿ˆ˝∞¸ÿÈÛ `˜ò˝˝å˛ ÌÛ0˜ ˝ ˝˛ÌÛ0˜˝ ˝˛ Ì Ù88˜˝˝ÈÛ ˜˝˝˛Ì Ù ˜˝˝ÈÛ ˜˝˝˛ ÌÛ¸ ˜à˝?˝Ñ˛ÌÛÑ ˜à˝!˝Ñ˛ Ì ÙÑ ˜à˝!˝ÑÈÛÑ ˜à˝!˝Ñ˛Ì ÙÑ ˜à˝!˝ÑÈÛÑ ˜à˝!˝Ñ˛ ÌÛÑ ˜à˝!˝Ñ˛ÌÛÑ ˜à˝!˝Ñ˛ Ì ÙÑ ˜à˝!˝ÑÈÛÑ ˜à˝!˝Ñ˛Ì ÙÑ ˜à˝!˝ÑÈÛÑ ˜à˝!˝Ñ˛ ÌÛÑ ˜à˝!˝Ñ˛ÌÛÑ ˜à˝!˝Ñ˛ Ì ÙÑ ˜à˝!˝ÑÈÛÑ ˜à˝!˝Ñ˛Ì ÙÑ ˜à˝!˝ÑÈÛÑ ˜à˝!˝Ñ˛ ÌÛÑ ˜à˝!˝Ñ˛ÌÛÑ ˜à˝!˝Ñ˛ Ì ÙÑ ˜à˝!˝ÑÈÛÑ ˜à˝!˝Ñ˛Ìò@@˜@˜"lbc ÙÑ ˜à˝!˝ÑÈÛÑ ˜à˝!˝Ñ˛ ÌÛÑ Ä˚à˝!˝Ñ˛Ì!ÛÑ @˛à˝!˝Ñ˛ Ì ÙÑ \ÈÉK;à˝!˝ÑÈ!ÛÑ “õ«Ø•¿à˝!˝Ñ˛Ì ÙÑ 2ö4%0à˝!˝ÑÈ!ÛÑ <È√£§‡à˝!˝Ñ˛ ÌÛÑ Ä˚à˝!˝Ñ˛ÌÛÑ Ä˚à˝!˝Ñ˛ Ì ÙÑ ˜à˝!˝ÑÈÛÑ ˜à˝!˝Ñ˛Ì ÙÑ ˜à˝!˝ÑÈÛÑ ˜à˝!˝Ñ˛ ÌÛÑ ˜à˝!˝Ñ˛ÌÛÑ ˜à˝!˝Ñ˛ Ì ÙÑ ˜à˝!˝ÑÈÛÑ ˜à˝!˝Ñ˛Ì ÙÑ ˜à˝!˝ÑÈÛÑ ˜à˝!˝Ñ˛ ÌÛÑ ˜à˝!˝Ñ˛ÌÛÑ ˜à˝!˝Ñ˛ Ì ÙÑ ˜à˝!˝ÑÈÛÑ ˜à˝!˝Ñ˛Ì ÙÑ ˜à˝!˝ÑÈÛÑ ˜à˝!˝Ñ˛ ÌÛÑ ˜à˝!˝Ñ˛ÌÛÑ ˜à˝!˝Ñ˛ Ì ÙÑ ˜à˝!˝ÑÈÛÑ ˜à˝!˝Ñ˛Ì ÙÑ ˜à˝!˝ÑÈÛÑ ˜à˝!˝Ñ˛ ÌÛÑ ˜à˝!˝Ñ˛ÌÛÑ ˜à˝!˝Ñ˛ Ì ÙÑ ˜à˝!˝ÑÈÛÑ ˜à˝!˝Ñ˛Ì ÙÑ ˜à˝!˝ÑÈÛÑ ˜à˝!˝Ñ˛ ÌÛÑ ˜à˝!˝Ñ˛ÌÛÑ ˜¯˝!¯˝¸˛ Ì ÙᇘÄ˝!¸ÄÈÛшÄ˝!¸IJÌ ÙшÄ˝!¸ÄÈÛшÄ˝!¸IJ ÌÙш‡˝·‡˝p˛ÌÙĘ``˝¿¿˝``˛ Ì ıɈ0¿˝aÄ˝0¿ÈÛΔˆÄ˝3¸IJÌ Ùlˆ¸¸ËÛ8ˆ¸ ¸˝ Ì
  1389. ÛÂÌ÷ Ì ¬÷Ì ¬÷ Ì
  1390. ¯·ˇÌ ¯Ä‚ Ì  ˘Ä‚Î ¯Ä‚Ì  ˘Ä‚Î ¯Ä‚ Ì ¯Ä‚Ì ¯Ä‚ Ìò@@Ę@Ębl¢c ˘Ä˜@<ÛίĘ
  1391. @ 0ÛÌ ˘Ä˜    
  1392. ÓX"[ª3s∞ˆÎ¯Ä˜    ô|=~R◊œß‡ˆ ̯Ę    ô`!¢R‘ö ˆÌ¯Ä˜    Ó\=JìÀù‡ˆ Ì ˘Äˆà˚ıίĈà˚8ıÌ  ˘Ä‚Î ¯Ä‚ Ì ¯Ä‚Ì ¯Ä‚ Ì  ˘Ä‚Î ¯Ä‚Ì
  1393.  ˘·ˇ¯Î ¯‚ˇ¯ Ì÷Ì÷ Ì ¬÷Ì ¬÷ Ì÷Ì÷ Ì ¬÷Ì÷30Ì ÷ÃÌ¡¡¡¡¡¡¡¡¡¡¡¡
  1394. Ò« 0»
  1395. àÇ    H»
  1396. òÇH»
  1397. Çp»
  1398. #t—ê»
  1399. !fê»
  1400. qò `»¡¡¡¡¡¯∏˛ ˚˛flê˝˙˝fl"âËŸuÌ+≠ºk(õ-∏M#GìÖÌ+ć! Y"Ñ‚ï
  1401. !Qu&»*µuMVêßU…,
  1402. !Qufl!K'‰$©&D»D•&I‰°ƒËZsí&fl!éD%*„Ki∞]HJìâ±ãs@û„Kfl!ãCér49"2Ip"J1y ˚tZ?9"2fl@¯@à@˜@fl@¯@à@˜@flį@p@˜@fl¡¡ò@Ä¿˜Ä¿˜¢l‚c8éC@@¿ÄËê˝Ä‡@ć@:H˝@į6Dä@ÄÄ@Ä1¸@@Ä@@@Ä˝˜;7ƒıgG!L+[‚uÄÌ ÀJHÀ—l@-mdlåπ&¿[ÎC¢˘« [„eRíeË∂ ^≤;F^ã`˘;7•U    ®JQTUMEÜÅ4ïΩITí¥@V¶¨¥ïQS@çD•eQ+BPçEäÔR™IZ )´VMJ§ï†˘;7©    'í·dòââtÅ%9%)í%$§@•"bí@âÖ)."JDêâéíJeíR I*R…ë)% ˘;7
  1403. *a÷ÇD˚” ÇM¢>R⁄˝µL#©    MØÛ§¡…K:ÛTΔ°…î∑~⁄¶“DÉì◊Ì™`˘;7âÙNõsN§íÑÈ#I)åë)"HIIE…¢Dëíàç≠"$ÑAíác$îë$"T¢“âI@˘Ù@ı ˆÑÏÙ@ı ˆÑÏ ÒÈÑÏ¡¡˛@Ä `0Ä@¿Ÿ§@˝íê$$@@Ÿ§èˆ^ãa”ííë\ÁTrg
  1404. Á»®⁄%òH§ï¢®é„©T•†ùHït⁄H∑â)%!·pE!0‚ô.âᪧ⁄l·—Ì™`r@e"X"≠h "I¡¢H⁄HæëICß∫ò¡ë√I∑6Ê éF›⁄ı˙˛@⁄ı˙˛@⁄ı˙˛@⁄¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  1405.  ¿Ã
  1406.  Äbà bîàÄZ GïÖ≥Õ gzîÄ≠]…*’Õ íS8Å)IZròÕ •†GRsD;Õ ;8íåZ<$@Œ  ˛…  ˛…  ˛…¡¡ ‡pÕ  Õ ;Eê! x:≤>KŒ ƒ ®"®êRET§Œ $\pGp$†îNâ$Œ (u¿D@=0∂àΩHŒ »Z8˚∫) ‹áHàŒ˚»˚»¡¡¡‡‡¿#ÄÓ‡Ä÷ê @!D@)÷z¡± ˘6ADùb@)E˝óï∏ÿlìA¿“ïBöAyñ•@I )*@ÿò@¿Ú˜¿Ú˜‚lcE¢B$îπ<íBà§ÆÄRY‚JJ8ÿ'2¬ E5¢&Ç àÈ¿õpt{Tÿï§á»œ&fir$á—‹©Gà“[§R$pÿ ˜˛ “ ˜@“ÙÄ–¡¡  ¬?‡ÄÅÄŒ  B@ÄB@Œ a ÑQe≈`D@Œ bóJ"rÑääŃ@Œ î¶\$ñxìÄ$@Œ ™êF‹ï$ÄŒ >”dñÈ    ÀÕ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜lTc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘTlîc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜îl‘c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜‘lc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜lTc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘTlîc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜îl‘c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜‘lc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜lTc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘTlîc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜îl‘c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜‘lc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜lTc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘTlîc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜îl‘c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜‘lc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ˇCh@ˇ ˇˇˇˇ@
  1407. ˇ·ˇ‚7^
  1408. 4H\, Palatino&e.3+ä"CHAPTER à)>1,     Helvetica    ˇˇ—ÚˇÆ(@ä.Introduction to Interapplication Communication4⁄ä˙(‡ä Supporting P).)AppleScript and Other Scripting Languages
  1409. , (‡1-15
  1410. ˇˇˇˇˇˇˇˇ4^4|lòÄ2^A|rMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""^A|r^A|r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  1411. ^6|@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""^6|@^6|@˜˜˜˜˜˜˜˜˜˜˜˜˜˙ˇˇ˙ˇ˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜
  1412. 4Å4w?òÄ
  1413. Å6w@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""Å6w@Å6w@$˜˙ˇ˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˛¸ˇˇ
  1414. ˇ˛ˇ˛¸ˇ˛¸ˇ˝˚ˇ˛˛˛ˇ˝
  1415. ˇ˛ˇ˛
  1416. ˇ˛ˇ˛˛˛ˇ˝˜˛˛ˇ˝
  1417. ˇ˛ˇ˛
  1418. ˇ˛ˇ˛˙ˇ˜˛˝ˇ˛ˇ˙˛ˇ˚¸ˇ˛˜˛˛ˇ˝
  1419. ˇ˛ˇ˛
  1420. ˇ˛ˇ˛˛ˇˇ˝˜˛¸ˇˇ
  1421. ˇ˛ˇ˛    ¸ˇˇ˜˛˛ˇ˝
  1422. ˇ˛ˇ˛
  1423. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˜˛¸ˇˇ
  1424. ˇ˛ˇ˛˛˛ˇ˝
  1425. ˇ˛ˇ˛
  1426. ˇ˛ˇ˛˛˛ˇ˝˜˜˜˜˜˙ˇ¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˛¸ˇˇ
  1427. ˇ˛ˇ˛˜˛˛ˇ˝
  1428. ˇˇˇ˛
  1429. ˇˇˇ˛    ˇˇˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˛ˇˇ˝
  1430. ˇˇˇ˛
  1431. ˇˇˇ˛˛˛ˇ˝ˇ˙˙ˇ˛
  1432. ˇ˛ˇ˛
  1433. ˇ˛ˇ˛˛˛ˇ˝˜˙ˇ˛
  1434. ˇ˛ˇ˛
  1435. ˇ˛ˇ˛˛˛ˇ˝˜˙ˇ˜    ¸ˇˇ˜˛˛ˇ˝
  1436. ˇ˛ˇ˛
  1437. ˇ˛ˇ˛˛ˇˇ˝˛ˇˇ˝
  1438. ˇˇˇ˛
  1439. ˇˇˇ˛˛˛ˇ˝ˇ˙˛¸ˇˇ
  1440. ˇ˛ˇ˛˜    ¸ˇˇ˜˛˛ˇ˝
  1441. ˇ˛ˇ˛
  1442. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˝˛ˇ˛
  1443. ˛ˇ˛ˇˇ    ˇ¸ˇ    ˇ¸ˇ
  1444. ˛ˇ˛ˇˇ˜˜˛˛ˇ˝
  1445. ˇ˛ˇ˛
  1446. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛˚ˇ˛˝ˇ˝˚ˇ˛˚ˇ˛˝ˇ˝˜¸ˇ˛˚ˇ˛˝ˇ˝˚ˇ˛˚ˇ˛˝ˇ˝˜˜˛˝ˇ˛ˇ˙˛ˇ˚¸ˇ˛˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜    ¸ˇˇ˜˛˛ˇ˝
  1447. ˇ˛ˇ˛
  1448. ˇ˛ˇ˛˛ˇˇ˝˛ˇˇ˝
  1449. ˇˇˇ˛
  1450. ˇˇˇ˛˛˛ˇ˝ˇ˙˛¸ˇˇ
  1451. ˇ˛ˇ˛˜    ¸ˇˇ˜˛˛ˇ˝
  1452. ˇ˛ˇ˛
  1453. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\äh¡(eä Like sound rH†°dONLNd \¬h⁄)8esourꇰdONLNd\⁄h;)ces, scripts can be storfi@°dONLNd)\;h )a/ed in applications and documents as well as in °dONLNdXiäuŒ(rädistinct script fiI`°dONLNdjiœuR)Eles that can be manipulated fra`°dONLNdàiRuê)Éom the Finderο°dONLNdïièu”)=. Script Editor aÖ†°dONLNd¶i‘u)Ellows users to °dONLNdµväÇfi(äexecute scripts storLJ°dONLNd…vfiLj)Ted in "°dONLNdœv˜Ç)script fiE`°dONLNdÿvÇ!)"leô@°dONLNd⁄v!Ç%)s    Ä°dONLNd€v&Ç().âÄ°dONLNd‹v(Ç6) Us¿°dONLNdflv7Ç“)%ers can also execute special script fiF°dONLNdv“Ç˝)õ les called °dONLNdÉäè”(åäscript applicatio°dONLNd!É‘èfi)Jnsö°dONLNd#Éfiè‰)
  1454.  sW°dONLNd%ÉÂè)imply bdONLNd,ÉèV)"y opening them fr…Ä°dONLNd=ÉVèj)Oom t’`°dONLNdAÉjèî)    he FinderS‡°dONLNdJÉîèô)*. °dONLNdMïä°(ûäWDuring script execution, scripting components perform actions described in the script, °dONLNd§¢äƵ*
  1455. using the å°dONLNdÆ¢µÆ;)+Apple Event Manager to send  °dONLNd ¢<Æø)áApple events when necessary °dONLNd¢æÆÙ)Ç. The server °dONLNdÚØäªÌ(∏äapplications shown in Y‡°dONLNdØÓª)dFigur,†°dONLNdت)e 1-7  °dONLNdت>)     use the ÷‡°dONLNdØ>ª)$,Apple Event Manager to examine the contents °dONLNdGºä»•(≈äof the »`°dONLNdNº•»˚)Apple events they rņ°dONLNdaº¸»-)W eceive and  Ä°dONLNdlº-»8)1to `°dONLNdoº9»<) r«`°dONLNdpº<»s) espond appr|°dONLNd{ºt»õ)8    opriately6`°dONLNdѺõ»†)'. ÿ°dONLNdܺü»¶)A†°dONLNdáºß»˚) server application °dONLNdõ…ä’Ø(“äalways r–Ä°dONLNd£…Ø’ )%esponds to the same ä`°dONLNd∑… ’ã)\Apple event in the same way@°dONLNd“…ã’ì)Ä, r÷@°dONLNd’…ì’¶)egarÙ°dONLNdŸ…¶’)dless of whether the °dONLNdÓ÷ä‚N(flä-event is sent by a scripting component or dirJ¿°dONLNd÷O‚Ã)≈ectly by a client application. °dONLNd;ËäÙê(ÒäY@Ä°dONLNd<ËêÙ&) ou can take advantage of the OSA≈`°dONLNd\Ë%Ù?)ï in thrW‡°dONLNdcË@Ùe)ee ways:,Zapf Dingbats°dONLNdl˛äè(än
  1456. °dONLNdn˚ñú) Y@Ä°dONLNdo˚ú·)ou can make yo∞ °dONLNd}˚·)Eur applicatio`°dONLNdä˚")9n `¿°dONLNdå˚"Q) scriptable,ÿ°dONLNdó˚Qí)/ or capable of rzÄ°dONLNdß˚ìœ)Besponding to à@°dONLNd¥˚œ )<Apple events °dONLNd¡ñ+(ñ"sent to it by a scripting componenG °dONLNd„,4)ñt. + °dONLNdÊ4æ)"An application is scriptable if it°dONLNd    ñ!õ(ñn
  1457. °dONLNd ¢") Responds to the appr¥‡°dONLNd"C)^opriate standar≈°dONLNd.C"K)Cd `°dONLNd0L"Ç)     Apple eventM °dONLNd;Ç"ü)6s. See tÄ°dONLNdC†"∑)he pr†°dONLNdH∑"˙)evious section, °dONLNdX"¢.$(+¢“Sending and Responding to h@°dONLNds"$.g)ÇApple Events.”°dONLNdÇ3ñ<õ(:ñn
  1458. .°dONLNdÑ1¢=¨) PrR`°dONLNdÜ1¨=Ÿ)
  1459.  
  1460. ovides an Ù°dONLNdê1ÿ={),#Apple event terminology extension (,
  1461. CourierÙ°dONLNd≥1{=Å)£'Ù°dONLNd¥1Å=ô)aeteÙ°dONLNd∏1ô=ü)'Ù°dONLNdπ1ü=©)) rΔ`°dONLNdº1©=¿)
  1462. esourò¿°dONLNd¡1¿=)ce that describes .°dONLNd”=¢Iø(F¢which Ù°dONLNdŸ=øIß)3Apple events your application supports and the corr»¿°dONLNd =ßIÿ)Ë
  1463. esponding .°dONLNdI¢Uä(R¢3human-language terminology for use in scripts. The °dONLNdIIäUê)Ë'°dONLNdJIêU®)aete°dONLNdNI®UÆ)'°dONLNdOIÆU¥) rR`°dONLNdQI¥UÀ)esour$¿°dONLNdVIÀU˜)
  1464. ce allows .°dONLNd`U¢a.(^¢scripting components to interprj °dONLNdU.ai)ået scripts corr@°dONLNdéUja—)<ectly and send the appròÄ°dONLNd•U—aÚ)gopriate ¿°dONLNd≠UÛa)"Apple °dONLNd≥a¢mÉ(j¢4events to your application during script execution. °dONLNdËpñ|˝(yñBy executing scripts, us7@°dONLNdp˛|à)h!ers of scriptable applications cad`°dONLNd!pà|ñ)än p∑‡°dONLNd$pñ|)erform almost any task that °dONLNd@|ñà£(Öñthe]`°dONLNdC|§àˇ)y would otherwise p—‡°dONLNdV|ˇà)[erforJ °dONLNd[|à%)m b%¿°dONLNd^|&à˚)-y choosing menu commands, typing, and so on. °dONLNdãàñî˘(ëñPUsers can also execute scripts to perform many tasks that might otherwise be dife¿°dONLNd€à˘îˇ(ë˘firÄ°dONLNd›àˇî)cult °dONLNd‚îñ†
  1465. (ùñto accomplish, especially rì°dONLNd˝î
  1466. †Î)t5epetitive or conditional tasks that involve multiple °dONLNd2†ñ¨Œ(©ñapplications.°dONLNd@µäºè(ªän
  1467. °dONLNdB≤ñæú) Y@Ä°dONLNdC≤úæ")ou can make your application `¿°dONLNd`≤"æR)Ü
  1468. recordable≤¿°dONLNdj≤Ræ\)0—≤¿°dONLNdk≤\æ—)
  1469. that is, capable of sending Ň°dONLNdá≤—æ)uApple events °dONLNdîæñ »(«ñto itself in r§@°dONLNd¢æ» )2Desponse to user actions such as choosing a menu command or changing °dONLNdÊ ñ÷(”ñthe contents of a document. ñ@°dONLNd ÷å)|After a user has turned on rΩÄ°dONLNd å÷û)zecor1‡°dONLNd" ü÷˙)ding for a particular °dONLNd8÷ñ‚h(flñ.scripting component, the scripting component r‡°dONLNdf÷i‚ˆ)”!eceives copies of all subsequent °dONLNdá‚ñÓ±(ÎñApple˝Ä°dONLNd傱Ó≥) }Ä°dONLNdç‚¥ÓÍ) events and rπ‡°dONLNdô‚ÍÓ¸)6ecor.@°dONLNdù‚˝Óá)!ds them in the form of a script. °dONLNdø˜ä˛è(˝än
  1470. °dONLNd¡Ùñú) Y@Ä°dONLNd¬Ùúı)Nou can have your application manipulate and execute scripts with the aid of a °dONLNd    ñ ¸(    ñscripting component. T+Ä°dONLNd    &¸ Ç)fo do so, your application must°dONLNd    Eñõ(ñn
  1471. °dONLNd    G¢¨) usƒ °dONLNd    I¨æ)
  1472. :e the Component Manager to open a connection with the appr|@°dONLNd    Éø(øopriate componen¯†°dONLNd    ì)Pt°dONLNd    ï ñ)õ('ñn
  1473. °dONLNd    ó¢*¨) usƒ °dONLNd    ô¨*Â)
  1474. e the standarú†°dONLNd    ¶Â*O)9d scripting component rÛ °dONLNd    ΩO*Å)j outines to rÔ`°dONLNd    …Å*ì)2ecorc¿°dONLNd    Õî*)d, edit, compile, save, load, °dONLNd    Î*¢61(3¢ or execute scripts when necessar6°dONLNd
  1475. *267)êy°dONLNd
  1476. 9ñE«(BñFUsers of applications that execute scripts can modify the applicationsù`°dONLNd
  1477. S9«E…(B«’d†°dONLNd
  1478. T9 E) behavior by °dONLNd
  1479. aEñQÁ(Nñediting the scripts.@ °dONLNd
  1480. uEËQà)R% For example, a user of an invoice prã¿°dONLNd
  1481. öEàQ)†ogram might be able to write a °dONLNd
  1482. πQñ]Ò(ZñOscript that checks and if necessary updates customer information in a separate °dONLNd ]ñiè* 9database application each time the user posts an invoice.°dONLNd BnäzÍ(wäThe sections that folloG°dONLNd YnÎz )a w describe tü@°dONLNd en zC)5hese thrô†°dONLNd mnCz–)#"ee kinds of scripting capabilitiesí°dONLNd èn—z)é in morZ@°dONLNd ñnÒz¯) e °dONLNd ò{äáÙ(Ñädetail. The chapter “Intr≠‡°dONLNd ±{Ùáô)j&oduction to Scripting” in this book pr¥ °dONLNd ◊{ôá)•ovides an overview of the °dONLNd Òàäî(ëäQway scripting components work and how you can implement support for scripting in °dONLNd Bïä°’*your application.ˇ%@ˇ ˇˇˇˇ@
  1483. ˇ·ˇ‚7^
  1484. 4*\¯, Palatino&e.3+l"CHAPTER à)>1,     Helvetica    ˇˇ—ÚˇÆ(@l.Introduction to Interapplication Communication4⁄*˙¯
  1485. (‡*1-16    )B Supporting P).)AppleScript and Other Scripting Languages4^*¿¯
  1486. k*r¯4l*r¯ mlm¯
  1487. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd\lk¨(gl Scriptable O˙°dONLNd \¨kı)@ Applicationsˇˇˇˇˇˇ€r(g1
  1488. °dONLNdrl~÷({lIf your application can rÓ@°dONLNd2r÷~%)jespond to standarC°dONLNdCr&~.)Pd Ä`°dONLNdEr.~Í),Apple events sent by other applications, it °dONLNdqlãï(àl
  1489. can also r!Ä°dONLNd{ñãÌ)*espond to the same û`°dONLNdéÌãÀ)W1Apple events sent by a scripting component. Befor@¿°dONLNdøÃã”)fle °dONLNd¡ålòÊ(ïlexecuting a script that contr‡°dONLNdfiåÁòÏ){;ols your application, a scripting component must associate °dONLNdôl•g(¢l7the human-language terms used in the script with specifi6 °dONLNdQôh•n)¸c »°dONLNdSôn•Ú)Apple event codes supported °dONLNdo¶l≤8(Øl/by your application. Scriptable applications pr °dONLNdû¶9≤Æ)Õovide this information in a߇°dONLNdπ¶Æ≤∂)un ö‡°dONLNdª¶∂≤Ó) Apple event .°dONLNd«≥lø’(ºlterminology extension (,
  1490. Courier°dONLNdfi≥’ø€)i'°dONLNdfl≥€øÛ)aete°dONLNd„≥Ûø˘)'°dONLNd‰≥˘ø)) rR`°dONLNdÁ≥ø)
  1491. esour$¿°dONLNdÏ≥ø&)ce.$¿°dONLNdÔ≥&ø()  $¿°dONLNd≥(ø*) $¿°dONLNdÒ≥*ø,) °dONLNdÛ≈l—a(Œl6Because scripting components can obtain information frR`°dONLNd)≈a—p)ıom R`°dONLNd,≈p—v)'R`°dONLNd-≈v—é)aeteR`°dONLNd1≈é—î)'R`°dONLNd2≈î—ö) r$¿°dONLNd4≈ö—±)esour˜ °dONLNd9≈∞—Ï)ces about the .°dONLNdG“lfiÑ(€lnatur_‡°dONLNdL“Ñfi¢)e of dif@°dONLNdT“£fiØ)ferˇ¿°dONLNdW“Æfi˝) ent applications’ s’@°dONLNdj“˛fi.)P upport for Ë¿°dONLNdu“.fid)0 Apple event3Ä°dONLNdÄ“efiy)7s, a s-Ä°dONLNdÜ“zfiÊ)ingle script can describe °dONLNd†fllÎG(Ël/complex tasks performed cooperatively by severa¡`°dONLNdœflGÎÑ)€l specialized a¡@°dONLNdfiflÖα)>
  1492. pplicationx °dONLNdËfl≤ο)-s. FD@°dONLNdÏfl¡Î˜) or example, °dONLNd¯Ïl¯À(ıla user can execute an Ù@°dONLNdÏÀ¯)_AppleScript scripK†°dONLNdϯ")Nt tP`°dONLNd"Ï"¯W)    o locate all rµ¿°dONLNd0ÏW¯i)5ecor* °dONLNd4Ïj¯Ê)ds in a database with specifij@°dONLNdQÏʯÏ)|c °dONLNdS˘ld(l;characteristics, update a series of charts based on those r¸Ä°dONLNdé˘dv)¯ecorp‡°dONLNdí˘w)ds, import the charts into a °dONLNdØlV(l2page-layout document, and send the document to a rî`°dONLNd·Vˆ)Í"emote computer on the network via °dONLNdlÑ(lelectrs@°dONLNd    Ñ±) onic mail. °dONLNd%l1(.l(When a user executes such a script, the ∫Ä°dONLNd=%1Ò)Æ.AppleScript component attempts to perform the °dONLNdk2l>9(;l0actions the script describes, including sending !@°dONLNdõ2:>fi)Œ%Apple events to various applications °dONLNd¿?lK≤(Hlwhen necessaryx@°dONLNdŒ?±Kº)E. TÆ°dONLNd—?ªKã)
  1493. ,o map human-language terms used in the scripN¿°dONLNd˝?åK†)—t to tã`°dONLNd?†Kæ)he corrC¿°dONLNd
  1494. ?øK)
  1495. esponding °dONLNdLlXD(Ul0Apple events supported by each application, the ∑‡°dONLNdDLDXÈ)ÿ#AppleScript component looks up the ˇˇÚD.°dONLNdgYle‚(blterms in the applications’ ˇˇ÷ÃI°dONLNdÇY„eÈ)w'I°dONLNdÉYÈe)aeteI°dONLNdáYe)'ˇˇÚDI°dONLNdàYe ) r¥°dONLNdäYe$)esour‡°dONLNdèY#e–)$ces. Each human-language term specifi©$°dONLNd¥Y—e˜)Æ    ed by an °dONLNdΩflr´(olapplication’s °dONLNdÀf´r±)?'°dONLNdÃf±r…)aete°dONLNd–f…rœ)'°dONLNd—fœr’) rR`°dONLNd”f’rÏ)esour$¿°dONLNdÿfÏr#)ce has a corr˜ °dONLNdÂf"rQ)6
  1496. esponding ò¿°dONLNdÔfQr§)/Apple event code. :`°dONLNdf§r—)S
  1497. After the .°dONLNd sl    (|l!AppleScript component has identifi °dONLNd-s
  1498. ')ûed the vÄ°dONLNd4s'‡)*Apple event codes for the terms used in a °dONLNd^Älå¨(âlscript, it can crÓ`°dONLNdoĨå˚)@eate and send the #‡°dONLNdÅĸåfi)P3Apple events that perform the actions described in °dONLNd¥çlôy(ñlthe]`°dONLNd∑çzô|) ›`°dONLNd∏ç|ôó)script.°dONLNd¿ül´r(®lTµ¿°dONLNd¡üq´|)o rp@°dONLNdƒü}´¥) espond appr$‡°dONLNdœüµ´˙)8opriately to the ±‡°dONLNd‡ü˙´})EApple events sent to it by the Ã`°dONLNdˇü}´Î)ÉAppleScript component, °dONLNd¨l∏Ö(µlAthe database application in this example must be able to locate r*@°dONLNdW¨Ü∏ò(µÜecorû†°dONLNd[¨ò∏ÿ)ds with specifi∏†°dONLNdj¨ÿ∏fi)@c °dONLNdlπl≈$(¬l-characteristics so that it can identify and rtÄ°dONLNdôπ$≈R)∏ eturn the rÓ°dONLNd§πR≈ä). equested datd`°dONLNd∞πã≈†)9a. ThVÄ°dONLNdµπ°≈¬)e other °dONLNdΩΔl“ (œl#applications involved must support ¨`°dONLNd‡Δ “œ)†,Apple events that perform the other actions °dONLNd ”lfl (‹ldescribed in the scrip¸ °dONLNd"” flœ)^t.°dONLNd%ÂlÒV(Ól7One line in such a script might be a statement like thi¿°dONLNd\ÂWÒ])Îs:.°dONLNd_¸lr(lc°dONLNd`¸rÍ)opy Totals to chart °dONLNdt¸Í)x"°dONLNdu¸P)Summary of Sales°dONLNdÖ¸PV)`"°dONLNdܸV§) of document °dONLNd츧™)N"°dONLNdÏ) Sales Chart°dONLNdü¸ÏÚ)B"°dONLNd°l ·(lIn this statement, the worR`°dONLNdª· È)ud R`°dONLNdΩÈ )TotalsR`°dONLNd√ Ú)$5 is a variable that has been set earlier in the same .°dONLNd¯!l-È(*lWscript to the value of the new data generated by a database application. The statement °dONLNd    O.l:õ* causes the ∫°dONLNd    Z.õ:m)/-AppleScript component to send a Set Data eveni°dONLNd    á.n:y)”t u2Ä°dONLNd    ä.z:ã) pdaP`°dONLNd    ç.ã:¢)ting tû°dONLNd    ì.¢:È)he chart named °dONLNd    ¢;lG (Dl“Summary of Sales.” Ë¿°dONLNd    ∂; G‚)^FigurªÄ°dONLNd    ª;‚Gˆ)e 1-8Y°dONLNd    ¿;˜G>) shows how the ç¿°dONLNd    œ;>GÌ)G$AppleScript component would execute °dONLNd    ÛHlT≤(Qlthis statement. (…¿°dONLNd
  1499. H≤T )FFigurúÄ°dONLNd
  1500.     H Tfi)e 1-6:°dONLNd
  1501. HflTÔ) on ć°dONLNd
  1502. HÔT)page [¿°dONLNd
  1503. HT)1-12؆°dONLNd
  1504. HT+) sho≥Ä°dONLNd
  1505. H+T3)w
  1506. Ä°dONLNd
  1507.  H4T?)    s a«Ä°dONLNd
  1508. #H?TA)  GÄ°dONLNd
  1509. $HBT¬)database application that senò‡°dONLNd
  1510. AH¬T”)Äds aq†°dONLNd
  1511. EH‘T÷) Ò†°dONLNd
  1512. FH÷T˜)similar °dONLNd
  1513. NUlay(^lSetÀ¿°dONLNd
  1514. QUya{) K¿°dONLNd
  1515. RU|a®)    Data even÷@°dONLNd
  1516. [U®a≥),t d¥`°dONLNd
  1517. ^U¥a∫) ira¿°dONLNd
  1518. `Uªa )ectlΔ`°dONLNd
  1519. dU aœ)y9¿°dONLNd
  1520. eUœa—).π¿°dONLNd
  1521. fU—a÷)) °dONLNd
  1522. iglsr(plTµ¿°dONLNd
  1523. jgqsó)    o interpr*¿°dONLNd
  1524. sgòsG)'*et the terms in this script statement corr=Ä°dONLNd
  1525. ùgGs[)ØectlyÄ°dONLNd
  1526. ¢g[sp), the Ä°dONLNd
  1527. ®gpsı)AppleScript component must .°dONLNd
  1528. √tlÄl(}l9be able to look them up in the SurfCharter application’s °dONLNd
  1529. ¸tlÄr(}l'°dONLNd
  1530. ˝trÄä)aete°dONLNd täÄê)'°dONLNd têÄñ) rR`°dONLNd tñÄ≠)esour$¿°dONLNd     t≠Äı)ce, which maps .°dONLNd ÅlçŒ(älthose terms to the corrR °dONLNd /Åœç*)cesponding codes for Ï °dONLNd CÅ*çÌ)[-Apple events, object classes, and so on used °dONLNd pélöâ(ólby the ¿°dONLNd wéäöÎ)Apple Event Manager@°dONLNd äéÎö)a. The ‰†°dONLNd êéöû)!AppleScript component can then cr7`°dONLNd ±éüöÓ)ùeate and send the °dONLNd √õlßÌ(§lSet Data event to SurfCharterz °dONLNd ‡õÌßÔ)Å.ˇ|Í@ˇ ˇˇˇˇ@
  1531. ˇ·ˇ‚7^
  1532. 4H\, Palatino&e.3+ä"CHAPTER à)>1,     Helvetica    ˇˇ—ÚˇÆ(@ä.Introduction to Interapplication Communication4⁄ä˙(‡ä Supporting P).)AppleScript and Other Scripting Languages
  1533. , (‡1-17
  1534. ˇˇˇˇˇˇˇˇ4^4|lòÄ2^A|rMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""^A|r^A|r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  1535. ^6|@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""^6|@^6|@˜˜˜˜˜˜˜˜˜˜˜˜˜˙ˇˇ˙ˇ˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜
  1536. 4Å4w?òÄ
  1537. Å6w@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""Å6w@Å6w@$˜˙ˇ˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˛¸ˇˇ
  1538. ˇ˛ˇ˛¸ˇ˛¸ˇ˝˚ˇ˛˛˛ˇ˝
  1539. ˇ˛ˇ˛
  1540. ˇ˛ˇ˛˛˛ˇ˝˜˛˛ˇ˝
  1541. ˇ˛ˇ˛
  1542. ˇ˛ˇ˛˙ˇ˜˛˝ˇ˛ˇ˙˛ˇ˚¸ˇ˛˜˛˛ˇ˝
  1543. ˇ˛ˇ˛
  1544. ˇ˛ˇ˛˛ˇˇ˝˜˛¸ˇˇ
  1545. ˇ˛ˇ˛    ¸ˇˇ˜˛˛ˇ˝
  1546. ˇ˛ˇ˛
  1547. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˜˛¸ˇˇ
  1548. ˇ˛ˇ˛˛˛ˇ˝
  1549. ˇ˛ˇ˛
  1550. ˇ˛ˇ˛˛˛ˇ˝˜˜˜˜˜˙ˇ¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˛¸ˇˇ
  1551. ˇ˛ˇ˛˜˛˛ˇ˝
  1552. ˇˇˇ˛
  1553. ˇˇˇ˛    ˇˇˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˛ˇˇ˝
  1554. ˇˇˇ˛
  1555. ˇˇˇ˛˛˛ˇ˝ˇ˙˙ˇ˛
  1556. ˇ˛ˇ˛
  1557. ˇ˛ˇ˛˛˛ˇ˝˜˙ˇ˛
  1558. ˇ˛ˇ˛
  1559. ˇ˛ˇ˛˛˛ˇ˝˜˙ˇ˜    ¸ˇˇ˜˛˛ˇ˝
  1560. ˇ˛ˇ˛
  1561. ˇ˛ˇ˛˛ˇˇ˝˛ˇˇ˝
  1562. ˇˇˇ˛
  1563. ˇˇˇ˛˛˛ˇ˝ˇ˙˛¸ˇˇ
  1564. ˇ˛ˇ˛˜    ¸ˇˇ˜˛˛ˇ˝
  1565. ˇ˛ˇ˛
  1566. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˝˛ˇ˛
  1567. ˛ˇ˛ˇˇ    ˇ¸ˇ    ˇ¸ˇ
  1568. ˛ˇ˛ˇˇ˜˜˛˛ˇ˝
  1569. ˇ˛ˇ˛
  1570. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛˚ˇ˛˝ˇ˝˚ˇ˛˚ˇ˛˝ˇ˝˜¸ˇ˛˚ˇ˛˝ˇ˝˚ˇ˛˚ˇ˛˝ˇ˝˜˜˛˝ˇ˛ˇ˙˛ˇ˚¸ˇ˛˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜    ¸ˇˇ˜˛˛ˇ˝
  1571. ˇ˛ˇ˛
  1572. ˇ˛ˇ˛˛ˇˇ˝˛ˇˇ˝
  1573. ˇˇˇ˛
  1574. ˇˇˇ˛˛˛ˇ˝ˇ˙˛¸ˇˇ
  1575. ˇ˛ˇ˛˜    ¸ˇˇ˜˛˛ˇ˝
  1576. ˇ˛ˇ˛
  1577. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\äh≥(eä    When it r‹ °dONLNd    \≥hª))=eceives the Set Data event, the SurfCharter application uses 0‡°dONLNdF\ºhÃ(eºthe /‡°dONLNdJ\Ãh) Apple Event °dONLNdViäu≠(räManage`°dONLNd\iÆu∑)$r t‘`°dONLNd_i∑u))    o determine what kind of ?†°dONLNdxi*u´)sApple event has been sent anp¿°dONLNdîi´uÿ)Å d to pass tLJ°dONLNdüiÿu )- he event to °dONLNd´väÇæ(ä SurfCharter§`°dONLNd∂vøÇ)5P’s handler for that event, which in turn locates the chart and changes its data °dONLNdÉäèô(åäas r°dONLNd
  1578. Éöèƒ)    equested..°dONLNdïä°⁄(ûäThe chapter “IntrR`°dONLNd%ï⁄°»)P6oduction to Scripting” in this book describes how the ,
  1579. CourierR`°dONLNd[ï»°Œ)Ó'R`°dONLNd\Ê)aeteR`°dONLNd`ïÊ°Ï)'R`°dONLNdaïÏ°Ú) r$¿°dONLNdcïÚ°    )esour˜ °dONLNdhï°)ce .°dONLNdk¢äÆ°(´äworkŒ@°dONLNdo¢°Æß)s.ã@°dONLNdq¢®Æ&) The chapter “Apple Event T\°dONLNdå¢&Æz)~erminology Resour‡°dONLNdù¢{ÆΔ)Uces” describes ho«Ä°dONLNdÆ¢ΔÆÌ)Kw to defi»Ä°dONLNd∑¢ÌÆ˙)'ne .°dONLNd∫Øäª(∏äterminology for use by the !†°dONLNd’تñ)wAppleScript component and how !†°dONLNdÛØñª©)ïto crÙ°dONLNd¯Ø®ªÀ)eate an Ù°dONLNdØÀª—)#'Ù°dONLNdØ—ªÈ)aeteÙ°dONLNdØȪÔ)'Ù°dONLNdØÔªÒ) .°dONLNdºä»ç(≈ärE°dONLNdºé»¶)esourç@°dONLNdº¶»±)ce.
  1580. ÍH˚4ÎH˚"ÎH]
  1581. ˇ·ˇ‚7^    °dONLNd‡äÎ¥(Ëä
  1582. Figure 1-8°dONLNd‡ÃΓ)BA0°dONLNd‡“ÎÄ), Set Data event sent during script execution
  1583. ˙HÇ4˘F˙Gò@@ˆ@ˆ˙G:=¡¡?…ˇ˙?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?˝ˇ‡¿“ˇÄ˚?˝ˇ‡ “ˇÄ˚?˝ˇ‡“ˇÄ˚?˝ˇ‡ü“ˇÄ˚?˝ˇ‡ ü“ˇÄ˚?˝ˇ‡@  ü“ˇÄ˚?˝ˇ‡Ä@“ˇÄ˚?˝ˇ·†.“ˇÄ˚?˝ˇ‚‹“ˇÄ˚?˝ˇ‰ ∏“ˇÄ˚?˝ˇË    p“ˇÄ˚?˝ˇ˛Ë“ˇÄ˚?˝ˇÒ%ƒ“ˇÄ˚?˝ˇ†K¬“ˇÄ˚?˝ˇ¿WA—ˇÄ˚?˝ˇËÄ/Ä—ˇÄ˚?˝ˇËP—ˇÄ˚?˝ˇ‰|—ˇÄ˚?˝ˇ‚„Ä—ˇÄ˚?˝ˇ·Åx—ˇÄ˚?˝ˇ‡Ä—ˇÄ˚?˝ˇ‡@—ˇÄ˚?˝ˇ‡ “ˇÄ˚?˝ˇ‡“ˇÄ˚?˝ˇ‡(“ˇÄ˚?˝ˇ‡H “ˇÄ˚?˝ˇ‡Ñ@“ˇÄ˚?˝ˇ‡ÑÄ“ˇÄ˚?˝ˇ‡Ö“ˇÄ˚ò@@Ĉ@Ĉ:Gz=?˝ˇ‡F“ˇÄ˚?˝ˇ‡<“ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚ò@Ä¿ˆÄ¿ˆzG∫=?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?fiˇ¯ÄÒˇÄ˚?fiˇ¯ÄpÒˇÄ˚?fiˇ¯ ÒˇÄ˚?fiˇ¯ÒˇÄ˚?fiˇ¯ áÒˇÄ˚ò@¿ˆ¿ˆ∫G˙=?fiˇ¯@GÒˇÄ˚?fiˇ¯ Ä'ÒˇÄ˚?fiˇ¯AóÒˇÄ˚?fiˇ¯Å%OÒˇÄ˚?fiˇ¯Ç BèÒˇÄ˚?fiˇ˘ ÅOÒˇÄ˚?fiˇ˘AèÒˇÄ˚?fiˇ˘AóÒˇÄ˚?fiˇ˘ÇwÒˇÄ˚?fiˇ˘ÇÒˇÄ˚?fiˇ¯êÑÒˇÄ˚?fiˇ¯ë|ÒˇÄ˚?fiˇ¯A¸ÒˇÄ˚?fiˇ¯1åÒˇÄ˚?fiˇ¯?ç˜ÒˇÄ˚?fiˇ¯„è˜ÒˇÄ˚?fiˇ¯„é7ÒˇÄ˚?fiˇ¯˜é7ÒˇÄ˚?fiˇ¯Îfi7ÒˇÄ˚?fiˇ¯˜ØwÒˇÄ˚?fiˇ¯Îfi∑ÒˇÄ˚?fiˇ¯˜ØwÒˇÄ˚?fiˇ¯
  1584. Îfi∑ÒˇÄ˚?fiˇ¯˜ØwÒˇÄ˚?fiˇ¯
  1585. Îfi∑ÒˇÄ˚?fiˇ¯˜ØwÒˇÄ˚?fiˇ¯æ˚ÁÒˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚ò@@ˆ@ˆ˙G:=?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚ò@@Ĉ@Ĉ:Gz=?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚ò@Ä¿ˆÄ¿ˆzG∫=?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚?…ˇÄ˚…ˇÄ˚¡¡¡¡¡¡¡¡¡¡¡¡
  1586. é8`1Ä»
  1587. DêJ@»
  1588. ƒÄä@»
  1589. §pâ¿»
  1590.     †àÄ»
  1591. #0îÄ»    à|¿c«¡¡¡¡¡!¿0ÄÄÄ¿˛ÄÄÄflÄpHÇ@ÄÄ@¸Äfi"OF»HE≈ •æ∑¡—∑gévï¡4çì`‡"R… pñJ䙑!ZÇ≤E©®∫ÇùW(©†‡"íY8'ê    ºS9<òìñI)    °qI ‡"Ãr  ê    ¶üû!Q<'Öúéfq•Ñ-Ÿ“`‡"úZp`3Üè(9Â÷äNëÌ—q"@‡"Ô ⁄"Ô ⁄Ô ⁄¡¡9 pp0 @Äp˛à à–@8˛$˜5   P ภÄÄ˛Äƒ¸ ˜:6'®;:9
  1592. aZfl¨nVZRF^ãbkk#de…6flZ»∂9fl*îì/E±öıë⁄2Ù[¯:6*®MBR䢙j,4    §®ΩÍJ§ï¢µ5e§™äöj%+*âZÑj,WzïRJ—MZ≤jU$≠¯:6›HI<ó $ƒLK§    )…)Lë)%"•%-)íL)IqR$ÑLtíS(îíëIRñLâI)¯:6QPì¥'fiûP¨mÚñ◊Ì™aHH:mù&ûJY◊ö¶5ûHÙ•ªˆ’0éí$ûømS¯:6O†“t€öu$î'IHÒLdâI@‚JJ.Hï$åîDmi$" î8£$§â q•îJHí¯ı˛Ĉˆ Ïı˛Ĉˆ Ï ÒÄÍ Ï¡¡$Ä0Ä@!Ä√ÿ  ˝ A@Ä$§ÿ$≤Ù[úê É
  1593. Á:£ê–$ƒW8E@⁄    ,¬E$≠•@%H
  1594. •(p„ƒÍ@´†⁄
  1595. EºII) Ä?flâá…p@DL8%› ⁄gèmSí    ¡k@aHñ-@⁄EÙäHí=–Á éMπ∞Ê0dr6ÔÄ⁄ı˙ÄŸı˙ÄŸı˙ÄŸò@¿Úˆ¿Úˆ∫GÏ=¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  1596. ‡pÃ
  1597.  Ã §D÷R<¨-òÕ ;‘§jÓIPF®Õ íôƒ    JJ”êD¿Õ •-:êìö âÿÕ ÿ»·ƒîb—‡…"Õ
  1598. !˝Ä…
  1599. !˝Ä…
  1600. !˝Ä…¡¡ ÄÄ– ÕIJÄ@ Õ     ⁄,ÅÄ[¡’ëÚXŒ &UA@§Çí*• Œ     "„Ç;Å%¢tI Œ CÆ"ÈÖ¥EÍ@Œ B—«›—I‰:D@Œ˚ »˚ »¡¡¡ê@p¸Ä÷Äê    @ HÄ÷£÷ÕéW…≤$ÎJ/Ϻ≠¿ÿ döΔõ*NPëIR◊
  1601. -$•…‰íE%tíœRQ¿ÿ    9ñ)≠i4GHF€É£⁄†@ÿ≠$>Fy6Ûë$>éÂJ<Fí›"ë#Äÿ ˜Ä“ ˜
  1602. Ä“Ù œ¡¡ò@@ˆ@ˆ˙G:=¡¡»3˙…˙  ˙»Ä˚…˙»Ä˚  ˙…˙  ˙»Ä˚…˙ ˚@–Ä˚ ¸3“˙ ˚!MŒ“˙ ¸!_$¡ÄÒ˙˚#Q$Óp˙¸ˇÄÒÄ˚˚O"ˇflÄ˚˛ˇÄÛ˙"Èˇ¸¸?¿˝ˇ˝ˇ˝ˇ˛˛Ä˚' Ïˇ¸˝‡˛‡¸ˇ˛
  1603. ¯?ġ˙ Îˇ˙?¯˙ˇ‡‡˙& ¸ÄÙÄ˙¯˛¯ˇ˛?˛Ä˙˚ÙĢˇÄ˜˘ÄÄ˚¸7:ôπ∏ıį@ÏÄ˙¸|¶ß⁄dıÄ‚ÄÄ˚ ˝L¶¢Zdˆ`Ä‚Ä˙¸?:ù…§ıÄ‚Ä˙ ˝ ÙÄ‚Ä˙¸ ÚÄ‚ÄÄ˚ÌÄÄ‚Ä˙ί‚Ä˚ Ô· ˙ Î0·`˙ ˛`·‡˙˚¿Û@·¿Ä˚˚ ˜@˛¿‚Ä˙˚ÙÄ‚ÄÄ˚ ¸Ä˙ ˛·˙˚ Ä˝ˇ¯˝·˙ ¸@  Ä˝     Ä˛·˙˚Ä@¸ˇÏ˝· Ä˚¸†.¸˝Ä‚˙*¸‹¸ˇƒ˝ Ä¿@¸ÛÄÄ˚0 ˝ ∏¸¸ÄÄ@@8!˘Ä˙0¸    p˛Ù¸ÄÁ@    Áà√»ÛF€z.#~;e˜Ä˙2 ˝Ë˛¸Äàà@íHD\A"H2L"    qàEĘÄ˙0¸ %ƒˇˇ¿¸Äüà@$íHD$I"HäH")ë    }ˆÄÄ˚0¸ †K¬DD@Ù¸Äc?„øÛfi7‹ÏÒ˛y›˚Δ¿˜Ä˙ ¸ ¿WA‡8à࿸ĸÇËÄÄ˚" ˝ Ä/ć`@ˇƒ¸Ä˝«ËÄ˙¸ P‡1@˛ ¸Ä‚Ä˙+ ˝ |‡ˇˇ¿¥¸Ä¯`˛˜`˝Ä˙3¸„ć˛ú¸Ä˚ > @(‡¸
  1604. ÄÄÄÄ˚7¸ Åx‡ÿ¸Ä˛˜=∞*Áà!¿ÛÄ{Ñ€¿)ÔDo`9‡ B8rûÄ˙7˚
  1605. ćò0¸#Ä토   #D@äNa…VÆ1@DÄ‚D¿ÄÄ˚8 ¸@‡˛`¸"Ä토   d ¿L@ÇRA )V≤!@DÄE"|0Ä˙3˚ ˚ˇ¿¸Ä˛˜@·ûˇÄ3Äo¿«÷ØxÄ9‡xˇô‡Ä˙ ¸ÛÄ˝@ÒĢÄ˙#˚(˚8ĽĽ9¿ÚĢÄÄ˚˚H ˚D¸Ä‚Ä˙$˚Ñ@˚1µ‹¸Ä¸0˙ ÙÄÄ˚+ ¸ÑÄ˚e(¸Ä¸@˝    @8y˜Ä˙+˚Ö˙F%(˝Ä˝„˜”ºAp‡âƒo≈˜Ä˙ò@@Ĉ@Ĉ:Gz=+ ¸F˙9ƒ¸Ä˝"@#R¨R@3ÑâÄÅ.1ˆÄ˙)˚<˘˚Ä˝"@'Ø“Håѯ`â2! ˜ÄÄ˚&ڽĽ„œ©ª0Ûfl3¿søx¿˜Ä˙˝Ä‚ÄÄ˚ ÏÄ‚Ä˙ ÎÄ‚Ä˙ 0˛Ä√ËÄ˙ÎÄAËÄÄ˚˝¿ ΔÙÄÔAËÄ˙˝ B@ıÄ¢"AËÄÄ˚" ˛çÆ‚˘Ä˙˛ÄÙ¶æAËÄ˙¸s)CÊeı¯n€˜¿ÈÄ˙ ˛1)B&eıx‚Ä˙˝œ.#fi9ı0‚ÄÄ˚˚ı  ‚Ä˙˚Ú`‚Ä˚ Ï¿· ˙ÓÄ·`˙ ÔÄ·‡˙ χ¿Ä˚˙¸Ù·Ä˙˙åı@·ÄÄ˚ ˚ÑÙÄ‚˙˙îÙÄ‚˙ ˚§ÛÄ‚˙˙ÑıÄ‚ Ä˚˙ƒÛÄ‚˙˙åÛÄ‚ÄÄ˚ ˚ÑÛÄ‚Ä˙˙îÙ¿Ä‚Ä˙ ˚§ÛÄ‚Ä˙˙ÑÛÄ‚ÄÄ˚˙ƒÛÄ‚Ä˙˙åÙÄÚÚÄÄ˚ ˚ÑÛÄÛˇ¿ı¯Ä˙˙îÛÄÙˇflˇÄˆˇˇ·Ä˙% ˚§Ûĸ`˙?¯?ˇ˚p˛¯ˇÄ˙(˙ÑÛÄ˝ˇ˚ˇ˛ˇ¸˝ ˇÄÄÄÄ˚)˙ƒÛIJˇˇ¸‡˛ˇ¯˛fl¸¸˝˙(˙åÛIJˇ¸ˇ˝˛¸
  1606. ˇ‡˛ˇ‡¿¸Ä˚) ˚ÑÛÄ?ˇ¯ˇ¿˚ˇ¿ˇ¸¸˙&˚óÛġ¿˛ˇÄ?¯˘?ˇ?Ä?¿¸˙  ¸#Ûġ˝¯ˇ˜¸˜˙˚ÜÛIJ˚ˇˇ˜‡ˆÄ˚˙ÃÛüˇÄ˚˛Í˙˙xÛˇ‡˘¿ÈÄ˚ ˚0Ûx‡˙…˙  ˙»Ä˚ˆˇ‡◊˙ˆ0÷Ä˚ ˆ0◊˙ˆ0◊˙ ˆ0◊˙ˆ0÷Ä˚ˆ0◊˙ˆ0÷Ä˚ ¿˝!˝0◊˙ ˛3˝0◊˙ —ΔÊw3g1ŸÄ0◊˙    ©)üJ-Ù˙}0÷Ä˚)©)òJ-î a0◊˙Δ©ΔóI)tπ›0÷Ä˚ò@Ä¿ˆÄ¿ˆzG∫= ˚@0◊˙¸Ä0◊˙ ˆ0◊˙ˆ0÷Ä˚ˆ0◊˙ˆ0÷Ä˚ ˆ0◊˙ˆ0◊˙ ˆˇ◊˙ˆˇ÷Ä˚…˙»Ä˚  ˙…˙  ˚¸—˙
  1607. ˙Ñ–Ä˚
  1608. ˙ƒ—˙
  1609. ˙å–Ä˚  ˚Ñ—˙
  1610. ˙î—˙  ˚§—˙
  1611. ˙Ñ–Ä˚
  1612. ˙ƒ—˙
  1613. ˙å–Ä˚  ˚Ñ—˙
  1614. ˙î—˙ ˚§Ù ·˙˙ÑÙ ĉÄ˚˙ƒÙΩÔဪ¿Â˙˙åÙ∑øœˇ˝Ä‰Ä˚ ˚ÑÙ ˜æ v=ÄÂ˙˙îÙ ˝Ô«„˝¿Â˙ ˚§Û1Ä·˙˙ÑÛ1ćÄ˚
  1615. ˙ƒ—˙
  1616. ˙å–Ä˚ ˚ѯıˇ‡Ë˙˚ó¯ı0Ë˙ ¸#¯ı"0Ë˙˚ܯı0ÁÄ˚˙ïı0˚Ô˙˙x¯ıà∞˚"ÓÄ˚! ˚0¯˝<¸0˚ŒYÄÚ˙˝36 ˝0˚È}Ò˙ Ò˝">7ˇ‚˛"0˚#    °Ò˙#ˆˇ‡˛˝˛6˝‡˛0˚ÈÄ˚ˆ0˛˝3Δ7ø`˛0Ë˙ˆ0˛˝àûˇºˇË˛à∞ÁÄ˚ ˆ0˛ı0Ë˙ˆ0˛ı0˙†Ò˙ ˆ0˛ı"0˙ÄÒ˙ˆ0˛ıˇ¸Œ¶nnÒÄ˚ˆ0˛ı0¸)©ˆôÚ˙ˆ0˛ı0¸)®ñôÒÄ˚$ ˛Ä˝0˛ı0¸ŒßriÚ˙"    @˛0˛ı0¸Ô˙"     NÈåmÁ˛0˛ı0¸Ô˙(    …õ√ôí˛0˛2˝˛0ÍÄ˚)    )öâí˛0˛ ˛0Î˙/    .ÈŒy·˛0˛ˇ˛Éçªç°ú˛0ˇ˝Ä˛ÄÄ˚/ ˛ÄIJ0ÄÅ˛Ç__S‰˛    0@¿ÄpÒ˙/˛ÄIJ0Ä¡˛äSSR$˛    0@` Ò˙' ˆ0Äa˛rO
  1617. OQ‹˛    0@`Ò˙ˆ0Ä¡ı
  1618. 0@¿ ÄÒÄ˚ò@¿ˆ¿ˆ∫G˙=#˙˛0ˇˇ˝Åı
  1619. 0ˇ˝Ä@@Ú˙'˛f—ΔÊw˛0ı0˛ Ä ÒÄ˚/ ˛ô©)üJ˛0
  1620. ‡˝'@0˛AêÚ˙/˛â©)òJ˛0 ˝HÇÄ0˛Å%HÚ˙- ˛v©ΔóI˛0˛…i°¥åÊ2g0˚Ç BàÚ˙*˝˚0˛9US‰íA˙¸0¸ ÅHÒÄ˚*˝˚0˛URbíH É0¸AàÚ˙&ˆ0˛ÁUQ„ G:~0¸AêÒÄ˚! ˆ0˛¸˚0¸ÇpÚ˙ˆ0˛¸˚0¸Ç˙ ˆ0˛ı0˚êÑ˙ˆ0˛˝Ñ˙0˚ë|Ä˚$ˆ0˛˛˛˛0˚A¸Ò˙$ˆˇ˛˛3úÕ-‹˛0˚1åÄ˚% ˆˇ˛˛I%3*Ω(˛0˚?çÚ˙˛I%1*°(˛0˚„èÚ˙  Ò˛1ŒÍù$˛0˚„é0Ú˙ı0˚˜é0ÒÄ˚˙ ¯ı0˚Îfi0Ú˙˙0¯ı0˚˜ØpÒÄ˚$ ˚0¯    x4˛0˚Îfi∞Ú˙"˙0¯    DÃ0˛0˚˜ØpÚ˙$ ˚0¯˛0”8áp˛0˚
  1621. Îfi∞Ú˙"˙p¯˛˜‡Ñæ ˛0˚˜ØpÒÄ˚"˙x¯˛E4嶠˛0˚
  1622. Îfi∞Ú˙"˙x¯˛8Ûtû˛0˚˜ØpÒÄ˚ ˚x¯ı0˚æ˚‡Ú˙˙x¯ı0Ë˙ ˚¯¯ı0Ë˙˙¸¯ı0ÁÄ˚˙¸¯ı0Ë˙˙¯ı0ÁÄ˚ ˚¯ı0¸8≤˙˙¯ıˇ¸D  Ú˙ ˚¯ı0¸1;Éô¸¿Û˙˙¯ı0¸1Ç}>ÄÚÄ˚˙¯ı0¸E1äe0ÄÛ˙˙¯ı0¸8Òr]ÄÚÄ˚ ˚¯ı0Ë˙˙¯ı0Ë˙ ˚¯ı0Ë˙˙¯c0Ï`±Ä g0ÁÄ˚˙¯î»2êJ@ò0Ë˙˙¯»RêJ@0ÁÄ˚" ˚¯$»å` @ a0Ò˙ˇ‡˙#˙¯î»íê @â0Ùˇ‡@˙0˙* ˚¯c0å`1Ä ˆ0¢ı"  {Ó`@ Ä˙ ˙¯ı0Äı  z.fYÃÃflKÄ˚˙¯ı0Äı  z.FYHÃèK˙#˙¯ı0˚àø˚à †z.fYÃÃè{Ä˚& ˚¯ı0ĸ Ä¸  z.fYÃÃèC˙#˙¯ı0ĸ1ĸ {Ó˝˙! ˚¯ı0¢˚"¢¸" @˙0˙!˙¯ı0ĸ Ä¸ ˙ˇÄ˚!˙¯ı0ĸ$ĸ @˚0˙ ˙¯ı0˚à®˚à†@˚∞Ä˚# ˚¯ı0ĸ Ä¸ @˚˙$˙¯ı0ĸ1ĸ  Aê˙% ˚¯ıˇ¢˚"¢¸"  BP∞˙#˙˜ıˇĸ Ä¸  B∏l“Ã0Ä˚˙Èĸ$ĸ  BUËô˚‹˙˙È˚à®˚à †AîËiö¯0Ä˚ ˚Èĸ Ä¸ @˚0˙˙Èĸ1ĸ @˚0˙ò@@ˆ@ˆ˙G:= ˚È¢˚"¢¸" B ˛0˙˙Èĸ Ä¸  B 0Ä˚˙Èĸ$ĸ  C©€jq6@0˙˙È˚à®˚à †Bi4™ìƇ0Ä˚  ˚Èĸ Ä¸  Cë”fqßp0˙˙Èĸ1ĸ @¸0˙ ˚È¢˚"¢¸" @!¸0˙˙Èĸ Ä¸ @˚0Ä˚˙Èĸ$ĸ @˚0˙˙È˚à®˚à†@˚0Ä˚ ˚Èĸ Ä¸ @˚0˙˙Èĸ1ĸ @˚0˙ ˚È¢˚"¢¸" @˚0˙˙Èĸ Ä¸ @˚0Ä˚˙Èĸ$ĸ @˚0˙˙È˚à®˚à†@˚0Ä˚ ˚Èĸ Ä¸ @˚0˙˙Èĸ1ĸ @˚0˙ ˚È¢˚"¢¸" @˚0˙˙Èĸ Ä¸ @˚0Ä˚˙Èĸ$ĸ @˚0˙˙È˚àË˸à†@˚0Ä˚ ˚Èĸ¿`¸ @˚0˙˙Èĸq¿¸ @˝`0˙  ˚È¢¸"3¢¸"  @N¥ŒÜ`0˙˙Èĸ˚  @Mjjâ@0Ä˚˙Èĸ˚  @Mj©â@0˙˙ÈÙà †@=ji@0Ä˚ ˚ÈÄı @˛0˙˙ÈÄı @˛0˙ ˚È¢ı" @˚0˙˙ÈĢˇÄ @‚˛0Ä˚˙ÈĢ¿ @F0˙˙Èààê˘»à†@Œ®0Ä˚ ˚ÈĢ¿ @6‰0˙˙ÈĢ¿ @ŒN0˙ ˚È¢"0˘‚" @˚0˙˙ÈĢ¿ @˚0Ä˚˙ÈĢ¿ @˚0˙˙Èààê˘»à†@˚0Ä˚! ˚ÈÄ¿IJ¿ @˚0˙"˙ÈÄ B@Ä¿ @9 0˙$ ˚È¢"0Ü‚Y‚" @?Ä
  1623. –0˙#˙ÈÄoB|¯¿ @Δ`Ó∞0Ä˚"˙ÈÄ(Bd»¿ @)ë˜|H0˙#˙Èààê«#úx»à†0@iìúÃ∞0Ä˚ ˚ÈĢ¿ 8@íº0˙˙ÈĢœˇˇ¸@Êgfi0˙ ˚È¢"0˘Í""&@/20˙#˙ÈIJ »@Ô0Ä˚"˙ÈIJà ÃDDG@ˇw0˙#˙Èààê•ùŒn<ûààé@ ˇ0Ä˚$ ˚ÈÄ◊“â˘MËœˇˇÏ@#0˙"˙ÈÄâôM¿ 8@0˙$ ˚È¢"0—“Iy<Ë‚" 0@
  1624. "0˙˙ÈĢ¿  @é0Ä˚˙ÈĢ¿ @4D0˙˙Èààê˘»à†@1®å,p0Ä˚ ˚ÈĢ¿ @»‚8R@0˙˙ÈĢ¿ @»q‡6`0˙ ˚È¢"0˘‚" @»ÄH0˙˙ÈĢ¿ @>`Ä˚˙ÈĢ¿ @˚∞˙˙Èààê˘»à†@˚∞Ä˚ò@@Ĉ@Ĉ:Gz= ˚ÈĢ¿ @˚˙˙ÈĢˇ¿ @˚∞˙ ˚È¢"/˘ˇ‚" @˚0˙˙ÈÄı @˚0Ä˚˙ÈÄı ˙ˇ˙˙ÈÙà†@˚0Ä˚ ˚ÈÄı @˚∞˙˙ÈÄı @˚∞˙ ˚È¢ı" @˚∞˙˙ÈÄı @˚∞Ä˚˙ÈÄı @˚∞˙˙ÈÙà†˙ˇÄ˚ ˚ÈÄı ?˙ˇ˙˙ÈĢˇÄ ˜˙ ˚È¢"8˘‚" ˜˙˙ÈĢ@ ˆÄ˚˙ÈÄ0˘@ ˜˙˙Èàà†˘Hà†ˆÄ˚ ˚ÈÄ ˘@ ˜˙˙ÈÄ ˘@ ˜˙ ˚È¢" ˘b" ˜˙˙ÈÄ ˘@ ˆÄ˚˙ÈÄ ˘@ ˜˙˙Èàà†˘Hà†ˆÄ˚ ˚ÈÄ ˘@ ˜˙˙ÈÄ ÄÄ˝@ ˜˙ ˚È¢" Ç9ÁfvNfb" ˜˙˙Áˇ ‡DàÄO…Lü@ ˆÄ˚·Ä     |üÄH9Là@ ˜˙·àà†òcGÊ<wHà†ˆÄ˚ ‚Ä ˘@ ˜˙·Ä ˘@ ˜˙$ ˘˝¯¢" ˘b" ˜˙'¯Ä ˝˝Ä ˘@ ˆÄ˚)¯ªì ñÁ39ú}éNÜ·7LÊ;mÄ ˘@ ˜˙)¯¶Wû_íLÀ3    MOó|¶_/ ∞àà†˘Hà†ˆÄ˚+ ˘fThíD  3    MIëL¶S(JåÄ0˘@ ˜˙)¯{ìéGë;9¯-    =Gë<ùŒÁ  ∏Ģ@ ˜˙ ¯"Ù ¸¢"0˘‚" ˜˙˜"Ù8¿¸Ä˙Ä ˆÄ˚·Ä˘ˇ ˜˙ ·Ùà†ˆÄ˚ ‚Äı ˜˙·Äı ˜˙ ‚¢ı" ˜˙·Äı ˆÄ˚·Äı ˜˙ ·Ùà†ˆÄ˚ ‚Äı ˜˙·Äı ˜˙ ‚¢ı" ˜˙·Äı ˆÄ˚·Äı ˜˙ ·Ùà†ˆÄ˚ ‚Äı ˜˙·Äı ˜˙ ‚Ùˇ‡˜˙»Ä˚…˙»Ä˚  ˙…˙  ˙»Ä˚ò@Ä¿ˆÄ¿ˆzG∫=…˙»Ä˚  ˙…˙»3˙ …ÃÄ˚¡¡¡¡¡¡¡¡¡¡¡¡
  1625. é8`1Ä»
  1626. DêJ@»
  1627. ƒÄä@»
  1628. §pâ¿»
  1629.     †àÄ»
  1630. #0îÄ»    à|¿c«¡¡¡¡¡!¿0ÄÄÄ¿˛ÄÄÄflÄpHÇ@ÄÄ@¸Äfi"OF»HE≈ •æ∑¡—∑gévï¡4çì`‡"R… pñJ䙑!ZÇ≤E©®∫ÇùW(©†‡"íY8'ê    ºS9<òìñI)    °qI ‡"Ãr  ê    ¶üû!Q<'Öúéfq•Ñ-Ÿ“`‡"úZp`3Üè(9Â÷äNëÌ—q"@‡"Ô ⁄"Ô ⁄Ô ⁄¡¡9 pp0 @Äp˛à à–@8˛$˜5   P ภÄÄ˛Äƒ¸ ˜:6'®;:9
  1631. aZfl¨nVZRF^ãbkk#de…6flZ»∂9fl*îì/E±öıë⁄2Ù[¯:6*®MBR䢙j,4    §®ΩÍJ§ï¢µ5e§™äöj%+*âZÑj,WzïRJ—MZ≤jU$≠¯:6›HI<ó $ƒLK§    )…)Lë)%"•%-)íL)IqR$ÑLtíS(îíëIRñLâI)¯:6QPì¥'fiûP¨mÚñ◊Ì™aHH:mù&ûJY◊ö¶5ûHÙ•ªˆ’0éí$ûømS¯:6O†“t€öu$î'IHÒLdâI@‚JJ.Hï$åîDmi$" î8£$§â q•îJHí¯ı˛Ĉˆ Ïı˛Ĉˆ Ï ÒÄÍ Ï¡¡$Ä0Ä@!Ä√ÿ  ˝ A@Ä$§ÿ$≤Ù[úê É
  1632. Á:£ê–$ƒW8E@⁄    ,¬E$≠•@%H
  1633. •(p„ƒÍ@´†⁄
  1634. EºII) Ä?flâá…p@DL8%› ⁄gèmSí    ¡k@aHñ-@⁄EÙäHí=–Á éMπ∞Ê0dr6ÔÄ⁄ı˙ÄŸı˙ÄŸı˙ÄŸò@¿Úˆ¿Úˆ∫GÏ=¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  1635. ‡pÃ
  1636.  Ã §D÷R<¨-òÕ ;‘§jÓIPF®Õ íôƒ    JJ”êD¿Õ •-:êìö âÿÕ ÿ»·ƒîb—‡…"Õ
  1637. !˝Ä…
  1638. !˝Ä…
  1639. !˝Ä…¡¡ ÄÄ– ÕIJÄ@ Õ     ⁄,ÅÄ[¡’ëÚXŒ &UA@§Çí*• Œ     "„Ç;Å%¢tI Œ CÆ"ÈÖ¥EÍ@Œ B—«›—I‰:D@Œ˚ »˚ »¡¡¡ê@p¸Ä÷Äê    @ HÄ÷£÷ÕéW…≤$ÎJ/Ϻ≠¿ÿ döΔõ*NPëIR◊
  1640. -$•…‰íE%tíœRQ¿ÿ    9ñ)≠i4GHF€É£⁄†@ÿ≠$>Fy6Ûë$>éÂJ<Fí›"ë#Äÿ ˜Ä“ ˜
  1641. Ä“Ù œ¡¡ò@@ˆ@ˆÏG,= ˇ  Õ í Õ T íã˚.+"Õ ∫Qî$TT"Õ •2·$≥ƒòî"Õ ≠TÇ6‡Ë¸®$Õ ˆòs$∑H®HXÕ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ĉ@Ĉ,Gl=¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿ˆÄ¿ˆlG¨=¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿ˆ¿ˆ¨GÏ=¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@ˆ@ˆÏG,=¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ĉ@Ĉ,Gl=¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿ˆÄ¿ˆlG¨=¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Úˆ¿Úˆ¨Gfi=¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@ˆ@ˆÏG,= ˇ  Õ í Õ T íã˚.+"Õ ∫Qî$TT"Õ •2·$≥ƒòî"Õ ≠TÇ6‡Ë¸®$Õ ˆòs$∑H®HXÕ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ĉ@Ĉ,Gl=¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿ˆÄ¿ˆlG¨=¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿ˆ¿ˆ¨GÏ=¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@ˆ@ˆÏG,=¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ĉ@Ĉ,Gl=¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿ˆÄ¿ˆlG¨=¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Úˆ¿Úˆ¨Gfi=¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ˇ&0@ˇ ˇˇˇˇ@
  1642. ˇ·ˇ‚7^
  1643. 4*\¯, Palatino&e.3+l"CHAPTER à)>1,     Helvetica    ˇˇ—ÚˇÆ(@l.Introduction to Interapplication Communication4⁄*˙¯
  1644. (‡*1-18    )B Supporting P).)AppleScript and Other Scripting Languages4^*¿¯
  1645. k*r¯4l*r¯ mlm¯
  1646. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd\lkµ(gl Recordable ¶z°dONLNd \µk˛)I Applicationsˇˇˇˇˇˇ€r(g1
  1647. °dONLNdrl~™({lIIf you decide to make your application scriptable, you can also make it rÄ°dONLNdbr´~Ω({´ecorz‡°dONLNdfrΩ~⁄)dable, °dONLNdmlãõ(àl
  1648. allowing uÌ@°dONLNdwõãΩ)/    sers to r†`°dONLNdÄæã–)#ecor¿°dONLNdÑ—ã )d their action ¿°dONLNdí ãk):s in your application i_ °dONLNd©lã»)an the form of a script¥°dONLNdø»ãÂ)\. Even °dONLNdΔålòÖ(ïlusers =`°dONLNdÃåÜòè)=with little or no knowledge of a particular scripting languagJÄ°dONLNd    åèòö(ïèe c`°dONLNd åõò¨) an r¿°dONLNdå¨òæ)ecorè °dONLNdåæòΔ)d *‡°dONLNdå«òfi)    their °dONLNdôl•ú(¢l actions in r†°dONLNd(ôù•Ø)1ecorí°dONLNd,ôØ•L)%dable applications in the form of a sà¿°dONLNdQôM•^)ûcrip÷ °dONLNdUô^•c)t.òÄ°dONLNdWôd•y) Mor»@°dONLNd[ôy•Ò)e knowledgeable users can °dONLNdu¶l≤o(ØlrE°dONLNdv¶p≤Ç)ecorπ`°dONLNdz¶Ç≤9))d scripts and then edit or combine them ai °dONLNd£¶:≤V)∏s desirı‡°dONLNd™¶V≤c)ed.[@°dONLNd≠¶d≤f) €@°dONLNdƶf≤h) °dONLNd∞∏lƒÌ(¡lWApplications generally have two parts: the code that implements the application’s user °dONLNd≈l—Ô*Xinterface and the code that actually performs the work of the application when the user °dONLNd_“lfiÁ*manipulates the interface. T°†°dONLNd{“Êfio)zo make your application fully r˘°dONLNdö“ofiÅ)âecorm`°dONLNdû“Çfi”)dable, you should °dONLNd∞fllÎM(Ël4separate these two parts of your application, using †°dONLNd‰flNÎÒ)‚%Apple events to connect user actions °dONLNd    Ïl¯&(ıl)with the work your application performs. °dONLNd3˛l
  1649. ù*
  1650. Any signifi¢¿°dONLNd>˛ù
  1651. )1cant user action within a rZ‡°dONLNdY˛
  1652. ")secorœ@°dONLNd]˛"
  1653. ∫)"dable application should generate ˛†°dONLNd˛∫
  1654. ˜)òApple events °dONLNdå l˚(l that a scripting component can rRÄ°dONLNd¨ ˚)èecorΔ‡°dONLNd∞ ‚)1d as statements in a script. For example, when a °dONLNd·l$≈(!luser chooses New fr˘°dONLNdÙ≈$")Yom the File menu, a rÑÄ°dONLNd    #$5)^ecor¯‡°dONLNd5$ )#dable application sends itself a CrˇÄ°dONLNd0 $fi)ïeate °dONLNd5%l1z(.l>Element event, and the application’s handler for that event cr…¿°dONLNds%z1Í(.zeates the new document. °dONLNdã2l>≠(;lImplementing ÇÄ°dONLNdò2≠>R)A&Apple events in this manner is called {‡°dONLNdæ2S>|)¶    factoringï °dONLNd«2|>Ã)) your application. Ï°dONLNd⁄2Ã>”)PA&†°dONLNd€2‘>÷) °dONLNd‹?lKÖ(Hlfactor¡°dONLNd‚?ÖK¸)ed application acts as both ¿°dONLNd˛?˝K)xthe x °dONLNd?K;) client and Ɇ°dONLNd?;KK).the ·°dONLNd?KKº)server application for the .†°dONLNd,?ΩK⁄)rApple °dONLNd2LlX’(Ulevents it sends to itself. °dONLNdN^ljo*IfiÄ°dONLNdO^oj®)n general, a rC†°dONLNd]^©jª):ecor∏°dONLNda^ªj)dable applicatior‡°dONLNdq^j)Gn s@°dONLNdt^jT)hould generate Á`°dONLNdÉ^Sjç)D Apple eventso °dONLNdè^éjÂ); for any user action °dONLNd§klw¨(tlthat could be r]`°dONLNd≥k¨w9)@eversed by the Undo command.ƒ¿°dONLNdœk9w;)ç Ê`°dONLNd–k;wB)A!°dONLNd—kCwI) rf°dONLNd”kIw[)ecor⁄`°dONLNd◊k[wn)dablf °dONLNd€kowÆ)e application cV‡°dONLNdÍkØwfl)@ an usually °dONLNdıxlÑù(Ål handle a grD†°dONLNdxûÑ„)2eater variety of @°dONLNdx„ÑT)EApple events than it can r≤Ä°dONLNd+xTÑf)qecor&‡°dONLNd/xgÑ∞)d, since it must r=Ä°dONLNdAx∞Ѭ)Iecor±‡°dONLNdEx¬ÑÙ) d the same °dONLNdPÖlë3(él+action the same way every time even though !°dONLNd{Ö4ë€)»&Apple events might be able to trigger °dONLNd°ílû}(õlthat÷ °dONLNd•í}û) V °dONLNd¶íÄû÷)action in several dif̆°dONLNdªí÷û‚)Vfer– °dONLNdæí‚û )     ent ways.°dONLNd»§l∞s(≠lA∫†°dONLNd…§s∞u) :†°dONLNd §v∞y)r@°dONLNdÀ§z∞¡)ecordable event `°dONLNd⁄§¬∞·)H is any ≤‡°dONLNd‚§‡∞C)Apple event that any r˘@°dONLNd¯§C∞U)cecorm†°dONLNd¸§V∞„)"dable application sends to itself °dONLNd±lΩã(∫lwhile rá¿°dONLNd%±ãΩù)ecor¸ °dONLNd)±ùΩI)'ding is turned on for the local compute^¿°dONLNdP±JΩˆ)≠)r (with the exception of events that the °dONLNdyæl /(«l.application indicates it does not want to be r2¿°dONLNdßæ0 B)ƒecorß °dONLNd´æB X)ded).| °dONLNd∞æY [) ù¿°dONLNd±æ[ Ω)After a user turns on ré@°dONLNd»æΩ œ)becor†°dONLNdÃæ– Ê)ding °dONLNd—Àl◊s(‘lfrò‡°dONLNd”Às◊å)om thv °dONLNdÿÀç◊”)e Script Editor aY†°dONLNdÈÀ‘◊)Gpplication, the Ä°dONLNd˘À◊Ã)B(Apple Event Manager sends copies of all °dONLNd!ÿl‰o(·lrE°dONLNd"ÿp‰Ç)ecorπ`°dONLNd&ÿljø)dable events t€`°dONLNd4ÿø‰ˇ)=o Script Editor-`°dONLNdCÿˇ‰)@.≠`°dONLNdDÿ‰) œ°dONLNdEÿ‰
  1655. )A    †°dONLNdFÿ ‰u) scripting component prFÄ°dONLNd]ÿu‰ˆ)jeviously selected by the user °dONLNd{ÂlÒÎ(Ólhandles each copied event fo°dONLNdóÂÏÒ2)Är Script Editor bô °dONLNd®Â2ÒÂ)F+y translating the event into the scripting °dONLNd”Úl˛»(˚lcomponent’s scriptinj‡°dONLNdÁÚ…˛)] g language a¢¿°dONLNdÛÚ˛)8nd r‘‡°dONLNd˜Ú˛%)ecorI@°dONLNd˚Ú&˛´) ding the translation as part of f °dONLNd    Ú´˛Ì)Öa Script Editor °dONLNd    +ˇl p(lsΩ°dONLNd    ,ˇp ?).cript. When a scripting component executes a r °dONLNd    Zˇ? Q)œecordÄ°dONLNd    ^ˇR ∏)ded script, it sends the °dONLNd    w l}(lcorr`°dONLNd    { ~Ø)
  1656. esponding Û@°dONLNd    Ö Æè)02Apple events to the applications in which they wer‚`°dONLNd    ∑ èö)·e rÒ°dONLNd    ∫ ö¨) ecore`°dONLNd    æ ≠¿)ded.°dONLNd    √l*Ñ('lFigurR¿°dONLNd    »Ñ*ò)e 1-9@°dONLNd    Õò*fi) illustrates how +°dONLNd    fifl*)GApple event r∫¿°dONLNd    Î*-)<ecor/ °dONLNd    Ô.*‹)&ding works. The user performs a signifiaÄ°dONLNd
  1657. ‹*Ò)Æcant °dONLNd
  1658. +l7¯(4laction (such as choosing New fr3`°dONLNd
  1659. :+˘7I)çom the File menu)Õ¿°dONLNd
  1660. K+I7K)P,M¿°dONLNd
  1661. L+L7›)! and the SurfCharter application °dONLNd
  1662. m8lD¨(Alsends itself an `°dONLNd
  1663. }8≠D‡)A
  1664. Apple even¿°dONLNd
  1665. á8‡DÈ)3t tÄ°dONLNd
  1666. ä8ÈDƒ)    4o perform the task associated with that action. If r@†°dONLNd
  1667. æ8ƒD÷)€ecorµ°dONLNd
  1668. ¬8÷Dˆ)ding is °dONLNd
  1669.  ElQ≠(Nlturned on, the 8¿°dONLNd
  1670. ŸE≠Q±)A8Apple Event Manager automatically sends a copy of each r6‡°dONLNd E±Q√(N±ecor´@°dONLNd E√Q›)dable °dONLNd Rl^,([l+Apple event to the application (for example! °dONLNd FR-^m)¡, Script Editor)釰dONLNd VRm^Æ)@ that initiated r†°dONLNd gRØ^¡)Becorì°dONLNd kR¡^Ì)
  1671. ding. The °dONLNd u_lk=(hl.scripting component handles the copy of each rë@°dONLNd £_=kO)—ecor†°dONLNd ß_Pk·)"dable event by translating it and °dONLNd …llxo(ulrE°dONLNd  lpxÇ)ecorπ`°dONLNd ŒlÇx¯)ding it as part of a script. Tà¿°dONLNd Ïl¯x?)vo translate each b‡°dONLNd ˝l?xâ)GApple event corrÀ°dONLNd lâxù)Jectly£°dONLNd lùx€), the scripting °dONLNd "ylÖø(Çlcomponent must fi«`°dONLNd 3yøÖ…)S9rst check what equivalent human-language terminology the °dONLNd lÜlí(èl&SurfCharter application uses for that `°dONLNd íÜí÷)§+Apple event. The scripting component then rå`°dONLNd ΩÜ÷íË)Δecor¿°dONLNd ¡ÜÈíı)ds °dONLNd ƒìlü (úl%the equivalent statement in the scrip˘‡°dONLNd Èì ü)†t.ˇoö@ˇ ˇˇˇˇ@
  1672. ˇ·ˇ‚7^
  1673. 4H\, Palatino&e.3+ä"CHAPTER à)>1,     Helvetica    ˇˇ—ÚˇÆ(@ä.Introduction to Interapplication Communication4⁄ä˙(‡ä Supporting P).)AppleScript and Other Scripting Languages
  1674. , (‡1-19
  1675. ˇˇˇˇˇˇˇˇ4^4|lòÄ2^A|rMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""^A|r^A|r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  1676. ^6|@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""^6|@^6|@˜˜˜˜˜˜˜˜˜˜˜˜˜˙ˇˇ˙ˇ˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜
  1677. 4Å4w?òÄ
  1678. Å6w@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""Å6w@Å6w@$˜˙ˇ˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˛¸ˇˇ
  1679. ˇ˛ˇ˛¸ˇ˛¸ˇ˝˚ˇ˛˛˛ˇ˝
  1680. ˇ˛ˇ˛
  1681. ˇ˛ˇ˛˛˛ˇ˝˜˛˛ˇ˝
  1682. ˇ˛ˇ˛
  1683. ˇ˛ˇ˛˙ˇ˜˛˝ˇ˛ˇ˙˛ˇ˚¸ˇ˛˜˛˛ˇ˝
  1684. ˇ˛ˇ˛
  1685. ˇ˛ˇ˛˛ˇˇ˝˜˛¸ˇˇ
  1686. ˇ˛ˇ˛    ¸ˇˇ˜˛˛ˇ˝
  1687. ˇ˛ˇ˛
  1688. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˜˛¸ˇˇ
  1689. ˇ˛ˇ˛˛˛ˇ˝
  1690. ˇ˛ˇ˛
  1691. ˇ˛ˇ˛˛˛ˇ˝˜˜˜˜˜˙ˇ¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˛¸ˇˇ
  1692. ˇ˛ˇ˛˜˛˛ˇ˝
  1693. ˇˇˇ˛
  1694. ˇˇˇ˛    ˇˇˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˛ˇˇ˝
  1695. ˇˇˇ˛
  1696. ˇˇˇ˛˛˛ˇ˝ˇ˙˙ˇ˛
  1697. ˇ˛ˇ˛
  1698. ˇ˛ˇ˛˛˛ˇ˝˜˙ˇ˛
  1699. ˇ˛ˇ˛
  1700. ˇ˛ˇ˛˛˛ˇ˝˜˙ˇ˜    ¸ˇˇ˜˛˛ˇ˝
  1701. ˇ˛ˇ˛
  1702. ˇ˛ˇ˛˛ˇˇ˝˛ˇˇ˝
  1703. ˇˇˇ˛
  1704. ˇˇˇ˛˛˛ˇ˝ˇ˙˛¸ˇˇ
  1705. ˇ˛ˇ˛˜    ¸ˇˇ˜˛˛ˇ˝
  1706. ˇ˛ˇ˛
  1707. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˝˛ˇ˛
  1708. ˛ˇ˛ˇˇ    ˇ¸ˇ    ˇ¸ˇ
  1709. ˛ˇ˛ˇˇ˜˜˛˛ˇ˝
  1710. ˇ˛ˇ˛
  1711. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛˚ˇ˛˝ˇ˝˚ˇ˛˚ˇ˛˝ˇ˝˜¸ˇ˛˚ˇ˛˝ˇ˝˚ˇ˛˚ˇ˛˝ˇ˝˜˜˛˝ˇ˛ˇ˙˛ˇ˚¸ˇ˛˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜    ¸ˇˇ˜˛˛ˇ˝
  1712. ˇ˛ˇ˛
  1713. ˇ˛ˇ˛˛ˇˇ˝˛ˇˇ˝
  1714. ˇˇˇ˛
  1715. ˇˇˇ˛˛˛ˇ˝ˇ˙˛¸ˇˇ
  1716. ˇ˛ˇ˛˜    ¸ˇˇ˜˛˛ˇ˝
  1717. ˇ˛ˇ˛
  1718. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\äh≈(eäThe chapter “~ °dONLNd\Δhfl)<Recor†Ä°dONLNd\flhı)ding &¿°dONLNd\ˆh*)
  1719. Apple EvenÅ@°dONLNd!\*h6)4ts”†°dONLNd$\7h´) in this book describes the p °dONLNd@\´hÂ)t Apple Event °dONLNdLiäu±(räManagerœ`°dONLNdSi≤uø)(’s r†°dONLNdWi¿u“)ecorç°dONLNd[i“u;)ding mechanism in mor„‡°dONLNdpi;uÀ)i!e detail and explains how to use ο°dONLNdëiÀu)êApple events to °dONLNd°väÇÒ(äfactor your application.
  1720. §Hµ4•Hµ"•H]
  1721. ˇ·ˇ‚7^    °dONLNd∫öä•¥*#
  1722. Figure 1-9°dONLNd≈öÕâ)B0Recording user actions in a factored application
  1723. –H◊4—H◊ “ä“
  1724. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd˜¡ä–◊(ÃäApplications »v°dONLNd¡◊–∂)M#That Manipulate and Execute Scriptsˇˇˇˇˇˇ€r(Ã1
  1725. °dONLNd)◊ä„¡(‡ä Like sound rH†°dONLNd5◊¬„⁄)8esourꇰdONLNd:◊⁄„Á)ces¿°dONLNd=◊Ë„<), scripts can be storfi@°dONLNdR◊;„ù)Sed either as separate fiñ¿°dONLNdj◊û„)cles with their own icons in °dONLNd܉äu(Ìä6the Finder or within an application or its documents. ¿°dONLNdº‰v|)ÏY’@°dONLNdΩ‰{„)our application can storv‡°dONLNd’‰‰˛)ie and °dONLNd€Ò佶(˙äexecutı†°dONLNd·Ò¶˝±)e s|@°dONLNd‰Ò≤˝—) cripts ré°dONLNdÏÒ—˝‰)egar´¿°dONLNdÒ‰˝)&dless of whether it is scriptable or rÇÄ°dONLNdÒ˝ë)õecorˆ‡°dONLNdÒë˝ )dable. If your application is °dONLNd8˛ä
  1726. ‡(äscriptable, howeverì°dONLNdK˛‡
  1727. m)V#, it can execute scripts that contr›°dONLNdn˛m
  1728. ¡)çol its own behaviorÄ°dONLNdÅ˛¬
  1729. ˙)U, thus acting °dONLNdè äì(äasΩ°dONLNdë ìï)     =°dONLNdí ñ≥)Cboth the client application and the server application for the corr`°dONLNd’ ≥‰(≥
  1730. esponding °dONLNdflä$•(!äApple˝Ä°dONLNd‰•$ß) }Ä°dONLNd®$…)events. °dONLNdÓ*ä6ê(3äY@Ä°dONLNdÔ*ê6)Pour application can establish a connection with any scripting component that is °dONLNd?7äCç(@ärE°dONLNd@7éC´)egisterî °dONLNdG7´C¢)2ed with the Component Manager on the same computerΔ°dONLNdy7¢CË)˜. Each scripting °dONLNdäDäP¨(Mä@component can manipulate and execute scripts written in the corriÄ°dONLNd D¨P(M¨esponding scripting °dONLNdfiQä]µ(Zä    language ®¿°dONLNdÁQµ]¡)+(orß`°dONLNdÍQ¡]) , as in the case of ›`°dONLNd˛Q])L8AppleScript, one of the scripting language’s dialects) wÙ‡°dONLNd6Q])Ùhen °dONLNd:^äj(gä"your application calls the standar¬ °dONLNd\^já)ìd scripting component r†°dONLNds^àj™)koutines.°dONLNd|pä|ê(yäY@Ä°dONLNd}pê|ï)o∂°dONLNd~pï|°)u c≠`°dONLNdÅp¢|Ú)an use the standar`°dONLNdìpÛ|])Qd scripting component rq‡°dONLNd™p]|ã)j outines to ,Zapf Dingbats°dONLNd∂Üäçè(åän
  1731. °dONLNd∏Éñèˆ) get a handle to a scripM‡°dONLNdœɘè2)at so you can sÕ °dONLNd›É2è<);avs`°dONLNdflÉ=èr) e the script iOÄ°dONLNdÌÉsèå)6n a prË°dONLNdÛÉåèú)eferî °dONLNd˜ÉùèΩ)ences fi2¿°dONLNdˇÉæè)!le, in the data fork °dONLNdèñõB(òñ(of a document, or as a separate script fi    `°dONLNd=èCõE)≠lÒ¿°dONLNd>èEõI)e°dONLNd@§ä´è(™än
  1732. °dONLNdB°ñ≠œ) manipulate s»`°dONLNdN°œ≠Í)9cripts  °dONLNdU°Î≠#) associated w\°dONLNda°#≠˛)83ith any part of your application or its documents, °dONLNdî≠ñπŸ(∂ñincluding both ∞†°dONLNd£≠Ÿπ+)CApple event objectKÄ°dONLNdµ≠,π7)Ss aÄ°dONLNd∏≠8πë) nd other objects defi∫`°dONLNdÕ≠ëπÓ)Yned by the applicatio ¿°dONLNd‚≠ÓπÛ)]n
  1733. ¥H©4≥A¥Bò@@¸@¸¥BÙ>¡¡ ˇ‡˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ıˇ⁄ˇ˙ıˇ0⁄ˇ˙ıˇ@Ä⁄ˇ˙ıˇÇ`⁄ˇ˙ıˇê⁄ˇ˙ıˇ⁄ˇ˙ıˇ‰⁄ˇ˙ıˇ!R⁄ˇ˙ıˇ"©⁄ˇ˙ıˇDQ⁄ˇ˙ıˇ Ñ)⁄ˇ˙ıˇ à ⁄ˇ˙ıˇ! ⁄ˇ˙ıˇ!@⁄ˇ˙ıˇ"@⁄ˇ˙ıˇÄ⁄ˇ˙ıˇ èÄ⁄ˇ˙ıˇ üÄ⁄ˇ˙ıˇ#ÒÄ⁄ˇ˙ıˇ'Òæ⁄ˇ˙ıˇ¸q˛⁄ˇ˙ıˇ¸qΔ⁄ˇ˙ıˇÒΔ⁄ˇ˙ıˇ{Δ⁄ˇ˙ıˇıÓ⁄ˇ˙ıˇ{÷⁄ˇ˙ıˇæıÓ⁄ˇ˙ıˇ]{÷⁄ˇ˙ıˇæıÓ⁄ˇ˙ıˇ]{÷⁄ˇ˙ıˇæıÓ⁄ˇ˙ıˇ˜fl|⁄ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ò@@ĸ@ĸÙB4> ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ò@Ä¿¸Ä¿¸4Bt> ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ò@¿¸¿¸tB¥> ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙ ˇ˙¡¡¡¡¡¡¡¡¡¡¡¡ò@@¸@¸¥BÙ>¡
  1734. «`Ä»
  1735. "êr@»
  1736. bÄ@»
  1737. Rp$@»
  1738. èê$@»
  1739. Ñ0$Ä»    ƒ>¿s«¡¡¡¡¡
  1740. †x4¸DÄtàfl
  1741. Ä8$$¸@˝  Äfl"'¢»$DFVu≥ƒ\ÿ+‰õp∂
  1742. u>K'•$e»∂‡")eX™®§‘å°`UEMÄö*T§Z fi§™âZ‡"I-8àQ—)(îÖü†òäIq$2â$Úî…R‡"f: HIQm3@˚Œì¶<^ΩHñ)mö¶‡"N.80‰Ëëπ'π¿§â·$(THà{ΔHï$‡˘Ģ@˛‹˘Ä˙@˛‹˘¯Ä˛‹¡¡9 p8†Ä8˛HÅ HÅ– ˛$˜5 (ƒ¸ @@˛Äb¸ ˜;7%‘ù91M€ë÷∑+-)#.â±5µ£≤eË∂€ŸËõÅ€ïñîëó"ÿÄZ⁄»ŸtMĢ;7*T&°RÖRïi*“T^ı%Tî—öö‰“™IZi"´%IM    Bi*/zí™%hÄ≠MYi*§¶Ä˘;7‹§$ûóî¢JI“î‰î¶Hô$ëíí¨ïíRJ$…híIBJrJS$LIHÅ)IKJD…$Ģ;7P®Iᥠ   ØõPV    6à˘Kk˝©0ç$$97~⁄¶õEYÀ⁄ìÑõD|•µ˛jòGRõ_ÌIĢ:6N–i:€ç=í#§ç$x¶2D© r%%-$îë$FíBmdëí<S"TDê8ííãí%Hâ¯ı˛@ıĘ Ïı˛@ıĘ Ï Ò@Í Ï¡¡Ä Fç0!Ä"⁄    ¸à HBÄ"⁄    #˙À¢l:‚Aêa]¡‘üñ4Δ‹%r¿€    f%4C%§£™T©J:†
  1743. ^£@€-·&I$<N˚Ò1¿•J#ˇ‰¬@€r?jLà"BX@©€@Ñ%Ñâb¿€/¢*DHuÁCú·ìê—n$lyŒ9vDÄ€ˆ˘ Ÿˆ˘ Ÿˆ˘ Ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  1744. pÃ
  1745. àà 
  1746. RBk)l≥Õò@@ĸ@ĸÙB4> Í¢5w(∞’Õ âM¬    %%q–òÕ íóHIŸ ;Õ Ãd‡‰J1p·$@ŒIJ@ÀIJ@À IJ@…¡¡ ÄÕ ÄÕ     ⁄&A@|≤>+Œ &J°
  1747. †à)ETTŒ     "—¬¿$êJNàîŒ Có1E[ຮŒ B»ÁŒËœnáHHŒ˚»˚»¡¡¡‡Ä#ÄÓ‡ˇ‘Å Ä!D@J‘Å≥ïπ6ADùb@JE˝ó∏÷ ¿’*BöAyñ•@ä **@÷
  1748. $ôr<íBà§ÆÄîY‚LJ8÷     E;D&Ç àÈ¡pt~T÷ó»œ-ºr$á—‹©Gëî[§T$p÷ ˘˛  – ˘@ –ˆÄŒ¡¡  ``  † êê  §_ŸqX  ¨°"¢†q      Eû$ƒ†      ÁGÂ@â   E∫EB@r¿ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿¸Ä¿¸4Bt>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú¸¿Ú¸tB¶>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@¸@¸¥BÙ>¡¡ 3 ˙ ˙ 0˙¡ ˙¡ 0˙ ˙ 0˙¡ ˙¡ 0˙ ˙ 0˙Û—Ù0Ÿ˙Û@Ä“ÙÇ`⁄0˙ıê⁄˙ı⁄0˙    Ù‰“ı!R⁄˙    Ù"©“ıDQ⁄0˙ı Ñ)⁄˙ı à ⁄0˙    Ù! “ı!@⁄˙Ù"@—ıÄŸ0˙ı èÄ⁄˙ı üÄ⁄0˙    Ù#ÒÄ“ı'Òæ⁄˙Û¸q˛“ı¸qΔ⁄0˙ıÒΔ⁄˙ı{Δ⁄0˙    ÙıÓ“ı{÷⁄˙    ÙæıÓ“ı]{÷⁄0˙ıæıÓ⁄˙ı]{÷⁄0˙    ÙæıÓ“ı˜fl|⁄˙¡ 0˙ ˙ 0˙¡ ˙¡ˆ@Ÿ0˙ˆÄ9@⁄˙ˆKpsoò€0˙ ı 0O«–”ˆ 1LΔ€˙ ı:.K√–” 0˙ ˙ò@@ĸ@ĸÙB4> 0˙¡ ˙¡ 0˙˙ıˇ˛fl˙˙Ù"fl0˙
  1749. ˘ı◊˙ıfl˙
  1750. ˘ıàä◊˙ıfl0˙˙ıfl˙˙Ù"fl0˙
  1751. ˘ı◊˙ıfl˙
  1752. ˘ıàä◊˙ıfl0˙˙ıfl˙˙Ù"fl0˙
  1753. ˘ı◊˙ıfl˙
  1754. ˘ıàä◊˙ıfl0˙˙˘ˇ˛fl˙˙"0˘""fl0˙˘ ˝˛@›˙ ˛
  1755. @Â˙˘àêw&-Œàä˛
  1756. ÁL›˙LØ<ø$˛îfiÂ0˙˙î —$˛î–Â˙˙"0˜'è"&"˛ÁNÂ0˙˘D¸˛˝Ñ‹˙D¸¸˛Ñ‰˙˘àê˘∞Ÿ˙ ˛ ·0˙˙ ˛0˛Â˙˙"0n<Ã8¿ ñÁÂ0˙˘˘MË ˇ¯p_í›˙ôM‡híÂ˙˘àêy<Ëéä8Gë›˙˘‚0˙˙¯ˇÄ„˙˙"/¯ˇ""¿¿„0˙˘ıp@€˙ı`„˙˘ıàä0€˙ı „0˙˙ı „˙˙Ù"„0˙˘ıÑ€˙ı˛Δ„˙˘ıàä˛B€ ı˛B„0˙ ı˛B„˙'l1π∏Ù"˛c„0˙,¯zZdı˛!€#àJdı˛!„˙˛Œx9…§ıàä˛!€˙ı˛1ĉ0˙˙ı˛ĉ˙˙Ù"˛ĉ0˙˘ı˛1Ä‹˙ı˛!„˙˘ıàä˛!€ò@Ä¿¸Ä¿¸4Bt>˙ı˛!„0˙˙ı˛c„˙˝0Ù"˛B„0˙¸Ñı˛B€˛ ı˛B„˙˝Äıàä˛Δ€˛˛ıÑ„0˙˛`ı„˙˛Ù" „0˙¸0ı€˙ı 0„˙¸
  1757. ıàä`€˝˘ˇ˛0@„0˙˝H˘`¿„˙ ˝ê"0@ ""¡Ä„0˙ ˝ @@Êˇ‡¯(ƒÄ ]òfÊp˜ıˇ¸0˙+ˇ˝˛∏ês–˘iHàäp˜Ä˜Ä˝ˇ–¯-}ÁÄ8NòiH¿0˜Ä˜Ä˝0˙- øɲˇ¸π–w&H¸‡˜Ä˜Ä˝    ˇò˙+‡Ç˛"&0˘?ˇĢĘ
  1758. Ä 0˙(ÄDz˘ ¯ĘÄ0    ˇË¯.?√DzDG˘ ¯ÄÄÄ@@˚
  1759. Ä8 ˙1/˛˛àéê ˛†˜ˇ˛¿Ä@ĸ    èˇˇÏ¯48˛8˛ˇÏ ˛ ¯ˆ`Äy‹·õG3ô‹àˇ0˙3å‡˛8n<Ã?˛ı0ÄÊd”"f§ }(â ˙2˝Ä˛ 20˘MË$Ù0Äbd”"&§ a(ä""#    ˇ0˙.˛˝ ôMÙ`ÄûxR·⁄ß2]$௯/˙ y<Ëıˇ    ˛¿Ä  ˛
  1760. èˇˇÏH0˙'˘àê˘à䈠   ÄÄ ¿˛Ä8ÿ ¯#˙¯ˇˆĘ
  1761. Ä0p 0˙#˙¯ˇˆĘIJ `˙#˙Ù"˝0¸Ä˜IJ‡¿0˙!˘ı˝» ¸Ä˜IJˇˇÄ¯˙ı˝É:Cp¸ıˇÄ˘˙˘ıàä˝ѶD†¸ˆˇÄ˝‡˜˙ı˝å•D†Ï0˙˙ı˝s9É Î√w8˙˙Ù"¸!È4‘ê0˙˘ı¸"Ù¿¯Tê¯˙ıÓ¿˜„◊˙˘ıàä˛ Û¿ˆ˜ ˙ı˛P˛@˜¿ˆ0˙˙ı˛Sπ`…n‡¯‡Û˙˙Ù"˛reÒ¢@¯‡Û0˙˘ı˛äeÅâ@¯‡Î˙ı˛ãπp‰y ¯‡Û˙˘ıà䲠ÙÎ˙ı˛ ÙÛ0˙˙ıÓ@Û˙˙Ù"Ó@Û0˙˘ıÓ@Î˙ıÓ@Û˙˘ıàäÓ@Î˙ıÓ@Û0˙˙ıÓ@Û˙˙Ù"Ó@Û0˙˘ıÓ@Î˙ıÓ@Û˙˘ıàäÓ@Î˙ıÓ@Û0˙˙˘ˇ¿Ó@Û˙˙",˘b""Ó@Û0˙˘˘ Ó@Îò@¿¸¿¸tB¥>˙˘0Ó@Û˙˘àà˘àäÓ@Î˙˘Ó@Û0˙˙˘Ó@Û˙˙"(˘""Ó@Û0˙˘˘Ó@Î˙˘Ó@Û˙˘àà˘àäÓ@Î˙ @˝Ó@Û0˙˙!Òƒ•≥Ó@Û˙˙ "(ëB ≤eOüÏˇ¿Û0˙˘üK‡eD◊˙Δ0¿πù;êfl˙˘àà˘àä◊ ˙˘˛Ä@˚Ó0˙#˙˘˛Ä@˛Ó˙$˙"(˘""˛ •£8M«ñ;ûá>`Ô0˙˘˘˛ •Wß_)üOá’L@Á$˙˘˛ •T§S)ôLC@Ô˙˘àà˘àä˛ ùS§O'w;É’N@Á˙˘0˘Í0˙˙˘ ˘pÍ˙˙",˘b""fl0˙˘˘¿¸ ˝‰˙˘ˇÄ¸ Ï˙˘ıàä¸;¶,Ó39úÂ˙ı¸&oæîLÀÌ0˙˙ı¸¶h–îD  Ì˙˙Ù"¸ªßéí;9¯Ì0˙˘ı˚"fi˙ı˚"Ê˙
  1762. ˘ıàä◊˙ıfl0˙˙ıˇ˛fl˙ 0˙¡ ˙¡ 0˙ ˙ 0˙¡ ˙¡ 0˙ ˙ 0˙¡ ˙¡ 30˙ UP˙¡¡¡¡¡¡¡¡¡¡¡¡ò@@¸@¸¥BÙ>¡
  1763. «`Ä»
  1764. "êr@»
  1765. bÄ@»
  1766. Rp$@»
  1767. èê$@»
  1768. Ñ0$Ä»    ƒ>¿s«¡¡¡¡¡
  1769. †x4¸DÄtàfl
  1770. Ä8$$¸@˝  Äfl"'¢»$DFVu≥ƒ\ÿ+‰õp∂
  1771. u>K'•$e»∂‡")eX™®§‘å°`UEMÄö*T§Z fi§™âZ‡"I-8àQ—)(îÖü†òäIq$2â$Úî…R‡"f: HIQm3@˚Œì¶<^ΩHñ)mö¶‡"N.80‰Ëëπ'π¿§â·$(THà{ΔHï$‡˘Ģ@˛‹˘Ä˙@˛‹˘¯Ä˛‹¡¡9 p8†Ä8˛HÅ HÅ– ˛$˜5 (ƒ¸ @@˛Äb¸ ˜;7%‘ù91M€ë÷∑+-)#.â±5µ£≤eË∂€ŸËõÅ€ïñîëó"ÿÄZ⁄»ŸtMĢ;7*T&°RÖRïi*“T^ı%Tî—öö‰“™IZi"´%IM    Bi*/zí™%hÄ≠MYi*§¶Ä˘;7‹§$ûóî¢JI“î‰î¶Hô$ëíí¨ïíRJ$…híIBJrJS$LIHÅ)IKJD…$Ģ;7P®Iᥠ   ØõPV    6à˘Kk˝©0ç$$97~⁄¶õEYÀ⁄ìÑõD|•µ˛jòGRõ_ÌIĢ:6N–i:€ç=í#§ç$x¶2D© r%%-$îë$FíBmdëí<S"TDê8ííãí%Hâ¯ı˛@ıĘ Ïı˛@ıĘ Ï Ò@Í Ï¡¡Ä Fç0!Ä"⁄    ¸à HBÄ"⁄    #˙À¢l:‚Aêa]¡‘üñ4Δ‹%r¿€    f%4C%§£™T©J:†
  1772. ^£@€-·&I$<N˚Ò1¿•J#ˇ‰¬@€r?jLà"BX@©€@Ñ%Ñâb¿€/¢*DHuÁCú·ìê—n$lyŒ9vDÄ€ˆ˘ Ÿˆ˘ Ÿˆ˘ Ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  1773. pÃ
  1774. àà 
  1775. RBk)l≥Õò@@ĸ@ĸÙB4> Í¢5w(∞’Õ âM¬    %%q–òÕ íóHIŸ ;Õ Ãd‡‰J1p·$@ŒIJ@ÀIJ@À IJ@…¡¡ ÄÕ ÄÕ     ⁄&A@|≤>+Œ &J°
  1776. †à)ETTŒ     "—¬¿$êJNàîŒ Có1E[ຮŒ B»ÁŒËœnáHHŒ˚»˚»¡¡¡‡Ä#ÄÓ‡ˇ‘Å Ä!D@J‘Å≥ïπ6ADùb@JE˝ó∏÷ ¿’*BöAyñ•@ä **@÷
  1777. $ôr<íBà§ÆÄîY‚LJ8÷     E;D&Ç àÈ¡pt~T÷ó»œ-ºr$á—‹©Gëî[§T$p÷ ˘˛  – ˘@ –ˆÄŒ¡¡  ``  † êê  §_ŸqX  ¨°"¢†q      Eû$ƒ†      ÁGÂ@â   E∫EB@r¿ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿¸Ä¿¸4Bt>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú¸¿Ú¸tB¶>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@¸@¸¶BÊ>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@ĸ@ĸÊB&>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿¸Ä¿¸&Bf>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿¸¿¸fB¶>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@¸@¸¶BÊ>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@ĸ@ĸÊB&>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿¸Ä¿¸&Bf>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú¸¿Ú¸fBò>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@¸@¸¶BÊ>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@ĸ@ĸÊB&>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿¸Ä¿¸&Bf>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿¸¿¸fB¶>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@¸@¸¶BÊ>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@ĸ@ĸÊB&>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿¸Ä¿¸&Bf>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú¸¿Ú¸fBò>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ˇK™@ˇ ˇˇˇˇ@
  1778. ˇ·ˇ‚7^
  1779. 4*\¯, Palatino&e.3+l"CHAPTER à)>1,     Helvetica    ˇˇ—ÚˇÆ(@l.Introduction to Interapplication Communication4⁄*˙¯
  1780. (‡*1-20    )B Supporting P).)AppleScript and Other Scripting Languages4^*¿¯,Zapf Dingbats°dONLNd_lfq(eln
  1781. °dONLNd\xh£) let users rv¿°dONLNd\£hµ)+ecorΠ°dONLNd\µh)d and edit scripts°dONLNd$qlxq(wln
  1782. °dONLNd&nxzÚ) compile and execute scripts°dONLNdBlãÑ(àlFigurR¿°dONLNdGÑãù)e 1-10@°dONLNdMùã£); shows how an application might execute a script that contrÆ °dONLNdà§ã÷(ৠols its own °dONLNdîålòì(ïlbehavior‹°dONLNdúåíò¢)&. ThŒ °dONLNd†å£òø)e appr·°dONLNd¶åøò=)opriate user action handler eN†°dONLNd√å>òú)xecutes the script in r* °dONLNd⁄åúòÍ)^esponse to a user °dONLNdÏôl•°(¢l action, whic‚‡°dONLNd¯ô°•¿)5h can b}Ä°dONLNdˇô¡•„) ?e almost anything: choosing a menu command, clicking a button, °dONLNd>¶l≤ó(Øl
  1783. tabbing fr≥`°dONLNdH¶ó≤)+om one table cell to another%`°dONLNdd¶≤·)z2, and so on. The script might consist of a single °dONLNdñ≥lø€(ºlVstatement that describes some default action, such as saving or printing, or a series °dONLNdÏ¿lÃw*of …`°dONLNdÔ¿wÃú) Fstatements that describe a series of tasks, such as setting default prÄ°dONLNd5¿ùÃ≠(…ùefer †°dONLNd9¿≠ÃÏ)ences or stylesB °dONLNdH¿ÌÃÚ)@. °dONLNdJÕlŸÑ(÷lFigurR¿°dONLNdOÕÑŸù)e 1-10@°dONLNdUÕùŸ£) s≠@°dONLNdWÕ§Ÿ)hows a script that corrH`°dONLNdnÕŸ])cesponds to a single Ç °dONLNdÇÕ]Ÿê)V
  1784. Apple evenäÄ°dONLNdåÕêŸù)3t, bTÄ°dONLNdêÕûŸ)ut the script could °dONLNd§⁄lÊ∑(„ljust as easily corr °dONLNd∑⁄∏Êfi)Lespond tK‡°dONLNdø⁄fiÊÍ)&o aA`°dONLNd¬⁄ÎÊ2) whole series of ‰Ä°dONLNd”⁄1Ês)FApple events. I ¿°dONLNd‚⁄tʉ)Cf your application allows °dONLNd¸ÁlÛÍ(lusers to modify such a scriptx`°dONLNdÁÎÛ
  1785. ), they c’ °dONLNd!Á
  1786. ÛÈ)3an modify the behavior of your application to suit °dONLNdTÙlü(˝l their needs.
  1787. "*3¯4#*3¯"#*]
  1788. ˇ·ˇ‚7^    °dONLNdal#ú*# Figure 1-10°dONLNdmÆ#)BControlling an application’[0°dONLNdà#¶)g$s own behavior by executing a script
  1789. °dONLNdÆ0l<r(9lY@Ä°dONLNdØ0r<@)0our application can associate a script with any `°dONLNdfl0@<°)ŒApple event object or °dONLNdı=lI±(Flapplication-defi|‡°dONLNd=≤Ifl)FEned object and execute the script when that object is manipulated in °dONLNdJJlVò(Slsome wayÄ°dONLNdRJòVÀ),I. The script can describe actions to be taken by your application, as in °dONLNdúWlcÑ(`lFigurR¿°dONLNd°WÑcù)e 1-10@°dONLNdßWùcÿ)K, or actions to be taken by several applications. For example, a user of a °dONLNdÚdlp}(mlworÄ°dONLNdıd~pë)d-prH@°dONLNd˘dëp)ocessing application mighé@°dONLNddp)st aP†°dONLNddpy) ttach a script to a specifiâ¿°dONLNd0dypë)jc wor Ä°dONLNd5dípÀ)d so that the °dONLNdCql}G(zl1application executes the script whenever that wor4`°dONLNdtqH}û)‹d is double-clicked.A °dONLNdàqû}ˆ)V Such a script could °dONLNdù~läå(áltrigger ôÄ°dONLNd•~åä;) 'Apple events that look up and display rP°dONLNdÃ~<äó)∞elated information fr˛°dONLNd·~óä÷)[om a separate °dONLNdÔãló°(îl document, r†°dONLNd˙ã¢óÿ)6 un a QuickTP°dONLNdãÿóÓ)6?ime movie, perform a calculation, play a voice annotation, and °dONLNdDòl§Ö(°lso on.
  1790. 2l¯40j1kò@@˜@˜1kqb¡¡?fiˇ¸Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?Èˇ˛˝¸ˇ˛Ê?Èˇ˛˝¸ˇ˛Ê?Èˇ˛˛¸ˇ˛Ê?Èˇ˛˛¸ˇ˛Ê?Èˇ˛ Ä¸ˇ˛Ê?Èˇ˛ @¸ˇ˛Ê?Èˇ˛!Á¯¸ˇ˛Ê?Èˇ˛¯¸ˇ˛Ê?Èˇ˛ ¿Ä¸ˇ˛Ê?Èˇ˛Ç`¸ˇ˛Ê?Èˇ˛ê¸ˇ˛Ê?Èˇ˛¸ˇ˛Ê?Èˇ˛‰¸ˇ˛Ê?Èˇ˛!R¸ˇ˛Ê?Èˇ˛"©¸ˇ˛Ê?Èˇ˛DQ¸ˇ˛Ê?Èˇ˛ Ñ)¸ˇ˛Ê?Èˇ˛ à4¸ˇ˛Ê?Èˇ˛!"¸ˇ˛Ê?Èˇ˛!Q¸ˇ˛Ê?Èˇ˛"hĸˇ˛Ê?Èˇ˛‘@¸ˇ˛Ê?Èˇ˛ ™ ¸ˇ˛Ê?Èˇ˛ ï¸ˇ˛Ê?Èˇ˛ äà¸ˇ˛Ê?Èˇ˛ ÖD¸ˇ˛Ê?Èˇ˛ Ç¶¸ˇ˛Ê?Èˇ˛êAY¸ˇ˛Ê?Èˇ˛P@π¸ˇ˛Ê?Èˇ˛0 a¸ˇ˛Ê?Èˇ˛#¸ˇ˛Ê?Èˇ˛ ¸ˇ˛Ê?Èˇ˛@¸ˇ˛Ê?Èˇ˛Ä¸ˇ˛Ê?Èˇ˛˝¸ˇ˛Ê?Èˇ˛˝¸ˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Êò@@Ę@Ęqk±b?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Êò@Ä¿˜Ä¿˜±kÒb?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Êò@¿˜¿˜Òk1b?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Ê?fiˇ˛Êfiˇ˛Ê¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  1791. «0@»
  1792. "H9¿»
  1793. b@@»
  1794. R8Ä»
  1795. ç–Ä»ò@@˜@˜1kqb
  1796. ÑòÄ»
  1797. ƒ>`9¿»¡¡¡¡¡* ‡¿pÄ?@˝ $IJ ˛È' @89!àĸ  Ä˛¸È+''£d
  1798. "mÏí[x-Ç©J2Ù[    ◊bÑ≤Í+êM#G;<(Ái\È+')dä"¥ëRMêVÖw™U$≠U£J’*TêßU -HQ
  1799. ã®È+'I,úí"•dâêîâ%4âI)$•"\ôLî°ƒË\IHêë0È+'f9AM¢∂”`˘èJ^ømS(™bêøV®·ãvs07XÈ+' N-89Ä‚I!$퇩
  1800. 1îJHí“C*$H†˚t\Rp°…êȯBÙ ˝à˯Bı@˝à˘‡BıÄ˝pË¡¡ 88 ‡@8˛Dfi(˛Äƒ¸@fi!Í›Ö0≠oâ÷∑+*î£/E±µµë≤2‰õfl!ï*#a)EQU5“TWz•RJ—Zö≤“UEMfl!nR"^KÖíb&%“î‰íSHîíëRíñîâäIfl!(TD«Z    ÔO(V    6àٕΈ’0é§$6øŒìfl"'hd∫mÕ:íJ§ç$x£D§â q%%$Jâ@‡ı˛ ıćı˛ ıćÒ ”¡¡ê†@8˛H⁄ă¸@⁄∑≤:'—69∑+-)#.E±µµë≤2Ëõ€“EVJíöÑ“T^ı%TJ—Zö≤“UIM€îIí—$í$Ñî‰î¶HòíëRíñîâíI€    6ä≥óµ&5    6à˘Kk¸’0é§$6ø⁄ì€$Ñ⁄…"$"$x¶2D®â q%%$Jë€ı@œı@œı@œ¡¡¿ê `Üê1Ç@Ä⁄ÄIJíêêJN@Ä⁄¢˛À—l:r@íêƇÍè÷B
  1801. Óí∫¿€    í¥Bïé·’*îöƒP/S@€    ,Ò%$§<.E ò‡S% $    é    rb@€∏:=µLHe!, U≠ñ B$¬ D≤¿€    -“)"Ht˜Cò¿…»i7$6yŒ úçª$Ä€ˆ˘Ÿˆ˘Ÿˆ˘Ÿ¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ęqk±b¡¡¡
  1802. ÄpÃ
  1803. Äàà äR"k)V±ÄŒ ùÍRµw$®“ÄŒ IL‚•%i»îÕ RñÅHIÕ    5ÄŒ Ïdp‚J1hç" ŒIJ@ÀIJ@À IJ@…¡¡ Ä¿Õ @ÄÕÌ@Ñ@|Y%Äœ *†ä†à)"™RŒ ëq¡¿$êJ'DíŒ °◊E[D^§Œ !h„ÓËœnC§DŒ˚»˚»¡¡¡ɇ¿¸ÄœA @HÄœA± ‹∂J/Ϻ¨–Å¿“ï!ZNPëIP–$îπRíœRP–Ç E5¢¶€É£⁄†–O»œ&fi9$Fí›"ë –¯ÄÀ¯ÄÀ¡¡¡ ¯`0  êêH  í?≠y,à  ñaíêpà  "fi§êà      ≥á'µ àê  "˙%" r` ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜±kÒb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜Òk#b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜1kqb¡¡›30ʛʠfiʛʛʛʠfiʛʠfiʛʛʛʠfiʛʠfiÊ
  1804. Á¯Ê
  1805. Á¯Ê Á Ä˘Ê Ë @˘Ê Á!Á¯˙ʠ˯˙ÊÁ ¿Ä˚ÊÁÇ`˚ÊÁê˚Ê Ë˚ÊÁ‰˚Ê Ë!R˚ÊÁ"©˚ÊÁDQ˚ÊÁ Ñ)˚Ê Ë à4˚ÊÁ!"˚Ê Ë!Q˚ÊÁ"hÄ˚ÊÁ‘@˚ÊÁ ™ ˚Ê Ë ï˚ÊÁ äà˚Ê Ë ÖD˚ÊÁ Ç¶˚Ê ÊêAY˚Ê ÊP@π˚Ê Á0 a˚Ê Ê#˚Ê Á ˚Ê Ê@˙Ê ÊÄ˙ʛʠfiʛʠÛ$ÊÚ$ÊÚ$ÌÜ77˚pH@˚ÊÚ%üKLĸàH˚Ê Û$q    CLĸdæ´{`¸ÊÚœ94ĸ¶≤W¿¸Ê Ëå•≤T@¸ÊÁs•K¿¸Ê›Ê›Ê fiÊ›Êò@@Ę@Ęqk±b  `Ê Ê@ÙˇÄÊ˛ÙàÄÊ ÌÙÄÊ¿ÙÄÊ Ò Ù"ÄÊÔdÙÄÊÔÙÄÊÔÙàÄÊ @ÙÄÊÔê¯ˇÄÊ Ò "(˘¢"ÄÊ˛êÄÄÊÒâ˛êÄÄÊÚˇÚ˛òàì∂ΩúààÄÊ Û Ûfl˛ñ|>VRÄÄÊÚ˛ëƒ&RÄÄÊ Û0¡˛ˇÛ(g<Õí¢"ÄÊÚx˛à˘ÄÄÊÚÜ˝Dà˘ÄÄÊÚ_¸˛àâà˘ààÄÊ Ûa¯p˛˛ÄÄÊÚ>¿˛ˇˆ˛ÄÄÊ ÛÔ˝>(ôœ3¢"ÄÊÒ<˝}3zÄÄÊÏe3BÄÄÊÏàà]/:ààÄÊ Ì˘ÄÄÊϯˇÄÄÊ Ì"'¯ˇ¢"ÄÊ ÏÙÄÊϸ˚ÄÊϸàäò˚àÄʠ̸˚ÄÊϸ˚ÄÊ Ì˚"2˚"ÄÊϸ˚ÄÊϸP˚ÄÊϸàäò˚àÄʠ̸˚ÄÊϸ˚ÄÊ Ì˚"2˚"ÄÊϸ˚ÄÊϸP˚ÄÊϸàäò˚àÄʠ̸˚ÄÊϸ˚ÄÊ Ì˚"2˚"ÄÊϸ˚ÄÊϸ\˚ÄÊϸàòå˚àÄʠ̸ ˚ÄÊϸ0˚Äʠ̸"#b˚"ÄÊϸ¿˚ÄÊ ÏÙÄÊ ÏÙàÄÊ ÌÙÄÊ ÏÙÄÊ ÌÙ"ÄÊ ÏÙÄÊ ÏÙÄÊ ÏÙàÄÊò@Ä¿˜Ä¿˜±kÒb Ì¸ˇ‡¸Äʈˇ¯˙¸ ¸ÄÊ ˆ ˙¸"3ˇÚ¸"Äʈ ˙¸¸Äʈ ˙¸¸Äʈ ˚¸à⡸àÄÊ ˆ ˚¸¸Äʈ ˚¸    ˇ–¸ÄÊ 0˝@˛ 7ˆˇ‚,¸"ÄÊ»˝L¿˛ `ˆ ˇ–¸ÄÊÅöq∏‹ÏÕΔv` ƒˆD` ¸ÄÊÇUJeÚK_/ü@ »ˆà®âˇ¸àÄÊ äUJeKS)ò@ `ˆ!¯¸ÄÊqïq§Ú*O'w@ 7ˆˇ„»0¸ÄÊ ˛@¸ ˚¸"X˚"ÄÊ ˛@¸‡ ˚˝p ¸Äʈ ˚˝``¸Äʈ ˙˝à䇻¸àÄÊ ˆ ˙˝ˇˇÄ¸Äʈ ˙ÙÄÊ ˆˇ¸˙Ù"Äʈˇ¸˙¸‡˚ÄÊÏ˝ ¸ÄÊϸàÀˇ¯¸àÄʠ̸4‘†¸ÄÊ˙~Ù˝T†¸ÄÊ ˚bÙ¸"„˜2¸"ÄÊ˙BÙ˚˚ÄÊ˙FÙ˚˚ÄÊ˙JÙÙàÄÊ ˚BÙÙÄÊ˙RÙÙÄÊ ˚bÙÙ"ÄÊ˙BÙÙÄÊ˙FÙÙÄÊ˙JÙÙàÄÊ ˚BÙÙÄÊ˙RÙÙÄÊ ˚bÙÙ"ÄÊ˙BÙÙÄÊ˙FÙÙÄÊ˙JÙÙàÄÊ ˚BÙÙÄÊ˙RÙÙÄÊ ˚bÙÙ"ÄÊ˙BÙÙÄÊ˚«¿ıÙÄÊ˚âÄıÙàÄÊ ˚√ÙÙÄÊ˙vÙÙÄÊ ˚<ÙÙ"ÄÊ˙ÙÙÄÊ ÏÙÄÊ ÏÙàÄʠ̯ˇÄÊÏ˘ÄÄÊ ˆˇ¯˙"(˘¢"Äʈ ˙Ä˝ÄÄʈ ˙@ÄÄʈ ˙àà\ÈÉKsÄààÄÊ ˆ ˙“õ«Ø…ÄÄʈ ˙2ö4IÄÄÊ  ˙ ?˙ˇˆ(<È√£»Ä¢"ÄÊ ˚   ˙Ä˝ÄÄÊò@¿˜¿˜Òk1b# mÁsÜmŒgp  ˙àÄ˝ÄÄÊôìLâöì)Ù†  ˘à˘ààÄÊ$ âìLàöì)ц  ˙à˛ÄÄÊ$y·Kájú…tê ?˙ˇÛ˛ÄÄÊ$ ˛ÄIJ ˙6(ôœ3¢"ÄÊ$˛Ä˛ ˙}3zÄÄʈ ˙e3BÄÄʈ ˙àà]/:ààÄÊ ˆ ˙˘ÄÄʈ ˙¯ˇÄÄÊ ˆˇ¸@˛"'¯ˇ¢"Äʈˇ¸
  1806. @ÙÄÊÚ
  1807. ÁLY‹ÙÄÊÚîfi=}(ÙàÄÊ Ûî–!°(ÙÄÊÚÁN$ÙÄÊ ÚÑ˝Ù"ÄÊÒÑ˝ÙÄÊ ÏÙÄÊ ÏÙàÄÊ ÌÙÄÊ ÏÙÄÊ ÌÙ"ÄÊ ÏÙˇÄʛʛʠfiʛʠfiʛʛʛʠfiʛʠfiÊ ›ÃÊfiUTÊ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  1808. «0@»
  1809. "H9¿»
  1810. b@@»
  1811. R8Ä»
  1812. ç–Ä»ò@@˜@˜1kqb
  1813. ÑòÄ»
  1814. ƒ>`9¿»¡¡¡¡¡* ‡¿pÄ?@˝ $IJ ˛È' @89!àĸ  Ä˛¸È+''£d
  1815. "mÏí[x-Ç©J2Ù[    ◊bÑ≤Í+êM#G;<(Ái\È+')dä"¥ëRMêVÖw™U$≠U£J’*TêßU -HQ
  1816. ã®È+'I,úí"•dâêîâ%4âI)$•"\ôLî°ƒË\IHêë0È+'f9AM¢∂”`˘èJ^ømS(™bêøV®·ãvs07XÈ+' N-89Ä‚I!$퇩
  1817. 1îJHí“C*$H†˚t\Rp°…êȯBÙ ˝à˯Bı@˝à˘‡BıÄ˝pË¡¡ 88 ‡@8˛Dfi(˛Äƒ¸@fi!Í›Ö0≠oâ÷∑+*î£/E±µµë≤2‰õfl!ï*#a)EQU5“TWz•RJ—Zö≤“UEMfl!nR"^KÖíb&%“î‰íSHîíëRíñîâäIfl!(TD«Z    ÔO(V    6àٕΈ’0é§$6øŒìfl"'hd∫mÕ:íJ§ç$x£D§â q%%$Jâ@‡ı˛ ıćı˛ ıćÒ ”¡¡ê†@8˛H⁄ă¸@⁄∑≤:'—69∑+-)#.E±µµë≤2Ëõ€“EVJíöÑ“T^ı%TJ—Zö≤“UIM€îIí—$í$Ñî‰î¶HòíëRíñîâíI€    6ä≥óµ&5    6à˘Kk¸’0é§$6ø⁄ì€$Ñ⁄…"$"$x¶2D®â q%%$Jë€ı@œı@œı@œ¡¡¿ê `Üê1Ç@Ä⁄ÄIJíêêJN@Ä⁄¢˛À—l:r@íêƇÍè÷B
  1818. Óí∫¿€    í¥Bïé·’*îöƒP/S@€    ,Ò%$§<.E ò‡S% $    é    rb@€∏:=µLHe!, U≠ñ B$¬ D≤¿€    -“)"Ht˜Cò¿…»i7$6yŒ úçª$Ä€ˆ˘Ÿˆ˘Ÿˆ˘Ÿ¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ęqk±b¡¡¡
  1819. ÄpÃ
  1820. Äàà äR"k)V±ÄŒ ùÍRµw$®“ÄŒ IL‚•%i»îÕ RñÅHIÕ    5ÄŒ Ïdp‚J1hç" ŒIJ@ÀIJ@À IJ@…¡¡ Ä¿Õ @ÄÕÌ@Ñ@|Y%Äœ *†ä†à)"™RŒ ëq¡¿$êJ'DíŒ °◊E[D^§Œ !h„ÓËœnC§DŒ˚»˚»¡¡¡ɇ¿¸ÄœA @HÄœA± ‹∂J/Ϻ¨–Å¿“ï!ZNPëIP–$îπRíœRP–Ç E5¢¶€É£⁄†–O»œ&fi9$Fí›"ë –¯ÄÀ¯ÄÀ¡¡¡ ¯`0  êêH  í?≠y,à  ñaíêpà  "fi§êà      ≥á'µ àê  "˙%" r` ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜±kÒb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜Òk#b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜#kcb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ęck£b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜£k„b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜„k#b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜#kcb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ęck£b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜£k„b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜„kb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜#kcb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ęck£b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜£k„b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜„k#b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜#kcb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ęck£b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜£k„b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜„kb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ˇrB@ˇ ˇˇˇˇ@
  1821. ˇ·ˇ‚7^
  1822. 4H\, Palatino&e.3+ä"CHAPTER à)>1,     Helvetica    ˇˇ—ÚˇÆ(@ä.Introduction to Interapplication Communication4⁄ä˙(‡ä Supporting P).)AppleScript and Other Scripting Languages
  1823. , (‡1-21
  1824. ˇˇˇˇˇˇˇˇ4^4|lòÄ2^A|rMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""^A|r^A|r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  1825. ^6|@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""^6|@^6|@˜˜˜˜˜˜˜˜˜˜˜˜˜˙ˇˇ˙ˇ˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜
  1826. 4Å4w?òÄ
  1827. Å6w@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""Å6w@Å6w@$˜˙ˇ˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˛¸ˇˇ
  1828. ˇ˛ˇ˛¸ˇ˛¸ˇ˝˚ˇ˛˛˛ˇ˝
  1829. ˇ˛ˇ˛
  1830. ˇ˛ˇ˛˛˛ˇ˝˜˛˛ˇ˝
  1831. ˇ˛ˇ˛
  1832. ˇ˛ˇ˛˙ˇ˜˛˝ˇ˛ˇ˙˛ˇ˚¸ˇ˛˜˛˛ˇ˝
  1833. ˇ˛ˇ˛
  1834. ˇ˛ˇ˛˛ˇˇ˝˜˛¸ˇˇ
  1835. ˇ˛ˇ˛    ¸ˇˇ˜˛˛ˇ˝
  1836. ˇ˛ˇ˛
  1837. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˜˛¸ˇˇ
  1838. ˇ˛ˇ˛˛˛ˇ˝
  1839. ˇ˛ˇ˛
  1840. ˇ˛ˇ˛˛˛ˇ˝˜˜˜˜˜˙ˇ¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˛¸ˇˇ
  1841. ˇ˛ˇ˛˜˛˛ˇ˝
  1842. ˇˇˇ˛
  1843. ˇˇˇ˛    ˇˇˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˛ˇˇ˝
  1844. ˇˇˇ˛
  1845. ˇˇˇ˛˛˛ˇ˝ˇ˙˙ˇ˛
  1846. ˇ˛ˇ˛
  1847. ˇ˛ˇ˛˛˛ˇ˝˜˙ˇ˛
  1848. ˇ˛ˇ˛
  1849. ˇ˛ˇ˛˛˛ˇ˝˜˙ˇ˜    ¸ˇˇ˜˛˛ˇ˝
  1850. ˇ˛ˇ˛
  1851. ˇ˛ˇ˛˛ˇˇ˝˛ˇˇ˝
  1852. ˇˇˇ˛
  1853. ˇˇˇ˛˛˛ˇ˝ˇ˙˛¸ˇˇ
  1854. ˇ˛ˇ˛˜    ¸ˇˇ˜˛˛ˇ˝
  1855. ˇ˛ˇ˛
  1856. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˝˛ˇ˛
  1857. ˛ˇ˛ˇˇ    ˇ¸ˇ    ˇ¸ˇ
  1858. ˛ˇ˛ˇˇ˜˜˛˛ˇ˝
  1859. ˇ˛ˇ˛
  1860. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛˚ˇ˛˝ˇ˝˚ˇ˛˚ˇ˛˝ˇ˝˜¸ˇ˛˚ˇ˛˝ˇ˝˚ˇ˛˚ˇ˛˝ˇ˝˜˜˛˝ˇ˛ˇ˙˛ˇ˚¸ˇ˛˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜    ¸ˇˇ˜˛˛ˇ˝
  1861. ˇ˛ˇ˛
  1862. ˇ˛ˇ˛˛ˇˇ˝˛ˇˇ˝
  1863. ˇˇˇ˛
  1864. ˇˇˇ˛˛˛ˇ˝ˇ˙˛¸ˇˇ
  1865. ˇ˛ˇ˛˜    ¸ˇˇ˜˛˛ˇ˝
  1866. ˇ˛ˇ˛
  1867. ˇ˛ˇ˛˛˛ˇ˝˜¸ˇ˛¸ˇ˝˚ˇ˛˝ˇ˝˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\äh¢(eäFigurR¿°dONLNd\¢h∂)e 1-1c†°dONLNd
  1868. \∂hª)1c†°dONLNd \ªhì)1 shows one way that a script can be used to contrG¿°dONLNd<\ìhœ)ÿol two or mor´ °dONLNdI\œh)<e applications. °dONLNdYiäuß(rä=When a user chooses the Post Invoice command in the accountin„`°dONLNdñißu„(rßg application,)`°dONLNd§i‰u )=
  1869.  the user °dONLNdÆväÇ(äTaction handler for that menu command executes a default script for posting an invoic˜†°dONLNdvÇ (e. °dONLNdÉäèg(åä3That script might describe actions such as saving tÔÄ°dONLNd8Égè)›(he invoice, updating the sales journal, °dONLNd`êäúF(ôä)and so on. The scripting component sends Í`°dONLNdâêFú…)ºApple events to the accountin≤°dONLNd¶ê ú    )Ñg application t:`°dONLNdµê
  1870. ú)@o °dONLNd∑ùä©Ó(¶äperform these actions. 
  1871. ÀH‹4ÃH‹"ÃH]
  1872. ˇ·ˇ‚7^    °dONLNdœ¡äÃ∫*# Figure 1-11°dONLNd€¡ÃÓ)BPÄ¿°dONLNd‹¡“Ãœ)?osting an invoice and updating a database by executing a script
  1873. °dONLNdBäN»(KäThe accountinÊ`°dONLNd*B»N    )>g application a,`°dONLNd9B
  1874. N)B:lso allows users to open the default invoice-posting scrip¿°dONLNdsBN)˚t in °dONLNdxOä[…(XäScript Editor a‡°dONLNdáO [~)@*nd modify it so that additional actions arH¿°dONLNd±O~[)¥!e performed when it is executed. °dONLNd“\äh˝(eäFor example, as shown in dONLNdÎ\˝h)sFigurg`°dONLNd\h))e 1-1x@°dONLNdı\)h.)1x@°dONLNdˆ\.hé), the script could instr´ °dONLNd\éh)`uct the SurfDB application to °dONLNd,iäu(räXupdate a database of customer information in addition to performing the default posting °dONLNdÑväÇn*5actions. In this case, the scripting component sends $@°dONLNdπvnÇ)‰"Apple events to both the accountin|¿°dONLNd€vÇ)ög °dONLNd›Éäè√(åäapplication a∂‡°dONLNdÍÉ√è–)9?nd SurfDB to carry out all the actions described by the script.
  1875. ‹â*4€à‹âò@@˜@˜‹âÄ¡¡?›ˇ¯Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?ˡ‡ ˚ˇ¸Á?ˡ‡P˚ˇ¸Á?ˡ‡à˚ˇ¸Á?ˡ‡˚ˇ¸Á?ˡ‡˚ˇ¸Á?ˡ‡˚ˇ¸Á?ˡ‡Ä˚ˇ¸Á?ˡ‡@˚ˇ¸Á?ˡ‡  ˚ˇ¸Á?ˡ‡@˚ˇ¸Á?ˡ‡Ä˚ˇ¸Á?ˡ·˚ˇ¸Á?ˡ‚˚ˇ¸Á?ˡ‰˚ˇ¸Á?ˡˇü˚ˇ¸Á?ˡ_˚ˇ¸Á?ˡË?˚ˇ¸Á?ˡ‰&_˚ˇ¸Á?ˡ‚9ü˚ˇ¸Á?ˡ·œÒ˙ˇ¸Á?ˡ‡ÄF˙ˇ¸Á?ˡ‡@ ˙ˇ¸Á?ˡ‡ ˙ˇ¸Á?ˡ‡ ˙ˇ¸Á?ˡ‡¸˙ˇ¸Á?ˡ‡C˙ˇ¸Á?ˡ‡Ä˙ˇ¸Á?ˡ‡˚ˇ¸Á?ˡ‡Ç˚ˇ¸Á?ˆˇ¸¸˙ˇ‡D˚ˇ¸Á?ˆˇ¸¸˙ˇ‡(˚ˇ¸Á?ˆˇ¸¸˙ˇ‡˚ˇ¸Á?˚ˇøˇˇˇ¸¸Ôˇ¸Á?˚ˇø˝ˇ¸¸Ôˇ¸Á?˚ˇ∏d«s«¸¸Ôˇ¸Á?˚ˇªd€g∑¸¸Ôˇ¸Áò@@Ę@Ęâ\Ä?˚ˇªd€gḸÔˇ¸Á?˚ˇªd€gø¸¸Ôˇ¸Á?˚ˇªe€eø¸¸Ôˇ¸Á?ˆˇ¸¸Ôˇ¸Á?ˆˇ¸¸Ôˇ¸Á?ˆˇ¸¸Ôˇ¸Á?ˆˇ¸¸Ôˇ¸Á?›ˇ¸Á?¸ˇÄˆ?Ôˇ¸Á?¸ˇÄˆ?Ôˇ¸Á?¸ˇÄˆ?Ôˇ¸Á?¸ˇÄ@¿IJ?Ôˇ¸Á?¸ˇ ÄG6@œ6yúp?Ôˇ¸Á?¸ˇ ÄM∂@Õ∂M¥ÿ?Ôˇ¸Á?¸ˇ ÄÕ∂@Õ∂M∞ÿ?Ôˇ¸Á?¸ˇ Äœ∂@Õ∂M∞¯?Ôˇ¸Á?¸ˇ ÄL∂@Õ¥M¥»?Ôˇ¸Á?¸ˇ ÄG?ÄÕºyúp?Ôˇ¸Á?¸ˇÄˆ?Ôˇ¸Á?¸ˇÄˆ?Ôˇ¸Á?¸ˇÄˆ?Ôˇ¸Á?¸ˇÄˆ?Ôˇ¸Á?¸ˇÄˆ?Ôˇ¸Á?¸ˇÄÄ¿00`˛?Ôˇ¸Á?¸ˇÄ¿00˚?Ôˇ¸Á?¸ˇ Äfifix3ƒŒg?Ôˇ¸Á?¸ˇ Ä‹€03d€d∂?Ôˇ¸Á?¸ˇ Ä€03d€d>?Ôˇ¸Á?¸ˇ Ä€03d€d0?Ôˇ¸Á?¸ˇ Ä€03dõd≤?Ôˇ¸Á?¸ˇ Ä€3gg?Ôˇ¸Á?¸ˇÄˆ?Ôˇ¸Á?¸ˇÄˆ?Ôˇ¸Á?¸ˇÄˆ?Ôˇ¸Á?›ˇ¸Á?›ˇ¸Á?˚ˇ¯ˇˇ˛Ρ¸Á?˚ˇ˚ˇˡ¸Á?˚ˇ˚uflvÕˆoÔÏˇ¸Á?˚ˇ¯dœvM∂OgÏˇ¸Á?˚ˇ    ˚‰«vM∂O˜Ìˇ¸Á?˚ˇ    ˚‰ÁvM∂O˜Ìˇ¸Á?˚ˇ    ˚ı˜ˇvOˆoˇ˜Ìˇ¸Á?Úˇ˜Óˇ¸Á ?Úˇ˜Ìˇ¸Á ?Úˇ˜Ìˇ¸Á ?Úˇ˜Ìˇ¸Á?¸ˇ˜ÄÔˇ¸Á?¸ˇ˜ÄÔˇ¸Á?¸ˇ˜¿Ôˇ¸Á?¸ˇˆ¿Ôˇ¸Á?¸ˇˆ@Ôˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Áò@Ä¿˜Ä¿˜\âúÄ?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Áò@¿˜¿˜úâ‹Ä?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Áò@@˜@˜‹âÄ?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?ˡIJ?˚ˇ¸Á?ˡᡡ¿?˚ˇ¸Á?ˡÑ@?˚ˇ¸Á?ˡÑ@?˚ˇ¸Á?ˡÑˇ˛@?˚ˇ¸Á?ˡÑîB@?˚ˇ¸Á?ˡÑˇ˛@?˚ˇ¸Á?ˡÑîB@?˚ˇ¸Á?ˡÑˇ˛@?˚ˇ¸Á?ˡÑò@?˚ˇ¸Á?ˡч¿?˚ˇ¸Á?ˡÑ¡0?˚ˇ¸Á?ˡÑÄ»?˚ˇ¸Á?ˡÖ?˚ˇ¸Á?ˡÜÚ?˚ˇ¸Á?ˡÑÅ©?˚ˇ¸Á?ˡàTø˚ˇ¸Á?ˡà"hø˚ˇ¸Á?ˡêB
  1876. Tø˚ˇ¸Á?ˡêDHø˚ˇ¸Á?ˡêÑI?˚ˇ¸Á?ˡêà G?˚ˇ¸Á?ˡë?¿?˚ˇ¸Á?ˡâ@?˚ˇ¸Á?ˡâ@?˚ˇ¸Á?ˡÑ@?˚ˇ¸Á?ˡÉ@?˚ˇ¸Á?ˡÅ@?˚ˇ¸Á?ˡÄê@?˚ˇ¸Á?ˡÄH ?˚ˇ¸Á?ˡÄ( ?˚ˇ¸Á?ˡć?˚ˇ¸Á?ˡÄ?˚ˇ¸Á?ˡIJ?˚ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Áò@@Ę@Ęâ\Ä?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á?›ˇ¸Á›ˇ¸Á¡¡¡¡¡¡¡¡¡¡¡
  1877. «0    Ä»
  1878. "H:@»
  1879. b@@»
  1880. R8Ä»    ç–«    Ñò«
  1881. ƒ>`;¿»¡¡¡¡¡*‡A‡@˛
  1882. ¿0D˝˝@ÄÍ#    @89¿ê¯
  1883. @@˝¸ÄÍ,('£d@í~vx]Öæ뱃TrÂ∑Çá.Z+ëDÑ“4z€¡G;U¿Í,()däÄ•ÑZê¶Ñ“©*ä“å∫•DŸ
  1884. T≠T)¨äu\ílÇàTzÄÍ+'I,úêÅ    xíë$àî GîÖì)àô    ô)ìÒ%NÖ§LÑáÑìÈ,f9˛!Å
  1885. ÊaÈç5S\5á%oÕ6˝Í¡Gh∑6õÅ∏ÂÄÍ+' N-89√Ñ˧·I    ""#ï&≈ô∫â.
  1886. ©Lß9Ö∑E§óHôÈ˙˘ ˚˝Ä È˙˘ ˚
  1887. ˝Ä È˘‡˘ ˚ ˝˛ È¡¡988 ‡@8˛DÅ$Å˛Ë ˛˜5(˛Äƒ¸ @ ˛@1¸˜;7Í›Ö0≠oâ÷∑+*î£/E±µµë≤2‰õo¨éâÙ[Aoä’JIã¢ÿ@Mz»Ìz-Ģ;7ï*#a)EQU5“TWz•RJ—Zö≤“UEM5Uí§≠¢5+ΩJï%h@¶≠Y5*íVĢ;7nR"^KÖíb&%“î‰íSHîíëRíñîâäI&d¥I)"&9I)î&IHA$©K&D§îĢ;7(TD«Z    ÔO(V    6àٕΈ’0é§$6øŒìO"¨ÂÌSDO"zR›øjò#IO_∂©Ä˘:6'hd∫mÕ:íJ§ç$x£D§â q%%$JâFJ!6≤HíÜJQåí*DêâRãJ%$I¯ı˛ ıĘÏı˛ ıĘÏ Ò ÍÏ¡¡¿ê `Üê1Ü@Ä⁄ÄIJíêêJI@Ä⁄¢˛À—l:r@íêƇÍè÷I
  1888. Óí∫¿€    í¥Bïé·’*îö8éP/S@€    ,Ò%$§<.E ò‡S%    é    rb@€∏:=µLHe!, U≠ñ F¬ D≤¿€ò@Ä¿˜Ä¿˜\âúÄ    -“)"Ht˜Cò¿…»i7$6;à úçª$Ä€ˆ˘Ÿˆ˘Ÿˆ˘Ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  1889. ÄpÃ
  1890. Äàà äR"k)V±ÄŒ ùÍRµw$®“ÄŒ IL‚•%i»îÕ RñÅHIÕ    5ÄŒ Ïdp‚J1hç" ŒIJ@ÀIJ@À IJ@…¡¡ Ä¿Õ @ÄÕÌ@Ñ@|Y%Äœ *†ä†à)"™RŒ ëq¡¿$êJ'DíŒ °◊E[D^§Œ !h„ÓËœnC§DŒ˚»˚»¡¡¡ɇ¿¸ÄœA @HÄœA± ‹∂J/Ϻ¨–Å¿“ï!ZNPëIP–$îπRíœRP–Ç E5¢¶€É£⁄†–O»œ&fi9$Fí›"ë –¯ÄÀ¯ÄÀ¡¡¡ ¯`0  êêH  í?≠y,à  ñaíêpà  "fi§êà      ≥á'µ àê  "˙%" r` ¡¡¡ò@¿Ú˜¿Ú˜úâŒÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜‹âÄ¡¡‹30Á‹Á ¬‹ Á‹Á‹ Á ¬‹Á ¬‹ Á‹Á‹ Á ¬ Ê@˘Á
  1891.  Áefl ÊAM‹˙ Á ÊA_(˙Á ÊEQ(˙ Á
  1892.  Á9O$fl‹Á ¬‹ Á‹Á‹ Á ¬‹Á Ê fi
  1893. ÂP˘ Á
  1894. Âà˘Á Ê˘ Á     Áfi Ê˘Á
  1895.  ÁÄfl Ê@˙ Á Ê  ˙Á Ê@˙ Á
  1896.  ÁÄflÁ˙Á  ËflÁ˙ ÁÁ‡Ä˚ÁÁ@˚ Á  Ë ‡Á&@˚Á  Ë9ćÁœÒ‡˚ ÁÊÄF‡˚ÁÊ@ ‡˚ Á  Á ‡‡Ê ‡˚Á  Á¸‡‡ÊC‡˚ ÁÊć˚Á Ê˘ Á ÊÇfi˚˚ˇ¸ÚD˘Á ¸˚ˇ¸Ú(fi˚˚ˇ¸Ú˘ Á˚ˇøˇˇˇ¸ÈÁ˚ˇø˝ˇ¸È Á ¸ˇ∏d«s«¸Œ˚ˇªd€g∑¸ÈÁò@@Ę@Ęâ\Ä ¸ˇªd€gḌ˚ˇªd€gø¸˜˛@  ˝ Á˚ˇªe€eø¸˜˛Ä@˝Á˚˚ˇ¸˜
  1897. ö]‹qùÃÃʇ˛ Á ¸˚ˇ¸˜
  1898. &fR“ì”->iê„˚˚ˇ¸˜
  1899. ¢&R“íS-iê˛Á ¸˚ˇ¸˜
  1900. ùŸ“Rq›ÃÓ&ê„˚ıˇ¯˙ Á˚Ĉ0¯‡˙Á˚Ĉ0Ô Á  ¸Äˆ0‘˚Ä@¿IJ0ÔÁ ¸ ÄG6@œ6yúp0‘˚ ÄM∂@Õ∂M¥ÿ0Ô Á˚ ÄÕ∂@Õ∂M∞ÿ0ÔÁ˚ Äœ∂@Õ∂M∞¯0Ô Á ¸ ÄL∂@Õ¥M¥»0‘˚ ÄG?ÄÕºyúp0ÔÁ  ¸Äˆ0‘˚Ĉ0Ô Á˚Ĉ0ÛˇÄÁ˚Ĉ0ÛàÄ Á ¸Äˆ0ÛÄÊ˚ÄÄ¿00`˛0ÛÄÁ ¸Ä¿00˚0Û"ÄÊ˚Äfifix3ƒŒg0ÛÄ Á˚Ä‹€03d€d∂0ÛÄÁ˚Ä€03d€d>0ÛàÄ Á ¸Ä€03d€d00ÛÄÊ˚Ä€03dõd≤0¯ˇÄÄÁ  ¸Ä€3gg0"$¯‚""ÄÊ˚Ĉ 0ê˛¿Ä Á˚Ĉ 0ê˛¿ÄÁ˚Ĉ0àåì∂‹‹»ààÄ Á ¸ıˇ ñ|=-2¿ÄÊ˚ıˇëƒ%2¿ÄÁ& ¸ˇ¯ˇˇ˛˛ˇ˛ˇ˚$g<‰“‚""ÄÊ˚ˇ˚ˇ˚ˇÄѯ¿Ä Á˚ˇ˚uflvÕˆoÔˇˇƒ˛Dƒ¯¿ÄÁ˚ ˇ¯dœvM∂Ogˇˇ˝àï»ààÄ Á& ¸ˇ˚‰«vM∂O˜ˇÄÑIJ¿ÄÊ%˚ ˇ˚‰ÁvM∂O˜ˇ˛ˇ˚IJ¿ÄÁ& ¸ˇ˚ı˜ˇvOˆoˇ˜ˇ.$ç«õ˛‚""ÄÊ˚˜ˇ˜ _)æ˛¿Ä Á˚˜ˇ˜ˇS)¢˛¿ÄÁ˚˜ˇ˜ˇàåO'û˛»ààÄ Á ¸˜ˇ˜ˇ¯¿ÄÊÒIJ¯¿ÄÁ ÚIJ"'¯ˇ‚""ÄÊÒ¿˛¯ˇ¿Ä Á¿˛ÛÄÁ@˛¸àã¯˙àÄ Á Ì¸˙ÄÊϸ˙ÄÁ Ì˚"*˙"ÄÊϸ˙Ä ÁϸH˙ÄÁϸàä˘àÄ Á Ì¸˙ÄÊϸ˙ÄÁ Ì˚"*˙"ÄÊϸ˙Ä ÁϸH˙ÄÁϸàä˘àÄ Áò@Ä¿˜Ä¿˜\âúĠ̸˙ÄÊϸ˙ÄÁ Ì˚"*˙"ÄÊϸ˙Ä ÁϸH˙ÄÁϸàéé˙àÄ Á Ì¸ ˙ÄÊϸ˙ÄÁ Ì¸"#2˙"ÄÊϸ‡˙Ä ÁÏ˚¿˙ÄÁ ÏÛàÄ Á  ÌÛÄÊ ÏÛÄÁ  ÌÛ"ÄÊ ÏÛÄ Á ÏÛÄÁÏ¸àˇˇ˙àÄ Á Ì¸¿Ä˚ÄÊϸO˛Ä˚ÄÁ ˆˇ¸˙¸"@‚˚"Äʈ˙¸O¸@˚Ä Áˆ˙¸`@˚ÄÁˆ˙¸àߡH˚àÄ Á ˆ˚¸ @˚Äʈ˚¸ @˚ÄÁ ˝ ˛˜ˇ˛"/ˇb˚"ÄÊd˝F`˛0˜ @˚Ä Á@⁄9úŒÊlÊ;`dˆD/¸@˚ÄÁA5&SÈEæüO¿H˜àå臻˚àÄ Á E5&S    E≤ôL@`˜@Ä˚ÄÊ8’9íÈ%.ó;¿1˜¿Ä˚ÄÁ ˛ ¸˜ˇ˛3Ä¢˚"ÄÊ˛ ¸p˚˝Ä˙Ä Áˆ˚˝˙ÄÁˆ˙˝àèˇ¸˙àÄ Á ˆ˙ÛÄʈ˙˝˘ÄÁ ˆˇ˛˙˝"*¢˘"Äʈˇ˛˙˝7w˙Ä ÁÏ˝ÕJ˙ÄÁϸàÕ ˙àÄ Á ˚Ù˝=q˙ÄÊ˙QÙ˚@˙ÄÁ ˚cÙ˚"b˙"ÄÊ˙AÙÛÄ Á˙EÙÛÄÁ˙IÙÛàÄ Á ˚AÙÛÄÊ˙QÙÛÄÁ ˚cÙÛ"ÄÊ˙AÙÛÄ Á˙EÙÛÄÁ˙IÙÛàÄ Á ˚AÙÛÄÊ˙QÙÛÄÁ ˚cÙÛ"ÄÊ˙AÙÛÄ Á˙EÙÛÄÁ˙IÙÛàÄ Á ˚AÙÛÄÊ˙QÙÛÄÁ ˚cÙÛ"ÄÊ˙AÙÛÄ Áò@¿˜¿˜úâ‹Ä˙EÙÛÄÁ˚…¿ıÛàÄ Á ¸Ä¿ıÛÄÊ˙—ÄıÛÄÁ ˚cÙÛ"ÄÊ˙6ÙÛÄ Á˙ÙÛÄÁÏàè¯ˇ˛àÄ Á ˆˇ˛˙¯¿Äʈ˙¯¿ÄÁ ˆ˙"$˛IJ‚""Äʈ˙˛(IJ¿Ä Áˆ˙˛)‹∞˛¿ÄÁˆ˙åå˛92¯˛»ààÄ Á ˆ˙˛E2¿˛¿Äʈ˙ˇ˚˛E‹∏˛¿ÄÁ ˆ˙§˛˝‚""Äʈ˘ƒ˛˝¿Ä Áˆ˘ƒ¯¿ÄÁˆ˙å˝    @P»ààÄ Á ˆ˙ˇ˚˛    @P¿Äʈ˙ ñÁqπ”`¿ÄÁ ˆ˙.$_íKÊW¿‚""Äʈ˙híJfT@¿Ä Áˆ˙GëI”¿¿ÄÁˆ˙à寻ààÄ Á ˆ˙¯ˇ¿Äʈ˙¯ˇ¿ÄÁ ˆ˙Û"Äʈ ˝ÛÄ ÁˆP˛@ÛÄÁˆSπ`…nÓÛàÄ Á ˆreÒ¢XÛÄʈäeÅâFÛÄÁ ˆãπp‰y<Û"Äʈ ˝ÛÄ Áˆ ˝¯ˇÄÄÁˆ˙à寻ààÄ Á ˆ˙˛IJ¿Äʈ˙˛(IJ¿ÄÁ ˆ˙.$˛)‹∞˛‚""Äʈ˙˛92¯˛¿Ä Áˆ˙ˇ˚˛E2¿˛¿ÄÁˆ˙å˛E‹∏˛»ààÄ Á ˆ˘ƒ˛˝¿Äʈ˘ƒ˛˝¿ÄÁ ˆ˙§¯‚""Äʈ˙ˇ˚˝    @P¿Ä Áˆ˙˛
  1901. @P¿ÄÁˆ˙åå ñÁqπ”`»ààÄ Á ˆ˙_íKÊW¿¿Äʈ˙híJfT@¿ÄÁ ˆ˙"$GëI”¿‚""Äʈ˙¯¿Ä Áˆ˙¯ˇ¿ÄÁˆ˙àã¯ˇ»ààÄ Á ˝p˝˙ÛÄÊ˝à˝˙ÛÄÁ ˝ckªé˛˙Û"ÄÊ˝ ZR˛˙ÛÄ Á˝åJZR˛˙ÛÄÁ˝sÀäN˛˙ÛàÄ Á ¸˛˙ÛÄʸ˛˙ÛÄÁò@@˜@˜‹âÄ ˆ˙Û"Äʈ˙ÛÄ Á˘ ˙ÛˇÄÁ˛mŒgpÍ Á ˛    öì)Ù†œ˛öì)цÍÁ ˛jú…tꜸ¸Í Á¸¸ÍÁˆÍ Á     ˆœˆÍÁ     ˆœˆÍ ÁˆÍÁˆÍ Á ˆ˜`ˇˇ¿flˆ˜p@˙Á ˆ¯ˇÿ@flˆ¯ ˇ˛@˙ Áˆ¯îB@˙Áˆ¯ˇ˛@˙ Á ˆ¯îB@flˆ¯ˇÃˇ˛@˙Á ˆ˜Xò@flˆ˜p‡¿˙ Áˆ˜`¡0˙ÁˆıÄ»˙ Á ˆıflˆıÚ˙Á ˆıÅ©flˆ@˙TÄ˚ Áˆ@˝"hÄ˚Áˆ    ÓX2[ªÄ˛B
  1902. TÄ˚ Á ˆô|y~V˝DHćˆ    "ô`A¢QIJÑI˙Á ˆ"Ó\9O˝à Gflˆ˛à˘?¿˙ Áˆ˛à˘    @˘Áˆı    @˘ Á ˆ˜`@fiˆ˜p@˘Á ˆ¯ˇÿ@fiˆ¯ ê@˘ Áˆ¯H ˘Áˆ¯( ˘ Á ˆ¯‡fiˆ¯ˇÃ¯Á ˆ˜X⁄ˆ˜pı Áˆ˜`ıÁˆÍ Á     ˆœˆı¿<˙Á ˆı ¢flıˇı캢˙ ÁıˇÙsº˙ÁÁ3¢˙ Á  Ëœ<fl‹Á ¬‹ Á‹Á‹ Áò@@Ę@Ęâ\Ä ¬‹Á ¬‹ Á‹Á‹ Á ¬‹Á ¬ ‹ÃÁ›UTÁ¡¡¡¡¡¡¡¡¡¡¡
  1903. «0    Ä»
  1904. "H:@»
  1905. b@@»
  1906. R8Ä»    ç–«    Ñò«
  1907. ƒ>`;¿»¡¡¡¡¡*‡A‡@˛
  1908. ¿0D˝˝@ÄÍ#    @89¿ê¯
  1909. @@˝¸ÄÍ,('£d@í~vx]Öæ뱃TrÂ∑Çá.Z+ëDÑ“4z€¡G;U¿Í,()däÄ•ÑZê¶Ñ“©*ä“å∫•DŸ
  1910. T≠T)¨äu\ílÇàTzÄÍ+'I,úêÅ    xíë$àî GîÖì)àô    ô)ìÒ%NÖ§LÑáÑìÈ,f9˛!Å
  1911. ÊaÈç5S\5á%oÕ6˝Í¡Gh∑6õÅ∏ÂÄÍ+' N-89√Ñ˧·I    ""#ï&≈ô∫â.
  1912. ©Lß9Ö∑E§óHôÈ˙˘ ˚˝Ä È˙˘ ˚
  1913. ˝Ä È˘‡˘ ˚ ˝˛ È¡¡988 ‡@8˛DÅ$Å˛Ë ˛˜5(˛Äƒ¸ @ ˛@1¸˜;7Í›Ö0≠oâ÷∑+*î£/E±µµë≤2‰õo¨éâÙ[Aoä’JIã¢ÿ@Mz»Ìz-Ģ;7ï*#a)EQU5“TWz•RJ—Zö≤“UEM5Uí§≠¢5+ΩJï%h@¶≠Y5*íVĢ;7nR"^KÖíb&%“î‰íSHîíëRíñîâäI&d¥I)"&9I)î&IHA$©K&D§îĢ;7(TD«Z    ÔO(V    6àٕΈ’0é§$6øŒìO"¨ÂÌSDO"zR›øjò#IO_∂©Ä˘:6'hd∫mÕ:íJ§ç$x£D§â q%%$JâFJ!6≤HíÜJQåí*DêâRãJ%$I¯ı˛ ıĘÏı˛ ıĘÏ Ò ÍÏ¡¡¿ê `Üê1Ü@Ä⁄ÄIJíêêJI@Ä⁄¢˛À—l:r@íêƇÍè÷I
  1914. Óí∫¿€    í¥Bïé·’*îö8éP/S@€    ,Ò%$§<.E ò‡S%    é    rb@€∏:=µLHe!, U≠ñ F¬ D≤¿€ò@Ä¿˜Ä¿˜\âúÄ    -“)"Ht˜Cò¿…»i7$6;à úçª$Ä€ˆ˘Ÿˆ˘Ÿˆ˘Ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  1915. ÄpÃ
  1916. Äàà äR"k)V±ÄŒ ùÍRµw$®“ÄŒ IL‚•%i»îÕ RñÅHIÕ    5ÄŒ Ïdp‚J1hç" ŒIJ@ÀIJ@À IJ@…¡¡ Ä¿Õ @ÄÕÌ@Ñ@|Y%Äœ *†ä†à)"™RŒ ëq¡¿$êJ'DíŒ °◊E[D^§Œ !h„ÓËœnC§DŒ˚»˚»¡¡¡ɇ¿¸ÄœA @HÄœA± ‹∂J/Ϻ¨–Å¿“ï!ZNPëIP–$îπRíœRP–Ç E5¢¶€É£⁄†–O»œ&fi9$Fí›"ë –¯ÄÀ¯ÄÀ¡¡¡ ¯`0  êêH  í?≠y,à  ñaíêpà  "fi§êà      ≥á'µ àê  "˙%" r` ¡¡¡ò@¿Ú˜¿Ú˜úâŒÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜ŒâÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘâNÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜NâéÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜éâŒÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜ŒâÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘâNÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜NâéÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜éâ¿Ä¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜ŒâÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘâNÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜NâéÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜éâŒÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜ŒâÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘâNÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜NâéÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜éâ¿Ä¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ˇñ@ˇ ˇˇˇˇ@
  1917. ˇ·ˇ‚7^
  1918. 4*\¯, Palatino&e.3+l"CHAPTER à)>1,     Helvetica    ˇˇ—ÚˇÆ(@l.Introduction to Interapplication Communication4⁄*˙¯
  1919. (‡*1-22    )BExchanging Message Blocks4^*¿¯
  1920. °dONLNd\lhÄ(elTher¿°dONLNd\Åh7)-e is no limit to the actions such a script ca}°dONLNd1\7hf)∂ n describe.@°dONLNd<\ghŒ)0 In addition to sending °dONLNdTilu|(rlthe °dONLNdXi|u‰)Apple events shown in Ï¿°dONLNdni‰u¸)hFigurøÄ°dONLNdsi¸u)e 1-1–`°dONLNdxiu)1–`°dONLNdyiu◊)., the invoice-posting script could be used to °dONLNdßvlÇå(ltrigger ôÄ°dONLNdØvåÇã) :Apple events that cause other applications to perform a crj@°dONLNdÈvåÇÂ(åedit check, send the °dONLNd˛Élè˚(ål!invoice to the customer by electrìÄ°dONLNdÉ˚èF)èonic mail, forwar/¿°dONLNd0ÉGèÀ)Ld inventory information to a r8`°dONLNdNÉÀèË)Ñemote °dONLNdTêlúˇ(ôl!server on the network, and so on.°dONLNdv¢lÆË*SThe chapter “Scripting Components” in this book describes how your application can °dONLNd…ØlªØ*use the standarú†°dONLNdÿØت)Cd scripting component rÛ °dONLNdÔتı)j2outines to manipulate and execute its own scripts °dONLNd!ºl»(≈l)and allow users to modify those scripts. …‡°dONLNdJº» )≤ I‡°dONLNdKº!»#) 
  1921. œ*ͯ4–*ͯ
  1922. ˙*¯4˚*¯ ¸*¸˛
  1923. ˇ·ˇ‚7^ˇˇ©ˇÆ°dONLNdNÁ*˙Ù(ı*Exchanging Message BlocksˇˇˇˇˇˇV˛(ı1
  1924. °dONLNdi lr(lY@Ä°dONLNdj r‡)ou should be able to meev@°dONLNdÇ ‡Ó)nt m †°dONLNdÖ Ôø)/ost of your application’s IAC needs by using th6°dONLNd¥ øΔ)–e !@°dONLNd∂ Δ”)Ap͆°dONLNd∏ ”„)ple °dONLNdºl$∑(!lEvent Manager o&‡°dONLNdÀ∏$¡)Lr t€‡°dONLNdŒ¡$)    he Event Manager͇°dONLNdfi$?)P    . HoweverwÄ°dONLNdÁ?$∫)., if you need low-level contr`°dONLNdª$À)|ol od¿°dONLNdÀ$’)r s`°dONLNd ÷$˜) ervices °dONLNd%l1Ü(.lnot prP`°dONLNd%á1Æ)ovided b]@°dONLNd!%Æ1Δ)'y the k`°dONLNd'%Δ1/)Apple Event Manager o¿°dONLNd<%01ä)jr the Event Manager”¿°dONLNdO%â1Í)Y, you can use the PPC °dONLNde2l>r(;lTµ¿°dONLNdf2q>¬)oolbox. The PPC T †°dONLNdw2¬>+)Qoolbox lets you send lar¢°dONLNdè2+>fl)i)ge amounts of data to other applications °dONLNd∏?lK (Hl#located on the same computer or acr”¿°dONLNd€? K})†oss a network. The PPC T
  1925. †°dONLNdÛ?}Kı)qoolbox can also be used by °dONLNdLlX…(Ulpieces of code that arZ†°dONLNd$L…XN)]e not event-driven. The PPC T¢`°dONLNdALMX‘)Ñ oolbox is usually called by the °dONLNdaYleÙ(blYOperating System; device drivers, desk accessories, or other code modules can also use itÎ`°dONLNd∫YÙeˆ(bÙ.°dONLNdºklwr(tlY@Ä°dONLNdΩkrwµ)ou cannot use tX °dONLNdÃkµw›)Che PPC TS °dONLNd‘k›wU)(oolbox to send data betwee”‡°dONLNdÓkUwπ)xn applications unless b•@°dONLNdk∫w‹)eoth you∫@°dONLNd k‹w‚)"r °dONLNdxlÑ•(Ålapplication a∂‡°dONLNdx•Ѻ)9nd th7¿°dONLNd xΩÑ˛)e application yG`°dONLNd/x˛Ñ)Aou’rP@°dONLNd3xÑ~)e communicating with ar¸ °dONLNdJx~ÑÎ)ne open at the same time. °dONLNdcÖlër(élTµ¿°dONLNddÖqë) o initiate communication, one prå@°dONLNdÑÖëd)êogram opens a port an% °dONLNdôÖeëq)dd rÖ‡°dONLNdúÖqëô)     equests aı¿°dONLNd•Öôë‘)( session with °dONLNd≥ílûö(õl
  1926. another prfi°dONLNdΩíöû€).ogram. The tarÏ`°dONLNdÀí€û«)A6get application must also open a port and accept the rq °dONLNdí»ûÈ)Ìequest. °dONLNd    ül´(®l)Once a session is established, the two prч°dONLNd2ü´V)± ograms can rì¿°dONLNd>üV´È)9 ead and write low-level message °dONLNd^¨l∏à(µlblocks°‡°dONLNdd¨à∏ç). °dONLNdgæl õ(«l    The PPC Tõ¿°dONLNdpæö ÿ).oolbox also prˆ‡°dONLNd~æÿ  )>ovides a standarN‡°dONLNdéæ! Î)I/d user interface that allows a user working in °dONLNdΩÀl◊Ì(‘lWone application to select another application with which to exchange data, whether the °dONLNdÿl‰*&communication is achieved by means of LJ°dONLNd:ÿ‰‘)≥*Apple events, other high-level events, or °dONLNddÂlÒ≤(Ólmessage blocks.°dONLNdt˜lr*T†¿°dONLNdu˜r±)he chapter “PrL¿°dONLNdɘ≤Ë)@ ogram-to-PrF@°dONLNdé˜Ë\)6ogram Communications T[Ä°dONLNd§˜[‚)soolbox” in this book describes °dONLNd√lq(lhQ`°dONLNdƒrå)ow pre°dONLNd…å)ograms can exchange lu@°dONLNdfiX)dow-level message blockı °dONLNdÙX^)hs.≤ °dONLNdˆ_a) 2 °dONLNd˜bd) ≤ °dONLNd¯df) 2 °dONLNd˘gi) ˇ †@ˇ ˇˇˇˇ@
  1927. ˇ·ˇ‚7^
  1928. 4⁄∫˙,     Helvetica    .(‡∫Contents, Palatino
  1929. , (‡    2-1    3, Ã(#∫CHAPTER ÿ)h2
  1930. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  1931. ∏6÷@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  1932. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜ˇˇˇˇˇˇ(JH
  1933. Figure 2-0*     Listing 2-0*    T)able 2-0
  1934. zH,
  1935. 4zH, H°dONLNd∫*˘+m Contentsˇˇˇˇˇˇ
  1936. ˇ·ˇ‚7^ˇˇ∫Ρ◊(qH2°dONLNd[∫x)rEdition Manager
  1937. °dONLNd;∫G *”Intr∑@°dONLNd; Gˇ) oduction to È`°dONLNd);ˇG¢)5%Publishers, Subscribers, and Editionsm`°dONLNdP;∑Gƒ)∏2-4°dONLNdTH∫T3(Q∫About the Edition Manager¿°dONLNdoHHTZ)é2-12°dONLNdtU∫a1(^∫Using the Edition ManagerN°dONLNdèUFaX)å2-12°dONLNdîbƒnÚ(kƒ
  1938. Receiving *†°dONLNdûbÚn9).Apple Events Frÿ†°dONLNd≠b9n§)Gom the Edition Manager£°dONLNd≈bπnÀ)Ä2-13°dONLNd oƒ{œ(xƒCr\°dONLNdÃoœ{8) eating the Section Recor‡°dONLNd‰o9{U)jd and Δ`°dONLNdÍoT{Ü) Alias Recor=¿°dONLNdıoá{ç)3dYÄ°dONLNd¯o°{≥)2-15°dONLNd˝|ƒàu(Öƒ%Saving a Document Containing Sections’Ä°dONLNd$|âàõ)≈2-19°dONLNd)âƒïµ(íƒ2Opening and Closing a Document Containing SectionsP`°dONLNd]â ï‹(í 2-22°dONLNdbñƒ¢(üƒReading and Wå°dONLNdoñ¢J)Driting a Section›Ä°dONLNdÅñ^¢p)V2-24°dONLNdÜ£ŒØ-(¨ŒFormats in an Editiong@°dONLNdù£BØT)t2-24°dONLNd¢∞Œº%(πŒOpening an Edition§¿°dONLNd∂∞9ºK)k2-26°dONLNdªΩŒ… (ΔŒ Format MarksA†°dONLNd…Ω!…3)S2-27°dONLNdŒ Œ÷(”ŒReading and Wå°dONLNd€ ÷d)Driting Edition DataÉ`°dONLNd y÷ã)g2-27°dONLNdı◊Œ„ (‡ŒClosing an Edition›†°dONLNd    ◊4„F)f2-28°dONLNd‰ƒœ(̃Cr\°dONLNd‰œ) eating a Publisher‰†°dONLNd$‰2D)c2-29°dONLNd)ÒŒ˝Ÿ(˙ŒCr\°dONLNd+ÒŸ˝V) eating the Edition Container∂°dONLNdIÒj˝|)ë2-32°dONLNdN˛Œ
  1939. k(Œ!Opening an Edition Container to W5Ä°dONLNdo˛k
  1940. ë)ù    rite Dataú °dONLNdz˛•
  1941. ∑):2-35°dONLNd ƒœ(ƒCr\°dONLNdÅ œ") eating a SubscriberKÄ°dONLNdñ 7I)h2-37°dONLNdõŒ$è(!Œ)Opening an Edition Container to Read Data‡°dONLNdΔ§$∂)÷2-41°dONLNdÀ%Œ1Å(.Œ%Choosing Which Edition Format to Read?°dONLNdÚ%ñ1®)»2-41°dONLNd˜2ƒ>u(;ƒ&Using Publisher and Subscriber Options@°dONLNd2ä>ú)Δ2-43°dONLNd$?ŒK∂(HŒ1Publishing a New Edition While Saving or Manuallyq¿°dONLNdW?ÀK›)˝2-47°dONLNd\LŒX@(UŒSubscribing to an Edition c†°dONLNdvL@X∏)rAutomatically or ManuallyŒÄ°dONLNdëLÃXfi)å2-48°dONLNdñYŒe-(bŒCanceling Sections Wo °dONLNd™Y-ev)_ithin Documents=Ä°dONLNdªYãeù)^2-48°dONLNd¿fŒr;(oŒLocating a Publisher Thrw†°dONLNdÿf;rä)mough a SubscriberÔ`°dONLNdÎfûr∞)c2-49°dONLNdsƒÑ(|ƒ'Renaming a Document Containing Sections Ä°dONLNdsô´)’2-50°dONLNdăåw(âƒ'Displaying Publisher and Subscriber Bor6‡°dONLNdEÄxåã)¥dersK‡°dONLNdKÄüå±)'2-50°dONLNdPçŒô‘(ñŒTµ¿°dONLNdQç”ôÚ)ext Bor¿†°dONLNdXçÚô)ders’†°dONLNd^çô+)'2-54°dONLNdcöŒ¶›(£ŒSpr܇°dONLNdfö›¶) eadsheet Bor&Ä°dONLNdrö¶))9ders;Ä°dONLNdxö=¶O)'2-55ˇû@ˇ ˇˇˇˇ@
  1942. ˇ·ˇ‚7^
  1943. 4*\¯, Palatino&e.3+ú"CHAPTER à)>24⁄*˙¯
  1944. (‡*2-2,     Helvetica    )rContents4^*¿¯
  1945. °dONLNd\∞h3(e∞Object-Oriented Graphics Bor◊ °dONLNd\3hF)ÉdersÏ °dONLNd"\Zhl)'2-56°dONLNd'i∞u(r∞Bitmapped Graphics Bor◊@°dONLNd=iu0)mdersÏ@°dONLNdCiDuV)'2-57°dONLNdHv∞Ç^(∞&Duplicating Publishers and Subscribers»@°dONLNdpvrÇÑ)¬2-58°dONLNduɶè(å¶Modifying a Subscriber5`°dONLNdçÉ"è4)|2-59°dONLNdíê¶ú(ô¶Relocating an Edition≥‡°dONLNd©êú+)s2-60°dONLNdÆù¶©(¶¶Customizing Dialog BoxesÎ`°dONLNd»ù/©A)â2-60°dONLNdÕ™ú∂,(≥ú Subscribing to Non-Edition Files¿¿°dONLNdÔ™@∂R)§2-62°dONLNdÙ∑¶√Ô(¿¶Getting the CurrkÄ°dONLNd∑Ô√C)Ient Edition Opener†°dONLNd∑X√j)i2-63°dONLNdƒ¶–(Õ¶Setting an Edition Openero °dONLNd8ƒ-–?)á2-63°dONLNd=—¶›(⁄¶Calling an Edition Opener»¿°dONLNdX—.›@)à2-64°dONLNd]fi¶Í+(Á¶Opening and Closing Editionsx@°dONLNd{fi@ÍR)ö2-68°dONLNdÄζ˜P(Ù¶&Listing Files That Can Be Subscribed TƆ°dONLNd¶ÎO˜T)©o$ °dONLNd©Îi˜{)2-68°dONLNdƯ¶÷(¶
  1946. Reading Fr0`°dONLNd∏¯◊)1om and W©†°dONLNd¿¯>)-riting to Files.@°dONLNd—¯Se)O2-68°dONLNd÷¶-(¶Calling a Format I/O FunctionQ`°dONLNdıBT)ú2-68°dONLNd˙ú(úEdition Manager Refer˝†°dONLNd)dence“Ä°dONLNd(:)(2-71°dONLNd¶+…((¶Data Str``°dONLNd" +·)$ucturÊ@°dONLNd'·+Í)esχ°dONLNd+˛+)2-71°dONLNd0,∞8.(5∞The Edition Container RecorÖ‡°dONLNdK,.84)~d°†°dONLNdN,H8Z)2-71°dONLNdS9∞E˛(B∞The Section RecorI`°dONLNdd9ˇE)Ode °dONLNdg9E+)2-72°dONLNdlF¶R(O¶Edition Manager Routines–‡°dONLNdÜF.R@)à2-73°dONLNdãS∞_=(\∞ Initializing the Edition Manager]Ä°dONLNd≠SR_d)¢2-74°dONLNd≤`∞lª(i∞Cr\°dONLNd¥`ªlH)  eating and Registering a Section¸‡°dONLNd÷`\ln)°2-74°dONLNd€m∞yª(v∞Cr\°dONLNd›mªyp) (eating and Deleting an Edition Container[@°dONLNdmÖyó) 2-79°dONLNd z∞ÜJ(É∞!Setting and Getting a Format Mark °dONLNd/z_Üq)Ø2-81°dONLNd4á∞ì(ê∞Reading in Edition Data' °dONLNdMá/ìA)2-83°dONLNdRî∞†∫(ù∞W¬†°dONLNdSîπ†)    riting out Edition Data˘°dONLNdlî1†C)x2-86°dONLNdq°∞≠(™∞Closing an Edition ˇ@°dONLNdÑ°≠Z)TAfter Reading or W °dONLNdñ°[≠s)WritingÜ@°dONLNdû°á≠ô),2-88°dONLNd£Æ∞∫(∑∞Displaying Dialog Boxesx@°dONLNdºÆ1∫C)Å2-90°dONLNd¡ª∞«M(ƒ∞#Locating a Publisher and Edition Frì@°dONLNd‰ªM«ì)ùom a Subscriberw`°dONLNdıª®«∫)[2-98°dONLNd˙»∞‘%(—∞Edition Container Formatsr`°dONLNd»:‘Q)ä2-101°dONLNd’∞·Ù(fi∞Reading and Wå°dONLNd(’Ù·])Driting Non-Edition Files”‡°dONLNdB’q·à)}2-102°dONLNdH‚¶Ó(ζApplication-Defi†°dONLNdX‚Ó*)J ned RoutinesI¿°dONLNdf‚?ÓV)O2-105°dONLNdlÔú˚0(¯úSummary of the Edition Manager∫‡°dONLNdåÔD˚[)®2-106°dONLNdí¸¶Ô(¶Pascal Summary‡°dONLNd¢¸)^2-106°dONLNd®    ∞‹(∞    ConstantsÆ°dONLNd≥    )@2-106°dONLNdπ∞"Õ(∞Data T:`°dONLNdøÕ"·)ypes“@°dONLNd≈ı" )(2-108°dONLNdÀ#∞/$(,∞Edition Manager Routines–‡°dONLNdÂ#8/E)à2-1ò °dONLNdË#E/J)1 Ä°dONLNdÈ#J/O)1°dONLNdÎ0∞<˙(9∞Application-Defi†°dONLNd˚0˙<4)J ned RoutinesI¿°dONLNd    0I<V)O2-1°dONLNd 0V<`)13°dONLNd=¶I€(F¶    C SummaryᆰdONLNd=ÔI¸)I2-1N‡°dONLNd=¸I)14°dONLNd J∞V‹(S∞    ConstantsÆ°dONLNd+JV˝)@2-1u@°dONLNd.J˝V)14°dONLNd1W∞cÕ(`∞Data T:`°dONLNd7WÕc·)ypes“@°dONLNd=Wıc)(2-1ôÄ°dONLNd@Wc )16°dONLNdCd∞p$(m∞Edition Manager Routines–‡°dONLNd]d8pE)à2-1ò °dONLNd`dEpO)19°dONLNdcq∞}˙(z∞Application-Defi†°dONLNdsq˙}4)J ned RoutinesI¿°dONLNdÅqI}`)O2-122°dONLNdá~¶ä‡(ᶠResult Codesï`°dONLNdï~Ùä )N2-122ˇ6ƒ@ˇ ˇˇˇˇ@
  1947. ˇ·ˇ‚7^, Palatino&e.3+ä"CHAPTER à)>2
  1948. 4⁄ä˙
  1949. , (‡    2-3
  1950. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  1951. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  1952. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  1953. 4€4—?òÄ
  1954. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  1955. ˛ˇˇˇ
  1956. ˛ˇˇˇ
  1957. ˛ˇˇˇ
  1958. ˛ˇˇˇ˜˝˛ˇ˛
  1959. ˛ˇ˛ˇˇ
  1960. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  1961. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  1962. ˛ˇ˛ˇˇ
  1963. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  1964. ˛ˇˇˇˇ
  1965. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  1966. ˛ˇˇˇˇ
  1967. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  1968. ˛ˇˇˇˇ
  1969. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜,     Helvetica    ˇˇ—ÚˇÆ°dONLNd8äC»(@äEdition Managerˇˇˇˇˇˇ≠>(@2
  1970. °dONLNd\äh¸(eäRThis chapter describes how you can use the Edition Manager to allow your users to °dONLNdciäuù*sharS`°dONLNdgiùu5)"e and automatically update data fr¿°dONLNdâi5uc)òom numerƒ†°dONLNdëicuÙ).ous documents and applications.°dONLNd±{äáâ(Ñä:The Edition Manager is available only in System 7 or later+°dONLNdÎ{âáˆ)ˇ. It can be used by many °dONLNdàäîñ(ëädif™`°dONLNdàñî¢) fer凰dONLNd
  1971. à¢îm) 0ent applications located on a single disk or thr„‡°dONLNd:àmî¯)Àoughout a network of Macintos     °dONLNdWà˘î)åh .°dONLNdYïä°é(ûäc°dONLNdZïé°¬) omputers. Tï°dONLNdeï¡°ê)3/o test for the existence of the Edition Manager◊†°dONLNdîïè°∂)Œ
  1972. , use the ,
  1973. Courier◊†°dONLNdûï∂°‡)'Gestalt◊†°dONLNd•ï‡° )*  function, .°dONLNd∞¢äƬ(´ädescribed in `°dONLNdΩ¢√Æ})9-Inside Macintosh: Operating System Utilities.‰ °dONLNdÍ¢}Æ)∫ °dONLNdÏ¥ä¿(ΩäURead the information in this chapter if you want your application’s documents to sharO‡°dONLNdA¥¿(Ωe °dONLNdC¡äÕu( ä5and automatically update data, or if you want to shar0@°dONLNdx¡vÕ)Ï e and automatically update data °dONLNdòŒä⁄‹(◊äwith documents crˇ`°dONLNd©Œ‹⁄Í)R<eated by other applications that support the Edition ManagerÕ`°dONLNdÂŒÍ⁄Ï(◊Í.°dONLNdÁ‡äÏ@(Èä(For example, a user might want to capturÙ¿°dONLNd‡@Ïe)∂    e sales fi˜ °dONLNd‡eÏt)%gurR`°dONLNd‡uϵ)es and totals fr˛†°dONLNd,‡µÏÏ)@ om within a °dONLNd8Ìä˘ò(ˆäsprÑ °dONLNd;Ìò˘|)3eadsheet and then include this information in a wor(°dONLNdnÌ}˘ê)Âd-pr^¿°dONLNdrÌê˘˚)ocessing document that °dONLNdâ˙ä˙(äQsummarizes sales for a given month. The Edition Manager establishes a connection °dONLNd⁄äl*.between these two documents. When a user modifiÄ@°dONLNd    lñ)‚
  1974. es the sprh`°dONLNdñ)*eadsheet, the information in °dONLNd0ä ¨(äthe worn‡°dONLNd7¨ ø)"d-pr•†°dONLNd;ø Ù)Eocessing document can be automatically updated to contain the latest °dONLNdÄ!ä-∏(*ä
  1975. changes. T^Ä°dONLNdä!∏->).o accomplish this, both the spr
  1976. ¿°dONLNd©!?-“)á eadsheet application and the worÁ°dONLNd…!—-‰)íd-pr¿°dONLNdÕ!Â- )    ocessing °dONLNd÷.ä:'(7ä#application must support the featur熰dONLNd˘.':ò)ùes of the Edition Manager° °dONLNd.ò:ö)q.°dONLNd@äLê(IäTµ¿°dONLNd@èL‹)o use this chapterw °dONLNd'@‹Lõ)M+, you should be familiar with sending and r¯¿°dONLNdR@õL)øeceiving high-level events, °dONLNdnMäYR(Vä,described in the chapter “Event Manager” in ü@°dONLNdöMRY–)»Inside Macintosh: Macintosh TÒ¿°dONLNd∑MœYÎ)}oolbox °dONLNdæZäfµ(cä Essentials.å°dONLNd…Zµf∑)+ fi`°dONLNd Z∑fΩ)Yû‡°dONLNdÀZΩfU)"our application must also support Œ‡°dONLNdÌZUfk)òApplÇ¿°dONLNdÒZlfx)e eñ°dONLNdÙZxf°)
  1977. vents to r”Ä°dONLNd˛Z°fæ))eceive P‡°dONLNdZøf)Apple events frqÄ°dONLNdZf)Dom °dONLNdgäsÂ(päthe Edition Manager√Ä°dONLNd*g‰s˙)Z. See Ä°dONLNd0g˚s )the s‡°dONLNd4g s)<following chapters in this book for detailed information on °dONLNdptäÄ«(}äApple events.á¿°dONLNd}t«Ä…)= °dONLNdÜäíÙ(èäThe Edition Manager pr¶`°dONLNdïÜÙíu)jovides you with the ability to,Zapf Dingbats°dONLNd¥úä£è(¢än
  1978. °dONLNd∂ôñ•≤) captur‡°dONLNdºô≥•—)?e data within a document and integrate it into another document°dONLNd¸Æäµè(¥än
  1979. °dONLNd˛´ñ∑˚) Lmodify information in a document and automatically update any document that °dONLNdJ∑ñ√©* sharS`°dONLNdN∑©√‘) es its data°dONLNdZÃä”è(“än
  1980. °dONLNd\…ñ’©) sharS`°dONLNd`…©’≈)>e information between applications on the same computer or acr˘`°dONLNdû…≈’(“≈oss a network of °dONLNdØ’ñ·ı(fiñMacintosh computers°dONLNd√ÊäÚï(Ôä=Building the capabilities of the Edition Manager into your prÄ°dONLNdÊñÚ(Ôñogram is similar to building °dONLNdÛ䡄(¸äcut-and-paste featur≈¿°dONLNd1Û„ˇ#)Yes into your prÉÄ°dONLNd@Û$ˇK)Aogram. TÑÄ°dONLNdHÛKˇñ)'ext, graphics, spr® °dONLNdZÛñˇ)Keadsheet cells, database °dONLNdsä ç(    ärE°dONLNdté )Xeports—any data that you can select, you can make accessible to other applications that °dONLNdÃä
  1981. (äsupport the Edition Manager6`°dONLNdÁ
  1982. c)Ä. The next section pr'¿°dONLNd¸c)Yovides an overview of the main °dONLNd    ä&(#äelements of the Edition Managerˆ‡°dONLNd    :&)è4. Following sections discuss how to implement these °dONLNd    n'ä3§(0äfeatur¨°dONLNd    t'§3)es in your application°†°dONLNd    ä'3)`.°dONLNd    å9äEê(BäT†¿°dONLNd    ç9êEW)-his chapter also describes an advanced featurW°dONLNd    ∫9XEÈ)»"e that allows applications to sharP °dONLNd    ‹9ÈE)ëe data °dONLNd    „FäRñ(OädirI °dONLNd    ÊFóRµ)ectly fr’¿°dONLNd    ÓFµR”)om a fi,°dONLNd    ıF‘Rfi)le.ˇfiå@ˇ ˇˇˇˇ@
  1983. ˇ·ˇ‚7^
  1984. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  1985. (‡*2-4    )B5Introduction to Publishers, Subscribers, and Editions4^*¿¯
  1986. ^*x¯4^*x¯
  1987. à*ê¯4â*ꯠä*ä˛
  1988. ˇ·ˇ‚7^ˇˇ©ˇÆ°dONLNdu*àD(É*Intr∏X°dONLNduDàö) oduction to ê°dONLNduõà§)W%Publishers, Subscribers, and EditionsˇˇˇˇˇˇV˛(É2
  1989. °dONLNd7ôl•s(¢lA∫†°dONLNd8ôs•u) :†°dONLNd9ôv•ñ)sectionm¿°dONLNd@ôñ•5) % is a portion of a document that shar‡°dONLNdeô6•Ô)†*es its contents with other documents. The °dONLNdè¶l≤ø(ØlLEdition Manager supports two types of sections: publishers and subscribers. x@°dONLNd€¶ø≤Δ(ØøA≤‡°dONLNd‹¶Δ≤») °dONLNd›≥løò(ºl    publisher͆°dONLNdÊ≥òø»),G is a section within a document that makes its data available to other °dONLNd-¿lÃÊ(…ldocuments or applications. t†°dONLNdH¿ÊÃÌ)zAØ@°dONLNdI¿ÌÃÔ) /@°dONLNdJ¿Ã)
  1990. subscriberÓ`°dONLNdT¿ÃÌ)/1 is a section within a document that obtains its °dONLNdÖÕlŸâ(÷ldata frw°dONLNdåÕâŸ+)#om other documents or applications.°dONLNd∞fllÎr(ËlY@Ä°dONLNd±flrε)Kour application writes a copy of the data in each publisher to a separate fi¿°dONLNd˝fl∂ÎÍ(Ë∂le called an °dONLNd
  1991. Ïl¯∫(ıledition container˜‡°dONLNdÏπ¯ª)M.w‡°dONLNdϺ¯ª)> The actual data that is written to the edition container is r/†°dONLNdZϺ¯–(ıºeferrŒ`°dONLNd_Ï–¯Ù)    ed to as °dONLNdh˘l|(lthe ›`°dONLNdl˘|°)    edition. r°dONLNdu˘¢®)&Y2Ä°dONLNdv˘®û)9our application obtains the data for each subscriber by rÖ@°dONLNdØ˘û‘)ˆ eading data °dONLNdªls(lfrò‡°dONLNdΩsÉ)om b`°dONLNd¿Ñfl)the edition container1@°dONLNd’fl)[. Note that thr0Ä°dONLNd‰y)>oughout this chapterä¿°dONLNd¯x§)[ , the term :¿°dONLNd•¿)-edition °dONLNd
  1992. ¡«) rE °dONLNd «È)    efers to °dONLNdl1(l.the edition container and the data it containsœ‡°dONLNdC13)≈.O‡°dONLNdD46) °dONLNdF%l1r(.lY@Ä°dONLNdG%r1)ou = °dONLNdJ%Ä1£)publishƒ °dONLNdQ%£1«)#@ data when you want to make it available to other documents and °dONLNdë2l>7(;l0applications. When data is published, it is storC °dONLNd¡28>©)Ãed in an edition container• °dONLNd€2®>≠)p. wÄ°dONLNd›2≠>≥)Y8°dONLNdfi2≥>¿)ou 4†°dONLNd·2¡>Ï)    subscribe °dONLNdÍ2Ì>Ô), °dONLNdÎ?lK/(Hl-to data that a publisher makes available by rÄ°dONLNd?0Ká)ƒeading an edition frÊ`°dONLNd,?ÜKÕ)Vom its containerI¿°dONLNd<?ÕK“)G. 
  1993. Y*g¯4Z*g¯    °dONLNd?Xlc(`lNote
  1994. ˇ·ˇ‚7^
  1995. °dONLNdDelqâ*Section °dONLNdKeäqü) and  @°dONLNdPe†q‰)edition containerD†°dONLNdae‰qÔ)D ar↰dONLNddeÔq) e prö`°dONLNdheqU)ogrammatic terms. 6†°dONLNdzeVq\)VY˜ °dONLNd{e[q¨)ou should not use °dONLNdçql}[(zl4them in your application or your documentation. Use Ä`°dONLNd¡q[}Ü)Ô publishers,MÄ°dONLNdÃqá}â), °dONLNdÕ}lâõ(Ül subscribers,°dONLNdŸ}úâ±)0 and Ì °dONLNdfi}±â”)    editions. °dONLNdÁ}‘â÷)# hÄ°dONLNdË}÷â‹)Y)°dONLNdÈ}‹â#)ou should also r†°dONLNd˘}#âF)G    efrain frw`°dONLNd}Fâß)#om using other terms °dONLNdâlïé(ílsuch as B¿°dONLNdâèïº)# publicationû°dONLNd*âºï )- or  °dONLNd.âÀï¸) subscription‘¿°dONLNd:â¸ïô)1$ to describe the dynamic sharing of °dONLNd^ïl°≠(ûlinformation prÇÄ°dONLNdlï≠°7)Aovided by the Edition Manager‚°dONLNdâï6°z)â. Use the terms ‡°dONLNdôï{°ò)Epublishø °dONLNd†ïò°≠) and °dONLNd•°l≠ë(™l    subscribe∏¿°dONLNdÆ°ë≠=)%' to describe the Edition Manager featur\`°dONLNd’°>≠I)≠es.,Zapf Dingbats„°dONLNdŸ§N¨T)u
  1996. °dONLNd‹≤læ(ªl+Each edition has an icon that is visible fr°dONLNd≤æ\)≤om the Finder®`°dONLNd≤[æ`)=. ®`°dONLNd≤`æx)Figur{ °dONLNd≤xæå)e 2-1†°dONLNd ≤çæª)
  1997.  shows the‡°dONLNd*≤ºææ)/ °dONLNd+ølÀã(»ldefaultΠ°dONLNd2øãÀç) k °dONLNd3øéÀƒ)edition icon.
  1998. Ì*˛¯4Ó*˛¯"Ó*]
  1999. ˇ·ˇ‚7^    °dONLNdB„lÓñ(Îl
  2000. Figure 2-1°dONLNdM„ÆÓ )BThe default edition icon
  2001. °dONLNdg:lF(ClThe name that the user specifiÿ°dONLNdÖ:FŒ)Ñ6es for the edition is located next to the edition iconAÄ°dONLNdª:œFÂ)fl. For °dONLNd¡GlS∫(Plinformation on prI`°dONLNd“GªS‚)O    oviding iÄ°dONLNd€G„Sˆ)(cons†°dONLNdflG˜SG) for the editions crY†°dONLNdÛGGS∏)Peated by your applicationó°dONLNd G∏S›)q
  2002. , see the °dONLNdTl`î(]l    chapter “B`°dONLNdTï`€))Finder InterfaceüÄ°dONLNd/T€`Ì)F” in Y@°dONLNd4TÓ`l)Inside Macintosh: Macintosh T´¿°dONLNdQTk`≤)}oolbox Essentials.¿°dONLNdcT≤`¥)G p¿°dONLNddTµ`Õ)FigurCÄ°dONLNdiTÕ`·)e 2-2·°dONLNdnT·`„) °dONLNdoalmP(jl4illustrates a document containing a single publisherX °dONLNd£aPms)‰
  2003. , its corr›@°dONLNd≠asm„)#esponding edition, and a °dONLNdΔnlz8(wl.subscriber to the edition in another document.
  2004. ˇj"¯4˛`ˇaòB@@ˇa?bø    ˛ˇÄ≈    ˛ˇÄ≈    ˛ˇÄ≈    Ä≈    ˇûÄ≈    ˇøÄ≈    ˇsÉÄ≈    ˇaÉÄ≈    ˇa˚Ä≈    ˇs˚Ä≈    ?Ä≈    ˆÄ≈    Ä≈    ÜÄ≈    9«˚Ä≈    pÁ˚Ä≈    ˇÄ≈    ˇÄ≈    Ä≈    ˛ˇÄ≈    ˛ˇÄ≈    ˛ˇÄ≈ø˝@ƒ˝@ƒªGLƒŒ§fiƒv§–ƒûßNƒ˛√˛√˛√øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòB@Ä@Ä?abøøøøøøø
  2005. Ò‡ÇΔ
  2006. êFΔ
  2007. DΔ
  2008. ¡DΔ
  2009. ADΔ
  2010.  hÑΔ
  2011.  !    Δ
  2012. Á¿~ΔøøøøÒÄ˝Ä` @ Ä’˛ $§Ä P¿—˝ !@@êÄ“¡ù≠!aEÊ¥∏SÃÁűœ÷Ch¶4!¶Üöâêi¶ôÉJ%÷ID8¬A'úë)r$íÑ*÷≤X@$BH ·À†Ç˘&%ÑúK÷sË8x‚Gù} qo9…cí÷
  2013. ˛à˘Ã
  2014. ˛à˘Ã
  2015. ˛p˘Ãø 6 « « !(« ¿ßôœ(◊çZÀ CM2%I"íi¨À I$*í%"I»À ÚLK    uß2À ‚fisíq©q–À˜à ˜à ˜p ø%‡É p˝&ÄIJÄ‚    @Δ˝ ˝`˝⁄"êÄ @ ˛@!˚·'#êô û;AJ4Δ˜8ÎOqh◊ûFcyú@;OL”Δ√yπ‡„'#SI äNi°RI,RE-E&±"ILîì"P@Eµ¥QM$ìD†„'#cãA$â¡dä¢Ñâä'"$QâíB†@Ö%$¢äíÖ@„'#$ÅôæDûr¥äRãHBtí”9‰ƒ∞FäNM*“i‰â`„'##â§ÓY√\iù$sí!“GA´,úΔß9 8rJIÙùÜßr@„ Ú ˛ ‘Ó ‘Óp‘ø
  2016. √¿˛¡Ü``’$¢˚˛BI¸ ’H≤˛@˛ÄDz @’à¨8fiÁ&Qk¬É osÅD'Ä◊GD    EäI    -¶ÄëMÇ¢≈$Üö“@◊BDÖD J'ëǬä"ú‰@◊DHäVíí¯:◊ÄÇ    E+I ·Ä◊ò0,s§ú    g ‘ã<9“NúÎ÷˝ ˚ ˝¸÷òBÄñÄñaïb˝ ˆ¸÷˝pˆ8¸÷øøøøøøøøøøøøø@˸ÿ0¸Ã@ ˛ÄÃCœ!¥œ5ƒ–    „ÕA$¶Ñ[Dîö`§ÄŒ‚(«RH®ú@HÕ"Ihh§…K ÄiÄŒòÇ@HH\*LûIJˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  2017. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêê@ˇa?b'
  2018. ÅÅÅÅˇ ˆ„ˇÅÅÅ® ˆ„ˇÅÅÅ® ˆ„ˇÅÅÅ®ˆ˛ˇÈ˛ˇÅÅÅ®ˆ˛ˇ˜ˇ˝ˇ˙˛ˇÅÅÅ®ˆ˛ˇ˜ˇ˚ˇ˚˛ˇÅÅÅ®ˆ˛ˇ¯ˇ˛ˇ˛ˇ¸˛ˇÅÅÅ®ˆ˛ˇ¯ˇˇˇ˝ˇˇ¸˛ˇÅÅÅ®ˆ˛ˇ¯ˇˇˇ˝˚ˇ˛ˇÅÅÅ®ˆ˛ˇ¯ˇ˛ˇ˙ˇ˛ˇÅÅÅ®ˆ˛ˇ¸ˇ˚˚ˇ˛ˇˇ˛ˇÅÅÅ® ˆ˛ˇ¸ˇˇˇ˝˝ˇ˝ˇˇ˛ˇÅÅÅ®ˆ˛ˇ˚˝ˇ¸ˇˇ˝ˇˇ˛ˇÅÅÅ®ˆ˛ˇ¸˚ˇ˝ˇˇ˝ˇˇ˛ˇÅÅÅ®ˆ˛ˇ˝˛ˇ˛ˇ˛˘ˇ˛ˇÅÅÅ®ˆ˛ˇ˛˛ˇ˝˛ˇ˘ˇ˛ˇÅÅÅ®ˆ˛ˇıˇ˜˛ˇÅÅÅ®ˆ˛ˇıˇ˜˛ˇÅÅÅ®ˆ˛ˇÈ˛ˇÅÅÅ® ˆ„ˇÅÅÅ® ˆ„ˇÅÅÅ® ˆ„ˇÅÅÅ®
  2019. ÅÅÅÅˇ ‡ˇÅÅÅ° ‡ˇÅÅÅ°!Úˇˇ˛ˇˇˇˇ˛˛ˇˇˇˇÅÅÅ• Û˝ˇ˛ˇ ˇˇˇˇˇ˝ˇÅÅŶ!Ûˇˇ˛ˇˇˇˇˇˇˇˇˇÅÅÅ£!Úˇˇ˝ˇˇˇ˛ˇˇ˛ˇÅÅŶ ‰ˇÅÅÅù ‰ˇÅÅÅù ‰ˇÅÅÅù
  2020. ÅÅÅÅˇ
  2021. ÅÅÅÅˇ
  2022. ÅÅÅÅˇ
  2023. ÅÅÅÅˇ
  2024. ÅÅÅÅˇ
  2025. ÅÅÅÅˇ
  2026. ÅÅÅÅˇ
  2027. ÅÅÅÅˇ
  2028. ÅÅÅÅˇ
  2029. ÅÅÅÅˇ
  2030. ÅÅÅÅˇ
  2031. ÅÅÅÅˇ
  2032. ÅÅÅÅˇ
  2033. ÅÅÅÅˇ
  2034. ÅÅÅÅˇ
  2035. ÅÅÅÅˇ
  2036. ÅÅÅÅˇ
  2037. ÅÅÅÅˇ
  2038. ÅÅÅÅˇ
  2039. ÅÅÅÅˇ
  2040. ÅÅÅÅˇ
  2041. ÅÅÅÅˇ
  2042. ÅÅÅÅˇ
  2043. ÅÅÅÅˇ
  2044. ÅÅÅÅˇ
  2045. ÅÅÅÅˇ
  2046. ÅÅÅÅˇ
  2047. ÅÅÅÅˇ
  2048. ÅÅÅÅˇ
  2049. ÅÅÅÅˇ
  2050. ÅÅÅÅˇòÇ@ÄHH\*HüIJˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  2051. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêê@Ä?ab'
  2052. ÅÅÅÅˇ
  2053. ÅÅÅÅˇ
  2054. ÅÅÅÅˇ
  2055. ÅÅÅÅˇ
  2056. ÅÅÅÅˇ
  2057. ÅÅÅÅˇ
  2058. ÅÅÅÅˇÚ¸ˇ˛˝ˇ˘˛ˇ¯ˇˇ¸ˇÅÅÅ∂'Úˇ˛ˇ˝ˇˇ˘ˇ¯ˇˇ˛ˇˇÅÅÅ∂$Úˇ˙ˇ˝ˇ˚ˇ¯ˇ˛ˇ˛ˇÅÅŵ$Ú˛ˇ¸ˇ˝ˇ˚ˇ˘ˇ˝ˇ˛ˇÅÅŵ'Ûˇˇ¸ˇ˝ˇ˚ˇ˘ˇ˝ˇ˛ˇÅÅŵ*Ûˇ˙ˇ˝ˇˇˇˇ˚ˇˇˇ˛ˇ˝ˇÅÅŵ*Ûˇ˝ˇˇ˛ˇ˙ˇ˝ˇ˝ˇˇ˝ˇÅÅÅ¥Ù˚ˇ¸ˇ˙˚ˇ˚ˇˇ˝˛ˇÅÅŵ
  2059. ÅÅÅÅˇ
  2060. ÅÅÅÅˇ
  2061. ÅÅÅÅˇ
  2062. ÅÅÅÅˇ?Ú¸ˇ˛ˇˇÁˇˇ˜ˇ˘˚ˇˇˇÒˇˇ˙ˇÛˇˇˇˇˇ˝ˇˇˇˇÅÅ®9Úˇ˛ˇ„ˇˇ˘ˇˇ˘ˇˇˇˇˇ˚ˇˇıˇˇÔˇÅÅå1Úˇ‹ˇ˘ˇˆˇ˝ˇˇ˙ˇÛˇˇÚˇ˝ˇÅÅêÖÚ˛ˇ¸ˇˇ˛ˇ    ˇˇˇˇˇˇ˝ˇ˘ˇ˘ˇˆˇ˝ˇˇˇ˝ˇ˙ˇˇ˛ˇ˝ˇˇˇˇˇˇˇˇ˛ˇ˚ˇ¸ˇˇ˝ˇˇˇ˛ˇ˝ˇ˚ˇˇˇˇ˛˛ˇ˝ˇÅÅ∑õÛˇˇ˝ˇˇˇˇˇ˛ˇˇˇˇ˛ˇˇˇ˚ˇ¯ˇˆˇ˝    ˇˇˇˇˇˇ˝ ˇˇˇˇˇˇˇ˛ˇˇ˛ˇˇˇˇ¸ˇˇˇˇˇˇˇˇˇˇˇˇ˛ˇˇˇ¸ˇˇˇˇˇ˛ˇˇˇÅÅ∑íÛˇ˙ ˇˇˇˇˇ˛ˇ˝˛ˇ˚ˇ˝ˇˇ˝ˇ˜ˇ¸ˇˇ˛ˇ˝ˇ˛ˇ˛ˇˇˇ˛ˇˇˇˇ˛ˇ¸˛ˇˇ˛ ˇˇˇˇˇ˝ˇˇˇ˚ˇˇ˝ˇ˝ˇˇˇÅÅ∂åÛˇ˚ˇˇˇˇˇˇˇˇ˝ˇ˘ˇˇ˙ˇˆˇ˝ˇˇˇ˙ˇ¸ˇ˝ˇ˛ˇ˝ˇˇ˛ˇˇ¸ˇ¸ˇ¸ˇ    ˇˇˇˇ˛ˇˇˇˇ˝ˇˇ˛ˇ˛ˇˇˇˇÅÅ∑ÖÙ˛ˇ¸˛ˇ˛ˇ¸ˇˇ¸˛ˇ˝˝ˇ˙˛ˇ¯˛ˇ˛ˇˇ˛˛ˇ¸ˇˇˇ˛ˇˇ˝ˇˇˇ¸ˇˇˇ˚˛ˇ˛ˇˇˇ˝ˇ˛ˇ˛ˇˇˇ¸˛ˇˇˇ˛˛ˇˇˇÅÅ∂Èˇ˛ˇ∑ˇÅÅÅÁÈˇ˛ˇπˇˇÅÅÅÊ˲ˇ∏ˇÅÅÅÂ
  2063. ÅÅÅÅˇ#Ú¸ˇ˚ˇˇˇˇ˝ˇˇÒˇˇ¸ˇˇÅÅÅΩÚˇ˛ˇ˙ˇÁˇˇ˛ˇˇÅÅźÚˇ˜ˇ˝ˇÎˇˇˇˇÅÅźMÚ˛ˇ˚ˇˇ˝ˇˇˇ˛ˇ˝ˇ¸ˇˇˇˇ˛ˇˇˇ˝ˇ˛ˇˇˇ˛˛ˇ˛ˇˇˇˇÅÅÅfiXÛˇˇ˝ˇˇˇˇˇˇˇˇˇ˛ˇˇˇ¸ˇˇˇˇˇˇ˛ˇˇˇˇˇˇˇˇˇˇˇˇÅÅÅ›SÛˇ˚ˇ˛ ˇˇˇˇˇ˝ˇˇˇ˚    ˇˇˇˇˇ˛ˇˇˇˇ˛ˇˇˇ˛ˇˇÅÅÅ‹TÛˇ˝ˇˇ¸ˇ    ˇˇˇˇ˛ˇˇˇˇ˝ˇˇ˛ˇˇ˛ˇˇˇˇˇ˛ˇˇˇˇ˝ˇÅÅÅ€OÙ˚ˇ˛ˇˇˇ˝ˇ˛ˇ˛ˇˇˇ¸ˇˇˇ˛ˇ˛ˇˇˇˇˇ˛ˇˇˇ˛ˇ˛˛ˇˇÅÅÅ€±ˇ˛ˇÅÅÅ‘±ˇ˛ˇÅÅÅ‘ ∞˛ˇÅÅÅ”
  2064. ÅÅÅÅˇRÛˇˇ˛ˇˇÓ˛ˇˆˇˇ¸ˇˇ˘ˇˇ¸ˇˇÙˇˇÏˇˇˆ˛ˇ€ˇˇˇÒˇˇÓ˛ˇˇ›ˇˇÒˇˇÅê5Úˇ˝ˇÌˇÌˇ¯ˇˇ˛ˇˇ€ˇıˇ€ˇˇŸˇ˛ˇÅÅ◊CÛˇˇˇÌˇÌˇ˜ˇˇˇˇÍˇÙˇıˇ˘ˇ„ˇˇÎˇ˝ˇŒˇÅãÌÛˇˇˇ˝
  2065. ˇˇˇˇˇ¸ˇ˝ˇ˛˛ˇˇˇ˛ˇˇ˛ˇ¸ˇˇˇˇ˛ˇˇˇˇˇ˛ˇˇ˝ˇ˛ˇ˛ˇ˛˛ˇˇˇˇ¯ˇ˝ˇ˛ˇ˛ˇˇˇˇ˛ˇˇˇ˝ˇ˝ˇˇ˛ˇˇˇˇ˛ˇˇ˝ˇˇˇ˛ˇ˝ˇ¸ˇ˘˛ˇˇˇˇ˝ˇˇˇˇˇˇˇ˝ˇ˛ˇˇˇˇ˝ˇˇ˝ˇˇˇ˛ˇ˝ˇÅöÛˇˇˇˇˇˇˇˇˇ¸ˇ˛ˇˇˇ˛ˇ ˇˇˇˇˇˇ˝ˇˇˇˇˇˇˇˇˇˇ˛ˇˇˇˇ˛
  2066. ˇˇˇˇˇˇ¯ˇ˛ˇˇˇˇˇˇˇˇ˛ˇˇ˛$ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˛ˇˇˇ¸ˇ˙ˇ˛ˇˇˇˇˇˇˇˇˇˇˇ˛ˇˇ˛ˇˇˇˇˇˇˇˇˇˇˇˇ˛ˇˇˇÅö˜Ûˇˇˇ˛˛ˇ˛ˇˇˇˇ¸ˇ˛ˇˇ˝ˇˇˇ˛ˇ˛ˇ¸    ˇˇˇˇˇ˛ˇˇ¸ˇ˛ˇˇ˛ˇˇ˝ˇˇ˛ˇˇ˘ˇ˛ˇˇ˛ˇ˛ˇˇ˛ˇ˛ˇˇ˛ˇˇ˛ˇˇ˛ˇˇ˝ˇ˛    ˇˇˇˇ˝ˇˇˇ˚ˇ˚ˇ˝ˇˇˇˇˇˇˇˇˇ˛ˇˇ˛ˇˇ¸ˇ˛ˇˇˇˇ˝ˇˇˇÅô˙Ùˇ˝ˇˇ˚ˇˇˇˇ˚ˇ˛ˇˇˇˇˇˇˇˇ¸ˇ˙ˇˇ˛ˇˇ˝ˇ˛ˇ ˇˇˇˇˇˇ˛
  2067. ˇˇˇˇˇ¯ˇ˛ˇˇˇˇˇ˝ˇ˝ˇ˛ˇˇˇˇˇˇˇˇˇˇ˛ˇ˝ˇˇˇˇ˛ˇˇˇˇ¸ˇ˛ˇˇˇ˛ˇˇˇ˛ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˝ˇˇˇ˛ˇˇˇˇÅö˙Ùˇˇ˛ˇ˛˛ˇ˛ˇˇ˚˛ˇˇˇ˛ˇ˛ˇˇˇˇ˛ˇ˝ˇˇˇ˛ˇ˛    ˇˇˇˇˇ˛ˇˇˇˇ˛˛ˇ˛ˇˇˇ˛ˇ˝˛ˇˇˇˇ˛˛ˇˇ¸ˇˇˇˇˇˇˇˇˇˇ˛ˇˇˇ˛ˇˇˇˇ˛ˇ˛ˇˇˇ˙˛ˇ˝˛ˇˇˇˇˇˇˇ¸ˇˇˇ˛ˇˇˇ˝ˇˇˇˇ˛ˇ˛ˇˇˇÅôᡇˇ¸ˇÅŢš¸ˇÅÅ¢ÅÊ˛ˇ˛˛ˇÅÅ£
  2068. ÅÅÅÅˇ<Òˇˇ˝ˇˇ˛˛ˇÔˇˇÊˇˇ˝ˇˇÊˇˇ¸ˇˇ˝ˇˇÔˇˇÎˇˇÅÅ™2Ú ˇˇˇˇˇ˛ˇÃˇÂˇ˝    ˇˇˇˇ◊ˇÅÅ™3ˇˇ˛ˇˇˇˇÁˇËˇÂˇ˙ˇ¸ˇÊˇÛˇÅÅ©éÚˇˇ˛ˇ˛ˇˇˇˇ¸˝ˇ˛˛ˇ˛ˇˇ˝ˇ˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇ˛ˇ¯ˇˇˇ˝ˇ˝ˇˇ¸ˇˇ˝ˇˇ˚˝ˇ˛˛ˇ˛ˇˇ˝ˇ˛ˇ˛ˇ˚ˇˇ˛ˇ˝ˇ˝ˇÅÅ∏ûˇ˛˛ˇˇ˛ˇ˚ˇˇˇ˛ˇˇˇ˛ ˇˇˇˇˇ˝ˇˇˇˇˇˇˇˇˇˇˇ˙ˇˇ˛ˇˇˇˇˇ˘ˇ¸ˇ˚ˇˇˇ˛ˇˇˇ˛ ˇˇˇˇˇ˝ˇˇˇˇˇˇˇˇˇˇˇÅÅπöˇ˝ˇˇ˛ˇ¸ˇ˛ˇˇ˝ˇˇ˛ˇˇ˛ˇ˛ˇ˚
  2069. ˇˇˇˇˇˇ˛ˇ˛ˇ˙ˇ˛ˇˇˇˇ˛ˇ˘ˇ¸ˇ¸ˇ˛ˇˇ˝ˇˇ˛ˇˇ˛ˇ˛ˇ¸ˇ˛ˇ˛ˇ˛ˇˇ˛ˇÅÅπëˇ˛ˇ˛ˇˇ˚ˇˇˇ˛ˇˇˇˇˇˇˇˇˇ¸ ˇˇˇˇˇˇ¸ˇ˜ˇ˛ˇˇˇˇˇ˝ˇ˙ˇ¸ˇ¸ˇˇˇ˛ˇˇˇˇˇˇˇˇˇ˝ˇ¸ˇ˝ˇ¸ˇˇÅÅ∏ôÙ˝ˇˇˇ¸ˇˇ˚ˇˇˇ˛˛ˇ˛ˇ    ˇˇˇ˛ˇ˚ˇˇ˛˛ˇˇˇˇ˛ˇˇ¸ˇˇˇˇˇ˛ˇˇˇ˝˝ˇ˝ˇ¸ˇˇˇ˛˛ˇ˛ˇ    ˇˇˇ˛ˇ˚ˇˇˇ˛ˇ˛ˇˇˇˇÅÅ∑flˇ ˇŸˇ—ˇÅÅ¥òÇÄñHH\*L†Ä˛ˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  2070. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêêÄñaïb'flˇ°ˇ—ˇÅÅ¥‡˛ˇ£˛ˇ”˛ˇÅŵ
  2071. ÅÅÅÅˇ
  2072. ÅÅÅÅˇ
  2073. ÅÅÅÅˇ
  2074. ÅÅÅÅˇ
  2075. ÅÅÅÅˇ
  2076. ÅÅÅÅˇ
  2077. ÅÅÅÅˇ
  2078. ÅÅÅÅˇ
  2079. ÅÅÅÅˇ
  2080. ÅÅÅÅˇ
  2081. ÅÅÅÅˇ
  2082. ÅÅÅÅˇ
  2083. ÅÅÅÅˇ◊◊ı˛◊◊“˛◊ÅÅÅÊÒ◊◊Ò◊◊ˆ◊˛◊–◊ÅÅÅÂ"Ú◊◊Ò◊ˆ◊˝◊Â◊Ó◊ÅÅʼnVÚ◊◊˝˝◊˝◊◊˝◊¸◊˘˛◊
  2084. ◊◊◊◊◊˝◊◊◊◊˛◊˛◊◊◊◊˘◊˝◊˛◊◊ÅÅÅÔaÛ◊◊¸◊◊◊◊◊◊◊◊˝◊˙◊˛◊◊◊◊◊◊˛◊◊◊◊◊◊◊◊◊◊¯◊˛◊◊◊◊ÅÅÅWÛ¸◊˛◊˛◊◊˛◊◊˛˛◊¸◊˚◊˝ ◊◊◊◊◊˛◊◊◊˛◊˛◊˛◊¯◊˛◊◊◊ÅÅÅÏ`Ù◊˝◊˛◊◊◊◊◊◊◊˘◊˛◊◊◊˛◊◊◊◊◊◊◊◊◊◊◊◊¸◊˜◊˛    ◊◊◊◊◊◊ÅÅÅòB@@ïa’b ıñGá$ñ}Ñ:FŒ˝À ˝» 8˝8»ø    ‡¿¿§…ê ˛l…˛H ÄÕûx‹H—ˆõ«hŒJ)§HRc$à∞Œ#îQê°"Dꆌ DZHŸ,ƒO@Œ¡ɧìÒë˜D5@Œ˙«øøø —¸… ≥¸        …    " …    "hˇFÛ¥ …    "))â$X…    DPâ(P…    fñR»†    …    D˚íG <^…øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòB@Ä@Ä’abøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòBÄñÄña+bøøøøøøøøøøøøøøøøøøøøøøòÇ@HH\*H°Ä˛ˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  2085. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêê@ïa’b'bı◊◊˝◊◊◊◊◊◊◊◊˛˛◊˚˛◊˝˛◊◊◊◊◊◊◊¸◊◊˛˛◊◊˝◊˝˛◊◊◊˛◊◊˝◊ÅÅÅÛÏ◊¸◊⁄◊Ë◊ÅÅÅ›Ï◊¸◊⁄◊ÅÅÅ√Ì˛◊˛˛◊‹˛◊ÅÅŃ
  2086. ÅÅÅÅˇÚ˝ˇˆ˝ˇÎˇˇı˛ˇˇˇÅÅÅÕ Òˇˇˆˇˇ›ˇˇˇˇˇÅÅÅÕ*Úˇ˝ˇ¯ˇ˝ˇflˇˇˇÙˇÙˇÅÅÅËYÚˇ˝ˇ¯ˇ˝ˇ˝ˇ˝ˇ˝ˇ˛ˇˇ˛ˇ˘ˇˇˇ˛ˇˇˇ˛¸ˇ    ˇˇˇˇˇ˝ˇ˛˛ˇˇˇˇÅÅÅÙbÚˇ˝ˇ¯ˇ˝ ˇˇˇˇˇˇ˛ ˇˇˇˇˇˇ˘ˇˇˇ˝    ˇˇˇˇˇ˛
  2087. ˇˇˇˇˇ˛ˇ˛ˇˇˇÅÅÅÛ^Ûˇ˝ˇ¯ˇ˝ˇ˛˛ˇˇˇ˛ˇˇ˛ˇ˛ˇ¯ˇˇˇ˝ˇˇ˝ˇˇ˛ˇˇ˛ˇˇˇ˝ˇˇÅÅÅÚ_Ûˇ˛ˇ˜ˇ˛ˇ˛ˇ¸ˇˇˇˇˇˇˇˇˇ˘ˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇ˝ˇ˛ˇ˛ˇˇÅÅÅÒVÙ¸ˇ¸ˇ˝¸ˇ¸˛ˇ ˇˇˇˇ˚ˇ˛ˇ˝˛ˇˇˇ˛¸ˇ˛ˇˇ˛ˇ˝ˇˇˇˇ˝˛ˇˇÅÅÅÒ ¬ˇÅÅÅø
  2088. ÅÅÅÅˇ
  2089. ÅÅÅÅˇ
  2090. ÅÅÅÅˇÚ˛ˇˇ˛ˇ‘ˇˇ˚ˇˇÅÅÅŒ!Òˇˇˇˇˇ’ˇˇ˝ˇˇÅÅÅœ#Úˇˇ˛ˇÙˇÙˇÓˇ˘ˇÅÅÅœ<Úˇˇ˛ˇˇˇˇ˛˘ˇˇ˛ˇˇ˝ˇ˛ˇˇˇˇ˚ˇˇ¯ˇÅÅÅœAÚˇˇ˛ˇ˛ˇˇˇˇˇˇˇ˛    ˇˇˇˇ˛ˇˇˇ¯ˇ˙ˇÅÅÅŒ?Ûˇˇ˛ˇ˛ˇˇ˝ˇ˛ˇˇ˛ˇ˛ˇˇˇ˝ˇˇ˜ˇ˚ˇÅÅÅÕAÛˇˇˇˇˇˇˇˇˇˇˇˇ˝ˇ˝ˇˇ˛ˇˇˆˇ¸ˇˇÅÅÅœ>Ù˛ˇˇ˛ˇ¸ˇ˛ˇˇˇ¸ˇˇˇˇ˛˛ˇˇ˙˝ˇ˛ˇ˝ˇÅÅÅŒ
  2091. ÅÅÅÅˇ
  2092. ÅÅÅÅˇ
  2093. ÅÅÅÅˇ
  2094. ÅÅÅÅˇ
  2095. ÅÅÅÅˇ
  2096. ÅÅÅÅˇ
  2097. ÅÅÅÅˇ
  2098. ÅÅÅÅˇ
  2099. ÅÅÅÅˇ
  2100. ÅÅÅÅˇ
  2101. ÅÅÅÅˇ
  2102. ÅÅÅÅˇ
  2103. ÅÅÅÅˇ
  2104. ÅÅÅÅˇ
  2105. ÅÅÅÅˇ
  2106. ÅÅÅÅˇ
  2107. ÅÅÅÅˇ
  2108. ÅÅÅÅˇ
  2109. ÅÅÅÅˇ
  2110. ÅÅÅÅˇ
  2111. ÅÅÅÅˇ
  2112. ÅÅÅÅˇ
  2113. ÅÅÅÅˇ
  2114. ÅÅÅÅˇ
  2115. ÅÅÅÅˇ
  2116. ÅÅÅÅˇ
  2117. ÅÅÅÅˇ
  2118. ÅÅÅÅˇ
  2119. ÅÅÅÅˇ
  2120. ÅÅÅÅˇ
  2121. ÅÅÅÅˇ
  2122. ÅÅÅÅˇ
  2123. ÅÅÅÅˇ
  2124. ÅÅÅÅˇ
  2125. ÅÅÅÅˇ
  2126. ÅÅÅÅˇ
  2127. ÅÅÅÅˇ
  2128. ÅÅÅÅˇ
  2129. ÅÅÅÅˇòÇ@ÄHH\*L¢Ä˛ˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  2130. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêê@Ä’ab'
  2131. ÅÅÅÅˇ
  2132. ÅÅÅÅˇ
  2133. ÅÅÅÅˇ
  2134. ÅÅÅÅˇ
  2135. ÅÅÅÅˇ
  2136. ÅÅÅÅˇ
  2137. ÅÅÅÅˇ
  2138. ÅÅÅÅˇ
  2139. ÅÅÅÅˇ
  2140. ÅÅÅÅˇ
  2141. ÅÅÅÅˇ
  2142. ÅÅÅÅˇ
  2143. ÅÅÅÅˇ
  2144. ÅÅÅÅˇ
  2145. ÅÅÅÅˇ
  2146. ÅÅÅÅˇ
  2147. ÅÅÅÅˇ
  2148. ÅÅÅÅˇ
  2149. ÅÅÅÅˇ
  2150. ÅÅÅÅˇ
  2151. ÅÅÅÅˇ
  2152. ÅÅÅÅˇ
  2153. ÅÅÅÅˇ
  2154. ÅÅÅÅˇ
  2155. ÅÅÅÅˇ
  2156. ÅÅÅÅˇ
  2157. ÅÅÅÅˇ
  2158. ÅÅÅÅˇ
  2159. ÅÅÅÅˇ
  2160. ÅÅÅÅˇ
  2161. ÅÅÅÅˇ
  2162. ÅÅÅÅˇ
  2163. ÅÅÅÅˇ
  2164. ÅÅÅÅˇ
  2165. ÅÅÅÅˇ
  2166. ÅÅÅÅˇ
  2167. ÅÅÅÅˇ
  2168. ÅÅÅÅˇ
  2169. ÅÅÅÅˇ
  2170. ÅÅÅÅˇ
  2171. ÅÅÅÅˇ
  2172. ÅÅÅÅˇ
  2173. ÅÅÅÅˇ
  2174. ÅÅÅÅˇ
  2175. ÅÅÅÅˇ
  2176. ÅÅÅÅˇ
  2177. ÅÅÅÅˇ
  2178. ÅÅÅÅˇ
  2179. ÅÅÅÅˇ
  2180. ÅÅÅÅˇ
  2181. ÅÅÅÅˇ
  2182. ÅÅÅÅˇ
  2183. ÅÅÅÅˇ
  2184. ÅÅÅÅˇ
  2185. ÅÅÅÅˇ
  2186. ÅÅÅÅˇ
  2187. ÅÅÅÅˇ
  2188. ÅÅÅÅˇ
  2189. ÅÅÅÅˇ
  2190. ÅÅÅÅˇ
  2191. ÅÅÅÅˇ
  2192. ÅÅÅÅˇ
  2193. ÅÅÅÅˇ
  2194. ÅÅÅÅˇòÇÄñHH\*H£Ä˛ˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  2195. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêêÄña+b'
  2196. ÅÅÅÅˇ
  2197. ÅÅÅÅˇ
  2198. ÅÅÅÅˇ
  2199. ÅÅÅÅˇ
  2200. ÅÅÅÅˇ
  2201. ÅÅÅÅˇ
  2202. ÅÅÅÅˇ
  2203. ÅÅÅÅˇ
  2204. ÅÅÅÅˇ
  2205. ÅÅÅÅˇ
  2206. ÅÅÅÅˇ
  2207. ÅÅÅÅˇ
  2208. ÅÅÅÅˇ
  2209. ÅÅÅÅˇ
  2210. ÅÅÅÅˇ
  2211. ÅÅÅÅˇ
  2212. ÅÅÅÅˇ
  2213. ÅÅÅÅˇ
  2214. ÅÅÅÅˇ
  2215. ÅÅÅÅˇ
  2216. ÅÅÅÅˇ
  2217. ÅÅÅÅˇòB@@+akbøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòB@Ä@Äka´bøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòBÄñÄñ´a¡bøøøøøøøøøøøøøøøøøøøøøøòÇ@HH\*L§Ä˛ˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  2218. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêê@+akb'
  2219. ÅÅÅÅˇ
  2220. ÅÅÅÅˇ
  2221. ÅÅÅÅˇ
  2222. ÅÅÅÅˇ
  2223. ÅÅÅÅˇ
  2224. ÅÅÅÅˇ
  2225. ÅÅÅÅˇ
  2226. ÅÅÅÅˇ
  2227. ÅÅÅÅˇ
  2228. ÅÅÅÅˇ
  2229. ÅÅÅÅˇ
  2230. ÅÅÅÅˇ
  2231. ÅÅÅÅˇ
  2232. ÅÅÅÅˇ
  2233. ÅÅÅÅˇ
  2234. ÅÅÅÅˇ
  2235. ÅÅÅÅˇ
  2236. ÅÅÅÅˇ
  2237. ÅÅÅÅˇ
  2238. ÅÅÅÅˇ
  2239. ÅÅÅÅˇ
  2240. ÅÅÅÅˇ
  2241. ÅÅÅÅˇ
  2242. ÅÅÅÅˇ
  2243. ÅÅÅÅˇ
  2244. ÅÅÅÅˇ
  2245. ÅÅÅÅˇ
  2246. ÅÅÅÅˇ
  2247. ÅÅÅÅˇ
  2248. ÅÅÅÅˇ
  2249. ÅÅÅÅˇ
  2250. ÅÅÅÅˇ
  2251. ÅÅÅÅˇ
  2252. ÅÅÅÅˇ
  2253. ÅÅÅÅˇ
  2254. ÅÅÅÅˇ
  2255. ÅÅÅÅˇ
  2256. ÅÅÅÅˇ
  2257. ÅÅÅÅˇ
  2258. ÅÅÅÅˇ
  2259. ÅÅÅÅˇ
  2260. ÅÅÅÅˇ
  2261. ÅÅÅÅˇ
  2262. ÅÅÅÅˇ
  2263. ÅÅÅÅˇ
  2264. ÅÅÅÅˇ
  2265. ÅÅÅÅˇ
  2266. ÅÅÅÅˇ
  2267. ÅÅÅÅˇ
  2268. ÅÅÅÅˇ
  2269. ÅÅÅÅˇ
  2270. ÅÅÅÅˇ
  2271. ÅÅÅÅˇ
  2272. ÅÅÅÅˇ
  2273. ÅÅÅÅˇ
  2274. ÅÅÅÅˇ
  2275. ÅÅÅÅˇ
  2276. ÅÅÅÅˇ
  2277. ÅÅÅÅˇ
  2278. ÅÅÅÅˇ
  2279. ÅÅÅÅˇ
  2280. ÅÅÅÅˇ
  2281. ÅÅÅÅˇ
  2282. ÅÅÅÅˇòÇ@ÄHH\*H•Ä˛ˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  2283. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêê@Äka´b'
  2284. ÅÅÅÅˇ
  2285. ÅÅÅÅˇ
  2286. ÅÅÅÅˇ
  2287. ÅÅÅÅˇ
  2288. ÅÅÅÅˇ
  2289. ÅÅÅÅˇ
  2290. ÅÅÅÅˇ
  2291. ÅÅÅÅˇ
  2292. ÅÅÅÅˇ
  2293. ÅÅÅÅˇ
  2294. ÅÅÅÅˇ
  2295. ÅÅÅÅˇ
  2296. ÅÅÅÅˇ
  2297. ÅÅÅÅˇ
  2298. ÅÅÅÅˇ
  2299. ÅÅÅÅˇ
  2300. ÅÅÅÅˇ
  2301. ÅÅÅÅˇ
  2302. ÅÅÅÅˇ
  2303. ÅÅÅÅˇ
  2304. ÅÅÅÅˇ
  2305. ÅÅÅÅˇ
  2306. ÅÅÅÅˇ
  2307. ÅÅÅÅˇ
  2308. ÅÅÅÅˇ
  2309. ÅÅÅÅˇ
  2310. ÅÅÅÅˇ
  2311. ÅÅÅÅˇ
  2312. ÅÅÅÅˇ
  2313. ÅÅÅÅˇ
  2314. ÅÅÅÅˇ
  2315. ÅÅÅÅˇ
  2316. ÅÅÅÅˇ
  2317. ÅÅÅÅˇ
  2318. ÅÅÅÅˇ
  2319. ÅÅÅÅˇ
  2320. ÅÅÅÅˇ
  2321. ÅÅÅÅˇ
  2322. ÅÅÅÅˇ
  2323. ÅÅÅÅˇ
  2324. ÅÅÅÅˇ
  2325. ÅÅÅÅˇ
  2326. ÅÅÅÅˇ
  2327. ÅÅÅÅˇ
  2328. ÅÅÅÅˇ
  2329. ÅÅÅÅˇ
  2330. ÅÅÅÅˇ
  2331. ÅÅÅÅˇ
  2332. ÅÅÅÅˇ
  2333. ÅÅÅÅˇ
  2334. ÅÅÅÅˇ
  2335. ÅÅÅÅˇ
  2336. ÅÅÅÅˇ
  2337. ÅÅÅÅˇ
  2338. ÅÅÅÅˇ
  2339. ÅÅÅÅˇ
  2340. ÅÅÅÅˇ
  2341. ÅÅÅÅˇ
  2342. ÅÅÅÅˇ
  2343. ÅÅÅÅˇ
  2344. ÅÅÅÅˇ
  2345. ÅÅÅÅˇ
  2346. ÅÅÅÅˇ
  2347. ÅÅÅÅˇòÇÄñHH\*L¶Ä˛ˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  2348. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêêÄñ´a¡b'
  2349. ÅÅÅÅˇ
  2350. ÅÅÅÅˇ
  2351. ÅÅÅÅˇ
  2352. ÅÅÅÅˇ
  2353. ÅÅÅÅˇ
  2354. ÅÅÅÅˇ
  2355. ÅÅÅÅˇ
  2356. ÅÅÅÅˇ
  2357. ÅÅÅÅˇ
  2358. ÅÅÅÅˇ
  2359. ÅÅÅÅˇ
  2360. ÅÅÅÅˇ
  2361. ÅÅÅÅˇ
  2362. ÅÅÅÅˇ
  2363. ÅÅÅÅˇ
  2364. ÅÅÅÅˇ
  2365. ÅÅÅÅˇ
  2366. ÅÅÅÅˇ
  2367. ÅÅÅÅˇ
  2368. ÅÅÅÅˇ
  2369. ÅÅÅÅˇ ÅÅÅÅòB@@¡abøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòB@Ä@ÄaAbøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòBÄñÄñAaWbøøøøøøøøøøøøøøøøøøøøøøòÇ@HH\*HßIJˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  2370. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêê@¡ab'
  2371. ÅÅÅÅˇ
  2372. ÅÅÅÅˇ
  2373. ÅÅÅÅˇ
  2374. ÅÅÅÅˇ
  2375. ÅÅÅÅˇ
  2376. ÅÅÅÅˇ
  2377. ÅÅÅÅˇ
  2378. ÅÅÅÅˇ
  2379. ÅÅÅÅˇ
  2380. ÅÅÅÅˇ
  2381. ÅÅÅÅˇ
  2382. ÅÅÅÅˇ
  2383. ÅÅÅÅˇ
  2384. ÅÅÅÅˇ
  2385. ÅÅÅÅˇ
  2386. ÅÅÅÅˇ
  2387. ÅÅÅÅˇ
  2388. ÅÅÅÅˇ
  2389. ÅÅÅÅˇ
  2390. ÅÅÅÅˇ
  2391. ÅÅÅÅˇ
  2392. ÅÅÅÅˇ
  2393. ÅÅÅÅˇ
  2394. ÅÅÅÅˇ
  2395. ÅÅÅÅˇ
  2396. ÅÅÅÅˇ
  2397. ÅÅÅÅˇ
  2398. ÅÅÅÅˇ
  2399. ÅÅÅÅˇ
  2400. ÅÅÅÅˇ
  2401. ÅÅÅÅˇ
  2402. ÅÅÅÅˇ
  2403. ÅÅÅÅˇ
  2404. ÅÅÅÅˇ
  2405. ÅÅÅÅˇ
  2406. ÅÅÅÅˇ
  2407. ÅÅÅÅˇ
  2408. ÅÅÅÅˇ
  2409. ÅÅÅÅˇ
  2410. ÅÅÅÅˇ
  2411. ÅÅÅÅˇ
  2412. ÅÅÅÅˇ
  2413. ÅÅÅÅˇ
  2414. ÅÅÅÅˇ
  2415. ÅÅÅÅˇ
  2416. ÅÅÅÅˇ
  2417. ÅÅÅÅˇ
  2418. ÅÅÅÅˇ
  2419. ÅÅÅÅˇ
  2420. ÅÅÅÅˇ
  2421. ÅÅÅÅˇ
  2422. ÅÅÅÅˇ
  2423. ÅÅÅÅˇ
  2424. ÅÅÅÅˇ
  2425. ÅÅÅÅˇ
  2426. ÅÅÅÅˇ
  2427. ÅÅÅÅˇ
  2428. ÅÅÅÅˇ
  2429. ÅÅÅÅˇ
  2430. ÅÅÅÅˇ
  2431. ÅÅÅÅˇ
  2432. ÅÅÅÅˇ
  2433. ÅÅÅÅˇ ÅÅÅÅòÇ@ÄHH\*L®Ä˛ˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  2434. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêê@ÄaAb'
  2435. ÅÅÅÅˇ
  2436. ÅÅÅÅˇ
  2437. ÅÅÅÅˇ
  2438. ÅÅÅÅˇ
  2439. ÅÅÅÅˇ
  2440. ÅÅÅÅˇ
  2441. ÅÅÅÅˇ
  2442. ÅÅÅÅˇ
  2443. ÅÅÅÅˇ
  2444. ÅÅÅÅˇ
  2445. ÅÅÅÅˇ
  2446. ÅÅÅÅˇ
  2447. ÅÅÅÅˇ
  2448. ÅÅÅÅˇ
  2449. ÅÅÅÅˇ
  2450. ÅÅÅÅˇ
  2451. ÅÅÅÅˇ
  2452. ÅÅÅÅˇ
  2453. ÅÅÅÅˇ
  2454. ÅÅÅÅˇ
  2455. ÅÅÅÅˇ
  2456. ÅÅÅÅˇ
  2457. ÅÅÅÅˇ
  2458. ÅÅÅÅˇ
  2459. ÅÅÅÅˇ
  2460. ÅÅÅÅˇ
  2461. ÅÅÅÅˇ
  2462. ÅÅÅÅˇ
  2463. ÅÅÅÅˇ
  2464. ÅÅÅÅˇ
  2465. ÅÅÅÅˇ
  2466. ÅÅÅÅˇ
  2467. ÅÅÅÅˇ
  2468. ÅÅÅÅˇ
  2469. ÅÅÅÅˇ
  2470. ÅÅÅÅˇ
  2471. ÅÅÅÅˇ
  2472. ÅÅÅÅˇ
  2473. ÅÅÅÅˇ
  2474. ÅÅÅÅˇ
  2475. ÅÅÅÅˇ
  2476. ÅÅÅÅˇ
  2477. ÅÅÅÅˇ
  2478. ÅÅÅÅˇ
  2479. ÅÅÅÅˇ
  2480. ÅÅÅÅˇ
  2481. ÅÅÅÅˇ
  2482. ÅÅÅÅˇ
  2483. ÅÅÅÅˇ
  2484. ÅÅÅÅˇ
  2485. ÅÅÅÅˇ
  2486. ÅÅÅÅˇ
  2487. ÅÅÅÅˇ
  2488. ÅÅÅÅˇ
  2489. ÅÅÅÅˇ
  2490. ÅÅÅÅˇ
  2491. ÅÅÅÅˇ
  2492. ÅÅÅÅˇ
  2493. ÅÅÅÅˇ
  2494. ÅÅÅÅˇ
  2495. ÅÅÅÅˇ
  2496. ÅÅÅÅˇ
  2497. ÅÅÅÅˇ
  2498. ÅÅÅÅˇòÇÄñHH\*H©Ä˛ˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  2499. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêêÄñAaWb'
  2500. ÅÅÅÅˇ
  2501. ÅÅÅÅˇ
  2502. ÅÅÅÅˇ
  2503. ÅÅÅÅˇ
  2504. ÅÅÅÅˇ
  2505. ÅÅÅÅˇ
  2506. ÅÅÅÅˇ
  2507. ÅÅÅÅˇ
  2508. ÅÅÅÅˇ
  2509. ÅÅÅÅˇ
  2510. ÅÅÅÅˇ
  2511. ÅÅÅÅˇ
  2512. ÅÅÅÅˇ
  2513. ÅÅÅÅˇ
  2514. ÅÅÅÅˇ
  2515. ÅÅÅÅˇ
  2516. ÅÅÅÅˇ
  2517. ÅÅÅÅˇ
  2518. ÅÅÅÅˇ
  2519. ÅÅÅÅˇ
  2520. ÅÅÅÅˇ
  2521. ÅÅÅÅˇòB@@WaóbøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòB@Ä@Äóa◊bøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòBÄñÄñ◊aÌbøøøøøøøøøøøøøøøøøøøøøøòÇ@HH\*L™Ä˛ˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  2522. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêê@Waób'
  2523. ÅÅÅÅˇ
  2524. ÅÅÅÅˇ
  2525. ÅÅÅÅˇ
  2526. ÅÅÅÅˇ
  2527. ÅÅÅÅˇ
  2528. ÅÅÅÅˇ
  2529. ÅÅÅÅˇ
  2530. ÅÅÅÅˇ
  2531. ÅÅÅÅˇ
  2532. ÅÅÅÅˇ
  2533. ÅÅÅÅˇ
  2534. ÅÅÅÅˇ
  2535. ÅÅÅÅˇ
  2536. ÅÅÅÅˇ
  2537. ÅÅÅÅˇ
  2538. ÅÅÅÅˇ
  2539. ÅÅÅÅˇ
  2540. ÅÅÅÅˇ
  2541. ÅÅÅÅˇ
  2542. ÅÅÅÅˇ
  2543. ÅÅÅÅˇ
  2544. ÅÅÅÅˇ
  2545. ÅÅÅÅˇ
  2546. ÅÅÅÅˇ
  2547. ÅÅÅÅˇ
  2548. ÅÅÅÅˇ
  2549. ÅÅÅÅˇ
  2550. ÅÅÅÅˇ
  2551. ÅÅÅÅˇ
  2552. ÅÅÅÅˇ
  2553. ÅÅÅÅˇ
  2554. ÅÅÅÅˇ
  2555. ÅÅÅÅˇ
  2556. ÅÅÅÅˇ
  2557. ÅÅÅÅˇ
  2558. ÅÅÅÅˇ
  2559. ÅÅÅÅˇ
  2560. ÅÅÅÅˇ
  2561. ÅÅÅÅˇ
  2562. ÅÅÅÅˇ
  2563. ÅÅÅÅˇ
  2564. ÅÅÅÅˇ
  2565. ÅÅÅÅˇ
  2566. ÅÅÅÅˇ
  2567. ÅÅÅÅˇ
  2568. ÅÅÅÅˇ
  2569. ÅÅÅÅˇ
  2570. ÅÅÅÅˇ
  2571. ÅÅÅÅˇ
  2572. ÅÅÅÅˇ
  2573. ÅÅÅÅˇ
  2574. ÅÅÅÅˇ
  2575. ÅÅÅÅˇ
  2576. ÅÅÅÅˇ
  2577. ÅÅÅÅˇ
  2578. ÅÅÅÅˇ
  2579. ÅÅÅÅˇ
  2580. ÅÅÅÅˇ
  2581. ÅÅÅÅˇ
  2582. ÅÅÅÅˇ
  2583. ÅÅÅÅˇ
  2584. ÅÅÅÅˇ
  2585. ÅÅÅÅˇ
  2586. ÅÅÅÅˇòÇ@ÄHH\*H´Ä˛ˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  2587. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêê@Äóa◊b'
  2588. ÅÅÅÅˇ
  2589. ÅÅÅÅˇ
  2590. ÅÅÅÅˇ
  2591. ÅÅÅÅˇ
  2592. ÅÅÅÅˇ
  2593. ÅÅÅÅˇ
  2594. ÅÅÅÅˇ
  2595. ÅÅÅÅˇ
  2596. ÅÅÅÅˇ
  2597. ÅÅÅÅˇ
  2598. ÅÅÅÅˇ
  2599. ÅÅÅÅˇ
  2600. ÅÅÅÅˇ
  2601. ÅÅÅÅˇ
  2602. ÅÅÅÅˇ
  2603. ÅÅÅÅˇ
  2604. ÅÅÅÅˇ
  2605. ÅÅÅÅˇ
  2606. ÅÅÅÅˇ
  2607. ÅÅÅÅˇ
  2608. ÅÅÅÅˇ
  2609. ÅÅÅÅˇ
  2610. ÅÅÅÅˇ
  2611. ÅÅÅÅˇ
  2612. ÅÅÅÅˇ
  2613. ÅÅÅÅˇ
  2614. ÅÅÅÅˇ
  2615. ÅÅÅÅˇ
  2616. ÅÅÅÅˇ
  2617. ÅÅÅÅˇ
  2618. ÅÅÅÅˇ
  2619. ÅÅÅÅˇ
  2620. ÅÅÅÅˇ
  2621. ÅÅÅÅˇ
  2622. ÅÅÅÅˇ
  2623. ÅÅÅÅˇ
  2624. ÅÅÅÅˇ
  2625. ÅÅÅÅˇ
  2626. ÅÅÅÅˇ
  2627. ÅÅÅÅˇ
  2628. ÅÅÅÅˇ
  2629. ÅÅÅÅˇ
  2630. ÅÅÅÅˇ
  2631. ÅÅÅÅˇ
  2632. ÅÅÅÅˇ
  2633. ÅÅÅÅˇ
  2634. ÅÅÅÅˇ
  2635. ÅÅÅÅˇ
  2636. ÅÅÅÅˇ
  2637. ÅÅÅÅˇ
  2638. ÅÅÅÅˇ
  2639. ÅÅÅÅˇ
  2640. ÅÅÅÅˇ
  2641. ÅÅÅÅˇ
  2642. ÅÅÅÅˇ
  2643. ÅÅÅÅˇ
  2644. ÅÅÅÅˇ
  2645. ÅÅÅÅˇ
  2646. ÅÅÅÅˇ
  2647. ÅÅÅÅˇ
  2648. ÅÅÅÅˇ
  2649. ÅÅÅÅˇ
  2650. ÅÅÅÅˇ
  2651. ÅÅÅÅˇòÇÄñHH\*L¨Ä˛ˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  2652. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêêÄñ◊aÌb'
  2653. ÅÅÅÅˇ
  2654. ÅÅÅÅˇ
  2655. ÅÅÅÅˇ
  2656. ÅÅÅÅˇ
  2657. ÅÅÅÅˇ
  2658. ÅÅÅÅˇ
  2659. ÅÅÅÅˇ
  2660. ÅÅÅÅˇ
  2661. ÅÅÅÅˇ
  2662. ÅÅÅÅˇ
  2663. ÅÅÅÅˇ
  2664. ÅÅÅÅˇ
  2665. ÅÅÅÅˇ
  2666. ÅÅÅÅˇ
  2667. ÅÅÅÅˇ
  2668. ÅÅÅÅˇ
  2669. ÅÅÅÅˇ
  2670. ÅÅÅÅˇ
  2671. ÅÅÅÅˇ
  2672. ÅÅÅÅˇ
  2673. ÅÅÅÅˇ
  2674. ÅÅÅÅˇˇ∑“@ˇ ˇˇˇˇ@
  2675. ˇ·ˇ‚7^
  2676. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡ä5Introduction to Publishers, Subscribers, and Editions
  2677. , (‡    2-5
  2678. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  2679. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  2680. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  2681. 4€4—?òÄ
  2682. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  2683. ˛ˇˇˇ
  2684. ˛ˇˇˇ
  2685. ˛ˇˇˇ
  2686. ˛ˇˇˇ˜˝˛ˇ˛
  2687. ˛ˇ˛ˇˇ
  2688. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  2689. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  2690. ˛ˇ˛ˇˇ
  2691. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  2692. ˛ˇˇˇˇ
  2693. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  2694. ˛ˇˇˇˇ
  2695. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  2696. ˛ˇˇˇˇ
  2697. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  2698. gHw4gHw"hH]
  2699. ˇ·ˇ‚7^    °dONLNd\äg¥(dä
  2700. Figure 2-2°dONLNd \Ãg“)BA0°dONLNd\“g˘)
  2701.  publisherÖ °dONLNd\¯gk)&, an edition, and a subscriber
  2702. °dONLNd7 ä,E()ä*Note that the publisher and subscriber bor˜@°dONLNda E,ï)ªders illustrated in †°dONLNdu ñ,Æ)QFigurr¿°dONLNdz Æ,¬)e 2-2@°dONLNd √,¸)  may appear °dONLNdã-ä9∫(6ä slightly difRÄ°dONLNdó-∫9Δ)0fer5°dONLNdö-Δ9›) ent fr´@°dONLNd†-›9)
  2703. om the borî@°dONLNd™-9T)0ders you see on à°dONLNd∫-T9d)Gthe )Ä°dONLNdæ-e9q)scrõ¿°dONLNd¡-q9Ö) een. `°dONLNdΔ-Ü9û)Figur” °dONLNdÀ-ù9Ÿ)e 2-6 on page í`°dONLNdŸ-⁄9‚)=2-Ê@°dONLNd€-‚9Á)9Ê@°dONLNd‹-Á9) showA °dONLNd·-9)s °dONLNd„:äFç(Cät¬`°dONLNd‰:çF)he publisher and subscriber bor–¿°dONLNd:F')åder®¿°dONLNd:(FU) s as they a@°dONLNd:VFä). ppear onscr‡°dONLNd:äFõ)4een.°dONLNd!LäX…(UäData always fló‡°dONLNd/L…X)?ows in one dir¥¿°dONLNd=LX.)?
  2704. ection, fry °dONLNdGL/X“)'%om publisher to edition to subscriber¯Ä°dONLNdlL—X )¢ . Documents °dONLNdxYäe
  2705. (bäWthat contain publishers and subscribers do not have to be open at the same time to sharz °dONLNdœY
  2706. e(b
  2707. e °dONLNd—fär∂(oäBdata. Whenever the user saves a document that contains a publisher-Ä°dONLNdf∂r(o∂, the edition changes °dONLNd)säô(|äto r|‡°dONLNd-sô£)eflS@°dONLNd0s§’) ect the curr€‡°dONLNd<s’)1 ent data fr0@°dONLNdGsN).om the publisherΔ°dONLNdWsMR)J. g†°dONLNdYsR˛)(All subscribers update their contents frj†°dONLNdÅs˛)¨om °dONLNdÑÄäåæ(âäthe edition. æ`°dONLNdëÄæå«)4<Any number of subscribers can subscribe to a single edition.°dONLNdŒíäûê(õäTµ¿°dONLNdœíèûü)o cr‡Ä°dONLNd”íüûí)8eate a publisher within a document, a user selects an arh@°dONLNd íìûı)Ùea of the document to °dONLNd!üä´ù(®äsharS`°dONLNd%üù´°)e°dONLNd&ü¢´§) ù°dONLNd'ü§´Á)and chooses Cr÷`°dONLNd5üÁ´/)Ceate Publisher fr¯†°dONLNdFü/´Ä)Hom the Edit menu ˜‡°dONLNdWüÅ´î)R(see ú°dONLNd\üï´≠)Figurn¿°dONLNdaü≠´È)e 2-7 on page .°dONLNdoüÍ´Ú)=2-Ň°dONLNdqüÚ´¸)10Ň°dONLNdsü¸´ˇ)
  2708. )’¿°dONLNdtüˇ´). °dONLNdv¨ä∏¢(µäFigurR¿°dONLNd{¨¢∏∂)e 2-3@°dONLNdĨ∂∏˝)I shows the dialog box that your application should display when the user °dONLNd…πä≈π(¬ä
  2709. chooses CrL@°dONLNd”π∫≈¯)0eate Publisher@°dONLNd·π¯≈˙)>.
  2710. ËH˘4ÈH˘"ÈH]
  2711. ˇ·ˇ‚7^    °dONLNd‰fiäÈ¥(Êä
  2712. Figure 2-3°dONLNdÔfiÃÈ.)BThe publisher dialog box
  2713. wI    4ˇb3ˇc4ò@@˜@˜ˇc4ˇ£+¡¡?Ãˇ¸¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯ò@@Ę@ʡ£4ˇ„+?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯ò@Ä¿˜Ä¿˜ˇ„4#+?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯Ãˇ˛¯¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ >xÄ1Ä… "$J@…  Bà@… 8B@… HBÄ…
  2714. @Ñd» Bà!"@… ˝¿«Ä…¡¡¡¡">`¿ò0¸l0˛Ä@@‚ "˛Å !ĸ ¸ÄÄÄ‚  ˝Ä 
  2715. ! ¸B˝˛ÄÄ‚%!8cµ¢Ä 
  2716. ö9Ï&Äk¿AO3û◊ÖÉË„õF·4„%!HÕÕ@J%2t”ëA¶ödJ"ö    ®î•åñò„%!@â(éÄTF!$‚Å»íHT%"QA    „%!A&KÅ !•[L…:¬ ‰òñuØâïiNh „%!·Œ}¿gã>"wH‰ ‘Å≈ºÁ$A©¯é2á „˛˚¸ ˚@Ÿ
  2717. ˛˚Ã
  2718. ˛˚á >ÉÉ… "˛Δ…    … 8)Ûs¡J5„G@Œ H”&âARH§öiÄŒ A%
  2719. ÅdâHíqÕ C|…¬DùiÃÇÕ ¸∑N‰É\jFúrÕ˜"Ãò@¿˜¿˜#4c+˜"Øá$c8aÄ0`¿˝¿0†˝¿0‰
  2720. !Ä¿˛˝ ˝@›#R @IJ@¸„'#RH'ée)Fò˝«¿‹-Û»ÿo7<”iöxÿfi7<Â'#JjH"í⁄h*I%îàß@H÷$I)§íhîm6ä)•$hîÂ'#Lr–E¢p,ëA(êí@"à‰Dä1AP®!I$îQB$P®Â'#ÑÉ`E•/ÄHìŒmLÄ"—NíZM<ë,¢ìI•ZNxë,Â'#ƒr@È9÷pkç3…tàtêË5eì∞‘ÓHíI>ì±®ÓH ڲ÷Ó÷Óé÷¡
  2721.  @ɲ&0`ÿ@ĸ˛0I¸ ÿ
  2722. ÅIJ ¡˛ @ÿ)¬É«∏ÊIä xP!Aé?q¡D¿⁄J$Å(≤ë"K4–)†"BQe"Föi ⁄˛/¬0•Ç“D‡"R '‰aJ!úr ⁄AQM¢Cdfl'Z@â¢õDã‡Ç@⁄Åéy#ÇG,‰ë`‡û ÚGúuÄ⁄˝˚¸¸Ÿ˝ı¸Ÿ˝ı¸Ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¸¿œ "˚Äœ(B˛Œ(Û» ÄvôÊ∏¥<`–HI(–ÄãhíìXê–|ä0‡Å
  2723. Iê)œÑíYçô)d -0–üeê‡p‰íœ£†áHƒ–˝˛ÄŒ ˝  é˝ ¡ <xxËÕ$˛$Õ!B˛ LÕ!B#œ†pt<Ä–!B—E4†Hò‘Ä–BÑ‚ä" åê‚Ä–DâÀI@ài·œ¯!‰í~AÒ܆‚œÙœÙœÙœ¡:@˝ÅÄÃò@@˜@˜c4£+¿˝B@Ã
  2724. $ÄÄ@Ã
  2725. $çiºvÉ@Ã
  2726. $Ö&2HãÄÄà   I
  2727. $I
  2728. ÅÀ
  2729. MíÃDÒÇ@Ã
  2730. ÈtCP‰Äá¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę£4„+¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜„4#+¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜#4U+¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜ˇc4ˇ£+¡¡À30¯À¯ Ã¯À¯À¯À¯ Ã¯À¯ Ã¯À¯À¯À¯ ˚˜ˇ¿Û˜ˇ¯¯¯˙˜`Û˜¯¯ ˚˜pÛ˜¯¯˙˜XÛ˜¯¯˙˜LÛ˜Ģ¯˙˜FÛ˜¿˘¯ ˚˜CÛ˜`˘¯˙˜AÄÙ˜0˘¯ ˚˜@¿Ù˜˘¯˙˜@`Ù˜ ˘¯˙˜@0Ù˜˘¯˙˜@Ù˜˘¯ ˚˜@ Ù˜Ä˙¯˙˜@Ù˜¿˙¯ ˚˜@Ù˜`˙¯˙˜@Äı˜0˙¯˙˜@¿ı˜˙¯˙˜@`ı˜ ˙¯ ˚˜@0ı˜˙¯!˙†¿»Äˇ¯ı˜ˇ˛˙¯! ˚ˇ˝¿ø˝¿{‡ıı˙¯˙ø˝¿ˇ˝¿{‡ ıı˙¯˙ı ıı˙¯˙ı ıı˙¯! ˚ˇ/Ø€˝m ıı˙¯˙ómmYóg ıı˙¯! ˚fl.Óö˝k ıı˙¯˙    @Ä@˛ ıı˙¯˙ı ı˘d˘˙¯#˙ˇ/ÔŸˇ/ ıi˛˘˙¯% ˚ïe%Kùm ıy~˘˙¯˙˛kÔôˇ. ıı˙¯! ˚    @Ä@˛ ıı˙¯˙ı ıˇ¢r˚˙¯&˙˝oÔY◊m ıı‚˚o¯¸˙¯&˙∑e/Àø/ ıØ„˚O¯¸˙¯! ˚ˇnÔ€˜o ıı˙¯˙    @Ä@˛ ıı˙¯ ˚ı ıı˙¯˙fl/ß[˜m ıı˙¯˙øeoŸùg ıı˙¯˙ˇkÁ€Áe ıı˙¯! ˚    @Ä@˛ ıı˙¯˙ı ı†¿`à"˙¯! ˚ı ı˜nÌˇ{˙˚ÛÔ˛˙¯˙ı ı∑nÌˇ{˙˙ÛÔ˛˙¯$˙ı ˝˛ˇÄ˛˚ ˙¯˙ı ˝˛ˇÄ˛ı˙¯  ˚ı ˝˛ˇÄ˛ı˙¯"˚»¯ ˝IJı˙¯ò@@Ę@ʡ£4ˇ„+$ ¸ı ˝ˇûIJ¯38˙¯+˚
  2731. @àë˛ ˝ˇøIJ¯Ã ˙¯-˚‹ÔÓ˝¿ ˛0ˇsÉIJ˘˙¯2˚ˇÿoÏ˝¿ ˛8ˇaÉIJbd@˙¯6 ‡E˛˝?˝ˇÏˇa˚ŸˇÉÔÄ{˚Ä=
  2732. ¯2    êD˘1˝ˇs˚Ÿ¡Ô[˚=¯6 ôu73>ˇ'Ô€˝e¸"#?Ÿ"c˛
  2733. ó3kõ¯1ÈM|˙ïo-[ó/ ˝ˆŸ0¯    ~¯7âMl¬fl'Ø€ˇ'$˝DFŸDaº‡{ˆ¿?YAˇˇëîÏJb¯7áu4∫@Ä@(˝àåÜŸà¿ï‡KV¿%À¿w3Àû¯) ¸ˆ?˝ˇ¯9«˚Ÿˇ Éú‡kˆ¿?…√˙¯2˚ˇg€˜/ ˛0pÁ˚IJ ˙¯/ ¸ï//Kùo ˛ ˇIJ˘˙¯1˚˝oÁõ˜o ˝ˇIJº‡yv¿=À¿˙¯0˚»˛Dƒ˝D@ ˝IJï‡K“¿'[¡˙¯*˙¯à ˝˛ˇÄ˛ù‡yÊ¿=€¿˙¯- ˚floÌK◊e ˝˛ˇÄ˛;˘3 ˙¯*˙µ%'€ø/ ˝˛ˇÄ˛¯U8˙¯! ˚›nÔ€˜o ıı˙¯˙    @Ä@˛ ıı˙¯˙ı ˝x@@IJı˙¯'˙˜/≠[ˇo ˝Ä@@IJı˙¯) ˚ümo…ó% ˝wLa˘˛ı˙¯'˙ˇnÔ€Ô/ ˝)fiÚLò˛ı˙¯2 ˚    @Ä@˛ ˝é–“t˲† ˛ ˙¯'˙ı ˝sŒa‹¯˛øœ˚w›ˇ€˘ø˙¯(˙ˇ/Á…◊o ıøœ˚w›ˇ€˘ø˙¯#˙óem€Ω% ı˛˘˙¯! ˚ˇoÔÀ˜i ıı˙¯(˙    @Ä@˛ ıÄBÄÇ(˙¯! ˚ı ıflœˆˇfl∑ÔÌÄ˙¯˙ı ıflœˆˇfl∑ÔÌ˙¯˙ı ı˛¸˙¯˙ı ıı˙¯ ˚ı ıB@¸˙¯˙ı ı{˜˚›¿¸˙¯ ˚ı ı{˜˚›¿¸˙¯˙ı ıı˙¯˙ı ıı˙¯(˙ˇ/߀ˇm ı˛    0a˙¯* ˚ïmoYùg ıøø~ˇ◊w}˙¯(˙fl.ØöÔk ıøø~ˇ◊w}˙¯* ˚    @Ä@˛ ı ˛@˛˙¯˙ı ıı˙¯(˙ˇoÌY˜/ ıò@!†˙¯(˙ï%'Àùm ıøfl˘fl{˚flΩ˚ˇ˙¯* ˚˝kÌŸ˜n ıfl˘fl{˚flΩ˚ˇ˙¯&˙    @Ä@˛ ı˝¿˝˙¯ ˚ı ıı˙¯#˙floÁY◊m ıAĢ˙¯#˙µ%-Àø/ ıÔ‡˘˙¯#˙›nÁ€˜o ıÔ¿˘˙¯% ˚    @Ä@˛ ı˛@˘˙¯˙ı ıı˙¯! ˚˜%ß[ˇ- ıı˙¯˙üooŸóo ıı˙¯˙ˇoÁ€Ôo ıı˙¯˙    @Ä@˛ ıı˙¯ ˚ı ıı˙¯˙ı ıı˙¯ ˚ı ıı˙¯˙ı ıı˙¯˙ı ıı˙¯˙ı ıı˙¯ò@Ä¿˜Ä¿˜ˇ„4#+ ˚ıˇ¸ıÙˇ˙¯˙ıˇ¸ıÙˇ˙¯ Ã¯À¯À¯À¯ Ã¯À¯ Ã¯À¯À¯À¯ Ã¯À¯À32¯ Àï¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ >xÄ1Ä… "$J@…  Bà@… 8B@… HBÄ…
  2734. @Ñd» Bà!"@… ˝¿«Ä…¡¡¡¡">`¿ò0¸l0˛Ä@@‚ "˛Å !ĸ ¸ÄÄÄ‚  ˝Ä 
  2735. ! ¸B˝˛ÄÄ‚%!8cµ¢Ä 
  2736. ö9Ï&Äk¿AO3û◊ÖÉË„õF·4„%!HÕÕ@J%2t”ëA¶ödJ"ö    ®î•åñò„%!@â(éÄTF!$‚Å»íHT%"QA    „%!A&KÅ !•[L…:¬ ‰òñuØâïiNh „%!·Œ}¿gã>"wH‰ ‘Å≈ºÁ$A©¯é2á „˛˚¸ ˚@Ÿ
  2737. ˛˚Ã
  2738. ˛˚á >ÉÉ… "˛Δ…    … 8)Ûs¡J5„G@Œ H”&âARH§öiÄŒ A%
  2739. ÅdâHíqÕ C|…¬DùiÃÇÕ ¸∑N‰É\jFúrÕ˜"Ãò@¿˜¿˜#4c+˜"Øá$c8aÄ0`¿˝¿0†˝¿0‰
  2740. !Ä¿˛˝ ˝@›#R @IJ@¸„'#RH'ée)Fò˝«¿‹-Û»ÿo7<”iöxÿfi7<Â'#JjH"í⁄h*I%îàß@H÷$I)§íhîm6ä)•$hîÂ'#Lr–E¢p,ëA(êí@"à‰Dä1AP®!I$îQB$P®Â'#ÑÉ`E•/ÄHìŒmLÄ"—NíZM<ë,¢ìI•ZNxë,Â'#ƒr@È9÷pkç3…tàtêË5eì∞‘ÓHíI>ì±®ÓH ڲ÷Ó÷Óé÷¡
  2741.  @ɲ&0`ÿ@ĸ˛0I¸ ÿ
  2742. ÅIJ ¡˛ @ÿ)¬É«∏ÊIä xP!Aé?q¡D¿⁄J$Å(≤ë"K4–)†"BQe"Föi ⁄˛/¬0•Ç“D‡"R '‰aJ!úr ⁄AQM¢Cdfl'Z@â¢õDã‡Ç@⁄Åéy#ÇG,‰ë`‡û ÚGúuÄ⁄˝˚¸¸Ÿ˝ı¸Ÿ˝ı¸Ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¸¿œ "˚Äœ(B˛Œ(Û» ÄvôÊ∏¥<`–HI(–ÄãhíìXê–|ä0‡Å
  2743. Iê)œÑíYçô)d -0–üeê‡p‰íœ£†áHƒ–˝˛ÄŒ ˝  é˝ ¡ <xxËÕ$˛$Õ!B˛ LÕ!B#œ†pt<Ä–!B—E4†Hò‘Ä–BÑ‚ä" åê‚Ä–DâÀI@ài·œ¯!‰í~AÒ܆‚œÙœÙœÙœ¡:@˝ÅÄÃò@@˜@˜c4£+¿˝B@Ã
  2744. $ÄÄ@Ã
  2745. $çiºvÉ@Ã
  2746. $Ö&2HãÄÄà   I
  2747. $I
  2748. ÅÀ
  2749. MíÃDÒÇ@Ã
  2750. ÈtCP‰Äá¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę£4„+¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜„4#+¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜#4U+¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜U4ï+¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ęï4’+¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜’4+¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜4U+¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜U4ï+¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ęï4’+¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜’4+¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜4G+¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜U4ï+¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ęï4’+¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜’4+¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜4U+¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜U4ï+¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ęï4’+¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜’4+¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜4G+¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡4uFvGò@@˜@˜vG∂>¡¡?Ãˇ¸¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯ò@@Ę@Ę∂Gˆ>?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯ò@Ä¿˜Ä¿˜ˆG6>?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯?Ãˇ˛¯Ãˇ˛¯¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ >xÄ1Ä… "$J@…  Bà@… 8B@… HBÄ…
  2751. @Ñd» Bà!"@… ˝¿«Ä…¡¡¡¡">`¿ò0¸l0˛Ä@@‚ "˛Å !ĸ ¸ÄÄÄ‚  ˝Ä 
  2752. ! ¸B˝˛ÄÄ‚%!8cµ¢Ä 
  2753. ö9Ï&Äk¿AO3û◊ÖÉË„õF·4„%!HÕÕ@J%2t”ëA¶ödJ"ö    ®î•åñò„%!@â(éÄTF!$‚Å»íHT%"QA    „%!A&KÅ !•[L…:¬ ‰òñuØâïiNh „%!·Œ}¿gã>"wH‰ ‘Å≈ºÁ$A©¯é2á „˛˚¸ ˚@Ÿ
  2754. ˛˚Ã
  2755. ˛˚á >ÉÉ… "˛Δ…    … 8)Ûs¡J5„G@Œ H”&âARH§öiÄŒ A%
  2756. ÅdâHíqÕ C|…¬DùiÃÇÕ ¸∑N‰É\jFúrÕ˜"Ãò@¿˜¿˜6Gv>˜"Øá$c8aÄ0`¿˝¿0†˝¿0‰
  2757. !Ä¿˛˝ ˝@›#R @IJ@¸„'#RH'ée)Fò˝«¿‹-Û»ÿo7<”iöxÿfi7<Â'#JjH"í⁄h*I%îàß@H÷$I)§íhîm6ä)•$hîÂ'#Lr–E¢p,ëA(êí@"à‰Dä1AP®!I$îQB$P®Â'#ÑÉ`E•/ÄHìŒmLÄ"—NíZM<ë,¢ìI•ZNxë,Â'#ƒr@È9÷pkç3…tàtêË5eì∞‘ÓHíI>ì±®ÓH ڲ÷Ó÷Óé÷¡
  2758.  @ɲ&0`ÿ@ĸ˛0I¸ ÿ
  2759. ÅIJ ¡˛ @ÿ)¬É«∏ÊIä xP!Aé?q¡D¿⁄J$Å(≤ë"K4–)†"BQe"Föi ⁄˛/¬0•Ç“D‡"R '‰aJ!úr ⁄AQM¢Cdfl'Z@â¢õDã‡Ç@⁄Åéy#ÇG,‰ë`‡û ÚGúuÄ⁄˝˚¸¸Ÿ˝ı¸Ÿ˝ı¸Ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¸¿œ "˚Äœ(B˛Œ(Û» ÄvôÊ∏¥<`–HI(–ÄãhíìXê–|ä0‡Å
  2760. Iê)œÑíYçô)d -0–üeê‡p‰íœ£†áHƒ–˝˛ÄŒ ˝  é˝ ¡ <xxËÕ$˛$Õ!B˛ LÕ!B#œ†pt<Ä–!B—E4†Hò‘Ä–BÑ‚ä" åê‚Ä–DâÀI@ài·œ¯!‰í~AÒ܆‚œÙœÙœÙœ¡:@˝ÅÄÃò@@˜@˜vG∂>¿˝B@Ã
  2761. $ÄÄ@Ã
  2762. $çiºvÉ@Ã
  2763. $Ö&2HãÄÄà   I
  2764. $I
  2765. ÅÀ
  2766. MíÃDÒÇ@Ã
  2767. ÈtCP‰Äá¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę∂Gˆ>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜ˆG6>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜6Gh>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜vG∂>¡¡À30¯À¯ Ã¯À¯À¯À¯ Ã¯À¯ Ã¯À¯À¯À¯ ˚˜ˇ¿Û˜ˇ¯¯¯˙˜`Û˜¯¯ ˚˜pÛ˜¯¯˙˜XÛ˜¯¯˙˜LÛ˜Ģ¯˙˜FÛ˜¿˘¯ ˚˜CÛ˜`˘¯˙˜AÄÙ˜0˘¯ ˚˜@¿Ù˜˘¯˙˜@`Ù˜ ˘¯˙˜@0Ù˜˘¯˙˜@Ù˜˘¯ ˚˜@ Ù˜Ä˙¯˙˜@Ù˜¿˙¯ ˚˜@Ù˜`˙¯˙˜@Äı˜0˙¯˙˜@¿ı˜˙¯˙˜@`ı˜ ˙¯ ˚˜@0ı˜˙¯!˙†¿»Äˇ¯ı˜ˇ˛˙¯! ˚ˇ˝¿ø˝¿{‡ıı˙¯˙ø˝¿ˇ˝¿{‡ ıı˙¯˙ı ıı˙¯˙ı ıı˙¯! ˚ˇ/Ø€˝m ıı˙¯˙ómmYóg ıı˙¯! ˚fl.Óö˝k ıı˙¯˙    @Ä@˛ ıı˙¯˙ı ı˘d˘˙¯#˙ˇ/ÔŸˇ/ ıi˛˘˙¯% ˚ïe%Kùm ıy~˘˙¯˙˛kÔôˇ. ıı˙¯! ˚    @Ä@˛ ıı˙¯˙ı ıˇ¢r˚˙¯&˙˝oÔY◊m ıı‚˚o¯¸˙¯&˙∑e/Àø/ ıØ„˚O¯¸˙¯! ˚ˇnÔ€˜o ıı˙¯˙    @Ä@˛ ıı˙¯ ˚ı ıı˙¯˙fl/ß[˜m ıı˙¯˙øeoŸùg ıı˙¯˙ˇkÁ€Áe ıı˙¯! ˚    @Ä@˛ ıı˙¯˙ı ı†¿`à"˙¯! ˚ı ı˜nÌˇ{˙˚ÛÔ˛˙¯˙ı ı∑nÌˇ{˙˙ÛÔ˛˙¯$˙ı ˝˛ˇÄ˛˚ ˙¯˙ı ˝˛ˇÄ˛ı˙¯  ˚ı ˝˛ˇÄ˛ı˙¯"˚»¯ ˝IJı˙¯ò@@Ę@Ę∂Gˆ>$ ¸ı ˝ˇûIJ¯38˙¯+˚
  2768. @àë˛ ˝ˇøIJ¯Ã ˙¯-˚‹ÔÓ˝¿ ˛0ˇsÉIJ˘˙¯2˚ˇÿoÏ˝¿ ˛8ˇaÉIJbd@˙¯6 ‡E˛˝?˝ˇÏˇa˚ŸˇÉÔÄ{˚Ä=
  2769. ¯2    êD˘1˝ˇs˚Ÿ¡Ô[˚=¯6 ôu73>ˇ'Ô€˝e¸"#?Ÿ"c˛
  2770. ó3kõ¯1ÈM|˙ïo-[ó/ ˝ˆŸ0¯    ~¯7âMl¬fl'Ø€ˇ'$˝DFŸDaº‡{ˆ¿?YAˇˇëîÏJb¯7áu4∫@Ä@(˝àåÜŸà¿ï‡KV¿%À¿w3Àû¯) ¸ˆ?˝ˇ¯9«˚Ÿˇ Éú‡kˆ¿?…√˙¯2˚ˇg€˜/ ˛0pÁ˚IJ ˙¯/ ¸ï//Kùo ˛ ˇIJ˘˙¯1˚˝oÁõ˜o ˝ˇIJº‡yv¿=À¿˙¯0˚»˛Dƒ˝D@ ˝IJï‡K“¿'[¡˙¯*˙¯à ˝˛ˇÄ˛ù‡yÊ¿=€¿˙¯- ˚floÌK◊e ˝˛ˇÄ˛;˘3 ˙¯*˙µ%'€ø/ ˝˛ˇÄ˛¯U8˙¯! ˚›nÔ€˜o ıı˙¯˙    @Ä@˛ ıı˙¯˙ı ˝x@@IJı˙¯'˙˜/≠[ˇo ˝Ä@@IJı˙¯) ˚ümo…ó% ˝wLa˘˛ı˙¯'˙ˇnÔ€Ô/ ˝)fiÚLò˛ı˙¯2 ˚    @Ä@˛ ˝é–“t˲† ˛ ˙¯'˙ı ˝sŒa‹¯˛øœ˚w›ˇ€˘ø˙¯(˙ˇ/Á…◊o ıøœ˚w›ˇ€˘ø˙¯#˙óem€Ω% ı˛˘˙¯! ˚ˇoÔÀ˜i ıı˙¯(˙    @Ä@˛ ıÄBÄÇ(˙¯! ˚ı ıflœˆˇfl∑ÔÌÄ˙¯˙ı ıflœˆˇfl∑ÔÌ˙¯˙ı ı˛¸˙¯˙ı ıı˙¯ ˚ı ıB@¸˙¯˙ı ı{˜˚›¿¸˙¯ ˚ı ı{˜˚›¿¸˙¯˙ı ıı˙¯˙ı ıı˙¯(˙ˇ/߀ˇm ı˛    0a˙¯* ˚ïmoYùg ıøø~ˇ◊w}˙¯(˙fl.ØöÔk ıøø~ˇ◊w}˙¯* ˚    @Ä@˛ ı ˛@˛˙¯˙ı ıı˙¯(˙ˇoÌY˜/ ıò@!†˙¯(˙ï%'Àùm ıøfl˘fl{˚flΩ˚ˇ˙¯* ˚˝kÌŸ˜n ıfl˘fl{˚flΩ˚ˇ˙¯&˙    @Ä@˛ ı˝¿˝˙¯ ˚ı ıı˙¯#˙floÁY◊m ıAĢ˙¯#˙µ%-Àø/ ıÔ‡˘˙¯#˙›nÁ€˜o ıÔ¿˘˙¯% ˚    @Ä@˛ ı˛@˘˙¯˙ı ıı˙¯! ˚˜%ß[ˇ- ıı˙¯˙üooŸóo ıı˙¯˙ˇoÁ€Ôo ıı˙¯˙    @Ä@˛ ıı˙¯ ˚ı ıı˙¯˙ı ıı˙¯ ˚ı ıı˙¯˙ı ıı˙¯˙ı ıı˙¯˙ı ıı˙¯ò@Ä¿˜Ä¿˜ˆG6> ˚ıˇ¸ıÙˇ˙¯˙ıˇ¸ıÙˇ˙¯ Ã¯À¯À¯À¯ Ã¯À¯ Ã¯À¯À¯À¯ Ã¯À¯À32¯ Àï¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ >xÄ1Ä… "$J@…  Bà@… 8B@… HBÄ…
  2771. @Ñd» Bà!"@… ˝¿«Ä…¡¡¡¡">`¿ò0¸l0˛Ä@@‚ "˛Å !ĸ ¸ÄÄÄ‚  ˝Ä 
  2772. ! ¸B˝˛ÄÄ‚%!8cµ¢Ä 
  2773. ö9Ï&Äk¿AO3û◊ÖÉË„õF·4„%!HÕÕ@J%2t”ëA¶ödJ"ö    ®î•åñò„%!@â(éÄTF!$‚Å»íHT%"QA    „%!A&KÅ !•[L…:¬ ‰òñuØâïiNh „%!·Œ}¿gã>"wH‰ ‘Å≈ºÁ$A©¯é2á „˛˚¸ ˚@Ÿ
  2774. ˛˚Ã
  2775. ˛˚á >ÉÉ… "˛Δ…    … 8)Ûs¡J5„G@Œ H”&âARH§öiÄŒ A%
  2776. ÅdâHíqÕ C|…¬DùiÃÇÕ ¸∑N‰É\jFúrÕ˜"Ãò@¿˜¿˜6Gv>˜"Øá$c8aÄ0`¿˝¿0†˝¿0‰
  2777. !Ä¿˛˝ ˝@›#R @IJ@¸„'#RH'ée)Fò˝«¿‹-Û»ÿo7<”iöxÿfi7<Â'#JjH"í⁄h*I%îàß@H÷$I)§íhîm6ä)•$hîÂ'#Lr–E¢p,ëA(êí@"à‰Dä1AP®!I$îQB$P®Â'#ÑÉ`E•/ÄHìŒmLÄ"—NíZM<ë,¢ìI•ZNxë,Â'#ƒr@È9÷pkç3…tàtêË5eì∞‘ÓHíI>ì±®ÓH ڲ÷Ó÷Óé÷¡
  2778.  @ɲ&0`ÿ@ĸ˛0I¸ ÿ
  2779. ÅIJ ¡˛ @ÿ)¬É«∏ÊIä xP!Aé?q¡D¿⁄J$Å(≤ë"K4–)†"BQe"Föi ⁄˛/¬0•Ç“D‡"R '‰aJ!úr ⁄AQM¢Cdfl'Z@â¢õDã‡Ç@⁄Åéy#ÇG,‰ë`‡û ÚGúuÄ⁄˝˚¸¸Ÿ˝ı¸Ÿ˝ı¸Ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¸¿œ "˚Äœ(B˛Œ(Û» ÄvôÊ∏¥<`–HI(–ÄãhíìXê–|ä0‡Å
  2780. Iê)œÑíYçô)d -0–üeê‡p‰íœ£†áHƒ–˝˛ÄŒ ˝  é˝ ¡ <xxËÕ$˛$Õ!B˛ LÕ!B#œ†pt<Ä–!B—E4†Hò‘Ä–BÑ‚ä" åê‚Ä–DâÀI@ài·œ¯!‰í~AÒ܆‚œÙœÙœÙœ¡:@˝ÅÄÃò@@˜@˜vG∂>¿˝B@Ã
  2781. $ÄÄ@Ã
  2782. $çiºvÉ@Ã
  2783. $Ö&2HãÄÄà   I
  2784. $I
  2785. ÅÀ
  2786. MíÃDÒÇ@Ã
  2787. ÈtCP‰Äá¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę∂Gˆ>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜ˆG6>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜6Gh>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜hG®>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę®GË>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜ËG(>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜(Gh>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜hG®>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę®GË>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜ËG(>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜(GZ>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜hG®>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę®GË>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜ËG(>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜(Gh>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜hG®>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę®GË>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜ËG(>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜(GZ>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡†Ç†é
  2788. ˙âÇ’ò@0˛0˛˙â’¬ˇ¸Ä√ Ä√ ü√ˇÏü√ˇÃò√Lò√Lò√Lò√Lò√Lò√Lò√Lò√Lò√LòÔ˘ˆˇ¸ÎLòʈÎLòÔ˘ˆÎLòʈÎLòÔ˘¿3¿˝ÎL'ò¸Ä0?ÅÄ0¸ˆIJ|¿L*ò¸ ¿ˆ˘ AÅÛ<«èáˆIJf¿L-ò¸ Õû31„3Ú¸AÉ3˛ÃÅˇΔ¯ˇ¡Éœ¯ffiyÁÄL.ò¸ Œ¸3˚˘ A„3ÃÃŒˇÜ¯!ÜlÕfÊû¿L*ò¸å¸3Ú AÉ3Ãë¯!Ülï|Δë¿L1ò¸ ?33Û3˚˘ AÉ3ÃÃ√Ä>¯!ÜlÕò`Δ¸Ã¿L-ò¸ 0333Ú AÉ3ÃÅį!ÜlÕò`Δ¿Ã¿L1ò¸ 1232˚˘ ¡ÒÛ «å«¯ˇ¡ÜlÕò`ΔƒÃ¿L&ò¸ <1„¸Úˇ¿˘ˆ ÛÃï`Δxg¿LòÔ˘ˆÎLòʈÎLòÔ˘ˆÎLòʈˇ˛ÎLòÔ¯ˆˇ˛ÎLò√L
  2789. òÔ÷Lò√L
  2790. òÔ÷LòÌ?ÁˇÛLòÔ ÈÛLòÌ ÈÛLòÔ È˘ˇ˛LòÌ ˝00Û(˘ÄL!òÔ ‡˛00ÛD¯ÄL òÌ !Ä1·¿><xÙÇ ¯@L"òÔ!@#33 fF1Ù     ¯@L&òÌ !@33Äf>0¯Ù «ê *Ä@L,òÙ¿˝!@33Ò¿ff1òÙ D ˛@L*òÙ‡˚ !@33‡ff1òÙD  †¢Ä@Lò@0`˛0`˛â8’+òÙ‡˝!@33`ff1òÙD ˛˛@L*òÙ‡˚ !@1·¿>>¯Ù| (àÄÄ@L#òÙ‡˝ ˇÄÎ  Q˛@LòÙÄ˚ È      ˛Ä@L!òÙÄ˝ È ˇ ˛@L"ò˜Ä˚ È *††Ä@L"ò˜Ä˝ È ˛¸@L ò˜Ä˚ È ˛à¸@L"ò˜Ä˝ È ˛P¸@L$ò˜˙ ™Ä ˚ı¯ÄL%ò˜˙!U@˚ı˘ÄL'ò˜ ¯ ÄÄ
  2791.  
  2792.  †Ä(˛†¢Äˆ˘ˇ˛L"ò˜˙
  2793. !@Q˛AıÛL ò˜<¯ ÄÄ
  2794. ""Ä ˛àÇıÛL"ò˜L˙!@Q@AQıÛL%ò˙X˙  ÄÄ""† ÄààÇıÛL'ò˙˝Ä˝!U@˛@AıÛL&ò˙˝Ä˚ ™Ä
  2795.  
  2796.  †Ä ˛†ÄĈÛLò˙0˝ Ä˝ ˘ÚÛLò˚`˝˙ ¯ÄÛÛL"ò˚@˛–¸ È˘ˇ˛L ò˚¿˛@˙ È˘ÄL!ò˚Ä@‡¸ È¯ÄL ò¸ p˛‡˙ È ¯@Lò¸ı È ¯@L"ò¸@ˆ È  ¯Ä¿˛@L$ò¸@¯ È  ÃÄ¿˛@L%ò¸    @@˘ È Ãxqô„«¿@L'ò¸@¿˚ È ÃÃ…∞Δf`@L%ò¸@¿˘ È Ã÷‡Δf`@L'ò¸‡¿˚ È Ã¸q¿Δf`@L%ò¸Ë‡@˘ È Ã¿9‡Δf`@L'ò˝∏¿˙ È Ãƒô∞Δf`@L%ò˝∏ĉ¯ È ¯xqòc«¿@Lò˜¯˙ È ˚@Lò˜p¯ È ˚@LòÔ È ¯@Lò˚ ˆ È¯ÄLò˚8¯ È˘ÄLò˚<Ę È˘ˇ˛Lò˚ ?‡˘ ÈÛLò˚ ?¯˜ ÈÛLò˚0˛˘ ÈÛLò˚ˇ¿¯ ÈÛLò˚ˇ˙ ÈÛLò˚–ˇˇ¯ ÈÛLò˚ˇˇ‡˙ ÈÛLò¸ˇˇ‡¯ È˘ˇ˛Lò@`ê˛`ê˛8âX’!ò¸‡ˇˇ¿˙ È˘ÄLò˙ˇˇ¿¯ È¯ÄL!ò˙ˇˇ¿˙ È ˚@L ò˙ˇˇ¿¯ È ¸@L$ò˙ˇˇÄ˙ È Ç˛ˇ¯@L"ò˙ˇˇ¿¯ È ¬˛@L%ò˚Ôˇˇ‡˙ È ‚<f`@L#ò˚˛ˇ‡¯ È Úff`@L%ò˚flˇˇ¯˙ È ∫ff`@L#ò˚˛ˇ¸¯ È û~f`@L$ò˚ø˛ˇ˙ È é`f`@L#ò˚˝ˇ¿˘ È Übf@@L%ò˚˝ˇ¯˚ È Ç<Ä@Lò˚¸ˇ¯˘ È ¸@L!ò˚¸ˇ¸˚ È ¸ˇ¸@Lò¸¸ˇ˛˘ È ¯@Lò¸¸ˇ˛˚ È¯ÄLò¸¸ˇ˛˘ È˘ÄL ò¸¸ˇ˛˚ È˘ˇ˛Lò¸¸ˇ¸˘ ÈÛLò¸?¸ˇ¯˚ ÈÛLò¸¸ˇ¯˘ ÈÛLò¸¸ˇ˚ ÈÛLò¸¸ˇ˛˘ ÈˇÛLò˝˙ˇÄ¸ ÈÛLò˝˙ˇÄ˙ ÈÛLò˝˙ˇÄ¸ È|ÛLò˝˙ˇÄ˙ ÈDÛLò˝˙ˇÄ¸ ÈDÛLò˝˙ˇÄ˙ ÈD˜U@Lò˝˝ˇ˛ˇˇÄ¸ È «êÛLò˝˝ˇ¸?ˇÄ˙ È    ÛLò¸?˛ˇˇ¸ ÈÇÛLò¸˛ˇ‡¸˙ ÈDÛLò¸èˇˇ∏¸ È(ÛLò¸˛ÿÄ˚ ÈÛLò¸¸Äp¿˝ ÈÛLò¸¸¿~`˚ ÈÛLò¸¸`˚‡˝?ÁˇÛLò¸¸˛8<p—Lò¸¸É¯<å˝÷Lò¸‹˛—Lò¸ú˛Ä˝‚˘ˇ˛Lò¸ú ˛p¿›˘ÄLò¸‹˛@˝‚¯ÄLò¸‹√h› ¯@Lò¸ˇ‹ņ˝‚ ¯@Lò¸?ÿ=sÄâÙ› ¿˛ @Lò@ê¿˛ê¿˛Xâw’ò˘2'É¿êt˝‚  ˛ @Lò¯epÄ4›  «√áå@Lò˘K)@˝‚  ffLÃ@L)ò¯K˚¸8¸1åÛ  Êf Ã@L*ò¯k FĸѸ`¸ÄÛ  ffÃ@L/ò¯-É˙ƒxˇáÄx>303Ãx¯¿ˆ  ff @L/ò¯9˙    ‰åÃÿÃ`˛30331åÃÿˆ  &ffLL@L.ò¯9 ˙t|ÃÿÃ`˛30331åÃÃı  √Êcáå@L*ò¯r@¸<ÃÃœ¿Ã`3?30?31åÃÃı ¯@L&ò¯¿¯˛Ã Ã`3030031åÃÃı ¯@L)ò¯§˙ ˛Ã@Ã`313 131åÃÿˆ ¯@L'ò¯¯|ëÄx`3?¿0Ãxÿˆ¯ÄLò˜˙‚˘ÄLòœ˘ˇ˛L
  2797. òÔ÷Lò√L
  2798. òÔ÷Lò√LòÔ?ÁˇÛLòÌ ÁÛLòÔ ÁÛLòÌ Á¯ˇÄLòÔ Á¯ˇ‡LòÌ Á˜ˇLòÔ!‡˛¿¿Ó¯¯LòÌ#˛¿Ï«˘ˇ˛8L òÔ #gè`«èáÄÒÿ˘ºLòÌ
  2799. #àÃÿûÃÿÒê¯úLòÔ #sÃÿëÃÿÒ†¯\LòÌ#3 Ãÿ˝Ã¿Ò†¯\L$òÔ#3 Ãÿ˝Ã¿Ò†Ä0\L"òÌ#3 Ãÿ˝Ã¿Ò†Ä0\L%òÔ !„뿯«Ã«ÄÒ†ôüé>\LòÌ ¸¿Ì†˝ô3\LòÔ ¸¿Ì†ôôú3\LòÌ Á†ôôé3\LòÔ Á†ôôá3\LòÌ Á†ôôì3\LòÔ Á†üé3\LòÌ?Áˇ†¯\LòÔ„†¯\Lò–†¯\LòÔ„ê¯úLò–ÿ˘ºLòÔ„«˘ˇ˛8Lò–¯¯L
  2800. òœ˜ˇL òœ¯ˇ‡Lò@¿˛¿˛wâñ’ òœ¯ˇÄLò√Lò√Lò√Lò√Lò√Lò√Lò√Lò√Lü√ˇÃê√ Ä√ ¬ˇ¸¬ˇ¸¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@ ˛ ˛ñâµ’' ˘‡‡á‡|@˛ÄÄ?ê˛ 0ÄÂ&
  2801. Å@@@˝@˛ Â)%Å Ä@√»ó8@àûá\0·áÁ(Å!Ä@DHòD@"Hëàô"`˝"HëÁ)%Ò    Ò„‰ @xDHêDèÅ"Hëà"@Ò"HäÁ(Å  @DHê|Ä>Hëá>@˝"HÑÁ(Å  @DHê@Ä HëÄë @˝"HäÁ(ÅD@@DIêD"Iëàë"@˝"HëÁ)%˘‡‡ÉÄ@CΔê8¿Üûá@ÒáÁı@¯ˆ‰ˆ@¯ˆ"‰ ˆÄω¡¡¡¡¡¡¡¡ ¯ Ç  Ä˛Δ ÄÛa≈Ä™8∞·„ãÄ–Å"&@íD…$LœÒ"$@Ç<àÚ$HœÅ"$@ÇDâ'»œÅ"$@ÇDâ$œÅ"$@ÇDâ$Hœ¯Ò!ƒ@Ç<àÒ„àœı Œˆ Œˆ¿Œ¡¡¡¡+ƒ  ÇÄ˝0Ä@¸Ï(ƒ˛ Δ˛˝˙Î0,§qa„Ä™8qã8q`8qsèá8√ã‚ÃYàñ0·«q`Ó0,§â""$@íDàåàDâêâÑHëàëDLÅ2fHô"âêÓ0,îà™ "$@Ç<ÄààDÅâ»ëàDHÅ"DHë‚âÓ0,"'¿ÇDÄààDq˘HëàDHÅ"DHë"âÓ0,åÄD"$ÇDÄààD    ÅHëàDHÅ"DHë"âÓ0 åàD""$@ÇD˛àDââHëàëDHÅ    "DIë"âÓ0,ÑpD!„ÄÇ<pàÜ8q qœá CàÄ‚"DFë··àqÓ Ô¸€ Ô¸€¡ò@ 2˛ 2˛µâ¡’¡¡¡¡Ä˝Ä—Ľė(xá‚Ãxâ√ãÄa¿”(DààÅ2DàÑLí ”DDààÅ"DàÑH“DDàèÅ"Dàồ˛Dàà"DàÑ“ÇDààÅ    "DòÑH ”Çxá‚"xhcàƒ”˛@ĸ@˛–˛@ĸ@˛ –¡¡¡†è†Éˇ†@ˇ ˇˇˇˇ@
  2802. ˇ·ˇ‚7^
  2803. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  2804. (‡*2-6    )B5Introduction to Publishers, Subscribers, and Editions4^*¿¯
  2805. °dONLNd\lhr(elY@Ä°dONLNd\rh¬)our application pr-¿°dONLNd\¬hÄ)P+ovides a thumbnail sketch of the edition daÄ°dONLNd>\ÅhØ)ø ta, which t_†°dONLNdI\Øhº).he °dONLNdLiluè(rlEdition ëÄ°dONLNdTièu)#Manager displays in the pryÄ°dONLNdniu+)weview ar7`°dONLNdvi,u¥)& ea of the publisher dialog box. =@°dONLNdñi¥u∫)àY˝¿°dONLNdóiπu‘)our pr¥ °dONLNdùi’uÒ)eview °dONLNd£vlÇ#(l+of the edition in this dialog box should prΔ °dONLNdŒv#Ǭ)∑%ovide a visual cue about the type of °dONLNdÛÉlèC(ål2information that the user has selected to publish.°dONLNd&ïl°s*A∫†°dONLNd'ïs°) pr¿°dONLNd*ïÄ°•)eview arø†°dONLNd2ï•°{)%2ea also appears in the subscriber dialog box (see  †°dONLNddï|°î)◊Figurfi`°dONLNdiïì°ß)e 2-4{‡°dONLNdnï®°´))œ¿°dONLNdoï´°À). This pi`°dONLNdwïðœ)!r.`°dONLNdxï–°Í)eviewº@°dONLNd}ïÈ°Î),<@°dONLNd~ïÏ°Ó) °dONLNd¢lÆÉ(´ltoo, sÍ`°dONLNdÖ¢ÉÆ©)hould prɆ°dONLNd碙Æ⁄)'Fovide a visual cue about the type of information the edition contains.º@°dONLNd”¢⁄Æ‹(´⁄ °dONLNd‘Ølªz(∏lForw@°dONLNd◊Ø{ª}) ˜@°dONLNdÿØ}ª )Kexample, it should allow users to distinguish between text information and °dONLNd#ºl»z(≈lsprÑ °dONLNd&ºz»¡)eadsheet arrays.°dONLNd7Œl⁄î(◊lCThe publisher dialog box uses the extended interface of the standarñ °dONLNdzŒî⁄¢(◊îd fi>†°dONLNd~Œ£⁄Ú)le dialog box that °dONLNdë€lÁ†(‰l
  2806. accompanie/Ä°dONLNdõ€°Á≤)5s Syª`°dONLNdü€≤Áæ)ste`°dONLNd¢€øÁ—)m 7.ÿ`°dONLNd¶€—Á5) The user navigates thr•`°dONLNdΩ€6Á„)e(ough the contents of the disk using the °dONLNdÂËlÙª(Òlmouse or keyboarÈ`°dONLNdı˪Ù√)Od.°dONLNd¯˙ls(lA∫†°dONLNd˘˙s—)P user can modify a publisher within a document just like any other portion of a °dONLNdIlù(l
  2807. document. €†°dONLNdSù’)1FAs a default, each time a user saves a document containing a publisher≠‡°dONLNdô’Ò(’, your °dONLNd†l T(l4application should automatically write the publisherÿ‡°dONLNd‘U ¥)È’s data to the edition. ‚@°dONLNdÏ¥ ∫)_Y¢¿°dONLNdÌ∫ Ù)ou also need °dONLNd˙!l-Å(*lto pr°dONLNdˇ!Å-˜)Tovide the user with the choice of sending new publisher data to an edition manually °dONLNdS.l:”(7l(that is, only at the userÎ@°dONLNdm.‘:˘)h    ’s specifi›†°dONLNdw.˙:)&c r퇰dONLNdz.:*)     equest). l°dONLNdÉ.*:0)%Y,Ä°dONLNdÑ.0:i) ou should prˇ`°dONLNdê.h:È)8ovide these options by using °dONLNd≠;lGD(Dl2the publisher options dialog box described later i¿°dONLNdfl;DGL)ÿn B °dONLNd·;MG‡)     “Using Publisher and Subscriber °dONLNdHlTÎ(QlOptions” beginning on page b¿°dONLNdHÏT˛)Ä2-43∂†°dONLNd H˛T).°dONLNd"Zlf    (cl"For example, one user may choose t[@°dONLNdDZ
  2808. f)ûo uW‡°dONLNdGZfb)pdate an edition Ä°dONLNdXZcf¢)Kautomatically  `°dONLNdfZ¢f÷)? each time a °dONLNdrglsà(pl?document is saved. This update mode is useful for a user who cr%`°dONLNd±gâsı(pâeates a publisher within °dONLNd tlÄÅ(}la spr °dONLNdœtÇĘ)eadsheet application that rÄ°dONLNdÍt˜Ä    )uecor쇰dONLNdÓt    ÄÛ)5ds stock information. Each time the user updates the °dONLNd#Ålç    (äl#stock information and saves the sprh °dONLNdFÅ    ç€)ù.eadsheet, a new edition automatically becomes °dONLNdtélö’(ólavailable to subscribers.°dONLNdé†l¨o*8Another user may choose to update an edition only upon r¬°dONLNdΔ†o¨„(©oequest. This update mode °dONLNdfl≠lπ˛(∂l!might be useful for a user who crë °dONLNd≠˛πÉ)íeates a publisher within a worÓ`°dONLNd≠Éπñ)Öd-pr% °dONLNd"≠óπÛ)ocessing application °dONLNd7∫lΔ…(√lfor a quarterly sales r6°dONLNdN∫ Δ )^eport. The user incrW`°dONLNdb∫ Δ†)Vementally updates the sales rn†°dONLNd∫†ΔΔ)Ä    eport thr=†°dONLNdà∫«ΔÔ)'oughout °dONLNdê«l”ë(–l    the entirh °dONLNdô«ë”¥)%e quarteP†°dONLNd°«µ”¿)$r bJ‡°dONLNd§«¡”Ÿ) Aut does not want this information to be available to subscribers °dONLNd‘l‡Ä(›luntilk†°dONLNd͑ŇÉ) Ά°dONLNdΑɇ‚)the end of the quarter˙†°dONLNd‘‚‡Ã)_6. Only at the end of each quarter does the user specifi?¿°dONLNd8‘Õ‡‰)Îcally °dONLNd>·lÌo(ÍlrE°dONLNd?·pÌ°)Fequest to update the edition and make it available to any subscribers.°dONLNdÜÛlˇr(¸lTµ¿°dONLNdáÛqˇÅ)o cr‡Ä°dONLNdãÛÅˇı)Ueate a subscriber within a document, the user places the insertion point and chooses °dONLNd‡l ü(    l Subscribe T›¿°dONLNdÎû ≠)2o frÏ °dONLNdÔ≠ )om the Edit menu. k`°dONLNd     )UFigur> °dONLNd     .)e 2-4€†°dONLNd     . ), shows the dialog box that your application °dONLNd    7lI(l0should display when the user chooses Subscribe T9°dONLNd    gIS)›o. ˇMñ@ˇ ˇˇˇˇ@
  2809. ˇ·ˇ‚7^
  2810. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡ä5Introduction to Publishers, Subscribers, and Editions
  2811. , (‡    2-7
  2812. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  2813. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  2814. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  2815. 4€4—?òÄ
  2816. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  2817. ˛ˇˇˇ
  2818. ˛ˇˇˇ
  2819. ˛ˇˇˇ
  2820. ˛ˇˇˇ˜˝˛ˇ˛
  2821. ˛ˇ˛ˇˇ
  2822. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  2823. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  2824. ˛ˇ˛ˇˇ
  2825. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  2826. ˛ˇˇˇˇ
  2827. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  2828. ˛ˇˇˇˇ
  2829. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  2830. ˛ˇˇˇˇ
  2831. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  2832. gHw4gHw"hH]
  2833. ˇ·ˇ‚7^    °dONLNd\äg¥(dä
  2834. Figure 2-4°dONLNd \Ãg3)BThe subscriber dialog box
  2835. °dONLNd'    ä…(äIThe subscriber dialog box also uses the extended interface of the standar†°dONLNdp     ÿ( d fi≈ °dONLNdt    ÿ)le dialog box °dONLNdÇä"ô(äintrA °dONLNdÜö"À)
  2836. oduced wit0‡°dONLNdêÃ"fl)2h SyQ °dONLNdîfl"Î)steö °dONLNdóÎ"˝) m 7.n °dONLNdõ˛"#)
  2837.  Initiallyu@°dONLNd•"")$7, the dialog box should highlight the name of the last °dONLNd‹#ä/å(,ä<edition published or subscribed to. This allows a user to crU°dONLNd#å/Á(,åeate a publisher and °dONLNd-0ä<*(9ä%immediately subscribe to its edition.°dONLNdSBäNë*A∫†°dONLNdTBëN«) subscriber rÄ°dONLNdaB»N)7eceives its data fr°dONLNdtBN )L9om a single edition. By default, your application should °dONLNd≠Oä[(XäRautomatically update a document containing a subscriber whenever a new edition is °dONLNdˇ\äh∂* available. °dONLNd
  2838. \∑hΩ)-Y√Ä°dONLNd \ºh )ou also need to pr⁄`°dONLNd\ h°)O#ovide the user with the choice of rπ‡°dONLNd@\°h)ñeceiving the latest edition °dONLNd\iäuM(rä,manually (that is, only when the user specifi)`°dONLNdâiNui)ƒcally r>Ä°dONLNdêiiuö)equests it). ˇ`°dONLNdùiöu†)1Yø‡°dONLNdûi†u…)    ou can prE@°dONLNdßi u˛)* ovide these °dONLNd≥väÇ≤(äDoptions by using the subscriber options dialog box described later i¶`°dONLNd˜v≤Ç∫(≤n ˜¿°dONLNd˘v∫Ç)“Using Publisher °dONLNd
  2839. ÉäèN(åä*and Subscriber Options” beginning on page ÍÄ°dONLNd4ÉNè`)ƒ2-43>`°dONLNd8Éaèc).°dONLNd:ïä°'(ûä"For example, one user may choose t[@°dONLNd\ï(°3)ûo r¿°dONLNd_ï4°ç) eceive new editions _‡°dONLNdsïç°Ã)Yautomatically m¿°dONLNdÅïð)?as they become °dONLNdê¢äÆÌ(´äQavailable. This update mode is useful for a user who subscribes to information frÁ °dONLNd·¢ÌÆ (´Ìom an °dONLNdÁØäª&(∏ä&edition that consists of daily sales fi, °dONLNdØ'ª6)ùgurá`°dONLNdØ6ª )"es. This user automatically acquirq†°dONLNd3Ø ª)îes each version °dONLNdCºä»[(≈ä1of the sales information as it becomes available.°dONLNduŒä⁄ *Another user may choose to rÒ¿°dONLNdëŒ ⁄ú)Ç eceive a new edition only upon rR`°dONLNd±Œù⁄)ëequest. This update mode °dONLNd €äÁ¸(‰äis useful for a user who crÜ°dONLNd€¸Á)r@eates a subscriber to an edition that consists of graphics data °dONLNd%ËäÙA(Òä((such as a company logo). The user may rÕ†°dONLNdMËAÙX)∑equir‰‡°dONLNdRËXÙ    ))e only periodic versions of the logo and °dONLNd{ıä∫(˛ä not need fr¢Ä°dONLNdÜı∫ù)04equent updates. In this case, your application shoul‡@°dONLNd∫ıù´)„d uÉ °dONLNdΩı¨)pdate the subscriber °dONLNd“äfl( äwith a new edition Ä°dONLNd‡ˆ)Vonly B‡°dONLNd͈S)when the user specifi“ °dONLNdˇSn)]cally rÁ@°dONLNdnö) equests it.°dONLNdä ë(äA∫†°dONLNdë ) user can select, cut, copy¸‡°dONLNd.ˇ K)n, or paste an entirå@°dONLNdAL Ä)M e subscriber∞`°dONLNdMÄ Ö)4. R°dONLNdOÖ )Although the contents of the °dONLNdl!ä-'(*ä"subscriber as a whole can be modifií°dONLNdè!'-Ô)ù/ed, a user cannot edit portions of a subscriberèÄ°dONLNdæ!Ô-)». For °dONLNdƒ.ä:f(7ä4example, a user can underline or italicize the entirΔ†°dONLNd¯.f:™)‹e subscriber tex\¿°dONLNd.´:∂)Et b¶¿°dONLNd .∂:) ut cannot delete a °dONLNd;äG¬(Däsentence or rú`°dONLNd+;¬G)8otate a single graphiU¿°dONLNd@;G()Zc oªÄ°dONLNdC;(GZ) bject. This rr†°dONLNdP;[Gê)3estriction prø†°dONLNd];êGŸ)5otects the user frß`°dONLNdo;ŸG)I
  2840. om losing °dONLNdyHäT(QäUchanges to a subscriber when a new edition arrives. Remember that, as a default, new °dONLNdŒUäaf*1editions should automatically update a subscriber§‡°dONLNdˇUfak)‹. FÄ°dONLNdUka)$Any changes that a user made to the °dONLNd%bän (kä"subscriber text would have to be rv°dONLNdGb n )ñ5eapplied by the user when the new edition arrives. SeDÄ°dONLNd|bn)Ìe °dONLNd~oä{#(xä!“Modifying a Subscriber” on page W °dONLNdüo${6)ö2-59´°dONLNd£o6{;) f~‡°dONLNd•o<{†)or further information.†Ç†é
  2841. xäÒ÷ò@0˛0˛xäó÷¬ˇ¸Ä√ Ä√ ü√ˇÏü√ˇÃò√Lò√Lò√Lò√Lò√Lò√Lò√Lò√Lò√LòÔ˘ˆˇ¸ÎLòʈÎLòÔ˘ˆÎLòʈÎLòÔ˘¿3¿˝ÎL'ò¸Ä0?ÅÄ0¸ˆIJ|¿L*ò¸ ¿ˆ˘ AÅÛ<«èáˆIJf¿L-ò¸ Õû31„3Ú¸AÉ3˛ÃÅˇΔ¯ˇ¡Éœ¯ffiyÁÄL.ò¸ Œ¸3˚˘ A„3ÃÃŒˇÜ¯!ÜlÕfÊû¿L*ò¸å¸3Ú AÉ3Ãë¯!Ülï|Δë¿L1ò¸ ?33Û3˚˘ AÉ3ÃÃ√Ä>¯!ÜlÕò`Δ¸Ã¿L-ò¸ 0333Ú AÉ3ÃÅį!ÜlÕò`Δ¿Ã¿L1ò¸ 1232˚˘ ¡ÒÛ «å«¯ˇ¡ÜlÕò`ΔƒÃ¿L&ò¸ <1„¸Úˇ¿˘ˆ ÛÃï`Δxg¿LòÔ˘ˆÎLòʈÎLòÔ˘ˆÎLòʈˇ˛ÎLòÔ¯ˆˇ˛ÎLò√L
  2842. òÔ÷Lò√L
  2843. òÔ÷LòÌ?ÁˇÛLòÔ?Èˇ¯ÛLòÌ?Èˇ¯ÛLòÔ?Èˇ¯˘ˇ˛LòÌ?U√˛ˇÁˇÁÚˇ¯(˘ÄLòÔ>™øù˛ˇÁˇ¯D¯ÄL!òÌ ?üì‡Áıˇ¯Ç ¯@L#òÔ>ˇøüéÊfgÊfÊfgıˇ˘ ¯@L'òÌ ?ëüfgÊgfgıˇ˚«ê *Ä@L-òÙ¿˝
  2844. >ˇøôûffgÊ˛fgıˇ ¯D ˛@L+òÙ‡˚?ôûffgÊ˛fgıˇ¯D  †¢Ä@Lò@0`˛0`˛óä∑÷,òÙ‡˝
  2845. >™øôûffgÊ˛fgıˇ¯D ˛˛@L+òÙ‡˚ ?U√üg‡Ágıˇ¯| (àÄÄ@L%òÙ‡˝?˙ˇÁÒˇ ¯ Q˛@L#òÙÄ˚?˙ˇÁÒˇ    ¯  ˛Ä@LòÙÄ˝?Áˇ     ˛@L"ò˜Ä˚?Èˇ¯ *††Ä@L"ò˜Ä˝ È ˛¸@L ò˜Ä˚ È ˛à¸@L"ò˜Ä˝ È ˛P¸@Lò˜˙ È¯ÄLò˜˙ È˘ÄL$ò˜ ¯ ‡˛¿¿Û˘ˇ˛L ò˜˙ !Ä¿¿ÛÛLò˜<¯ !@8x«á¯Ò„¿ÙÛL!ò˜L˙!@dåÃÃÅôƒ`ÙÛL$ò˙X˙ !@p|ÃŒò¯√‡ÙÛL&ò˙˝Ä˝!@8Ãœ«ôòΔ`ÙÛL$ò˙˝Ä˚ !@ÃÃÅôòΔ`ÙÛL&ò˙0˝ Ä˝!@LÃÃIÅôòΔ`ÙÛL$ò˚`˝˙  ˇÄ8|«á¯¯c‡ÙÛL"ò˚@˛–¸ È˘ˇ˛L ò˚¿˛@˙ È˘ÄL!ò˚Ä@‡¸ È¯ÄL ò¸ p˛‡˙ È ¯@Lò¸ı È ¯@L"ò¸@ˆ È  ¯Ä¿˛@L$ò¸@¯ È  ÃÄ¿˛@L.ò¸    @@˘ ™Ä¿˚ ı Ãxqô„«¿@L0ò¸@¿˚!U@¿˚ ı ÃÃ…∞Δf`@L1ò¸@¿˘  ÄÄ8x«á≥«√Δfiı Ã÷‡Δf`@L3ò¸‡¿˚!@dåÃÃÅΔffg ı Ã¸q¿Δf`@L1ò¸Ë‡@˘ ÄÄp|ÃŒܲf ı Ã¿9‡Δf`@L3ò˝∏¿˙!@8Ãœ«áÊff ı Ãƒô∞Δf`@L1ò˝∏ĉ¯  ÄÄÃÃÅÜff ı ¯xqòc«¿@L*ò˜¯˙!U@LÃÃIÅÜ&ff ı ˚@L(ò˜p¯  ™Ä8|«áÉ«√Δı ˚@LòÔ ˘Ú ¯@Lò˚ ˆ ˘Ú¯ÄLò˚8¯ È˘ÄLò˚<Ę È˘ˇ˛Lò˚ ?‡˘ ÈÛLò˚ ?¯˜ ÈÛLò˚0˛˘ ÈÛLò˚ˇ¿¯ ÈÛLò˚ˇ˙ ÈÛLò˚–ˇˇ¯ ÈÛLò˚ˇˇ‡˙ ÈÛLò¸ˇˇ‡¯ ÈÛLò@`ê˛`ê˛∑ä÷÷ò¸‡ˇˇ¿˙ ÈÛLò˙ˇˇ¿¯ ÈÛLò˙ˇˇ¿˙ ÈÛLò˙ˇˇ¿¯ È˜U@Lò˙ˇˇÄ˙ ÈÛLò˙ˇˇ¿¯ ÈÛLò˚Ôˇˇ‡˙ ÈÛLò˚˛ˇ‡¯ ÈÛLò˚flˇˇ¯˙ ÈÛLò˚˛ˇ¸¯ ÈÛLò˚ø˛ˇ˙ ÈÛLò˚˝ˇ¿˘ ÈÛLò˚˝ˇ¯˚ ÈÛLò˚¸ˇ¯˘ ÈÛLò˚¸ˇ¸˚ ÈÛLò¸¸ˇ˛˘ ÈÛL ò¸¸ˇ˛˚ È˘ˇ˛Lò¸¸ˇ˛˘ È˘ÄLò¸¸ˇ˛˚ È¯ÄLò¸¸ˇ¸˘ È ¯@Lò¸?¸ˇ¯˚ È ¯@L#ò¸¸ˇ¯˘ È ¿˛ @L%ò¸¸ˇ˚ È  ˛ @L#ò¸¸ˇ˛˘ È «√áå@L%ò˝˙ˇÄ¸ È ffLÃ@L#ò˝˙ˇÄ˙ È Êf Ã@L%ò˝˙ˇÄ¸ È ffÃ@L#ò˝˙ˇÄ˙ È ff @L%ò˝˙ˇÄ¸ È &ffLL@L#ò˝˙ˇÄ˙ È √Êcáå@L"ò˝˝ˇ˛ˇˇÄ¸ È ¯@L ò˝˝ˇ¸?ˇÄ˙ È ¯@L"ò¸?˛ˇˇ¸ È ¯@L ò¸˛ˇ‡¸˙ È¯ÄL#ò¸èˇˇ∏¸ È˘ÄL"ò¸˛ÿÄ˚ È˘ˇ˛Lò¸¸Äp¿˝ ÈÛLò¸¸¿~`˚ ÈÛLò¸¸`˚‡˝ ÈÛLò¸¸˛8<p˚ ÈÛLò¸¸É¯<å˝ ÈÛLò¸‹˛˚ ÈÛLò¸ú˛Ä˝ ÈÛL!ò¸ú ˛p¿˚ È¯ˇÄL#ò¸‹˛@˝ È¯ˇ‡L ò¸‹√h˚ È˜ˇL#ò¸ˇ‹ņ˝ È¯¯L"ò¸?ÿ=sÄâÙ˚ È«˘ˇ˛8Lò@ê¿˛ê¿˛÷äı÷!ò˘2'É¿êt˝ Èÿ˘ºLò¯epÄ4˚ Èê¯úL ò˘K)@˝ È†¯\Lò¯K˚ È†¯\L$ò¯k Fĸ È†00\L"ò¯-É˙ È†0˛0\L"ò¯9˙ È†3>8€>\L"ò¯9 ˙ Èˇ†332d„33\L$ò¯r@¸ È†338`√33\L ò¯¿¯ È†33`√3?\L"ò¯§˙ È|†33`√30\L ò¯¯ ÈD†33&d√31\L!ò˜˙ ÈD†>8√>\LòÌ ÈD†¯\LòÔ È «ê†¯\LòÌ È    †¯\LòÔ ÈÇê¯úLòÌ ÈDÿ˘ºLòÔ È(«˘ˇ˛8LòÌ È¯¯LòԠȘˇLò̠ȯˇ‡LòÔ?Áˇ¯ˇÄLò√Lò√Lò√Lò√Lò√Lò√Lò√Lò√Lò√Lò√Lü√ˇÃê√ Ä√ ¬ˇ¸¬ˇ¸¡¡¡¡¡¡¡¡¡¡ò@¿˛¿˛ıä÷¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡(˝    ˘‡‡Ä |@˛ÄÄ?ê˛ Ë'˝Å@`@˝@IJ˛Ë*˝$Å †@√»ó8@Äàû8ª\0·áÍ)˝Å! @DHòD@Ä"Hë"D¡"`˝"HëÍ*˝$Ò    Ò„‰" xDHêDèàÄ"ë @Å"@Ò"HäÍ)˝Å$ @DHê|Ä>àë@Å>@˝"HÑÍ)˝Å'@DHê@¿ Hë@Å @˝"HäÍ)˝Å@ @DIêDÄ"Ië"DÅ"@˝"HëÍ*˝$˘‡‡Ä @CΔê8¿ÄÜû8Å@ÒáÍ
  2846. Û@ÎÁ Ù@Î"Á ÙÄÎÁ¡¡¡ ˝¯ Çà ˝Ä˛ΔÃò@˛˛ä0÷˝ ÄÛa≈Ä™8∞·„ãÄ“˝ Å"&@íD…$L—˝ Ò"$@Ç<àÚ$H—˝ Å"$@ÇDâ'»—˝ Å"$@ÇDâ$—˝ Å"$@ÇDâ$H—˝ ¯Ò!ƒ@Ç<àÒ„à—Û –Ù –Ù¿–¡¡¡¡+˝ƒ  ÇÄ˝0Ä@¸Ó(˝ƒ˛ Δ˛˝˙Ì0˝*§qa„Ä™8qã8q`8qsèá8√ã‚ÃYàñ0·«q`0˝*§â""$@íDàåàDâêâÑHëàëDLÅ2fHô"âê0˝*îà™ "$@Ç<ÄààDÅâ»ëàDHÅ"DHë‚â0˝*"'¿ÇDÄààDq˘HëàDHÅ"DHë"â0˝*åÄD"$ÇDÄààD    ÅHëàDHÅ"DHë"â0˝
  2847. åàD""$@ÇD˛àDââHëàëDHÅ    "DIë"â0˝*ÑpD!„ÄÇ<pàÜ8q qœá CàÄ‚"DFë··àq ̸› ̸›¡¡¡¡¡˝Ä˝Ä”˝Ä˝Ä”˝(xá‚Ãxâ√ãÄa¿’˝(DààÅ2DàÑLí ’˝DDààÅ"DàÑH‘˝DDàèÅ"Dàố˝˛Dàà"DàÑ‘˝ÇDààÅ    "DòÑH ’˝Çxá‚"xhcàƒ’¸@ĸ@˛“¸@ĸ@˛ “¡†è†Éˇ\¬@ˇ ˇˇˇˇ@
  2848. ˇ·ˇ‚7^
  2849. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  2850. (‡*2-8    )B5Introduction to Publishers, Subscribers, and Editions4^*¿¯
  2851. °dONLNd\lhs(elA∫†°dONLNd\shƒ)I single document can contain any number or combination of publishers and °dONLNdJilu¢(rlsubscribers. T‡°dONLNdWi£uª)7Figur'†°dONLNd\iªuœ)e 2-5≈ °dONLNdaiœuÁ)= shows an example of a document that contains two publishers °dONLNdûvlÇ(l"and one subscriber (and their corr,@°dONLNd¿vÇ„)ñ0esponding editions). Remember that data always fl*`°dONLNdÒv„ǘ)·ows °dONLNdıÉlèñ(ål
  2852. in one dir`°dONLNdˇÉóèΩ)+
  2853. ection, fr◊¿°dONLNd    ÉΩè`)&%om publisher to edition to subscriberW °dONLNd.É`è®)£. The “Concert flÏ`°dONLNd?É®èÌ)Hyer” document °dONLNdMêlúa(ôl8contains a publisher that is subscribed to by the “Benefií °dONLNdÜêaú”)ıt concert” document. The °dONLNdüùl©ú(¶l
  2854. “Concert flŸÄ°dONLNd™ùú©Δ)0Cyer” document also subscribes to a portion of the “Pianos & palm trôÄ°dONLNdÌù«©‹(¶«ees” °dONLNdÚ™l∂(≥l%document. In addition, the “Concert fl2@°dONLNd™∂)©1yer” document as a whole is subscribed to by the °dONLNdI∑l√ö(¿l    “Sample fl‘†°dONLNdS∑ö√fl).yer” document.
  2855. Â*ˆ¯4Ê*ˆ¯"Ê*]
  2856. ˇ·ˇ‚7^    °dONLNdc€lÊñ(„l
  2857. Figure 2-5°dONLNdn€ÆÊ¥)BA0°dONLNdo€¥ÊX)( document and its corresponding editions
  2858. ı*ѯ4ÛÙ ò@@@Ù 4 ¡¡¡    –ˇÄı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ıò@@Ä@Ä4 t     –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ıò@Ä¿Ä¿t ¥     –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ıò@¿¿¥ Ù     –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ıò@@@Ù 4     –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ıò@@Ä@Ä4 t     –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ıò@Ä¿Ä¿t ¥     –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı    –ˇ¿ı¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ˛û¿p  ˛âÄ$Ä  ˛ÅE¿  ˛ÅÑ@  ˛ÅÑ   ˛!2à   ˛¢ê@  ˛?|‡cÄ ¡¡¡¡˛    òÄ80˙√˘ÿaĉ˛    Ä@@˙@˘@‚˛˝@‡ ˝ ÄÄ˙Ä„'˛!⁄–Ä@ ß÷òèpk¬É« ;t#ºs¬üá
  2859. yúÒ¿Ê'˛!6äc@Ä    H§SkE ëMâEò‘íâM2ö4”"R@Ê&˛ $îCÅ ÑP¿¢Kä!ëÑ Ö‚#
  2860. ë%DíB°Â'˛!K%Ñ@ ÖÒM,ú A:◊â&ä!    %◊Õå_$ƒ¥ÄÊ&˛ 8w>ÉáÅ¿3¬Œ1Ùìí@‘ãr ÓX‰ãy-Á9'½ÄÌ@˛"‡˝ÄÌ@˛"‡˝χ˛‡¡ ˛ÉaÄ`¿À ˛Å˛1ÄÀ ˛2ÄÀ˛
  2861. 
  2862. yúRçx—≈†œ˛
  2863. 4”"PTí)&ö¿œ˛
  2864. DíB†Y"R$úÄœ˛    fl$ƒ∞ë'Zs!Œ˛    ?-Á9 ◊ëߌˆÄŒˆÄŒˆÕ¡$˛¿0`0`¿˝`Ë˝`Âò@¿Ú¿Ú¥ Ê ˛@  `˝@˝˝fi#˛Ä@ † Ä˛¸‰'˛!Öí    „±D£Losé∞˜çy‰f7ôœ¥ÙÕ<l7õûÊ'˛!öí§Êö$í≈$R–Rk$î…I2%[[E“I4JÊ'˛!¥BHúH†ä(Hê¢r"Eêâ$*RRJ(†â(TÊ'˛!! ÿiõ‡$IÁ+H• ¥Ñ'I-3ûLKh§‰“≠&ûHñÊ'˛!1ê:NÂú5Δô“G9"$t≤…Ãjsíá$§üIÿjw$Ê
  2865. Ò˝Ç◊ÏÇ◊Ì«◊¡˛˛ aÄ `@Ÿ˛ ˚Ä$êÄ˝Ÿ˛ `˛    ÄŸ˛
  2866. p†Ò«Óqíeº(1É«‹‡Q    ‡€˛â J,§êí⁄h    –‰Å(±I!¶¥ê€˛?ãå)D@¥¢p)O¬0¢àÇ'9€˛ê@îSi Ÿ/Ä≠xÅQJ“B¯A €˛`AcûI¿ë÷rH∞ÛétìÅg:¿€¸˚¸¸⁄¸ı¸⁄¸Ĉ¸⁄¡¡¡¡¡¡¡¡¡¡¡¡¡˛ĸ‡–˛˚@–˛
  2867. !˛Ä–˛
  2868. <Ú@;LÛ\Mû0—˛ Jh@E¥II¶äH—˛ "åp@Ö$äâƒÄ—˛ !$ñÄFäLî≤ò—˛ gŸdp8rIg—»C§a—˝A˝˛@œ
  2869. ˝A˝À ˝„IJÄᲠ   < <:Œ˛Ä˛DŒ˛@!˛&ÑŒò@@@Ù 4 ¡¡¡–UÙ√Œ¿ı    –@ıŒ¿ı√    –@ı√Œ¿ı    –@ıŒ¿ı‚˘ˇ¯Ï‚E¸U@ ˘@ı‚C¸3˛Ï‡D¸Ã¿ ˘¿ı‚E˝@    Ä˙@ı‡Dà˛¿¿˙¿ı‚C" ˛`Ì‚
  2870. E@0˙@ı‚C" ˛Ì‡Dà˛¿ ˙¿ı‚
  2871. EDD@˛˙@ı‡Dà˛¿˛˙¿ı‚C" ˝Ì‚E@˛˙@ı‚C>.˝Ì‡D å˛¿˛˙¿ı‚EL\@˛˙@ı‡D®˛¿˛˙¿ı‚C6h˝Ì‚EP@˛˙@ı‚C2∞˝Ì‡Dò¿˛˙¿ı‚EgTqÑ!@˛˙@ı‡D"0sP¿˛˙¿ı‚Crx¶!˝Ì‚E˝@˛˙@ı‚C˝˝Ì‡D¸¿˛˙¿ı‚E˝@˛˙@ı‡D˝Ä¿˛˙¿ı‚C˝·˝Ì‚E˛Ò@˛˙@ı‚C˛°˝Ì‡D¸¿˛˙¿ı‚E˝@˛˙@ı‡D¸¿˛˙¿ı‚C˝˝Ì‚E˝@˛˙@ı‚C˝˝Ì‡D¸¿˛˙¿ıΡˇ˛Ä˝E˛@˛˙@ıÈ˛ˇÄ˝D˛∞¿˛˙¿ıβˇÄ˝C˛·˝ÌÎÄ˝E˛
  2872. °@˛˙@ıΘûÄ˝C˝˝ÌÍ0˜üIJÄD¸¿˛˙¿ı Ï8Ô1ÅIJ¿E˝@˛˙@ı$˘ÛˇÏÔ ÅÅ˛ˇ‡D¸¿˛·Ä¿ı$˚Û˜†˘Å˛0C˝˝ÄÚ)¸ëÛ˜±˘Å˛E˝@˛”Δn„`@ıò@@Ä@Ä4 t %¸Ú"#    Å˛",C˝˝≥/öó¿Û$˙ÚÚ    Å˛D¸¿˛3-äî@¿ı(¸ ÚDFÉ    Å˛DpE˝!@˛œΔz„¿@ı"˙ÚˇÏ√    Å˛ˇ‡D˛Î0¿˛˙¿ı!¸@Û8„˘Ä˛¿C˛∂a˝Ì&¸¿Û00s˘Ä˛ÄE˛‹Q@˛˙@ı¸ÄÚÄ˝C˝Ì!˙ÄÚÄ˝DÄ¿˛˙¿ı"¸ÄÚÄ˝E¸U@˛˙@ı˙ÄÚˇˇ˝Ä˝D¸Ã¿˛˙¿ı¸ÄÚ˛ˇ¿˝C¸3˝Ì$¸ÄÚ ˛ˇ¿˝
  2873. @@@    8˙@ı¸ÄÈ
  2874. @Q )ú∏úû@Ì˙ÄÈ
  2875. @{øflY{˘kz‡˙¿ı¸ÄÈ
  2876. @Qí )ö∏öö@˙@ı˙ÄÒò˚@¯˙¿ı¸ÄÒ˚@¯Ì"¸ÄÒπĸ
  2877. @A††<Ä˙@ı¸ÄÒõ¿¸
  2878. @eÕôµ≤MW†Ì˙ÄÒö˚
  2879. @_µz≠ØMJ˙¿ı"¸ÄÒô¿¸
  2880. @e≠Y≤™<ñ†˙@ı˙ÄÈ@˛˙¿ı¸ÄÈ@¯Ì¸ÄÈ
  2881. @p(†˙@ı¸ÄÈ
  2882. @Es™≈≠…-Ì˙ÄÈ
  2883. @{mÌ¢´∑˜Ä˙¿ı¸ÄÈ
  2884. @DÎÍ•≠I-˙@ı˙ÄÈ@˝˝˙¿ı¸ÄÈ@˝˝Ì¸ÄÈ@¯˙@ı¸ÄÈ
  2885. @ (0    êÌ˙ÄÈ
  2886. @_4;*j9Ωr˙¿ı¸ÄÈ
  2887. @7.Vˇ≠7´€◊˙@ı˙ÄÈ
  2888. @74:∫j5πR˙¿ı¸ÄÈ@¯Ì¸ÄÈ@¯˙@ı¸ÄÈ@˛Ä0ÄÌ˙ÄÈ
  2889. @.mï“Õ»∫N¨˙¿ı‚
  2890. @zU˝ØµΩzΩ¯˙@ı‡
  2891. @:Wì´≠®¥M®˙¿ı¸Ë@˚̸Ë@¯˙@ı¸Ë@¿¸Ì˙Ë@.âπ¿¸˙¿ı¸Ë@{÷∂¿¸˙@ı˙Ë@:âu–¸˙¿ı˙ˇ¸Ï@¯Ì˙Ï@¯˙@ı˙Ï@¯Ì˛˙ϯˇ˛˙¿ıÚˇÚ?¯ˇ˛˙@ı˛Å˛ˇÄ¯Ä·¿ıÄ"" ˜¿‘ň¿Òê¯@ıÄ"" ˜`Ò    Î˛ÄààĘ0Ò    7πôÃœÄ˘¿ıÄDD@˜Ò|Ωíe3ȯ@ı˛ÄààĘ Ò    D°í%1    ¯¿ıÄ"" ˜Ò<ùôŸ.ÈÄÏň·@ıÄ"" ˜‘˛ÄààĘÄ‚¿ıÄDD@˜¿‚@ı˛ÄààĘ`‚¿ıò@Ä¿Ä¿t ¥ Ä"" ˜0’ň0‚@ıÄ"" ˜’˛Äüàèį ‚¿ıÄGD^˜‚@ı˛Äèàæ˜ˇˇ‚¿ıÄ'¢<ı’Åë|ı‚@ıÄ+¢¸ı’˛Äãàòı‚¿ıÄ_≈¯ı‚@ı˛Äõã∏ı‚¿ıÄ3¢8ı’Åó0ı‚@ıÄ3Æpı’˛Ä©àı‚¿ıÄe‹p˛ ˘Ù˘ˇ˛˘@ı˛Ä©¯‡ıÙ˘˘¿ıÄcÚ‡ıÙ˘ÄÌ$ ÅQÒ‡p ˛˛Ù˘Ä˙@ı# ÄA¿‡ê    ˛ ˛0ı˚" ¿Ì$˛Ä¡¡¿
  2892. @˛˛ı˘`˙¿ı' ġŇÅ $˛˛ı˚D@0˙@ı'˛ÉÒ¯¿8 ˛˛ıĸÄ˙¿ıʲı˘ Ìʲı˘˙@ıĘh˛ı˚ ˇÌ ˛Ä˜¯˛ı˚Ä˚¿ı$Ę˛ı @Ä@Ä˚@ı"˛Ä˜8˝ı Ä¿ÄÄ˚¿ıį0x˝ı¿¸ÄÓ į0¸ı˚Ä˚@ıįp¸ıÅ˛ ÄÓ!˛Ä˙¿¿¸ı˚Ä˚¿ı$Ģܸı@ü˛@Ä˚@ı"˛Ä¯¸ıÄé˛ÄÄ˚¿ıÄ˙¸¸ıáÄ˚ÄÓ$Ä˚î ˛ıÉ˙Ä˚@ı#Ä˚( `˛ıÄ˝ ÄÓ#˛Ä˚l˛ı˙¿Ä˚¿ı'Ä˚» IJı\`˝@¯Ä˚@ı"˛Ä˜IJıÄp˝Ä?ÿÄ˚¿ıÄÚı`¸ˆ€ÄÓÄÚı ˛ÚœÅÄ˚@ıÄÚı‡˛#Ë¡ÄÓ˛ÄÚı‡z˛x·Ä˚¿ı"Äıı@p˛G¿ÅÄ˚@ı!˛ÄıÄıÄp˛ܯ¡Ä˚¿ıį˛¿ı˙¸¡ÄÓ!į˛‡ı˙Ôd·Ä˚@ıįı˚!ŒÙÄÓ!˛Ä¯Xı˚é‹Ä˚¿ı#įÄHı@¸@¿Ä˚@ı#˛Ä¯‡jıÄ8˝Ä@Ä˚¿ı!į 0*ı8˛@ÄÓ+Ĉò/˛˛ˇ¿˝ 8Ä@Ä˚@ı'Ĉ˛å-˛˛ˇ¿˝ `¿ @ÄÓ.˛Ä˚˝cÑ-˛˛ˇ¿˝ ‡‡ @Ä˚¿ı0Ä˚˛ÒÜ!˛¿˝ @‡¿∞@@Ä˚@ı/˛Ä˚$˛ ¬#˛ˇœ¿˝ ćêÄ@Ä˚¿ı-Ä˚uÑB" ˇflÅ¿ ˛˛∞‹`ÄÓ1Ä˚&ö?¸c¯`ˇπ¡¿`˛ ÿ\ Ä˚@ı-Ä˚$úpÅF‡ˇ∞¡¿‡˛ 7Ã\ 0ÄÓ3˛Ä˚%I x·Ãøˇˇ∞˝¡øˇˇ¸‹ΔT0Å¿ä˛¿ıò@¿¿¥ Ù 3Ä˚IxπÄ?ÉDEˇπ˝√˝D@1¸bƒ@Å à˛@ı.˛ÄˆÃÄ|Êàâ¯çΔ˛àåÄs"ÑÄÅ2Ínf¿ı,ĈÜ<˚Δ˛«˜è‡˛Å“ö˘ÙÚ0ʡ√É√˛é‚ò0˛ÅöŸÑ@ı.į#`Éøˇ√¡øˇˇ¸ªÄ¯ ÅÍitÚ-˛Ä¯pÄ√‡„˝¿‡˛ ̇¿Ä˚¿ı.įp?ÉÄÄ~C`8s˝¿`˛ @1Δ@¯Ä˚@ı,˛Ä¯@3>É√c˛¯¿˝ ɡ√IJÄ˚¿ı)į@`Ç£˛¯¿˝  r>ÄÓ.Ģ¿ ¿ „˛¿˝ ·¡Ùÿ?Ä˚@ı*Ģ¿ Ä ˛3˛˛ˇ¿˝ oqèû ÄÓ+˛Ä˜ ˛˛ˇ¿˝ ÿà‡xÄ˚¿ı-į ò0ɲ˛ˇ¿˝ N Ê@˙ÓÄ˚@ı$˛Ä¯9¯–Éı Ĭ0;ÄflÊÄ˚¿ı!į1˘ò[√ı c∂è‡ÄÓ%įˇl√ı w>x¸¿Ä˚@ı(įˇ»t˛¿¸ F»| `ÄÓ,˛Ä˙    ˇÃ‹˛ ˚ `ˇ»§ Ä˚¿ı.Ä˙    ˇƒ å˛ù”¸ @‡ˇÏ‡@0Ä˚@ı.˛Ä˙    ˇÑ ˛”4Ä˝ Å·ˇƒ ÄÄ˚¿ı,ĸ <nñˇ˛sS4¸ ¡ˇƒÄÓ1ĸ ìˇ˛±›3Ä˝ ˇÑ0Ä˚@ı)ĸ #?ˇÑ¸˚ ˇƒ   ÄÓ,˛Ä¸ %<*ˇˇÑ¸˚ ˇƒ Ä˚¿ı-ĸ X‘$ˇˇ‰¸˚ @ˇÙ @Ä˚@ı(˛Ä¸@˛ˇˇ¸ı ġˇ˛ ÄÄ˚¿ı$ĸ@˛ˇˇ˛ı˛ˇ ˝ÄÓ(ĸ‡˛˛ˇı˛ˇ ˝Ä˚@ı!į˛ˇı˛ˇ  ÄÓ#˛Ä¯?˛ˇıˇˇ˛0˝Ä˚¿ı#į˝ˇı Gˇˇ˛@Ä˚@ı#˛Ä¯˛ˇ˛ıè˛ˇÄÄ˚¿ıį˛ˇ˛ı˛ˇê˝ÄÓ$Ģ˝ˇàı?˛ˇê˝Ä˚@ı!Ģ˝ˇÃı?˛ˇò ÄÓ$˛Ä˘˝ˇƒı?˛ˇà>Ä˚¿ı%Ģ˝ˇƒıG˛ˇà@|Ä˚@ı$˛Ä˘˝ˇƒı É?ˇ IJÅÄ˚¿ı!Ģ˝ˇΔı ?ΔˇÄÓ#į˝ˇÇı ?ܡ˝Ä˚@ı!įs˛ˇı ?Ü!ˇ˛ÄÓ$˛Ä¯c¯áı ܡˇÄ˚¿ı%įc¯áÄı CˇÜCˇ˜AÄ˚@ı$˛Ä¯c¯Äı É~ÜÄÈÄ˚¿ıįg¯ı˙~`ÄÓ įg∏ı˙mÄ˚@ıį¯ı˚" *ÄÓ˛Ä¯∞0ı¯Ä˚¿ıÄÚÙ¯Ä˚@ı˛ÄÚÙ¯Ä˚¿ıĈˇÄÙ˜ˇÄÓĈˇÄÙ˜ˇÄ˚@ıĈˇÄ’˛ÄÚ‚¿ıÄÚÛÄ@¯@ı˛ÄÚÛ    Ä@¯¿ıÄÚÛ        ªå¡r–˚ÄÌ'IJ D˝Û    éSʃö®Wø¿˙@ı$IJ˚€˚ˇÌˇ¿˛Û    ∂S§ÑÍ®T#@Ì'˛Ä˛˚€ÒøÕˇ¿˛Û    ûL√G:®sùÄ˙¿ıÄ˚@¿˛Ôı@ı˛ÄÚÔı¿ıÄ˝Ω@Ñ
  2893. ˝ÔËÄ˝4∑oˇœfiP˝‚@ıò@@@Ù 4 Ä˝5ßoˇœfi–˝’˛Ä˚¿˚‚¿ıÄÚ‚@ı˛ Ćää†
  2894. ˛‚¿ıÄ fløflº˛Îfiˇ?∏’Ä fløflº˛Îfiˇ?∏‚@ı ÄÚ’˛ÄÚ‚¿ıÄFÅ r˛‚@ı˛Ä˛ˇ{ÔfiÔüøÁ/ˇÄ‚¿ıIJˇ{ÔfiÔóø«ˇÄ’Ę@˝‚@ı ÄÚ’˛Ä˛#îCâ ˝‚¿ıIJ:˝Î€}Àœø¯˛‚@ı˛Ä˛;˝Ô⁄}flÀø¯˛‚¿ı ÄÚ’ÄÚÙ˘ˇ˛˘@ıÄ˝‡Ä`˝Ù˘Ï!˛Ä˝vˇoΩˇüÔ˝Ù˘Ä˙¿ı"Ä˝vˇoΩˇüÔ˝Ù˘¿˙@ı˛Ä˜ ˝Ù˘`˙¿ıÄÚÙ˘0Ì#Ä˚@˚Ù
  2895. $Ä ˙@ıÄ˚π¿˚Ù
  2896. =h°    7( Ì"˛Ä˚ª¿˚Ù
  2897. '‹Ûü™º˙¿ı!Ä˚˘Ù
  2898. %H°â´(˙@ı˛ÄÚÙ˝˛ˇÄ˚¿ıÄÚÙ˝˝ÄÓÄÚÙ¯Ä˚@ıÄÚÙ˘ÄÓ˛ÄÚÙ:ò˙Ä˚¿ıÄÚÙ;–˙Ä˚@ı˛ÄÚÙ4î˙Ä˚¿ıÄÚÙ˘ÄÓÄÚÙ˙UTÄ˚@ıˇÙ˙30ÄÓ˛ÒˇÙ˘ÃÄ˚¿ı‚˙Ä˚@ı‡ĸ Ä˚¿ıÄÚÙ" ¸ÄÓ¿ÚÙ¸Ä˚@ıÚˇ¸Ù" ¸ÄÓˆÏĸ Ä˚¿ı¯Ï@¸Ä˚@ıˆÏĸ Ä˚¿ı¯Ï.,¸ÄӯϸÄ˚@ı¯Ï&0¸ÄÓ˛Á
  2899. –¸ Ä˚¿ıÄÁP¸Ä˚@ı˛å€Ä˛~Ï
  2900. ê¸ Ä˚¿ı&SÒ˝BÏ+" ˛ÄÓ!¶Q˝RÏ 1F" Ä˚@ıNÒIJbÏ ÒòD ÄÓˆBı˛ˇ¿˝¸» Ä˚¿ı"¯Fı˛ˇ¿˝¸∏Ä˚@ı ˆJı˛ˇ¿˝˝    ∞ Ä˚¿ı!˙Bı ˛¿˝˝ÄÄÓ%˙Rıˇœ¿˝˝6Ä˚@ı$∂¿¸bı ˇœ¿˝˛ÄÓ)˛ØĸBˆ0ˇôÅ¿˛ ˛ 0 Ä˚¿ı*®Ä¸gˆ8 ˇ∞¿¿˛0˛, `Ä˚@ı*˛Gĸ)ˆˇÏˇ∞¡¡˛ˇ¯¸ ` Å·Ä¿ıò@@Ä@Ä4 t %@˚ ˆ ˇ∞¸¡˛ ˙ÇÄÚ+Ä˚1ˆ¯ç¡˛˝ Å”Δn„`@ı&¯ˆ"# ˚ ¡˛"#˝
  2901. ÄÄ≥/öó¿Û%ˆˆÉ¡˛˝ ¿ Ç3-äî@¿ı)¯ƒ˜DF √ ¡˛DL˝  ‡ÅœΔz„¿@ı!ı˜ˇÏ„¡˛ˇ¯¸ Ä˚¿ıÏ8 8s¸¿˛0˛pÄÓ"Ï0¯¿˛ ˛\˝pÄ˚@ıÎ ¯¿˝˛∏˘‹ÄÓÈ¿˝˝∂ Ä˚¿ıΡˇ˛¿˝¸åÄ˚@ıÈ˛ˇÄ˝˝›á Ä˚¿ıβˇ¿˝˝˛üÄÓ‚˝0ÊøîÄ˚@ı‚˝Ú&êÄÓ‡˝˛/ Ä˚¿ıÍ˙˛ ˇ=Ä˚@ıË˙ æ ˝4 Ä˚¿ıÍ[`¸  ˝`ÄÓÍW¿¸ ˇ@Ä˚@ıÍT@¸  ˇ¿ÄÓË#¿¸˝ˇ‡ Ä˚¿ıÈ ˚˝ˇ Ä˚@ıÁ@˚˝?ˇ† Ä˚¿ı‚˝ˇ†ÄÓ‚˝ˇ∞Ä˚@ı‚˝áêÄÓ‡˝çò Ä˚¿ı‚˝âÄÄ˚@ı‡˝ˇ Ä˚¿ı‚˝ˇÄÓ‚˙Ä˚@ı‚˙ÄÓ‡ Ôˇˇ¿ Ä˚¿ı‚˙Ä˚@ı‡ =ˇ˛ Ä˚¿ı‚˙ÄÓ‚ ˇ˝˛Ä˚@ı‚˙ÄÓ‡ ?Ô˛ˇˇ Ä˚¿ı‚˙Ä˚@ı‡ ˇˇÔ‡ Ä˚¿ı‚˙ÄÓ‚˙Ä˚@ı‚ ˇˇÄÄÓ‡˙ Ä˚¿ı‚˛?˛Ä˚@ı‡˘ÃÄ˚¿ı‚˙30ÄÓ‚˙UTÄ˚@ı‚˜ˇÄÓ‡˜ˇÄ˚¿ı    –@ıŒ¿ı√flxˆ@ı flÄÈ›w4Âá[0¯¿ıfl)™ó√W†¯@ı›é™ñT ¯¿ıfls™Â√#†Î›Ä ˜@ı ›Ä@Í
  2902. €Äı¿ıò@Ä¿Ä¿t ¥     –@ıŒ¿ı√    –@ı√Œ¿ı    –@ıŒ¿ı√    –@ı√     –ÿı    –U@ı¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ˛û¿p  ˛âÄ$Ä  ˛ÅE¿  ˛ÅÑ@  ˛ÅÑ   ˛!2à   ˛¢ê@  ˛?|‡cÄ ¡¡¡¡˛    òÄ80˙√˘ÿaĉ˛    Ä@@˙@˘@‚˛˝@‡ ˝ ÄÄ˙Ä„'˛!⁄–Ä@ ß÷òèpk¬É« ;t#ºs¬üá
  2903. yúÒ¿Ê'˛!6äc@Ä    H§SkE ëMâEò‘íâM2ö4”"R@Ê&˛ $îCÅ ÑP¿¢Kä!ëÑ Ö‚#
  2904. ë%DíB°Â'˛!K%Ñ@ ÖÒM,ú A:◊â&ä!    %◊Õå_$ƒ¥ÄÊ&˛ 8w>ÉáÅ¿3¬Œ1Ùìí@‘ãr ÓX‰ãy-Á9'½ÄÌ@˛"‡˝ÄÌ@˛"‡˝χ˛‡¡ ˛ÉaÄ`¿À ˛Å˛1ÄÀ ˛2ÄÀ˛
  2905. 
  2906. yúRçx—≈†œ˛
  2907. 4”"PTí)&ö¿œ˛
  2908. DíB†Y"R$úÄœ˛    fl$ƒ∞ë'Zs!Œ˛    ?-Á9 ◊ëߌˆÄŒˆÄŒˆÕ¡$˛¿0`0`¿˝`Ë˝`Âò@¿Ú¿Ú¥ Ê ˛@  `˝@˝˝fi#˛Ä@ † Ä˛¸‰'˛!Öí    „±D£Losé∞˜çy‰f7ôœ¥ÙÕ<l7õûÊ'˛!öí§Êö$í≈$R–Rk$î…I2%[[E“I4JÊ'˛!¥BHúH†ä(Hê¢r"Eêâ$*RRJ(†â(TÊ'˛!! ÿiõ‡$IÁ+H• ¥Ñ'I-3ûLKh§‰“≠&ûHñÊ'˛!1ê:NÂú5Δô“G9"$t≤…Ãjsíá$§üIÿjw$Ê
  2909. Ò˝Ç◊ÏÇ◊Ì«◊¡˛˛ aÄ `@Ÿ˛ ˚Ä$êÄ˝Ÿ˛ `˛    ÄŸ˛
  2910. p†Ò«Óqíeº(1É«‹‡Q    ‡€˛â J,§êí⁄h    –‰Å(±I!¶¥ê€˛?ãå)D@¥¢p)O¬0¢àÇ'9€˛ê@îSi Ÿ/Ä≠xÅQJ“B¯A €˛`AcûI¿ë÷rH∞ÛétìÅg:¿€¸˚¸¸⁄¸ı¸⁄¸Ĉ¸⁄¡¡¡¡¡¡¡¡¡¡¡¡¡˛ĸ‡–˛˚@–˛
  2911. !˛Ä–˛
  2912. <Ú@;LÛ\Mû0—˛ Jh@E¥II¶äH—˛ "åp@Ö$äâƒÄ—˛ !$ñÄFäLî≤ò—˛ gŸdp8rIg—»C§a—˝A˝˛@œ
  2913. ˝A˝À ˝„IJÄᲠ   < <:Œ˛Ä˛DŒ˛@!˛&ÑŒò@@@Ê & ˛ @!    Áç–8› —˛ @!4¢öP$&i —˛ ÄB9EF$p†—˛ DAe§†DxÄ¿—˛ >¯:I? ¯@·®pÄ—ÚÄ—Û–Û–¡ ˛¸``Õ ˛0¸êêÕ˛
  2914.  Ä Õ˛
  2915. &èÙo;@¿Õ˛
  2916. "íòíEÄ  Õ˛EëÖ @Õ˛ie!<ä êÕ˛<Oπ ‘r≈‡Õ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ä@Ä& f ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿Ä¿f ¶ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿¿¶ Ê ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@@Ê & ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ä@Ä& f ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿Ä¿f ¶ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú¿Ú¶ ÿ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@@Ê & ˛ @!    Áç–8› —˛ @!4¢öP$&i —˛ ÄB9EF$p†—˛ DAe§†DxÄ¿—˛ >¯:I? ¯@·®pÄ—ÚÄ—Û–Û–¡ ˛¸``Õ ˛0¸êêÕ˛
  2917.  Ä Õ˛
  2918. &èÙo;@¿Õ˛
  2919. "íòíEÄ  Õ˛EëÖ @Õ˛ie!<ä êÕ˛<Oπ ‘r≈‡Õ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ä@Ä& f ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿Ä¿f ¶ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿¿¶ Ê ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@@Ê & ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ä@Ä& f ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿Ä¿f ¶ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú¿Ú¶ ÿ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ˇN≤@ˇ ˇˇˇˇ@
  2920. ˇ·ˇ‚7^
  2921. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡ä5Introduction to Publishers, Subscribers, and Editions
  2922. , (‡    2-9
  2923. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  2924. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  2925. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  2926. 4€4—?òÄ
  2927. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  2928. ˛ˇˇˇ
  2929. ˛ˇˇˇ
  2930. ˛ˇˇˇ
  2931. ˛ˇˇˇ˜˝˛ˇ˛
  2932. ˛ˇ˛ˇˇ
  2933. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  2934. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  2935. ˛ˇ˛ˇˇ
  2936. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  2937. ˛ˇˇˇˇ
  2938. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  2939. ˛ˇˇˇˇ
  2940. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  2941. ˛ˇˇˇˇ
  2942. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähê(eäY@Ä°dONLNd\êh)Vou should distinguish each selected publisher and subscriber within a document with a °dONLNdWiäuò(räborB °dONLNdZiôuß)der\¿°dONLNd]ißu). Display a publisher bor'`°dONLNdviu>)m
  2943. der as thr °dONLNdÄi>u±)*ee pixels wide with 50 per3 °dONLNdöi±u    )scent gray lines, and °dONLNdØväÇÛ(ädisplay a subscriber bor¿°dONLNd«vÙÇ)j
  2944. der as thrÄ°dONLNd—vÇë)*ee pixels wide with 75 per Ä°dONLNdÎvëÇ÷)scent gray lines. …`°dONLNd¸v’Ç‹)DA°dONLNd˝v›Ç„) rI°dONLNdˇv„Ç) ectangle of °dONLNd ÉäèF(åä+one white pixel should separate the data fr›@°dONLNd6ÉFèv)º
  2945. om the borΔ@°dONLNd@Évè±)0der itself. Bor‚ °dONLNdOɱè);ders should be drawn °dONLNddêäú¶(ôäoutsidea¿°dONLNdkêßú”)F the contents of publishers and subscribers so that data is not obscur”Ä°dONLNd±ê”úÙ(ô”ed. See °dONLNd∫ùä©¢(¶äFigurR¿°dONLNdøù¢©∂)e 2-6@°dONLNdƒù∂©2) for an illustration of the borä`°dONLNd„ù3©£)}ders as they appear onscr¬Ä°dONLNd¸ù£©¡)peen. Se0Ä°dONLNdù¬©…)e z °dONLNdù…©) “Displaying °dONLNd™ä∂
  2946. (≥äPublisher and Subscriber Bor¿°dONLNd-™ ∂K)Åders” on page HÄ°dONLNd;™K∂])@2-50ú`°dONLNd?™]∂b) fp@°dONLNdA™c∂˚)"or detailed information on how to °dONLNdc∑ä√À(¿äimplement bor‰°dONLNdp∑À√ )Aders for specifi# °dONLNdÄ∑√L)Bc applications.°dONLNdê…ä’¢(“äFigurR¿°dONLNdï…¢’∂)e 2-6@°dONLNdö…∂’ˆ)E shows a document containing a publisher and a document containing a °dONLNdfl÷ä‚∑(flä
  2947. subscriberZÄ°dONLNdÈ÷∑‚·)-
  2948. , with borÔ¿°dONLNdÛ÷·‚J)*ders displayed for each..°dONLNd ËäÙö(ÒäBorR`°dONLNdËöÙØ)>ders for publishers and subscribers should behave like the bor$¿°dONLNdMËØÙœ(ÒØders of ,
  2949. Courier$¿°dONLNdUËœÙÛ) 'PICT'$¿°dONLNd[ËÛÙı)$ .°dONLNd\ıäÎ(˛ägraphics within a worâ@°dONLNdqıβ)ad-pr¿°dONLNduı˛W)ocessing document. >†°dONLNdàıX^)ZYˇ °dONLNdâı]˝)$our application should display a bor±@°dONLNd≠ı˛)°der °dONLNd±äU( ä.whenever the user clicks within the content ar–¿°dONLNdflU·)À!ea of a publisher or a subscriber“†°dONLNd·Ê)å. •°dONLNdÊÏ)YeÄ°dONLNdÏ˝)our °dONLNdä(äapplication should hide the bor†°dONLNd&ı)ã3der whenever the user clicks outside the content arj@°dONLNdYı)‡ea. Se=@°dONLNd_)e °dONLNdaä(B(%ä(“Displaying Publisher and Subscriber Bor6‡°dONLNdâC(É)πders” on page m†°dONLNdóÉ(ï)@2-50¡Ä°dONLNdõï(ö) fï`°dONLNdùõ()or detailed information on °dONLNd∏)ä5Ï(2ähow to implement bor9¿°dONLNdÃ)Ì5.)cders for specifix‡°dONLNd‹).5m)Ac applications.
  2950. WHh4XHh"XH]
  2951. ˇ·ˇ‚7^    °dONLNdÌMäX¥(Uä
  2952. Figure 2-6°dONLNd¯MÃXP)B Publisher and subscriber borders
  2953. gàùòÄ.¿bHHM2@ˇˇˇˇˇˇ¿bko+—
  2954. ˛„ˇ˛ˆ
  2955. ˛„ˆ
  2956. ˛„ˆ
  2957. ˛„ˆ˛Ô˛¸ˇÒ˝ˇfl˝˚ˆ˛˚ Ä ¿Ä˙Dˆ"˛Ë¸ˇ ¿ Ä˝ˇ–E˚ˆ˛˚ Ãœå«√Δœè˚Dˆ!˛Ë¸ˇ ˝Ã
  2958. ôôúfgôú˝ˇ–E˚ˆ˛˚åÃÃŒôòffôò˚Dˆ"˛Ë¸ˇ Ãëüòffüò˝ˇfl≈˚ˆ˛˚ ÃÃ√ôòffò˚ˆ"˛Ë¸ˇ ÃÃ…ôòòffòò˝ˇ–˚ˆ˛˚ œå«è√Δè˚ˆ˛Ô˛¸ˇÒ˝ˇfl˝˚ˆ
  2959. ˛„ˆ
  2960. ˛„ˆ
  2961. ˛„ˆ˛‚ˇˆ ˛Âˆ ˛Âˆ ˛Âˆ ˛ÂɈ ˛ÂCˆ ˛Â#ˆ ˛Â ˆ ˛Âx{ˆ ˛ÂCˆ ˛ÂCˆ ˛ÂCˆ ˛Â√ˆ ˛Âˆ˛Ôˇˇ¿˚ˆ˛Ômġ¸ˇˇˆ˛Ô˛ˇMˇ¸˛ˇˇˆ˛Ô~›∑m€e‘˛Äˆ˛ˇˇ˝ˇflt˛Äˆ˛›€wmŸ6L˛Äˆ˛ˇˇ›ˇwÌ‹˛Äˆ˛Ò›ô≥wdÕô4˛Äˆ˛˘U@˝˛ˇ››ªwt˛Äˆ˛˘™†˝ô33wfL‘˛Äˆ˛˘U@˝¸&fL›ŸÙ˛Äˆ ˛Ä˙†˛áˇÄ˝3T˛Äˆ$˛˛~˝@˛    ˇˇ¯gÙ˛Äˆ$˛ÄÛIJ†˛˝ˇÕt˛Äˆ$˛˛@˛˝ˇüÙ˛Äˆ$˛ Ä<ˇÄ†˛ˇ¸˝7Ù˛Äˆ%˛  8‡@˛˛ˇÄ|˛Äˆ%˛ Ä`<†˛    ġ¿⁄˲ˇˇˆ%˛ ¿œ«Ä@˛    ¸ˇ◊¯˛ˆ%˛ Ä√¯‡†˛    Á˛–˛DGˆ%˛ ?ˇáÛè˛@˛    ?ˇˇÒ∞˛ˆ$˛ á>Ïs†˛ ˝Ò`˛DGˆ#˛ Ô¡ˇ @˛ ¸¿˛ˆ#˛ àû¯†˛ĸIJDGˆ#˛ ?˛Ä@˝ˇ‡˝IJˆ#˛ ∏Ôˇ„ˇ;Ć˝+˛˝DGˆ&˛ 1áˇ¯Ä#Ä@˝+Uøˇ¸˝¯?ˇ#˛ ∏ᡡc†˝+U≠Vfl¸ƒ˝DGˆ#˛ ˇˇ¡‹√@˝/ı≠V◊wˇÃ˝ˆ#˛ é˜ˇ¯~ÉĆ˝?ˇVfltuX˝DGˆ&˛ ?ˇ˛ÁÄ@˝ˇˇ◊˝_ıP˝¯?˛ ˛ ġˇÁˇÄ†˙ˇÄ_’p˝DGˆ"˛˛{ˇ˝ª@˘ˇˇı`˝¯?˛˛ ġ˝¸†˜¿˝DGˆ˛˛flı<@Ò¯?˛˛ ġ˜|†ÒDGˆ˛˝?˛¸@Ò¯?˛˛IJˇ¯†ÒDGˆ˛¸¯¸@Ò¯?˛˛ĸd†ÒDGˆ˛˚(@Ò¯?˛˛ĸ,†ÒDGˆ˛˚4@Òˆ˛ĸ<†ÒDGˆ˛˘@Ò¯?ˇ˛Ä˙†ÒDGˆ˛˘U@˚‡˘ˆ˛˘™†˚p>˘DGˆ˛˘U@¸«€ˇ˙ˆ˛6¡¯˚DGˆ˛~ˇ∑fl¸¸ˆ˛0€∂˝4‡˝DGˆ˛Áˆˇ∑ˇÌ∞˝ˆ˛Òå›≤m∂€0˝DGˆ˛Ò?˜Ôˇ˝˛˝ˆ˛Ò dÕªm∑Hê˝DGˆ˛ÒyˇøÔˇ}˚ê˝ˆ˛Ò√fdõ-”n˝DGˆ˛Úè›fl˛ˇÿ0˝ˆ˛Ú;7vÀ¥€0˝DGˆ˛Ú8Ó˝flæˇˆaê˝ˆ˛Úaôì6Ì∂]√p˝DGˆ˛Û    œˇ˛ˇø˝˜–˝ˆ˛Û        àôílóDp˝DGˆ˛Û    {˜˚˝‹–˝ˆ˛Û    Õ€n€0Kp˝DGˆ˛Û    üv€æ·ˇ–˝ˆ˛Û¸˛fl∂˘Ékp˝DGˆ˛Ù
  2962. á¯ˇ∑ˇ˝ˆ˛Ù
  2963. ¯¸`˝DGˆ˛Ù
  2964. Ävˆ¿˝ˆ˛Ù
  2965. ˇ‡ˇpflˇÄ˝DGˆ˛Ù    ˛¡∂Ú¸ˆ˛Ù    ?˛„áˇÓ¸DGˆ˛Ù    ?¿>ñÿ¸ˆ˛Ù    ˇ¿?¸DGˆ˛Ù˛¸$÷@¸ˆ˛Ù˝ˇ˙ˇ˝¿¸DGˆ˛Ù˝ˇÜ”˚ˆ˛Ù˝˛˚DGˆ˛Ùá˝ÿ˚ˆ˛Ûá˝˚DGˆ˛Û«˝¿˚ˆ˛ÛIJÄ˚DGˆ˛Ú¯˛˙ˆ˛Ú ˙ˇˇˆ˛Ò˙ˆ˛Ò¸0˙ˆ˛¿‡˙√ˆ˛ÔÉÄ˙Cˆ˛Óˇ˘Cˆ˛Ó˘Cˆ ˛Âx{ˆ ˛Â ˆ ˛Â#ˆ ˛ÂCˆ ˛ÂɈ ˛Âˆ ˛Âˆ ˛Âˆ˛‚ˇˆ˛?ˇ‰ÍDĈ˛ 01ÍÄň˛`0$ÍDÄ¡?Ɉ˛†01ÍÄ° Éˆ˛>0$ÍDèë ˚ˆ˛01Íà     ãˆ˛0$ÍDà ãˆ˛01Íà ãˆ˛0$ÍDà    ?ãˆ˛>01Íèë ˆ˛†0$ÍDÄ° ˆ˛`01ÍÄ¡ ˆ˛ 0$ÍDÄÅ˚ˆ˛?ˇÒÍĈ˛‚ˇˆ˛‚ˇˆ”””””””˛‚ˇˆ ˛„Ę ˛„Ę ˛„ʲ ˜ˇ˝ˇÄÚ?˝ˇÔ˛˝Ä˜˛˚ pÄÄ`˙"Ę$˛ Ù˝ˇÄ»ÄÄ`?˝ˇË"˝Ä˜!˛˚¡ô·ΔŸÒ∞|<l¯Ò∞¸"Ę$˛ Ù˝ˇÄ·ôôì'ôô¿ffqôô¿?˝ˇË"˝Ä˜!˛˚qôô√ôôÄffaôôĸ"Ę$˛ Ù˝ˇÄ9ôò„ô˘Äffaô˘Ä?˝ˇÔ‚˝Ä˜!˛˚ôòsôÅÄffaôÅĸĘ$˛ Ù˝ˇÄ˛ô 3&ôâÄffaôâÄ?˝ˇË˝Ä˜!˛˚p˘·ΔÒÄ|<`¯Òĸʲ ˜ˇ˝ˇÄÚ?˝ˇÔ˛˝Ä˜ ˛„Ę ˛„Ę ˛„Ę
  2966. ˛‚ˇÄ˜ ˛‰ÄĘ ˛‰ÄĘ ˛‰ÅÅĘ ˛‰ÇAĘ ˛‰Ñ!Ę ˛‰àĘ ˛‰ê    Ä˜ ˛‰º=Ę ˛‰Ñ!Ę ˛‰Ñ!Ę ˛‰Ñ!Ę ˛‰á·Ä˜ ˛‰ÄĘ ˛‰ÄĘ ˛‰ˇˇÄ˜˛‰ˇˇÄ˘?ˇ˛‰¿Ģ$˛‰¿Ģ ˛‰¿Ģ$˛‰¿Ģ ˛‰¿Ģ$|&˛0é8Ä Ä˝ ¸¿Ģ @&˛QDÄIJ˝ ¸¿Ģ$@)˛ Á@Ƀ¡Ã∑f„9ñpeò8À:    ñ`¿Ģ @)˛ îîÉê8ÑÖ% íƒíêíXÄ$$,IPXê¿Ģ$@)˛ >îóÄPÑ%‡ûÑíìíP`t<$ËIQ–¿Ģ |)˛ "îîQDÑ•%êÑíîíPî %(H¢PÄ¿Ģ$)˛ "Áé8Ƀ¿LÑíìâê‡t$Ë8°–`¿Ģ ˛˛ÑË¿Ģ$˛˛ÑË¿Ģ ˛‰ˇˇÄ˘?ˇ˛‰àâĢ?ˇ ˛‰¢#Ę$˛  D «@Ü@¸àâĘ$˛˛ D (¢@Ç@¸¢#Ę&˛9ëf1√∏Œ Óc89ÅÇ Aå‚`qñ`˛àâĘ&˛JJ)J$$D§@A»BBíêJXê˛¢#Ę&˛K (yÅ$‰Dt$A¿(BíK–˛àâĘ&˛J)@A%$Dî§BB(¢BRíÄJIJ¢#Ę)˛9Ñ&3ħ‚"s$    Å¡«Aé‚bIê`˛àâĢ?ˇ ˛‰¢#Ę ˛‰àâĘ ˛‰¢#ʲ‰àâĢ?ˇ ˛‰¢#Ę%˛˝ ¸ @ ˝àâĢ?ˇ˛˝ ¸ @˛˙¢#Ę)˛vI‹8¡ΔΔYÉ∏ŒÇ`Ê[≥qúÀ8n˛àâĢ?ˇ&˛IJ%!)    )bA$)TêIbIHI,@)˛¢#Ę)˛IIà%·)    )C¡$ÈTêOBII…(0)˛àâĢ?ˇ&˛IHH%)    )B%)(êHBIJI()    ˛¢#Ę)˛I;Ñ8¡&    &AħÈ(`&BIIƒ»p)˛àâĢ?ˇ ˛‰¢#ʲ‰àâĢ?ˇ ˛‰¢#Ę ˛‰àâĘ ˛‰¢#ʲ8„à@ÏàâĢ?ˇ˛EHÍ¢#ʲA3å‹Ïàâʲ9àJBRÏ¢#ʲHBNRÏàâʲEHJRRÏ¢#ʲ    8„à2NR@ÌàâĘ ˛‰¢#ʲˆ;˙ªÄ¯àâʲˆ.˙Óį¢#ʲˆ;˙ªÄ¯àâʲˆ(˚į¢#ʲˆ8˚įàâʲˆ(‡į¢#ʲˆ8ˇ8įàâʲˆ(aœį¢#ʲˆ8¿¯įàâʲˆ(éį¢#ʲˆ8Û¿įàâʲˆ(| ¸xį¢#ʲˆ8Ô?éįàâʲˆ(ˇ¯8ˇ‚į¢#ʲˆ8s‡~¿`3įàâʲˆ(fi¸¿“į¢#ʲˆ8âÔˇÄsįàâʲˆ)ɡ·ˇ˙į¢#ʲˆ;顲?ªÄ¯àâʲˆ+ˇÅÿ:į¢#ʲˆ;àˇ3įàâʲˆ)∞?ˇ¸Ã2į¢#ʲˆ8‡ˇáË;įàâʲˆ(ˇˇ‡˛zį¢#ʲˆ8ˇˇ˛˚įàâʲˆ(øˇ€≤į¢#ʲˆ8ˇˇfl√įàâʲˆ(˛=ˇS¬Ä¯¢#ʲˆ8˛ˇw√įàâʲˆ(˛ˇÔ¬Ä¯¢#ʲˆ8˝ˇÉįàâʲˆ(˝è¬Ä¯¢#ʲˆ8¸Cįàâʲˆ(¸ÇįˇˇÄ˜˛ˆ8¸√įÄʲˆ(¸BįÄʲˆ8¸√įá·Ä˜˛ˆ(˚įÑ!ʲˆ;˙ªÄ¯Ñ!ʲˆ.˙ÓįÑ!ʲˆ;˙ªÄ¯º=Ę ˛‰ê    Ä˜ ˛‰àĘ ˛‰Ñ!Ę ˛‰ÇAĘ ˛‰ÅÅĘ ˛‰ÄĘ ˛‰ÄĘ
  2967. ˛‚ˇÄ˜˛ˇÚÍ"@ÄʲÍà¿@Äʲ0Í"@`ü¡Ä˜˛PÍà¿PêAʲüÍ"G»ê}ʲ    ÍàƒêEʲ
  2968. Í"DêEʲ
  2969. ÍàƒêEʲ    Í"Dü≈ʲüÍà«»ÑʲPÍ"@PÑʲ0Íà¿`ÑʲÍ"@@á˝Ä˜˛ˇ¯Íà¿ÄĘ
  2970. ˛‚ˇÄ˜
  2971. ˛‚ˇÄ˜”””””””””””””””””””””””””””””””””””””””””’?ˇ’’’’’>’ ’ ’ ’ ’>’’’’’?ˇ’?ˇ””””””””””*    ˘‡‡Å¿ƒ˝    8p¸Ä˛D˝)ÅB¸    DĸIJ˝/-Å$ <âsÄÑ    ¬0‚√ãÅ≈áÄ‚'á.«áá<qsÄ/-Å'¿DâÑ@    "$L&HÅ$Hë0DHòHòDâÑ@/-Ò    Ò„‰$ ÑDâ@˘Ò"$H‰HÅ$H DHêHêDâ/-Å$ Dâ¿"‚'»$HÄ‚$G DOêHêD˘Ä/-Å$ Dâ "$$HÄ$@ê DHHêDÅ@/-ÅD Dô@@2"$H$HÅdHë DHêHêDâ@/-˘‡‡É¿<iĸ”¬‚#à‰GÄ·ßá Gáá<qĘfi˜Dfi˜8fi””””””””””””””””””””
  2972. ¯ Ç⁄
  2973. IJΔ⁄ ÄÛa≈Ä™8∞·„ãć Å"&@íD…$Lfl Ò"$@Ç<àÚ$Hfl Å"$@ÇDâ'»fl Å"$@ÇDâ$fl Å"$@ÇDâ$Hfl ¯Ò!ƒ@Ç<àÒ„àfl˜ fi¯ fi¯¿fi””””)ƒ  ÇÄ˝0Ä@¸¸&ƒ˛ Δ˛˝˙˚.*§qa„Ä™8qã8q`8qsèá8√ã‚ÃYàñ0·«q`˛.*§â""$@íDàåàDâêâÑHëàëDLÅ2fHô"âê˛.*îà™ "$@Ç<ÄààDÅâ»ëàDHÅ"DHë‚â˛.*"'¿ÇDÄààDq˘HëàDHÅ"DHë"â˛.*åÄD"$ÇDÄààD    ÅHëàDHÅ"DHë"â˛.
  2974. åàD""$@ÇD˛àDââHëàëDHÅ    "DIë"â˛.*ÑpD!„ÄÇ<pàÜ8q qœá CàÄ‚"DFë··àq˛ Ò¸ÎҸϠ‘ ’<’"’"’"Ä˝Ä„"ĽĄ"(xá‚Ãxâ√ãÄa¿Â<(DààÅ2DàÑLí „DDààÅ"DàÑH‚DDàèÅ"DàỂ˛Dàà"DàÑ‚ÇDààÅ    "DòÑH „Çxá‚"xhcà¿„@ĸ@˛„@ĸ@˛ ‡ˇ&r@ˇ ˇˇˇˇ@
  2975. ˇ·ˇ‚7^
  2976. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  2977. (‡*2-10    )B5Introduction to Publishers, Subscribers, and Editions4^*¿¯
  2978. °dONLNd\lhr(elY@Ä°dONLNd\rh)#ou also need to support the standarí°dONLNd$\hŒ)ú'd Edition Manager menu commands in the °dONLNdKilu~(rlEdit‚@°dONLNdOi~uÄ) b@°dONLNdPiÅu)menu. These menu items include,Zapf Dingbats°dONLNdolÜq(Öln
  2979. °dONLNdq|xàÉ) Cr\°dONLNds|ÉàÀ) eate Publisher…°dONLNdÉëlòq(óln
  2980. °dONLNdÖéxö´) Subscribe T›¿°dONLNdêé™öπ)2o…°dONLNdì£l™q(©ln
  2981. °dONLNdï†x¨) Publisher/Subscriber Options…°dONLNd≥µlºq(ªln
  2982. °dONLNdµ≤xæø) Show/Hide Borb@°dONLNd¬≤øæ)Gders (optional)°dONLNd“«lŒq(Õln
  2983. °dONLNd‘ƒx–é) Stop õ`°dONLNdŸƒé–)All Editions (optional)°dONLNdÒ’l·(filUse Õ‡°dONLNdı’·¨) a divider t{°dONLNd’≠·ê)./o separate the Edition Manager menu commands frø†°dONLNd/’ê·“)„om the standar°dONLNd=’”·€)Cd °dONLNd?‚lÓ~(ÎlEdit‚@°dONLNdC‚~ÓÄ) b@°dONLNdD‚ÅÓ˝)menu commands Cut, CopyÚ¿°dONLNd[‚¸Ó0){, and Paste. ≤Ä°dONLNdh‚1ÓI)5FigurÖ@°dONLNdm‚IÓ])e 2-7"¿°dONLNdr‚^Ó∞) shows the standar…Ä°dONLNdÑ‚∞Ó€)R
  2984. d Edition °dONLNdéÔl˚Â(¯lManager menu commands.
  2985. *.¯4*.¯"*]
  2986. ˇ·ˇ‚7^    °dONLNd¶lñ*#
  2987. Figure 2-7°dONLNd±Æa)B)Edition Manager commands in the Edit menu
  2988. °dONLNd‹’l·ˆ(filRThe Subscriber Options menu command should toggle with the Publisher Options menu °dONLNd.‚lÓ+*)command. When a user selects a subscriber'¿°dONLNdW‚,Ó.)¿ ß¿°dONLNdX‚.ÓA)and ‡°dONLNd\‚BÓπ)then accesses the menu bar˛¿°dONLNdv‚∏ÓΩ)v, ˛¿°dONLNdx‚ΩÓ‘)your °dONLNd}Ôl˚+(¯l,application should adjust its menus so that bÄ°dONLNd©Ô,˚’)¿"the Subscriber Options menu comman<`°dONLNdÀÔ÷˚fi)™d °dONLNdÕ¸lq(la°dONLNdŒ¸qä)ppear@Ä°dONLNd”¸ãè)s}Ä°dONLNd‘¸è≠) in the dONLNd‹¸≠¡)Edit v‡°dONLNd·¸¬€)menuÌ°dONLNd¸€›).m°dONLNdʸfi‡) Ì°dONLNdÁ¸‡)When aŸ`°dONLNd̸f)" user selects a publisheª†°dONLNd¸gm)er .@°dONLNd¸nÅ)and õ`°dONLNd ¸ÅÍ)then accesses the menu °dONLNd"    lz(lbar<‡°dONLNd%    zY)4, your application should adjust its menus so that t‡ °dONLNdY    Y‘)flhe Publisher Options menu °dONLNdsl"í(lcommanfl °dONLNdyí"ü)&d az‡°dONLNd|†"π)ppear;`°dONLNdÅ∫"æ)sx`°dONLNdÇæ"‹) in the èÄ°dONLNdä‹")Edit q¿°dONLNdèÒ"Δ)-menu. In addition, you may support a Show Bor>‡°dONLNdº«"‹)÷ders °dONLNd¡#l/,(,l'menu command that toggles with Hide BorT¿°dONLNdË#,/„)¿+ders to display or hide all publishers and °dONLNd0l<´(9lsubscriber borZ°dONLNd!0´<)?ders within documents. E@°dONLNd80<)kY¿°dONLNd90<ó)ou may also support a Stop †°dONLNdT0ó<Í){All Editions menu °dONLNdf=lI∞(Flcommand to pry‡°dONLNds=∞IŸ)DCovide a method for temporarily suspending all update activity in a °dONLNd∂JlVÛ(SlSdocument. When the user chooses this command, you should place a checkmark next to °dONLNd    Wlcw*it. } °dONLNdWwc}) Y=†°dONLNdW}c)%ou should also stop all publishers fr. °dONLNd3WcÌ)û0om sending data to editions and all subscribers °dONLNdcdlps(mlfrò‡°dONLNdedspá)om r'`°dONLNdidàp∑)Beceiving new editions. When the user chooses this command again, rÌ°dONLNd´d∑pÁ(m∑
  2989. emove the °dONLNdµql}7(zl,checkmark and update any subscribers that arO°dONLNd·q8}k)Ãe set up to rÁ¿°dONLNdÓqk}ƒ)3eceive new editions °dONLNd~lä®(álautomaticallyÚ °dONLNd~ßä©);.
  2990. -jΩ¯òÄ0urHHM2@ˇˇˇˇˇˇur0/#
  2991. ˆ¸ˇ¿„
  2992. ˆ¸ˇ¿„
  2993. ˆ¸ˇ¿„
  2994. ˆ¸ˇ¿„ ˆˇÉÛ9ˇ¿„ ˆˇüÛ˘ˇ¿„ ˆˇüÉ0ˇ¿„ ˆˇü39ˇ¿„ ˆˇá39ˇ¿„ ˆˇü39ˇ¿„ ˆˇü39ˇ¿„ ˆˇü39ˇ¿„ ˆˇÉÉ<ˇ¿„
  2995. ˆ¸ˇ¿„
  2996. ˆ¸ˇ¿„
  2997. ˆ¸ˇ¿„
  2998. ˆ¸ˇ¿„
  2999. ˆ¸ˇ¿„
  3000. ˆÔˇ‡
  3001. ˆÔ 
  3002. ˆÔ0
  3003. ˆÔ0ˆò˜ c0ˆò˜ê00ˆô¯¯ê00ˆ˛ôò¯‡`0ˆ˛ôò¯Ä¿0ˆ˛ôò¯·Ä0ˆ˛ôò¯ì0ˆ˛ôò¯ì0ˆÒò¯¯ c0
  3004. ˆÔ0
  3005. ˆÔ0
  3006. ˆÔ0
  3007. ˆÔ0
  3008. ˆÔ0
  3009. ˆÔ0
  3010. ˆÔ0
  3011. ˆÔ0
  3012. ˆÔ0
  3013. ˆÔ0
  3014. ˆÔ0
  3015. ˆÔ0
  3016. ˆÔ™∞
  3017. ˆÔ0
  3018. ˆÔ0
  3019. ˆÔ0
  3020. ˆÔ0
  3021. ˆÔ0
  3022. ˆÔ0
  3023. ˆÔ0
  3024. ˆÔ0
  3025. ˆÔ0
  3026. ˆÔ0ˆ¿˜ c00ˆ࿘ì00ˆÅô‡˜ì00ˆÅò¿˜„00ˆÅò¿˜Ň0ˆÅò¿˜„00ˆÅò¿˜ì00ˆâò¿˜ì00ˆ¯`˜ c00
  3027. ˆÔ0
  3028. ˆÔ0
  3029. ˆÔ0
  3030. ˆÔ0
  3031. ˆÔ0
  3032. ˆÔ0
  3033. ˆÔ0ˆı a‡0ˆàıì0ˆÄÒÒò¯ì0ˆÅôôò¯„0ˆÅôôò¯É0ˆÅôôò¯„0ˆÅôôò¯ì0ˆâôôò¯ì0ˆÒ¯¯ a‡0ˆ˛Äı0ˆ˛Åı0ˆ¸ı0
  3034. ˆÔ0
  3035. ˆÔ0
  3036. ˆÔ0
  3037. ˆÔ0ˆį c00ˆòįì00ˆò„«Ä˘ì00ˆôëå¿˘„00ˆ˘¡å¿˘É00ˆÅò·è¿˘„00ˆÅòqå¯ì00ˆÅô1å@˘ì 0ˆį‡«Ä˘ c¿0
  3038. ˆÔ0
  3039. ˆÔ0
  3040. ˆÔ0
  3041. ˆÔ0
  3042. ˆÔ0
  3043. ˆÔ0
  3044. ˆÔ0ˆ
  3045. ‡0ĸ a‡0ˆ
  3046. ê0ôĸì00ˆ
  3047. Å„xôĸì00ˆ
  3048. √3320ôĸ„00ˆ
  3049. „3300ôĸÉ0ˆ
  3050. sÛ?00ôĸ„00ˆ3˛0ôĸì00ˆ
  3051. 3120ôĸì00ˆ
  3052. ·„ôĸ c00
  3053. ˆÔ0
  3054. ˆÔ0
  3055. ˆÔ0
  3056. ˆÔ0
  3057. ˆÔ0
  3058. ˆÔ0
  3059. ˆÔ0
  3060. ˆÔ0
  3061. ˆÔ0
  3062. ˆÔ0
  3063. ˆÔ0
  3064. ˆÔ0
  3065. ˆÔ™∞
  3066. ˆÔ0
  3067. ˆÔ0
  3068. ˆÔ0
  3069. ˆÔ0
  3070. ˆÔ0
  3071. ˆÔ0
  3072. ˆÔ0
  3073. ˆÔ0
  3074. ˆÔ0
  3075. ˆÔ0ˆÅò¸0ˆàòÅĸ0ˆÅ≥√«èôôÒò„·„`0ˆÅΔdcÅ˝ôì33Ä0ˆ    ÅÜc„ÅÒ˛ô√33˛0ˆÅáÊcÅÅôôò„3Û˛0ˆÅÜcÅôôòs3˛0ˆ    âÜ&cÅÅ˛ô33 Ã0ˆÒÉ√·èĢÒò„1„ Ã0
  3076. ˆÔ0
  3077. ˆÔ0
  3078. ˆÔ0
  3079. ˆÔ0
  3080. ˆÔ0
  3081. ˆÔ0
  3082. ˆÔ0ˆ‡˛3~˙0ˆê˛˙0ˆ É3·√ç≥·‡x˚0ˆ √33&N330Ã˚0ˆ „33Ü 330Ã˚0ˆ s31Δ 33Ã˚0ˆ 330Ê 33Ã˚0ˆ332fL33Ãÿ˝0ˆ·Û·√å3·‡xÿ˝0
  3083. ˆÔ0
  3084. ˆÔ0
  3085. ˆÔ0
  3086. ˆÔ0
  3087. ˆÔ0
  3088. ˆÔ0
  3089. ˆÔ0ˆÅò˛xc¸0ˆòÅIJÃ`¸0ˆôôÒò„·„`ïÛ>0ˆ˝ô ì33ÄÃÃc3320ˆÒ˛ô √33ÃÃc3380ˆÅôôò„3ÛÃÃc330ˆÅôôòs3ÃÃc330ˆÅ˛ô 33ÃÃc33&f`0ˆĢÒò„1„x¯33f`0ˆˆ¿˚0ˆˆ¿˚0
  3090. ˆÔ0
  3091. ˆÔ0
  3092. ˆÔ0
  3093. ˆÔ0
  3094. ˆÔ0
  3095. ˆÔ0
  3096. ˆÔ0
  3097. ˆÔ0
  3098. ˆÔ0
  3099. ˆÔ0
  3100. ˆÔ™∞
  3101. ˆÔ0
  3102. ˆÔ0
  3103. ˆÔ0
  3104. ˆÔ0
  3105. ˆÔ0
  3106. ˆÔ0
  3107. ˆÔ0
  3108. ˆÔ0
  3109. ˆÔ0
  3110. ˆÔ0ˆ„˛„0˝¿˛0ˆì˛˝¿˛0ˆÉ·„33„··„g¿˛0ˆ√˛3˛323å¿˛0ˆ„˛3˛31Û ¿˛0ˆs˛3¸3 ¿˛0ˆ˝3¸3 ¿˛0ˆ˛32¸3 ¿˛0ˆ„1„¸„3„··Û¿˛0ˆ˘¯0ˆ˘¯0
  3111. ˆÔ0
  3112. ˆÔ0
  3113. ˆÔˇ
  3114. ıˇ——————————————————————————————————————————————————————————————————————————————————%¸¯¿|ê˛
  3115. ¿¸    DÄĈÄà‡J˚$ÄÑ "˝
  3116. "@Ä@¡ÄˆÄàB˚1/ÄÇ"§V`@Äita`¡ú,ph≈É YñcÖÜú    `Î Kã0¬ƒ@1/ÄÇ"dXêÄÄôDëꢢ2àô&ífYîFI¢    êåí  …#$@1/¸Ç¿"î$QÄ˝    E    ¢Ü"
  3117. !DQƒP†    à°ËJä$@1/ÄLJ'"$Q¯‡ÄÅ    E    îö"i Ù!DQDPú    àøJãÚ$@1/ÄÇ "$QÅ    E    î¢"â
  3118. !DQDPÇ    à†Jä$@1/ÄÑ "d–ê ÄôDëà¶"òô$íDQƒI¢    àí â"$¿1/¸¯¿£P`>¸i4aàô"dhƒ DQ$Fú    hå„Iàà¬#@
  3119. ¯ ÚÎ ˘@ÚêÎ ˘ÄÚ`Η——————————————————————
  3120. ¯ Çÿ
  3121. IJΔÿ ÄÛa≈Ä™8∞·„ãÄfi Å"&@íD…$L› Ò"$@Ç<àÚ$H› Å"$@ÇDâ'»› Å"$@ÇDâ$› Å"$@ÇDâ$H› ¯Ò!ƒ@Ç<àÒ„à›˜ ‹¯ ‹¯¿‹————)ƒ  ÇÄ˝0Ä@¸˙&ƒ˛ Δ˛˝˙˘.*§qa„Ä™8qã8q`8qsèá8√ã‚ÃYàñ0·«q`¸.*§â""$@íDàåàDâêâÑHëàëDLÅ2fHô"âê¸.*îà™ "$@Ç<ÄààDÅâ»ëàDHÅ"DHë‚â¸.*"'¿ÇDÄààDq˘HëàDHÅ"DHë"â¸.*åÄD"$ÇDÄààD    ÅHëàDHÅ"DHë"â¸.
  3122. åàD""$@ÇD˛àDââHëàëDHÅ    "DIë"â¸.*ÑpD!„ÄÇ<pàÜ8q qœá CàÄ‚"DFë··àq¸ Ò¸È Ò¸È—————Ä˝ÄflÄ˝Äfl(xá‚Ãxâ√ãÄa¿·(DààÅ2DàÑLí ·DDààÅ"DàÑH‡DDàèÅ"Dàệ˛Dàà"DàчÇDààÅ    "DòÑH ·Çxá‚"xhcà¿·@ĸ@˛·@ĸ@˛ fiˇC¨@ˇ ˇˇˇˇ@
  3123. ˇ·ˇ‚7^
  3124. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡ä5Introduction to Publishers, Subscribers, and Editions
  3125. , (‡2-11
  3126. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  3127. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  3128. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  3129. 4€4—?òÄ
  3130. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  3131. ˛ˇˇˇ
  3132. ˛ˇˇˇ
  3133. ˛ˇˇˇ
  3134. ˛ˇˇˇ˜˝˛ˇ˛
  3135. ˛ˇ˛ˇˇ
  3136. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  3137. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  3138. ˛ˇ˛ˇˇ
  3139. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  3140. ˛ˇˇˇˇ
  3141. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  3142. ˛ˇˇˇˇ
  3143. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  3144. ˛ˇˇˇˇ
  3145. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\äh¨(eäIf you fiJ‡°dONLNd    \≠h‹)#Fnd that you need all of the available space in the Edit menu for your °dONLNdOiäu,(rä"application’s commands, you may cr °dONLNdqi-uc)£eate a hierar'¿°dONLNd~icu)6$chical menu for the Edition Manager °dONLNd¢väÇu(ä2menu commands. If you choose to implement this strê@°dONLNd‘vuÇå)Îuctur °dONLNdŸvçÇ )e, you should allow users to °dONLNdˆÉäèa(åä,access the Edition Manager menu commands thr´¿°dONLNd"Éaè
  3146. )◊"ough a Publishing menu command in °dONLNdDêäú-(ôä$the Edit menu. Because this menu str&`°dONLNdhê.úE)§uctur¨@°dONLNdmêEú¸),e is not as accessible to users, you should °dONLNdôùä©h(¶ä3implement it only if you have no other alternative.°dONLNdÕØ䪢*FigurR¿°dONLNd“Ø¢ª∂)e 2-8@°dONLNd◊Ø∂ª∞)4 shows the Edition Manager menu commands in a hierar´¿°dONLNd رªÙ)˚chical menu strÄ°dONLNdØıª )Ducturà`°dONLNdØ ª)e.
  3147. ›HÓ4fiHÓ"fiH]
  3148. ˇ·ˇ‚7^    °dONLNd#”äfi¥(€ä
  3149. Figure 2-8°dONLNd.”Ãfi”)B:Edition Manager commands under the Publishing menu command
  3150. °dONLNdjÄäå˛(âäRFor each publisher or subscriber within an open document, you must have a section °dONLNdºçäôç*rE°dONLNdΩçéô†)ecorπ`°dONLNd¡ç†ô„)d and an alias rf`°dONLNd—ç‰ôˆ)Decor⁄¿°dONLNd’çˆô9)d. The section r_¿°dONLNdÂç:ôL)Decor‘ °dONLNdÈçLôœ)d contains a time stamp that r °dONLNdç–ô‚)ÑecorçÄ°dONLNd ç‚ôˇ)ds the °dONLNdö䶈(£äversion of the data that rÓ¿°dONLNd,öˆ¶ã)l$esides in the section. The section ri°dONLNdPöå¶û)ñecor›`°dONLNdTöû¶⁄)d also identifij†°dONLNdcö€¶ˆ)=es the °dONLNdjßä≥@(∞ä+section as either a publisher or subscriberñ`°dONLNdïß@≥)∂0, and it establishes a unique identity for each °dONLNd≈¥ä¿(Ωäpublisher or subscriberÓ‡°dONLNd‹¥Ô¿,)e. The section rX °dONLNdÎ¥-¿?)>ecorÃÄ°dONLNdÔ¥?¿^)d does Ä °dONLNdˆ¥_¿l) not”`°dONLNd˘¥l¿ )& contain the data within the section. °dONLNd¡äÕ∑( ä The alias rÄ°dONLNd*¡∏Õ ).ecorLJ°dONLNd.¡ ÕÁ)d is a r    °dONLNd6¡ËÕ¯)eferµ °dONLNd:¡¯Õ~) ence to the edition container frg°dONLNdZ¡Õ
  3151. )áom the document that contains °dONLNdxŒä⁄¨(◊äthe corrz¿°dONLNdÄŒ¨⁄g)"*esponding publisher or subscriber section.°dONLNd´‡äÏû(ÈäTher¿°dONLNd؇üÏØ)e ar`°dONLNd≥‡ØÏ)Oe special options associated with publishers and subscribers within documents. °dONLNdÌä˘ê(ˆäY@Ä°dONLNdÌê˘·)Lour application can use the publisher and subscriber options dialog boxes prœÄ°dONLNdOÌ·˘(ˆ·
  3152. ovided by °dONLNdY˙ä¢(ä?the Edition Manager to make these choices available to the userË¿°dONLNdò˙°(°. For example, a user can °dONLNd≤ä    (äVselect Open Publisher within the subscriber options dialog box to access the document °dONLNdä ˆ*containing the publisher»`°dONLNd ı ˙)k. ö¿°dONLNd"˙ )Y[@°dONLNd# )?our application can also allow a user to cancel subscribers or °dONLNdb!ä-∞(*äApublishers within documents, specify when to update an edition fr`°dONLNd£!±-Û(*±om a publisherø¿°dONLNd±!Ú-)A, or °dONLNd∂.ä:Ã(7äHspecify when to update a subscriber with a new edition. These options ar∫†°dONLNd˛.Ã:¯(7Ã
  3153. e describe√ °dONLNd.¯: ),d in °dONLNd;äGú(Dä;“Using Publisher and Subscriber Options” beginning on page k`°dONLNdH;ùGØ(Dù2-43ø@°dONLNdL;ØG±).
  3154. ÌàhòÄDnHHM2@ˇˇˇˇˇˇn8fiî
  3155. Ú˝ˇ˛“
  3156. Ú˝ˇ˛“
  3157. Ú˝ˇ˛“
  3158. Ú˝ˇ˛“ Ú˛ÃÁ˛“ Ú˛œÁ˛“ Ú˛~ √˛“ Ú˛|ÃÁ˛“ Ú˛ÃÁ˛“ Ú˛|ÃÁ˛“ Ú˛|ÃÁ˛“ Ú˛|ÃÁ˛“ Ú˛ Û˛“
  3159. Ú˝ˇ˛“
  3160. Ú˝ˇ˛“
  3161. Ú˝ˇ˛“
  3162. Ú˝ˇ˛“
  3163. Ú˝ˇ˛“
  3164. Úڡě
  3165. ÚÚÄ›
  3166. ÚÚÄ›
  3167. ÚÚ¿›Ú00˙1è¿¿›Ú00˙J@¿¿›Ú3·Ò‡˚J@¿¿›Ú˛30˚?ÅÄ¿›Ú˛30˚
  3168. ¿›Ú˛30˚?Ü¿›Ú˛30˚JL¿›Ú˛30˚JL¿›Ú„1Ò‡˚1è¿¿›
  3169. ÚÚ¿›
  3170. ÚÚ¿›
  3171. ÚÚ¿›
  3172. ÚÚ¿›
  3173. ÚÚ¿›
  3174. ÚÚ¿›
  3175. ÚÚ¿›
  3176. ÚÚ¿›
  3177. ÚÚ¿›
  3178. ÚÚ¿›
  3179. ÚÚ¿›
  3180. ÚÚ¿›
  3181. ÚÚU¿›
  3182. ÚÚ¿›
  3183. ÚÚ¿›
  3184. ÚÚ¿›
  3185. ÚÚ¿›
  3186. ÚÚ¿›
  3187. ÚÚ¿›
  3188. ÚÚ¿›
  3189. ÚÚ¿›
  3190. ÚÚ¿›
  3191. ÚÚ¿›Ú‡Ä˙1å¿¿›ÚÄ˙JL¿¿›Ú3¿˙JL¿¿›Ú1Ä˙?å¿¿›Ú1Ä˙
  3192. Ä¿›Ú1Ä˙?å¿¿›Ú1Ä˙JL¿¿›Ú1Ä˙JL¿¿›Ú·¿˙1å¿¿›
  3193. ÚÚ¿›
  3194. ÚÚ¿›
  3195. ÚÚ¿›
  3196. ÚÚ¿›
  3197. ÚÚ¿›
  3198. ÚÚ¿›
  3199. ÚÚ¿›Ú‡¯1áÄ¿›Ú¯JL@¿›Ú„„0˚JL¿›Ú330˚?å¿›Ú330˚
  3200. ¿›Ú330˚?å¿›Ú330˚JL¿›Ú330˚JL@¿›Ú·„·˚1áÄ¿›Ú˛0¯¿›Ú˛0¯¿›Ú˝‡¯¿›
  3201. ÚÚ¿›
  3202. ÚÚ¿›
  3203. ÚÚ¿›
  3204. ÚÚ¿›Ú‡˙1å¿¿›Ú0˙JL¿¿›Ú1·«è˚JL¿¿›Ú23#ĸ?å¿¿›Ú·ÛÉĸ
  3205. ¿¿›Ú1√ĸ?å¿¿›Ú0„˚JL¿¿›Ú2cĸJLÄ¿›ÚÒ¡è˚1è¿›
  3206. ÚÚ¿›
  3207. ÚÚ¿›
  3208. ÚÚ¿›
  3209. ÚÚ¿›
  3210. ÚÚ¿›
  3211. ÚÚ¿›
  3212. ÚÚ¿›Ú    ¿`3˛1áÄ¿›Ú     `33˛JL¿¿›Ú    Δ<833˛JL¿¿›Ú    Üffd`33˛?å¿¿›Ú    Δff``?3˛
  3213. ¿¿›Ú    ÁÊ~``33˛?å¿¿›Úf˛`33˛JL¿¿›Ú    f&bd`33˛JL¿¿›Ú    √Δ<8033˛1å¿¿›
  3214. ÚÚ¿›
  3215. ÚÚ¿›
  3216. ÚÚ¿›
  3217. ÚÚ¿›
  3218. ÚÚ¿›
  3219. ÚÚ¿›
  3220. ÚÚ¿›
  3221. ÚÚ¿›
  3222. ÚÚ¿›
  3223. ÚÚ¿›
  3224. ÚÚ¿›
  3225. ÚÚ¿›
  3226. ÚÚU¿›
  3227. ÚÚ¿›
  3228. ÚÚ¿›
  3229. ÚÚ¿›
  3230. ÚÚ¿›
  3231. ÚÚ¿›
  3232. ÚÚ¿›ÚÛˇ˛ÓÚÛˇÓÚÛˇÓÚÙˇflÓ$Úˇ¸¸¸œ˘˘¸ˇœ˛0Ä0˝Ó#Úˇ¸œ¸¸ˇ˘˚ˇ«Ä0Ä0˝Ó'Ú
  3233. ˇ¸ÃÃŒ89É¡˛ˇ√<<xôüé>6Ó$Úˇ¸˝ÃŸ˛ô˛ˇ    ¡fF1ò˝ô338Ó&Úˇ¸˛Ãy˛ô˛ˇ¿f>1òôôú330Ó&Úˇ¸¸ÃÃŒ9˛ô˛ˇ¡~f1¯ôôé3?0Ó&Úˇ¸¸ÃÃœ˛ô˛ˇ√`f1Äôôá300Ó%Úˇ¸¸ÃÃÕ˝ô˛ˇ«òbf1àôôì310ÿÓ'Ú
  3234. ˇ¸˛ Œ9ôô¡˛ˇœ<>üé30ÿÓÚ¯ˇ˘˛ˇflÓÚ¯ˇπ˝ˇÓÚ¯ˇ√˝ˇÓÚÛˇÓÚÛÓÚÛÓÚÛÓÚÛ 00‡˚ÓÚÛ0˛0Ä˚ÓÚÛ 3>8€>áĸÓÚÛ 332d„33忸ÓÚÛ 338`√33忸ÓÚÛU P33`√3?忸ÓÚÛ 33`√30忸ÓÚÛ33&d√31åÃÃ˝ÓÚÛ>8√>áåÃ˝ÓÚÛÓÚÛÓÚÛÓÚÛÓÚÛÓÚÛÓÚÛÓ&ÚΔ˛Δ`˛êÄ0Ä0˝Ó%Ú&˛&˛êÄ0 ¿¸Ó'Ú!√Δfg«√√Δœêôüé>6 œè1„·¿Ó&Úܲf˛fdgê˝ô338 ÃΔ˛3 Ó'ÚΔ˛f˛fcÊêôôú330 ÃΔ˛3ÄÓ%ÚÊ˛f¸fêôôé3?0 ÃΔ331¿Ó$Ú˝f¸fêôôá300 ÃΔ330‡Ó%Ú˛fd&¸fêôôì310 ÃΔ332ffÓ'Ú!Δc«¯Δg«√√Êêüé30èÉ1„1ΔfÓÚ˘¸˜ ˚ÓÚ˘¸˜ ˚ÓÚÛÓÚÛÓÚ‡ˇÓÒ‡ˇÓΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩ2~|‡˛¯Ä˛
  3235. ‡D Äı˛ B¯Ù0@B"˛Ä˝
  3236. !@ ı˛
  3237. BÑÛE@A"˛:Åáë.p!Ãqá8∞·„ãÅ√ã1fXx‡"Xx‚‡‚√ÄÑâ·qcòqb 8qf,√ãE@AÄ"˛:Äàë0àD àôäD…$L$L…ô"dâ"dâC$@Ñââë"dâí Dâô3$LëE~A`˛:àë à!ƒD àëä<àÚ$HHâDâ"DâB$@¯âÅ"Dâ @â"#»ëE@Apë"˛:Äàë ¯!D àëRDâ'»Hâ"Dà‡"DâÚB'¿Äâq"D˘ @â"$HëE@A"˛:Äàë Ä!D àëRDâ$Hâ"Dà"DâB$Äâ    "DÅ @â"$HëE@B"˛:Äàì à!D àë"Dâ$H$Hâ"Dâ&DâB$@Äôâ"Dâ`Dâ"$HëE~|‡˛:Äáç p„ƒá"<àÒ„à√àâDx‡Dx‚2#ÄÄi·qDq†8q"#»èˆÄÒ ËÙ˜ÄÚ Ë"Ù˜Ò¿ËÙΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩΩ
  3238. ¯ Çƒ
  3239. Ä˛Δƒ ÄÛa≈Ä™8∞·„ãÄ  Å"&@íD…$L… Ò"$@Ç<àÚ$H… Å"$@ÇDâ'»… Å"$@ÇDâ$… Å"$@ÇDâ$H… ¯Ò!ƒ@Ç<àÒ„à…˜ »¯ »¯¿»ΩΩΩΩ)ƒ  ÇÄ˝0Ä@¸Ê&ƒ˛ Δ˛˝˙Â.*§qa„Ä™8qã8q`8qsèá8√ã‚ÃYàñ0·«q`Ë.*§â""$@íDàåàDâêâÑHëàëDLÅ2fHô"âêË.*îà™ "$@Ç<ÄààDÅâ»ëàDHÅ"DHë‚âË.*"'¿ÇDÄààDq˘HëàDHÅ"DHë"âË.*åÄD"$ÇDÄààD    ÅHëàDHÅ"DHë"âË.
  3240. åàD""$@ÇD˛àDââHëàëDHÅ    "DIë"âË.*ÑpD!„ÄÇ<pàÜ8q qœá CàÄ‚"DFë··àqË Ò¸’ Ò¸’ΩΩΩΩΩÄ˝ÄÀÄ˝ÄÀ(xá‚Ãxâ√ãÄa¿Õ(DààÅ2DàÑLí ÕDDààÅ"DàÑHÃDDàèÅ"Dàá»Ã˛Dàà"DàÑÃÇDààÅ    "DòÑH ÕÇxá‚"xhcà¿Õ@ĸ@˛Õ@ĸ@˛  ˇÏ@ˇ ˇˇˇˇ@
  3241. ˇ·ˇ‚7^
  3242. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  3243. (‡*2-12    )BAbout the Edition Manager4^*¿¯
  3244. ^*x¯4^*x¯
  3245. à*ê¯4â*ꯠä*ä˛
  3246. ˇ·ˇ‚7^ˇˇ©ˇÆ°dONLNdu*à(É*About the Edition ManagerˇˇˇˇˇˇV˛(É2
  3247. °dONLNdôl•:(¢l/The next section discusses how to save, open, r=†°dONLNdJô;•⁄)œ#ead, and write a document that shar±†°dONLNdmô⁄•Â)ües °dONLNdp¶l≤(Øl&data. In addition, it describes how to,Zapf Dingbats°dONLNdóºl√q*n
  3248. °dONLNdôπx≈1) *make data accessible to other applications°dONLNdƒŒl’q(‘ln
  3249. °dONLNdΔÀx◊È) integrate data into numer^`°dONLNdflÀÈ◊,)qous documents°dONLNḋlÁq(Êln
  3250. °dONLNdÔ›xÈ…) set update options°dONLNdÚl˘q(¯ln
  3251. °dONLNdÔx˚π) implement bor‰°dONLNdÔπ˚Ã)Aders°dONLNdl q(
  3252. ln
  3253. °dONLNdx≠) modify shar°dONLNd#ÆŒ)6ed data°dONLNd+lq(ln
  3254. °dONLNd-x⁄) customize dialog boxeR¿°dONLNdB€fl)cs°dONLNdD(l/q(.ln
  3255. °dONLNdF%x1 ) "subscribe to data in non-edition fi-@°dONLNdi%1)ïles
  3256. 7*R¯48*R¯
  3257. b*j¯4c*j¯ d*d˛
  3258. ˇ·ˇ‚7^ˇˇ©ˇÆ°dONLNdnO*bK(]*Usini(°dONLNdrOLbg)"g th2°dONLNdvOhbÌ)e Edition ManagerˇˇˇˇˇˇV˛(]2
  3259. °dONLNdâsl?(|l/This section describes how your application can°dONLNdπâlêq*n
  3260. °dONLNdªÜxí{) rE°dONLNdºÜ|íô)eceive ¬`°dONLNd√Üôí›)Apple events fr„°dONLNd“Ü›íH)Dom the Edition Manager°dONLNdÈõl¢q(°ln
  3261. °dONLNdÎòx§¬) set up a section r¿°dONLNd˝ò¬§‘)JecorÙ °dONLNdò‘§
  3262. )d and alias rO¿°dONLNdò §)7ecorƒ °dONLNdò§’)(d for open documents containing sections°dONLNd;≠l¥q(≥ln
  3263. °dONLNd=™x∂#) &save a document that contains sections°dONLNddølΔq(≈ln
  3264. °dONLNdfºx»%) &open a document that contains sections°dONLNdç—lÿq(◊ln
  3265. °dONLNdèŒx⁄{) rE°dONLNdêŒ|⁄fi)ead and write sections°dONLNdß„lÍq(Èln
  3266. °dONLNd©‡xÏÄ) crµ@°dONLNd´‡ÄÏ))&eate a publisher within a document, cr3@°dONLNd—‡*Ïñ)™eate its edition container‚ °dONLNd·ïÏÓ)k, and write data to it°dONLNdıl¸q(˚ln
  3267. °dONLNdÚx˛Ä) crµ@°dONLNdÚIJ9))eate a subscriber within a document and r¿°dONLNd/Ú:˛v)∫ead its data fr_‡°dONLNd>Úv˛≥)<om an edition°dONLNdLlr( lTµ¿°dONLNdMq∞)Fo begin, you must determine whether the Edition Manager is available ou`°dONLNdì±Õ( ±n the sa °dONLNdöŒÎ)ystem .°dONLNd†l§(lby using the ,
  3268. Courier°dONLNd≠§Œ)8Gestalt°dONLNd¥Œ!)* function with the °dONLNd«!ü)SgestaltEditionMgrAttr°dONLNd‹ü•)~ (°dONLNdfi•…)'edtn'°dONLNd‰…Ú)$
  3269. ) selector¬†°dONLNdÓÒˆ)(. °dONLNdl)à(&lIf the °dONLNd˜à)∏)response°dONLNdˇ∏))0  parameter rR`°dONLNd )R)8eturns 1 in the bit defiR`°dONLNd#R)É)b ned by the °dONLNd.*l6¸(3lgestaltEditionMgrPresent°dONLNdF*¸6∫)ê, constant (bit 0), the Edition Manager is prR`°dONLNdr*∫6‘)æesent.°dONLNdy<lHÍ(ElIf the Edition Manager is prR`°dONLNdï<ÍHå)~%esent, load it into memory using the R`°dONLNd∫<åHÊ)¢InitEditionPackR`°dONLNd…<ÊHË)Z .°dONLNd IlUÙ(RlVfunction. This function determines whether the machine has enough space in the system °dONLNd Vlb*(heap for the Edition Manager to operate..°dONLNdImlyˆ*err := InitEditionPack;°dONLNdaÖlëà*If the °dONLNdhÖàë‚)InitEditionPack°dONLNdwÖ‚ë)Z  function rR`°dONLNdÇÖë+),eturns R`°dONLNdâÖ+ëI)noErrï°dONLNdéÖHëÍ)$, you have enough space to load the .°dONLNd≤ílûÌ(õlYpackage. If you do not have enough space, the application can either terminate itself or °dONLNd ül´l*9continue with the Edition Manager functionality disabled.ˇ:@ˇ ˇˇˇˇ@
  3270. ˇ·ˇ‚7^
  3271. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äUsing the Edition Manager
  3272. , (‡2-13
  3273. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  3274. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  3275. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  3276. 4€4—?òÄ
  3277. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  3278. ˛ˇˇˇ
  3279. ˛ˇˇˇ
  3280. ˛ˇˇˇ
  3281. ˛ˇˇˇ˜˝˛ˇ˛
  3282. ˛ˇ˛ˇˇ
  3283. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  3284. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  3285. ˛ˇ˛ˇˇ
  3286. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  3287. ˛ˇˇˇˇ
  3288. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  3289. ˛ˇˇˇˇ
  3290. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  3291. ˛ˇˇˇˇ
  3292. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  3293. kHr4lHr mäm
  3294. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd\äk…(gä
  3295. Receiving ¨L°dONLNd
  3296. \…kª)?%Apple Events From the Edition Managerˇˇˇˇˇˇ€r(g2
  3297. °dONLNd1rä~Ü({ä7Applications that use the Edition Manager must support 釰dONLNdhrÜ~fl)¸Apple events. This rs °dONLNd|rfl~ˆ)Yequirä`°dONLNdÅrˆ~)es that °dONLNdâäã(àäyour application support the r Ä°dONLNdßã&)Öequir·¿°dONLNd¨&ã±)ed Open Documents event and 4†°dONLNd»≤ã)åApple events sent by °dONLNd›åäòÂ(ïäthe Edition Manager√Ä°dONLNdå‰òÛ)Z. SeÇ°dONLNdÙåÛò˙)e Ä°dONLNdˆå˚ò)the c‰ °dONLNd˚åò')hapte√†°dONLNdå(òC)r “IntrmÄ°dONLNdåDòy) oduction to A@°dONLNdåyòø)5Apple Events” iÉÄ°dONLNd"åøò”)Fn thi—°dONLNd'å”òı)s book fc†°dONLNd/åˆò)#or °dONLNd2ôä•≠(¢ägeneral Œ¿°dONLNd:ô≠•È)#information o†°dONLNdGôÍ•Ú)=n r†°dONLNdIôÚ•˘)A9‡°dONLNdJô˙•/) pple events.°dONLNdW´ä∑“(¥äJApple events sent by the Edition Manager arrive as high-level events. The ,
  3298. Courier.°dONLNd°∏äƒÃ* EventRecord°dONLNd¨∏à )B data type defPÄ°dONLNd∫∏ ƒQ)@ines the event r"‡°dONLNd ∏Qƒc)Eecorı@°dONLNdŒ∏bƒk)d.°dONLNd—œä€ˆ(ÿäTYPE EventRecord =°dONLNd›úÈ¿+RECORD°dONLNdÓÎƘÃ+what:°dONLNd˜Îˆ˜&)HInteger;°dONLNdÎ>˜§)H{kHighLevelEvent}°dONLNd˘Æfi(Æmessage:°dONLNd#˘ˆ&)HLongInt;°dONLNd/˘>D)H{°dONLNd0˘Dh)'sect'°dONLNd6˘hn)$}°dONLNd:ÆÃ(Æwhen:°dONLNdCˆ&)HLongInt;°dONLNdNÆ!“(Æwhere:°dONLNdXˆ!)HPoint;°dONLNdb>!D)H{°dONLNdcD!h)'read'°dONLNdih!t)$, °dONLNdkt!ò) 'writ'°dONLNdqò!§)$, °dONLNds§!») 'cncl'°dONLNdy»!‘)$, °dONLNd{‘!¯) 'scrl'°dONLNdů!˛)$}°dONLNdÖ#Æ/¥(,Æm°dONLNdÜ#¥/Í)    odifiers:°dONLNdì#ˆ/&)BInteger;°dONLNdù1ú=¥(:úEND;.°dONLNd¢IäU(RäThe Edition Manager can send tW°dONLNd¿IU-)çhese @°dONLNd≈I-U4)A·Ä°dONLNdΔI4Uf) pple events¢°dONLNd—IgU
  3299. )3& with the event class and event ID as .°dONLNd˜Väbπ(_ä    shown herR`°dONLNdVπb¡)/e:,Zapf Dingbats.°dONLNdläsè(rän
  3300. .°dONLNdiñuˆ) Section Read events (°dONLNdiˆuD)`'sect' 'read'°dONLNd'iDuH)N).°dONLNd)~äÖè(Ñän
  3301. .°dONLNd+{ñáƒ)     Section W¬†°dONLNd4{√á˘)-rite events (¬†°dONLNdA{˘áG)6'sect' 'writ'¬†°dONLNdN{GáK)N).°dONLNdPêäóè(ñän
  3302. .°dONLNdRçñô˝) Section Cancel events (°dONLNdiç˝ôK)g'sect' 'cncl'°dONLNdvçKôO)N).°dONLNdx¢ä©è(®än
  3303. .°dONLNdzüñ´«) Section ScrR`°dONLNdÖü«´˘)1 oll events (R`°dONLNdëü˘´G)2'sect' 'scrl'R`°dONLNdûüG´K)N).°dONLNd†∞äº (πäEach time your application crê@°dONLNdΩ∞ ºô)Ç!eates a publisher or a subscriberë¿°dONLNdfi∞ôº˚)ç, the Edition Manager °dONLNdÙΩä…ç(ΔärE°dONLNdıΩé…)Xegisters its section. When an edition is updated, the Edition Manager scans its list to °dONLNdM ä÷™(”älocate rü °dONLNdU ™÷«) egisterÓ@°dONLNd\ «÷7)ed subscribers. For each r°dONLNdv 7÷T)pegister? °dONLNd} U÷‹)!ed subscriber that is set up to rá°dONLNdû ‹÷˘)áeceive °dONLNd•◊ä„(‡äupdated editions automaticallyª@°dONLNd√◊„g)â, your application r5Ä°dONLNd◊◊h„Á)Ueceives a Section Read event.°dONLNdıÈäıe(Úä2If the Edition Manager discovers that an edition fim@°dONLNd(Èfıæ)‹le is missing while rK†°dONLNd=ÈæıÛ)Xegistering a °dONLNdJˆä¥(ˇä    publisherÓ‡°dONLNdSˆ≥…)), it crŒ‡°dONLNdZˆ…&)eates a new edition fi†°dONLNdpˆ'—)^&le and sends the publisher a Section Wß°dONLNdñˆ–˛)© rite event. °dONLNd£äæ(ä
  3304. When you rΩ °dONLNd≠æ≈)4<eceive a Section Cancel event, you need to cancel the specifiœ`°dONLNdÍ≈(≈ed section. Note °dONLNd˚ä!¿(äthat the curr‚Ä°dONLNd¿!)6Hent Edition Manager does not send you Section Cancel events, but you do °dONLNdP"ä.∑(+ä
  3305. need to pr`°dONLNdZ"∑.$)-ovide a handler for futurÒÄ°dONLNds"$.Z)m e expansion.°dONLNdÄ4ä@(=äZIf the user selects a subscriber within a document and then selects Open Publisher in the °dONLNd⁄AäMå*;subscriber options dialog box, the publishing application rg °dONLNdAåM(Jåeceives the Open Documents °dONLNd0NäZÄ(Wä5event and opens the document containing the publisheri¿°dONLNdeNÄZ)ˆ". The publishing application also °dONLNdá[ägç(därE°dONLNdà[égÁ)eceives a Section Scræ°dONLNdù[Ág)Yoll event. ScrFÄ°dONLNd´[ g¥)9$oll to the location of the publisherw`°dONLNdœ[¥g)î, display this section °dONLNdÊhätª(qä on the userb°dONLNdÒhºt“)2’s scrXÄ°dONLNd˜h“t8)een, and turn on its bor(Ä°dONLNdh9tG)gderC °dONLNdhGtI).°dONLNdzäÜî(ÉäSeâ`°dONLNdzîÜõ)
  3306. e ”°dONLNdzõÜÓ)G“Opening and Closing a Document Containing Sections” beginning on page ˘Ä°dONLNd_zÓÜ(ÉÓ2-22M`°dONLNdczÜ) f!@°dONLNdezÜ)or °dONLNdháäì˘(êädetailed information on r• °dONLNdÅá˘ìJ)oegistering and unrı`°dONLNdìáJì)Q,egistering a section and writing data to an °dONLNdøîä†∏(ùä edition. Se»¿°dONLNd î∏†ø).e `°dONLNdÃ“);“Using Publisher and Subscriber Options” beginning on page ˝¿°dONLNd    î“†‰(ù“2-43Q†°dONLNd     î†Í) f%Ä°dONLNd    îΆˆ)or °dONLNd    °ä≠b(™ä0information on publisher and subscriber options.ˇÍ@ˇ ˇˇˇˇ@
  3307. ˇ·ˇ‚7^
  3308. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  3309. (‡*2-14    )BUsing the Edition Manager4^*¿¯
  3310. °dONLNd\lhâ(elAfter rfi¿°dONLNd\âhΩ) eceiving an ,¿°dONLNd\æhs)5'Apple event sent by the Edition Managerl °dONLNd:\shô)µ
  3311. , use the ¯‡°dONLNdD\ôh”)& Apple Event °dONLNdPiluØ(rlKManager to extract the section handle. In addition, you must also call the ,
  3312. Courier.°dONLNdõvlÇfi*IsRegisteredSection°dONLNdÆvfiǨ)r/ function to determine whether the section is rR`°dONLNd›v¨ÇÀ)Œegister$¿°dONLNd‰vÀÇÔ)
  3313. ed. It is .°dONLNdÓÉlèí(ål    possible †°dONLNd˜ÉìèÀ)'(because of a °dONLNdÉÃè")9 race condition) to r*@°dONLNdÉ"èÀ)V(eceive an event for a section that you rp°dONLNdAÉÀèÌ)©ecently °dONLNdIêlúΩ(ôldisposed of or unr™ °dONLNd[êΩú⁄)Qegister˘@°dONLNdbê⁄ú8)ed. One way to ensur†°dONLNdvê9úé)_e that an event corrÛ`°dONLNdäêçúfl)Tesponds to a valid .°dONLNdùùl©»(¶lsection is to call the °dONLNd¥ù»©:)\IsRegisteredSection°dONLNd«ù:©ë)r function after you rR`°dONLNd‹ùë©÷)Weceive an eventR`°dONLNdÎù÷©€)E. R`°dONLNdÌù€©›) °dONLNdÔ¥l¿P(Ωl&err := IsRegisteredSection (sectionH);.°dONLNdÃlÿö* Listing 2-1 @°dONLNd!Ãõÿ)/ illustrates how to use the ~°dONLNd=Ãÿ)s1Apple Event Manager and install an event handler °dONLNdnŸlÂı(‚lto handle Section Read events. Ɇ°dONLNdçŸıÂ˚)âYD °dONLNdéŸ˚®)'ou can write similar code for Section W2 °dONLNdµŸ®Â⁄)≠rite events, °dONLNd¬ÊlÚú(Ôl Section Scr`@°dONLNdÕÊúÚ@)0&oll events, and Section Cancel events.
  3314. *¯4*¯"*_
  3315. ˇ·ˇ‚7^    °dONLNdı lò(l Listing 2-1°dONLNd ∞√)DFAccepting Section Read events and verifying if a section is registered
  3316. .°dONLNdI%l1~(.l{th°dONLNdL%~1Ä)+e following goes in your initialization cod°dONLNdw%Ä1å(.Äe}°dONLNdz3l?x(<lmy°dONLNd|3x?‘) :Err := AEInstallEventHandler(sectionEventMsgClass {'sect'}°dONLNd∂3‘?⁄(<‘,°dONLNd¬A M&(J  °dONLNd√A&M,)s°dONLNdƒA,Mº)ectionReadMsgID {'read'}°dONLNd‹AºM¬)ê,°dONLNdËO [&(X  °dONLNdÈO&[,)@°dONLNdÍO,[Œ)MyHandleSectionReadEvent, 0°dONLNdOŒ[‘)¢,°dONLNd] i&(f  °dONLNd]&i,)F°dONLNd],iP)ALSE);°dONLNdylÖ~(Çl{th°dONLNdy~ÖŒ)8is is the routine the Apple Event Manager calls when a }°dONLNdWálì(êl{ Section Read event arrive°dONLNdráì)¢s}°dONLNdv£lØÜ(¨l/FUNCTION MyHandleSectionReadEvent(theAppleEvent°dONLNd•£ÜØå(¨Ü,°dONLNd≤±2Ω8(∫2 °dONLNd≥±8Ω>)r°dONLNd¥±>Ωû)eply: AppleEvent°dONLNdƒ±ûΩ§)`;°dONLNd—ø2À8(»2 °dONLNd“ø8À>)r°dONLNd”ø>Àí)efCon: LongInt°dONLNd·øíÀû)T):°dONLNd„øûÀ»)  OSErr;°dONLNdÎÕlŸx(÷lVA°dONLNdÌÕxŸ~) R°dONLNd€~Áê+myE°dONLNdÛ€êÁ¢)rr:°dONLNd˙€ΔÁÍ)6OSErr;°dONLNdÈ~ı¥(Ú~    sectionH:°dONLNdÈΔı)HSectionHandle;°dONLNd˜lä(lBEGIN°dONLNd%~ê+{ge°dONLNd(ê∂)1t section handle out of Apple event message buffe°dONLNdY∂¬(∂r}°dONLNd]~ê(~myE°dONLNd`ê¥)rr := °dONLNdf¥¿)$My°dONLNdh¿Ï) 2GetSectionHandleFromEvent(theAppleEvent, sectionH)°dONLNdöÏÚ(Ï;°dONLNdù!~-¢(*~IF myE°dONLNd£!¢-¸)$rr = noErr THEN°dONLNd¥/~;ñ(8~BEGI°dONLNd∏/ñ;ú)N°dONLNdº=êIñ(FêI°dONLNdΩ=ñIÄ)'F IsRegisteredSection(sectionH) = noErr°dONLNd‰=ÄIû)Í THEN°dONLNdÌK¢W∞(T¢-{if section is registered, read the new data}°dONLNdY¢e®*M°dONLNdY®e⁄)3yHandleSectionReadEvent := DoSectionRead(sectionH);°dONLNdTg~sê(p~END°dONLNdWgêsñ) °dONLNdZu~ÅÑ(~~E°dONLNd[uÑÅê)LS°dONLNd]uêÅñ) E°dONLNdaÉêèñ*M°dONLNdbÉñè,)yHandleSectionReadEvent :°dONLNd{É,èJ)ñ= myE°dONLNdÄÉJèV)rr°dONLNdÇÉVè\) ;°dONLNdÑëlùr(ölE°dONLNdÖërù&)ND; {MyHandleSectionReadEvent}ˇ3Z@ˇ ˇˇˇˇ@
  3317. ˇ·ˇ‚7^
  3318. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äUsing the Edition Manager
  3319. , (‡2-15
  3320. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  3321. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  3322. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  3323. 4€4—?òÄ
  3324. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  3325. ˛ˇˇˇ
  3326. ˛ˇˇˇ
  3327. ˛ˇˇˇ
  3328. ˛ˇˇˇ˜˝˛ˇ˛
  3329. ˛ˇ˛ˇˇ
  3330. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  3331. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  3332. ˛ˇ˛ˇˇ
  3333. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  3334. ˛ˇˇˇˇ
  3335. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  3336. ˛ˇˇˇˇ
  3337. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  3338. ˛ˇˇˇˇ
  3339. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿,
  3340. Courier.°dONLNd\äh¥(eä{this r°dONLNd\¥h“)*outin°dONLNd \“h‰)e r°dONLNd\‰hˆ)ead°dONLNd\ˆh¸)s°dONLNd\¸h∞) in subscriber data and update°dONLNd1\∞h∂)¥s°dONLNd2\∂hº) °dONLNd3\ºh) its display}°dONLNd@jäv™(sä0FUNCTION DoSectionRead(subscriber: SectionHandle°dONLNdpj™v∂(s™):°dONLNdrj∂v‡)  OSErr;°dONLNdzxäÑ¢(ÅäBEGI°dONLNd~x¢Ñ®)N°dONLNdÅÜúíÆ(èú{yo°dONLNdÑÜÆí) ur code her°dONLNdèÜí¸)Be}°dONLNdíî䆢(ùäEND;°dONLNdòîƆ)${DoSectionRead}°dONLNd®¨ä∏ú(µä{th°dONLNd´¨ú∏û)+is is part of your Apple event–handling cod°dONLNd÷¨û∏™(µûe}°dONLNdŸ∫äΔ¿(√ä    FUNCTION °dONLNd‚∫¿ΔÃ)6My°dONLNd‰∫ÃΔ) 4GetSectionHandleFromEvent(theAppleEvent: AppleEvent;°dONLNd%»b‘h+ñ °dONLNd&»h‘
  3341. )VAR sectionH: SectionHandle°dONLNdA»
  3342. ‘)¢)°dONLNdO÷b‚h(flb °dONLNdP÷h‚t): °dONLNdR÷t‚ò) OSErr;°dONLNdY‰äú(ÌäVAR°dONLNd^Úú˛fi+ ignoreType:°dONLNdnÚˆ˛,)Z    DescType;°dONLNdyú fi(    ú ignoreSize:°dONLNd∠)ZSize;°dONLNdèä®(äBEGIN°dONLNdñú(Æ+{pa°dONLNdôÆ(ò)'rse section handle out of message buffe°dONLNd¿ò(§)Ír}°dONLNdƒ*ú6®(3úMy°dONLNdΔ*®6>) GetSectionHandleFromEvent°dONLNd‚8ÆDn+ := AEGetParamPtr( theAppleEvent,°dONLNd8ÜDÊ)ÿ{event to parse}°dONLNd'FRz(OkeyDirectObject,°dONLNd=FÜRò)l{lo°dONLNd@FòRÚ)ok for direct }°dONLNd^TÜ`∞(]Ü{ objec°dONLNdeT∞`º)*t}°dONLNdpbnn(ktypeSectionH, °dONLNdÑbÜnò)l{wa°dONLNdábòn
  3343. )nt a SectionHandle}°dONLNd£p|\(y ignoreType,°dONLNd¥pÜ|ò)l{ig°dONLNd∑pò|)nore type it could }°dONLNd⁄~Üäû(áÜ{ ge°dONLNdfi~ûä™)t}°dONLNdÈåò\(ï @sectionH, °dONLNd˙åÜòò)l{pu°dONLNd˝åòò˛)t SectionHandle }°dONLNdöܶ§(£Ü{ her°dONLNd"ö§¶∞)e}°dONLNd-®¥z(±SizeOf(sectionH)°dONLNd=®z¥Ä)`,°dONLNdD®Ü¥å) {°dONLNdE®å¥
  3344. )size of storage for }°dONLNdi∂ܬÊ(øÜ{ SectionHandle}°dONLNdǃ–b(Õ ignoreSize);°dONLNdîƒÜ–ò)l{ig°dONLNdóƒò–˛)nore storage it }°dONLNd∑“Üfi§(€Ü{ use°dONLNdº“§fi∞)d}°dONLNdø‡äÏÆ(ÈäEND; {°dONLNd≈‡ÆÏ∫)$My°dONLNd«‡∫ÏV) GetSectionHandleFromEvent}°dONLNd·‡VÏ\)ú .°dONLNd„¯äC(ä*In addition to the Section Read, Section WÉ °dONLNd¯Cfl)π%rite, Section Cancel, and Section Scr-`°dONLNd2¯‡)ù oll events, °dONLNd>äˇ(äyour application can also r÷¿°dONLNdYˇH)uespond to the Cr3`°dONLNdiIÀ)Jeate Publisher event. For mor¿°dONLNdÜÀ    )Çe information °dONLNdîä´(äBon this event, as well as additional information on how to handle †°dONLNd÷¨ (¨Apple events, see the °dONLNdÏä+ı((ächapter “Responding to ˛ °dONLNdı+q)kApple Events” in this book. 
  3345. PHW4QHW RäR
  3346. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd!AäPT(Lä Creating the Section Record and 1¿°dONLNdAATP°)  Alias Recordˇˇˇˇˇˇ€r)∫2
  3347. °dONLNdOWäcê(`äY@Ä°dONLNdPWêc„)our application is r—°dONLNddW„c+)Sesponsible for crp‡°dONLNduW,cv)Ieating a section rÛ@°dONLNdáWvcà)Jecorg†°dONLNdãWâcÃ)d and an alias r†°dONLNdõWÕcfl)Decorâ°dONLNdüWflc) d for each °dONLNd™däpê(mä9publisher and subscriber section within an open document.°dONLNd‰väǬ*The section rÈ@°dONLNdÒv¬Ç‘)8ecor]†°dONLNdıv’Ç˝)    d identifi–°dONLNdˇv˝ÇŸ)(3es each section as a publisher or subscriber and prg‡°dONLNd2v⁄Ǣ)›ovides °dONLNd9Éäè©(åäidentifiV†°dONLNdAÉ™èI) &cation for each section. The section r—Ä°dONLNdgÉIè[)üecorE‡°dONLNdkÉ\è)'d does not contain the data within the °dONLNdíêäú^(ôä5section; it describes the attributes of the section. †°dONLNd«ê_úe)’YΔ °dONLNd»êdúÃ)our application must pr燰dONLNdflêÕú )iovide its own °dONLNdÌùä©©(¶äCmethod for associating the data within a section with its section rk@°dONLNd0ù©©ª(¶©ecorfl†°dONLNd4ùª©Δ)d. Õ¿°dONLNd7ùΔ©Ã) Yé@°dONLNd8ùé)our application °dONLNdH™ä∂´(≥ä    is also r@°dONLNdQ™¨∂o)".esponsible for saving the data in the section.ˇ`^@ˇ ˇˇˇˇ@
  3348. ˇ·ˇ‚7^
  3349. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  3350. (‡*2-16    )BUsing the Edition Manager4^*¿¯
  3351. .°dONLNd\lhÄ(elThe ,
  3352. Courier°dONLNd\Ähû)alias°dONLNd    \ûhß) fi°dONLNd \ßh˙)    eld of the section rR`°dONLNd \˙h )Secor$¿°dONLNd$\ hù)"d contains a handle to its alias r˜ °dONLNdF\úhÆ)êecor…Ä°dONLNdJ\ÆhÁ)d. The alias .°dONLNdWiluo(rlrE°dONLNdXipuÇ)ecorπ`°dONLNd\iÇuü)d is a r?Ä°dONLNddi†u∞)eferΆ°dONLNdhi∞u6) ence to the edition container frùÄ°dONLNdài7u”)á"om the document that contains the °dONLNd™vlǯ(l!publisher or subscriber section. Á °dONLNdÀv¯Ç˛)åY߆°dONLNdÃv˛ÇÜ)ou should be familiar with the ™`°dONLNdÎvÜÇΔ)àAlias ManagerN¿°dONLNd¯v»Ç—)B’s °dONLNd˚Élèª(ålconventions for cr@°dONLNdɺèÙ)Peating alias r?‡°dONLNdÉÙè)8ecor¥@°dONLNdÉè_)ds and identifying fi|†°dONLNd4É`è€)Zles, folders, and volumes to °dONLNdQêlúé(ôllocate fiʇ°dONLNdZêéú5)"&les that have been moved, copied, or rë`°dONLNdÄê6úK)®estor‡°dONLNdÖêLú`)ed frì °dONLNdäê`úì)
  3353. om backup.l‡°dONLNdîêîúÏ)4 For information on °dONLNd®ùl©|(¶lthe °dONLNd¨ù|©º)Alias Manager®†°dONLNdπùº©—)@, see ¯‡°dONLNdøù—©1)Inside Macintosh: Files.°dONLNdÿØlªw(∏l:When a user saves a document, your application should stor釰dONLNdØwª∞(∏we all section rV¿°dONLNd!رª√):ecorÀ °dONLNd%Ø√ª„)ds and °dONLNd,ºl»Ü(≈lalias r“¿°dONLNd3ºÜ»ò)ecorG °dONLNd7ºô»˚)ds in the document’s r∫@°dONLNdMº˚»)besourÄ°dONLNdRº»K)ce fork. CorrK†°dONLNd_ºK»°)7esponding section r≠`°dONLNdrº°»≥)Vecor!¿°dONLNdvº¥»Í)ds and alias °dONLNdÉ…l’o(“lrE°dONLNdÑ…p’Ç)ecorπ`°dONLNdà…Ç’ı)ds should have the same rflÄ°dONLNd°…ı’)sesour'¿°dONLNd¶…’')ce ID.°dONLNd≠€lÁÑ(‰lFigurR¿°dONLNd≤€ÑÁò)e 2-9@°dONLNd∑€òÁñ)7 shows a document containing a publisher and subscriber≤ °dONLNdÓ€ñÁæ)˛
  3354. , and the °dONLNd¯ËlÙ}(Òlcorr`°dONLNd¸Ë~Ù‘)esponding section r °dONLNdË‘ÙÊ)VecorÛÄ°dONLNdËÊÙ )ds and alias rå °dONLNd!Ë!Ù3);ecorÄ°dONLNd%Ë4Ù>)dsY@°dONLNd'Ë>Ù@)
  3355. .
  3356. *'¯4*'¯"*]
  3357. ˇ·ˇ‚7^    °dONLNd* lñ(l
  3358. Figure 2-9°dONLNd5 Æ¥)BA0°dONLNd6 ¥∞)? document with a publisher and subscriber and its resource fork
  3359. &*Ư4%(&)ò@@˜@˜&)f ¡¡? ˇ¸˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙ò@@Ę@Ęf)¶ ? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙ò@Ä¿˜Ä¿˜¶)Ê ? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙ò@¿˜¿˜Ê)& ? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙ò@@˜@˜&)f ? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙ò@@Ę@Ęf)¶ ? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙ò@Ä¿˜Ä¿˜¶)Ê ? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙? ˇ˛˙ ˇ˛˙¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  3360. |√» DH$Ä… @Ñ(Ä… pÑ(Ä…
  3361. êÑ'»
  3362. Å    ê4B»
  3363. ÖÑÑ»
  3364. ˚‡?»¡¡¡¡/ |¿ Äĸ ˛L˛ÄIJaÄ˚ÄÚ,D˛@Ä˚˛¿˛˝ ˙(ÄÚ.@˛@(˝à˛Ä˛˝@@˚ Ò40pŒ÷Ñ@(8Δ¥ƒ{åìÀCÕç÷ÅØ
  3365. —«fô¬–5·AÁŒkL˜i`Ú40ë¥SÄHE"õZ)ñçÅ%öZkE4Q)ì1-`H¶ÉI jQ)íhH±@Ú40Å$¢a|"Ü\Q§âÇ*#rJD¢%".@âHÇDq!Q pP°ÄÚ40ÇY, Ñ/äid‡Z…    ¬R≠§§ÑÎ^%*”4J–ÄùkƒíÑ¢ñ&ÄëB†Ú40√πÙ< ûqè§úíèÖü?$tR,9ÒƒqÄjEáúw˙péB@Ú˛DÒËÄ˛DÒÈÔ˛8ÒÈÔ¡ | … Då… @Äî… pSÃÁÇîkΔé-Õ ë¶ôǧëI4÷Õ Ç$í…ë$‰Õ ܢ&%Ñâ:”ôÕ ˘o9…∏‘ç8ËÕ˜DØDØ8á%ΔpÉ¡Ä8˝¿@˛¿‰    B c˝˝0˝Ä›#§@e ˛ ĸ„'#§,êOä •c{úuÄ'∏¥kœ#1ºŒx ߶i„aº‹Â'#î‘êE'4–©$ñ)"ñÄ"ìXë$¶JIë( "⁄⁄(¶íI¢PÂ'#ò†äD‡≤EQBDÄEë(ƒÑI!P BííQEIB†Â'#    ¿ãLfl"O9ZE)E§!:IiúÚbX#E'&ïi4ÚD∞Â'#à‰Å“w,·Æ4Œí9…È#†’ñNcSúê9%$˙N√Sπ Âò@¿Ú˜¿Ú˜Ê)  Ú˛÷Ó÷Ó8÷¡
  3366. @Ä0 ˛`«ÿÅ˚˛!(¢¸ÿ1˛ ˛@L≤˛ÿSÖé?såì(Ä5·Aã,«‹‡Q    ‡⁄îIQe$Ññ”@H¶ÄQD(±I!¶¥ê⁄¸_ÑaJ"•ÄâHÄQD0¢àÇ'9⁄$Ç¢õI…|ùk¿RHQJ“B¯A ⁄# ÚNé≥êjEáå0étìÅg:¿⁄˝˚¸¸Ÿ˝ı¸Ÿ˝ı¸Ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡t¸Œ0ฌP˛@ŒQÁêÇ⁄gö‚hÒÄ–êíSB-¢JM0R@–˘cÇ)$TN §œ    $¥4Rd•ê@¥¿–>À#Å√íK>éB#–˝Õ ˝  ˝ ¡ x‡`A‡–Õ$ê˛@ê ÕB˛Å0 ÕBO<nÅ¿ËπœB    •“Å     3IœÑ (àÇ0#Öœà" -% ”ƒœá¡“I˘¬Cќٜٜò@@˜@˜&)f ¡¡…30˙…˙  ˙…˙…˙…˙  ˙…˙  ˙…˙…˙…˙  ˙˘¯ˇ˛‹˙ ˙@¯‹˙˘@¯Ä›˙˘@¯¿›˙˘@    0#Dz`›˙ ˙ @}ßπ˚ÿ0›˙˘ @}øπ}˚ÿ›˙ ˙@Ä˚ ›˙˘@¯›˙˘@¯›˙˘ @     @@Äfi˙ ˙ @?èı˝∂˜˘¬¿fi˙˘ @ˇèı˝∂˜˘¬`fi˙ ˙@˘Ä0fi˙˘@¯fi˙˘ @˘ 8@0Ä fi˙˘ @•oó˛ˇÓfi˙ ˙ @Ø˘ÔΩ˛ˇÓfi˙˘@˛˝Äfl˙ ˙@¯¿fl˙˘@Äɡˇ‡fl˙˘@∑˝üœ˜∑ü∑Ä`fl˙˘@∑˝üœ˜∑ü∑Ä`fl˙ ˙@ ¿˛0¸`fl˙˘@ı`fl˙ ˙    @√ "B˛`fl˙˘    @˚Ûıˇ€Û˜€˛`fl˙˘    @˚Ûıˇ€Û˜€˛`fl˙˘@˝†¿˛`fl˙ ˙@ı`fl˙˘@î˜`fl˙ ˙@◊Ωflˇx˚`fl˙˘@◊Ωflˇx˚`fl˙˘@˝˙`fl˙˘@ı`fl˙ ˙@ı`fl˙˘@ı`¯ˇÄÍ˙ ˙@`ˆ`b¯"‡Í˙˘A¿ˆ`@¯0Í˙˘CË(¸`˜DXÍ˙˘Bkonˇfi¿˝`H˜àÍ˙ ˙B˚onÔfi¿˝`¯ˇ Í˙˘Bı`¯îÍ˙ ˙Bı`˜¶Í˙˘Bı`˜ÇÍ˙˘B ä‡ PÅ`˜ΔÍ˙˘B˛fl˚˚ü(ØØ^˜Ä`˜äÍ˙ ˙B˛fl˚˚üÔØ^˜Ä`˜ÇÍ˙˘B˙˝`˜íÍ˙ò@@Ę@Ęf)¶  ˙Bı`˜¢Í˙!·ÄB¿ `˜ÇÍ˙!ÄB˚æˆˇ?›ª˘˝`˜ΔÍ˙!”Δm„`B˚æˆˇ?›ª˘˝`˜äÍ˙ ≥/ôó¡ˇ˛˙ Ä˛`˜ÇÍ˙3-âî@Bı`˜íÍ˙! œΔy„¿BÄÑ ÄÄ``˜¢Í˙˘B˛ˇ∑üo˛ÔªÔ¯`˜ÇÍ˙˘B˛ˇ∑üo˛ÔªÔ`˜ΔÍ˙˘B˜`˜äÍ˙ ˙Bı`˜ÇÍ˙˘    BP    0≈˛`˜íÍ˙ ˙B‹ˇª˚Ûæ1_¿`˜¢Í˙˘B‹ˇª˚Ûæfl¿`˜ÇÍ˙˘BÄ¿˛Ä`˜ΔÍ˙˘Bı`˜äÍ˙ ˙B†˙`˜ÇÍ˙˘C̸ˇø˙`˜íÍ˙ ˙AüÌ|ˇø˙`˜¢Í˙˘@‡˘`˜ÇÍ˙˘@ı`˜ΔÍ˙˘@ı`˜äÍ˙ ˙@ı`˜ÇÍ˙˘@ı`˜íÍ˙ ˙@ı`˜¢Í˙˘@ı`˜ÇÍ˙˘@ı`˜ΔÍ˙˘@ı`˜äÍ˙ ˙@‡ˆ`˜ÇÍ˙˘CĈ`˜íÍ˙ ˙BC˛Â  ¸`˜¢Í˙˘    B7Òäü«ø˚IJ`˜ÇÍ˙˘    B/Û˛ˇ«ø˚èˇ˛`˜ΔÍ˙˘B˚‡`˜äÍ˙ ˙B˙¸`˜ÇÍ˙˘B@Ä@0˜Ä`˜íÍ˙ ˙B7{˛fl˝Ä>ˇ‡¯¢Í˙˘B7{˛fl˝Ä˛õfi8¯ÇÍ˙˘B˚uœÿ0zDN¯ΔÍ˙PÄB˚ÄÒ¸ àä¯äÍ˙"     @ÄB0å˛˛¿Ñ¯ÇÍ˙"    ûV„`B;Ω˚ôJˇè‡«ˇ—¯íÍ˙# ô_ó¿B;Ω˚õ˛ÖˇÒ¸¿`cĢ¢Í˙ ô]îAˇ˛˚Hˇ˛?≥`0ĢÇÍ˙!~Vì¿B¸    ˇœ„Ä`ĢΔÍ˙˘B@¯$ˇÒ˚¿`ĢäÍ˙ ˙B7˝Δ+ˆˇ˛ˇ¿`ĢÇÍ˙˘B7˝œ˚ˆ˛ˇ˝`ĢíÍ˙ ˙B˘ˇÓ`Ģ¢Í˙˘B˘ˇf`ĢÇÍ˙˘B4IJÚ`ĢΔÍ˙˘B€¸˜ü∑ÿÍ`ĢäÍ˙ ˙B€¸˜ü∑ÿ˛
  3367. `ĢÇÍ˙˘Bı`ĢíÍ˙ ˙B˜`Ģ¢Í˙˘B  !ˇ˛`ĢÇÍ˙˘B??øÌŸE¿˝`ĢΔÍ˙˘C??øÌ€ˇ¿˝`ĢäÍ˙ ˙A‡ˆ`ĢÇÍ˙˘@ı`ĢíÍ˙ ˙@ı`Ģ¢Í˙˘@ı`ĢÇÍ˙˘@ı`ĢΔÍ˙˘@ı`ĢäÍ˙ò@Ä¿˜Ä¿˜¶)Ê  ˙@ı`ĢÇÍ˙˘@ı`ĢíÍ˙ ˙ıˇ‡Ģ¢Í˙˘?ıˇ‡ĢÇÍ˙ÎĢΔÍ˙ÎĢäÍ˙ ÏĢÇÍ˙ÎĢíÍ˙ ÏĢ¢Í˙ÎĢÇÍ˙ÎĢΔÍ˙ÎĢäÍ˙ ÏĢÇÍ˙ÎĢíÍ˙ ÏĢ¢Í˙ÎĢÇÍ˙ÎĢΔÍ˙ÎĢäÍ˙ ÏĢÇÍ˙ÎĢíÍ˙ Ùp˛Ģ¢Í˙ÛH˛Ä˙ÉÄÎ˙Û    Iôìôé⁄¿Ä˙EÄÎ˙Û    s˛S'≈3Ä˙ãÍ˙ Ù    J6S"2ÄĢΔÍ˙Û    IŸèƒ“@Ģ|Í˙ ÏĢ8Í˙ ÎÄ·˙ ÎÄ·˙ ÎÄ·˙ ı˘ˇˡ¯˙˙Ù˘ÄÈ˙˙ ı˘ÄÈ˙˙Ù˘ÄÈ˙˙Ù˘ÄÈ˙˙Ù˘ÄÈ˙˙ ı˘ÄÈ˙˙Ù˘Ä˝‡˝ ı˙˙ ı˘Ä˝˝ ı˙˙Ù˘Ä˝Ãnnff‡ı˙˙Ù˘ĸæñô˘ï ı˙˙Ù˘Ä˝0Üôàï ı˙˙  ı˘Ä˝Œviwd‡ı˙˙Ù˘ÄÈ˙˙ ı˘ÄÈ˙˙Ù˘ÄÈ˙˙Ù˘ÄÈ˙˙Ù˘Ä˝˘ˇ¿ˆ˙˙ ı˘Ä˝Ä˙`ˆ˙˙Ù˘Ä˝Ä˙`ˆ˙˙ ı˘Ä˝Ä˙`ˆ˙˙Ù˘Ä˝Ä˙`ˆ˙˙Ù˘Ä˝ÄÄ˝`ˆ˙˙Ù˘Ä˝Ä˙`ˆ˙˙! ı˘Ä˝Å~ú‰˛`ˆ˙˙Ù˘Ä˝Ä®–¢ê˛`ˆ˙˙! ı˘Ä˝ÄØâê˛`ˆ˙˙Ù˘Ä˝Ä®B¢ê˛`ˆ˙˙Ù˘Ä˝ÄG‹úî˛`ˆ˙˙Ù˘Ä˝Ä˙`ˆ˙˙ ı˘Ä˝Ä˙`ˆ˙˙Ù˘Ä˝Ä˙`ˆ˙˙ ı˘Ä˝Å¸`ˆ˙˙Ù˘Ä˝Å¸`ˆ˙˙ò@¿˜¿˜Ê)& Ù˘Ä˝Å+è@˝`ˆ˙˙Ù˘Ä˝ÅJQ¸`ˆ˙˙ ı˘Ä˝ÅäQ¸`ˆ˙˙Ù˘Ä˝ÅJQ¸`ˆ˙˙  ı˘Ä˝Å*O@˝`ˆ˙˙Ù˘Ä˝Ä˙`ˆ˙˙Ù˘Ä˝Ä˙`ˆ˙˙Ù˘Ä˝Ä˙`ˆ˙˙ ı˘Ä˝Ä¸`ˆ˙˙Ù˘Ä˝Ä¸`ˆ˙˙  ı˘Ä˝ÄÌœ9˝`ˆ˙˙Ù˘Ä˝Äí1D˝`ˆ˙˙Ù˘Ä˝Äí1|˝`ˆ˙˙Ù˘Ä˝Äí1@˝`ˆ˙˙  ı˘Ä˝Äìœ=˝`ˆ˙˙Ù˘Ä˝Ä˙`ˆ˙˙ ı˘Ä˝Ä˙`ˆ˙˙Ù˘Ä˝Ä˙`ˆ˙˙Ù˘Ä˝Ä.IJ`ˆ˙˙Ù˘Ä˝Ä)IJ`ˆ˙˙! ı˘Ä˝ÄÌËπ¯Ä`ˆ˙˙Ù˘Ä˝Äí(у˛`ˆ˙˙! ı˘Ä˝Äí(º¸˛`ˆ˙˙Ù˘Ä˝Äí)$¿˛`ˆ˙˙Ù˘Ä˝ÄìÓ¸Ä`ˆ˙˙Ù˘Ä˝Ä˙`ˆ˙˙ ı˘Ä˝Ä˙`ˆ˙˙Ù˘Ò‡˝Ä˙`ˆ˙˙! ı˘b`˝ÄÄ¿`ˆ˙˙Ù˘0¿˝Ä `ˆ˙˙Ù˘Ä˝ÄÁ7úÂ`ˆ˙˙Ù˘¸Å ¢ï`ˆ˙˙  ı˘¸Äœ¬¢ï`ˆ˙˙ÙÛÄ(J¢ï `ˆ˙˙ ıÛÅ«≥úï¬`ˆ˙˙ÙÛÄ˙`ˆ˙˙ÙÛÄ˙`ˆ˙˙ÙÛÄ˙`ˆ˙˙ ıÛÄX¸`ˆ˙˙!Ù¸0˛ħ¸`ˆ˙˙) ı¸ ˛Å›¬sê˛`˙Á˛˙˙'Ù¸csp337Å"¿ä@˛`˙˙˙+ٸ٥»'éÅ>¬ä@˛`˙˛ˇ¯˙+Ù¸Ñ4»$D©Å §ä@˛`˙˛ˇ¯˙- ı¸s≥H#ª'ÅòrP˛`˙˛ˇ¯˙ÙÛÄ˙`˙
  3368. ¿8˙ ıÛÄ˙`¯œy‡8˙ÙÛÄ˙`˙
  3369. œ{8˙"ÙÛÄ
  3370. ˚`˛#˝ @Œ˜88˙(Ù˝˙ˇ¸Ä˚cÄR˝ @8Œˆ8˙- ı˝˙Å „ê˝c¯Sqç埿?Åœv∏˙*Ù˝˙Ä*¸cˇsÀ”2@?Òœw?∏˙+ ı˝˙ÅÍÛ˚ˇãkJ2@ˇˇÒœ∏˙+Ù˝˙Å*êÄ˝c¯ã9⌗¿?Åœa‡∏˙(Ù˝˝ÄÍw˝c¿¯8¿`∏˙$Ù˝˙Ä˙`˙
  3371. ¡¯`∏˙( ı˝
  3372. ªÙÁ Ä˙`¯
  3373. √ú∏˙&Ù˝
  3374. FÖÄÄ˙`¯
  3375. «∏˙* ı˝
  3376. ~eÄÄ˙`˙
  3377. «ˇ8˙(Ù˝
  3378. BÄÄ˙`˙
  3379. «ˇ8˙(Ù˝
  3380. >‰‰†Ä˙`˙
  3381. ¿8˙$Ù˝˙Ä˙`˙˛ˇ¯˙& ı˝˙Ä˙`˙˛ˇ¯˙$Ù˝˙Ä˙`˙¸˛˛ˇ¯˙ò@@˜@˜&)f ! ı˝@˝Ä˙`ˆ˙˙Ù˝˝Ä˙`ˆ˙˙Ù˝    \z˝Ä˙`ˆ˙˙#Ù˝
  3382. Rà˝Ä˙`ˆÊ=˙) ı˝ Rà˝ÄA‡˛`ˆ    A ˙'Ù˝
  3383. Rà˝ÄA˛`ˆ–9|˙) ı˝    Rz˝ÄÈy˛`ˆ∞≤˙$Ù˝˙Å    E·D˛`ˆ)E≤˙$Ù˝˙Ä…ED˛`ˆΔ9¨˙ Ù˝˙Ä)E    D˛`ˆ˙˙% ı˝˝Å«yG˛`ˆ˙˙Ù˝˝Ä˙`ˆ˙˙" ı˝ny»˛Ä˙`ˆ˙˙ Ù˝ëä ˛Ä˙`ˆ˙˙$Ù˝ëã‡˛
  3384. Ä0``ˆ˙˙#Ù˝ëä˝
  3385. ÄH@`ˆ˙˙& ı˝ûy˲
  3386. ÄÁ/¡ÃÁ9`ˆ˙˙ Ù˝˙
  3387. Äò©:2h§`ˆ˙˙" ı˝˙
  3388. Äüëh§`ˆ˙˙ Ù˝˙
  3389. Äò)Üh§`ˆ˙˙$Ù˝p˛
  3390. ÄóÌ˘Ïg%`ˆ˙˙ Ù˝H˛Ä˙`ˆ˙˙" ı˝
  3391. oEœƒÄ˙`ˆ˙˙ Ù˝
  3392. ëD& Ä˙`ˆ˙˙& ı˝ëEÁ‡ÄúÄ`ˆ˙˙$Ù˝ëI&˛
  3393. ÄíÄ`ˆ˙˙$Ù˝üpÁ‰Ä«;Óíú…@`ˆ˙˙ Ù˝˙
  3394. Å(•ëû£*`ˆ˙˙" ı˝˙
  3395. Å•ëë£ `ˆ˙˙ Ù˝˙
  3396. Å(•ëë£*`ˆ˙˙& ı˝.Ä«%éûú…@`ˆ˙˙ Ù˝
  3397. )Ä˙`ˆ˙˙ Ù˝
  3398. 9ºÁ(êÄ˙`ˆ˙˙ Ù˝
  3399. FU®ÄÄ˙`ˆ˙˙$ ı˝ ~®ÄÄb¸`ˆ˙˙"Ù˝ BU©Ä≤¸`ˆ˙˙& ı˝=ú‰ÆÅ›Úì¥˛`ˆ˙˙ Ù˝˙Å"™íH˛`ˆ˙˙ Ù˝˙Å>™íH˛`ˆ˙˙ Ù˝˙Å ¶íH˛`ˆ˙˙% ı˝¿˝Å¢rL˛`ˆ˙˙Ù˝ ˝Ä˙`ˆ˙˙" ı˝
  3400. ÓúÄÄ˙`ˆ˙˙$Ù˝    R˛Ä˙`˙Á˛˙˙#Ù˝    ˆR˛˘ˇ‡˙˙˙(Ù˝    $R˛˙ˇ‡˙˛ˇ¯˙& ı˝Ù√íĈ˙˛ˇ¯˙ Ù˝˙ˆ˙˛ˇ¯˙" ı˝˙ˆ˙
  3401. ¿8˙Ù˝˙ˆ¯œy‡8˙"Ù˝P¸ˆ˙
  3402. œ{8˙(Ù˝@¸¯˛"IJ @0Œ˜88˙+ ı˝WIJ¯‡R˝ @>Œˆ8˙)Ù˝P†˝¯˛RÒåÃÕ¿?¡œv∏˙& ı˝WòÚˇrõ…Û*@ˇˇÒœw?∏˙)Ù˝    TÑ˝¯¸äÎI*@?¡œ∏˙*Ù˝S∏IJ¯‡äπàÓ…¿>œa‡∏˙ Ù˝˙¯¯0¿`∏˙" ı˝˙ˆ˙
  3403. ¡¯`∏˙Ù˝˙Ó
  3404. √ú∏˙ ı˝˙Ó
  3405. «∏˙ Ù˝˙ˆ˙
  3406. «ˇ8˙ Ù˝˙ˆ˙
  3407. «ˇ8˙ Ù˝˙ˆ˙
  3408. ¿8˙ò@@Ę@Ęf)¶ " ı˝˙ˆ˙˛ˇ¯˙ Ù˝˙ˆ˙˛ˇ¯˙" ı˝˙ˆ˙¸˛˛ˇ¯˙Ù˝˙Ï˙˙Ù˝˙Ï˙˙Ù˝˙Ï˙˙  ı˝ Ï ˙Ù˝Ä Ï˛ ˙  ı˝K»Û¯Ïg¢Ó}Ä˙Ù˝J/
  3409.  ÏıRì3˙Ù˝J(z ÏÖRù3˙Ù˝J(J ÏuRó=˙ ı˝;»:8Ï˙˙Ù˝˙Ï˙˙ ı˝˙Ï˙˙Ù˝˙Ï˙˙Ù˝    ÄÏ˙˙Ù˝
  3410. @Ï˙˙ ı˝9~g9»Ï˙˙Ù˝≈I—ìE Ï˙˙ ı˝¸à?ÉE Ï˙˙Ù˝¡L0ìE Ï˙˙Ù˝øoœc9(Ï˙˙Ù˝˙Ï˙˙ ı˝˙Ï˙˙Ù˝˙Ï˙˙ ı˝‰@Ï˙˙Ù˝î@Ï˙˙Ù˝9fltîÊJÏ˙˙Ù˝    E,åıPÏ˙˙ ı˝E,åç`Ï˙˙Ù˝    E,åçPÏ˙˙ ı˝9,tÙÊJÏ˙˙Ù˝˙Ï˙˙Ù˝˙Ï˙˙Ù˝˙Ï˙˙ ı˝˝Ï˙˙Ù˝ê˝Ï˙˙ ı˝Ôîù†Ï˙˙Ù˝    Tí@Ï˙˙Ù˝    ıTí@Ï˙˙Ù˝    4í@Ï˙˙ ı˝ıí`Ï˙˙Ù˝˙Ï˙˙ ı˝˙Ï˙˙Ù˝˙Ï˙˙Ù˝˙ˇ˛Ï˙˙Ù˝˙ˇ˛Ï˙˙ ıfl˙˙Ùfl˙˙ ıfl˙˙Ùfl˙˙Ùfl˙˙Ùfl˙˙ ıfl˙˙Ùflˇ¯˙˙  ˙…˙…˙…˙  ˙…˙  ˙…˙ò@Ä¿˜Ä¿˜¶)Ê …˙…˙  ˙…˙…32˙ …Ã˙¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  3411. |√» DH$Ä… @Ñ(Ä… pÑ(Ä…
  3412. êÑ'»
  3413. Å    ê4B»
  3414. ÖÑÑ»
  3415. ˚‡?»¡¡¡¡/ |¿ Äĸ ˛L˛ÄIJaÄ˚ÄÚ,D˛@Ä˚˛¿˛˝ ˙(ÄÚ.@˛@(˝à˛Ä˛˝@@˚ Ò40pŒ÷Ñ@(8Δ¥ƒ{åìÀCÕç÷ÅØ
  3416. —«fô¬–5·AÁŒkL˜i`Ú40ë¥SÄHE"õZ)ñçÅ%öZkE4Q)ì1-`H¶ÉI jQ)íhH±@Ú40Å$¢a|"Ü\Q§âÇ*#rJD¢%".@âHÇDq!Q pP°ÄÚ40ÇY, Ñ/äid‡Z…    ¬R≠§§ÑÎ^%*”4J–ÄùkƒíÑ¢ñ&ÄëB†Ú40√πÙ< ûqè§úíèÖü?$tR,9ÒƒqÄjEáúw˙péB@Ú˛DÒËÄ˛DÒÈÔ˛8ÒÈÔ¡ | … Då… @Äî… pSÃÁÇîkΔé-Õ ë¶ôǧëI4÷Õ Ç$í…ë$‰Õ ܢ&%Ñâ:”ôÕ ˘o9…∏‘ç8ËÕ˜DØDØ8á%ΔpÉ¡Ä8˝¿@˛¿‰    B c˝˝0˝Ä›#§@e ˛ ĸ„'#§,êOä •c{úuÄ'∏¥kœ#1ºŒx ߶i„aº‹Â'#î‘êE'4–©$ñ)"ñÄ"ìXë$¶JIë( "⁄⁄(¶íI¢PÂ'#ò†äD‡≤EQBDÄEë(ƒÑI!P BííQEIB†Â'#    ¿ãLfl"O9ZE)E§!:IiúÚbX#E'&ïi4ÚD∞Â'#à‰Å“w,·Æ4Œí9…È#†’ñNcSúê9%$˙N√Sπ Âò@¿Ú˜¿Ú˜Ê)  Ú˛÷Ó÷Ó8÷¡
  3417. @Ä0 ˛`«ÿÅ˚˛!(¢¸ÿ1˛ ˛@L≤˛ÿSÖé?såì(Ä5·Aã,«‹‡Q    ‡⁄îIQe$Ññ”@H¶ÄQD(±I!¶¥ê⁄¸_ÑaJ"•ÄâHÄQD0¢àÇ'9⁄$Ç¢õI…|ùk¿RHQJ“B¯A ⁄# ÚNé≥êjEáå0étìÅg:¿⁄˝˚¸¸Ÿ˝ı¸Ÿ˝ı¸Ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡t¸Œ0ฌP˛@ŒQÁêÇ⁄gö‚hÒÄ–êíSB-¢JM0R@–˘cÇ)$TN §œ    $¥4Rd•ê@¥¿–>À#Å√íK>éB#–˝Õ ˝  ˝ ¡ x‡`A‡–Õ$ê˛@ê ÕB˛Å0 ÕBO<nÅ¿ËπœB    •“Å     3IœÑ (àÇ0#Öœà" -% ”ƒœá¡“I˘¬Cќٜٜò@@˜@˜)X Ù0œ¡ xÄ˝À9Ä˝ÑÄÃ
  3418. QÄÃ
  3419. Q4£y⁄Äà   Qîƒí,À    ¢(Dàî(À
  3420. ≥K)    ‰PÄà   ‚}…£ê/À¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘX)ò ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜ò)ÿ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜ÿ) ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜)X ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘX)ò ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜ò)ÿ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜ÿ)
  3421.  ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜)X Ù0œ¡ xÄ˝À9Ä˝ÑÄÃ
  3422. QÄÃ
  3423. Q4£y⁄Äà   Qîƒí,À    ¢(Dàî(À
  3424. ≥K)    ‰PÄà   ‚}…£ê/À¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘX)ò ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜ò)ÿ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜ÿ) ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜)X ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘX)ò ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜ò)ÿ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜ÿ)
  3425.  ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ˇ46@ˇ ˇˇˇˇ@
  3426. ˇ·ˇ‚7^
  3427. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äUsing the Edition Manager
  3428. , (‡2-17
  3429. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  3430. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  3431. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  3432. 4€4—?òÄ
  3433. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  3434. ˛ˇˇˇ
  3435. ˛ˇˇˇ
  3436. ˛ˇˇˇ
  3437. ˛ˇˇˇ˜˝˛ˇ˛
  3438. ˛ˇ˛ˇˇ
  3439. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  3440. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  3441. ˛ˇ˛ˇˇ
  3442. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  3443. ˛ˇˇˇˇ
  3444. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  3445. ˛ˇˇˇˇ
  3446. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  3447. ˛ˇˇˇˇ
  3448. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähë(eäA∫†°dONLNd\ëh∏)
  3449.  section rh °dONLNd \πhÀ)(ecor‹Ä°dONLNd\Àh)Ld contains information to identify the data contained within a section as a °dONLNd[iäu˜(räpublisher or a subscribern‡°dONLNdti˜uF)m, a time stamp to r    †°dONLNdáiGuY)Pecor~°dONLNdãiYu°)d the last modifiπ@°dONLNdúi°u˝)Hcation of the section, .°dONLNd≥väÇù(äand °dONLNd∑vùÇfl)unique identifi°dONLNdΔvflÇ\)Bcation for each section. The ,
  3450. Courier°dONLNd„v\Ç™)}SectionRecord°dONLNdv™ÇÌ)N data type defi°dONLNdˇvÌÇ)Cnes the .°dONLNdÉäèØ(åä    section r≠Ä°dONLNdÉØè¡)%ecor!‡°dONLNdɬè )d..°dONLNdöä¶ê(£äT°dONLNdöê¶)YPE SectionRecord = °dONLNd.®ú¥¿+ RECORD°dONLNd7∂Ƭfi+version:°dONLNdD∂¬J)Z SignedByte;°dONLNdT∂b¬»)Z{always 1 in 7.0}°dONLNdhƒÆ–Ã(ÕÆkind:°dONLNdrƒ–P)Z SectionType;°dONLNdɃb–¯)Z{publisher or subscriber}°dONLNdü“ÆfiÃ(€Æmode:°dONLNd©“fiJ)Z UpdateMode;°dONLNdπ“bfi‡)Z{automatic or manual}°dONLNd—‡ÆÏÿ(ÈÆmdDate:°dONLNd›‡ÏD)Z
  3451. TimeStamp;°dONLNdχbϯ)Z{last change in document}°dONLNdÓÆ˙Í(˜Æ
  3452. sectionID:°dONLNdÓ˙8)ZLongInt;°dONLNd$Ób˙Ú)Z{application-specific, }°dONLNdI¸bÊ*{ unique per document}°dONLNdb
  3453. Æÿ(ÆrefCon:°dONLNdn
  3454. 8)ZLongInt;°dONLNd{
  3455. bÊ)Z{application-specific}°dONLNdîÆ$“(!Æalias:°dONLNdü$P)Z AliasHandle;°dONLNd∞b$Ú)Z{handle to alias record}°dONLNdÃ4Æ@(=Æ9{The following fields are private and are set up by the }°dONLNdBÆN˛*8{ RegisterSection function described later within this }°dONLNdCPÆ\º*-{ chapter. Do not modify the private fields.}°dONLNdtlÆxfi*subPart:°dONLNdÅlx8)ZLongInt;°dONLNdélbxò)Z    {private}°dONLNdözÆ܈(ÉÆ nextSection:°dONLNd´zÜ\)ZSectionHandle;°dONLNdæzbÜ)Z{private, do not use as a }°dONLNdÊàbî∂*{ linked list}°dONLNd˜ñÆ¢¸(üÆcontrolBlock:°dONLNd    ñ¢2)ZHandle;°dONLNdñb¢)Z{may be used for comparison }°dONLNd?§b∞å*{ only}°dONLNdI≤Ææÿ(ªÆrefNum:°dONLNdU≤æ\)ZEditionRefNum;°dONLNdh≤bæò)Z    {private}°dONLNdr¿äâ(…äEND;
  3456. ŸHË4⁄HË    .°dONLNdwŸä‰÷*Field descriptions
  3457. ˇ·ˇ‚7^
  3458. .°dONLNdäÊäÚ¥*version.°dONLNdíÊÊÚÖ)\&Indicates the version of the section rm†°dONLNd∏ÊÖÚó)üecor‚°dONLNdºÊóÚ¥)d, curr,¿°dONLNd√ʵÚfl)
  3459. ently $01..°dONLNdœıä¢(˛äkind.°dONLNd‘ıʯ)\Defi†°dONLNdÿı˘    )@nes the section type as either publisher or subscriber with the .°dONLNdÊ((
  3460. Ê stPublisher°dONLNd#(5)B or °dONLNd'5}) stSubscriber°dONLNd3}ß)H
  3461.  constant.°dONLNd>ä¢(ämode.°dONLNdCÊH)\Indicates if editions arj‡°dONLNd[HÏ)b#e updated automatically or manuallyg‡°dONLNd~ÎÌ)£..°dONLNdÄä+Æ((ämdDate.°dONLNdáÊ+r)\Indicates which version (modifiº†°dONLNd¶r+)å'cation date) of the section’s contents ˇˇ‚™.°dONLNdÕ+Ê7∂(4Ê/is contained within the publisher or subscriberú°dONLNd¸+∂7Œ)–. The ˇˇß˛◊°dONLNd+Œ7Ú)mdDateˇˇ‚™◊°dONLNd+Ú7Û)$ ∫ö°dONLNd    +Ù7˚)fi∫ö°dONLNd +˚7 )eld ùD°dONLNd+ 7)is .°dONLNd7ÊC>(@Êset to 0 when you cr@°dONLNd&7?Cπ)Yeate a new subscriber sectio{‡°dONLNdB7πCΔ)zn aÕ@°dONLNdE7ΔCÀ)nû†°dONLNdF7ÃC◊)d t|¿°dONLNdI7ÿC)
  3462. o the curr˛†°dONLNdS7C)*ent °dONLNdWCÊO3(LÊtime when you crÿ°dONLNdgC3Oé)Meate a new publisherÉ@°dONLNd{CéOÆ)[. Be surÒ¿°dONLNdÉCÆO˙) e to update this fiÍ °dONLNdñC˚O )Meld °dONLNdöOÊ[|(XÊ!each time publisher data is modifi›¿°dONLNdºO|[‰)ñed. The section’s modifiΔ°dONLNd‘OÂ[)ication °dONLNd€[Êg&(dÊdate is comparN°dONLNdÈ['gñ)Aed to the edition’s modifif†°dONLNd[ñg)ocation date to determine °dONLNdgÊs˝(pÊ?whether the section and the edition contain the same data. The °dONLNd[sÊ$* section modifiB‡°dONLNdis%Î)?.cation date is displayed in the publisher and °dONLNdóÊãÄ(àÊ#subscriber options dialog boxes. Se°dONLNd∫Äãá)öe .†°dONLNdºàãÙ)“Closing an Edition” on °dONLNd‘ãÊó˝(îÊpage Z‡°dONLNdŸã˛ó)2-28Æ¿°dONLNd›ãó) fdž°dONLNdflãó)or detailed information.ˇò@ˇ ˇˇˇˇ@
  3463. ˇ·ˇ‚7^
  3464. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  3465. (‡*2-18    )BUsing the Edition Manager4^*¿¯,
  3466. Courier
  3467. .°dONLNd\lh¢(el    sectionID.°dONLNd
  3468. \»h—)\PrN†°dONLNd \“h‡)
  3469. ;ovides a unique number for each section within a document. (Ä°dONLNdG\‡hÁ(e‡Ac °dONLNdH\ÁhÈ) °dONLNdIh»tk(q»%simple way to implement this is to crπ°dONLNdnhkt–)£eate a counter for each °dONLNdÜt»Ä·(}»>document that is saved to disk with the document. The counter °dONLNdƒÄ»år* )should start at 1. The section ID is currö@°dONLNdÌÄråÃ)™ently used as a tie br†°dONLNdÄÕåÚ)[    eaker in .°dONLNd å»ò⁄(ï»the °dONLNdå⁄òR)GoToPublisherSection°dONLNd$åRò©)x function when therR`°dONLNd7å©ò∫)We ar$¿°dONLNd;å∫òÎ) e multiple .°dONLNdFò»§Û(°»Dpublishers to the same edition in a single document. The section ID °dONLNd䧻∞:* should not be 0 or –1. See $¿°dONLNd•§;∞ı)s)“Duplicating Publishers and Subscribers” °dONLNdŒ∞»ºÌ(π»on page !¿°dONLNd÷∞Óº)&2-58u†°dONLNd⁄∞ºØ)( for information on multiple publishers..°dONLNdølÀê(»lrefCon.°dONLNd
  3470. ø»Àfl)\Refer⁄ °dONLNdøflÀ®).ence constant available for application-specififi¿°dONLNd>ø®À¿)…c use..°dONLNdEŒl⁄ä(◊lalias.°dONLNdKŒ»⁄P)\ Contains a handle to the alias rÔÄ°dONLNdkŒP⁄b)àecorc‡°dONLNdoŒc⁄Ò)"d for a particular section within °dONLNdë⁄»Ê˛(„» a document..°dONLNdùÎl˜Ã(ÙlWhenever the user crR`°dONLNd±ÎØS)`eates a publisher or subscriberï°dONLNd–ÎR˜})Ü , call the ï°dONLNd€Î}˜π)+
  3471. NewSectionï°dONLNdÂÎπ˜Ï)< function to .°dONLNdÚ¯lt(lcrµ@°dONLNdÙ¯tæ)eate the section rï¿°dONLNd¯æ–)Jecor
  3472.  °dONLNd
  3473. ¯—)d and the alias r√ °dONLNd¯))Fecor7Ä°dONLNd¯*2)d..°dONLNd"l‡(l>err := NewSection(container, sectionDocument, kind, sectionID,°dONLNdfΔ)b+Z   initialMode, sectionH);°dONLNdÅ5lAÄ(>lThe °dONLNdÖ5ÄAº)
  3474. NewSection°dONLNdè5ºAÏ)<  function crR`°dONLNdõ5ÏAG)0eates a new section r$¿°dONLNd∞5GAY)[ecor˜ °dONLNd¥5XAÒ)$d (either publisher or subscriber), .°dONLNdÿBlNÏ(Klindicates whether editions arzÄ°dONLNdıBÏNê)Ä#e updated automatically or manuallywÄ°dONLNdBèN‘)£, sets the modifi5@°dONLNd)B’NÚ)Fcation °dONLNd0Ol[ü(Xl date, and crJ °dONLNd<O†[‡)4eates an alias rć°dONLNdLO‡[Ú)@ecorı@°dONLNdPOÚ[)d fr©‡°dONLNdTO[Ú)6om the document containing the section to the edition °dONLNdä\lhï(el    container2 °dONLNdì\ïhó))..°dONLNdïnlzs(wlYï°dONLNdñnrz∞)ou can set the ï°dONLNd•n∞z∂)>sï°dONLNd¶n∂z
  3475. )ectionDocumentï°dONLNd¥n
  3476. z8)T     parameteï°dONLNdΩn8zI).r to ï°dONLNd¬nIzO)Nï°dONLNd√nOz[)IL6†°dONLNd≈n[za)  i6†°dONLNd«naz})f the c6†°dONLNdŒn}zä)urr    °dONLNd—näzÙ)ent document has never °dONLNdË{lá«(Ñlbeen saved. Use the °dONLNd¸{«á')[AssociateSection°dONLNd {'á¨)` function to update the alias rR`°dONLNd+{¨áæ)Öecor$¿°dONLNd/{æáŸ)d of a .°dONLNd6àlîo(ëlrE°dONLNd7àpîç)egisterî °dONLNd>àçî+)#ed section when the user names or r\@°dONLNdaà,î’)ü#enames a document by choosing Save ¶`°dONLNdÑà’î„)©As .°dONLNdáïl°t(ûlfrR`°dONLNdâït°Ï)om the File menu. If you ar$¿°dONLNd§ïÏ°˚)xe cr˜ °dONLNd®ï˙°z)eating a subscriber with the ˜ °dONLNd≈ïz°º)Ä initialMode˜ °dONLNd–ﺰ)B  parameter .°dONLNd€¢lÆâ(´lset to rE‡°dONLNd„¢äÆ)!eceive new editions automatically °dONLNd¢Æs)ï, your application r|`°dONLNd¢sÆÚ)Teceives a Section Read event °dONLNd5Ølªy(∏l=each time a new edition becomes available for this subscriberñ‡°dONLNdrØyª{(∏y..°dONLNdt¡lÕê( l    If an errR`°dONLNd}¡êÕœ)$or is encounter$¿°dONLNdå¡œÕÒ)?ed, the $¿°dONLNdî¡ÒÕ-)"
  3477. NewSection$¿°dONLNdû¡-ÕY)<  function r˜ °dONLNd©¡XÕu)+eturns ˜ °dONLNd∞¡uÕá)NILò¿°dONLNd≥¡áÕ¶) in the ò¿°dONLNdª¡¶Õ÷)sectionHò¿°dONLNd√¡÷Õÿ)0 °dONLNdƒŒl⁄ì(◊lparamet°dONLNdÀŒì⁄ò)'e°dONLNdÃŒò⁄ú)r¬†°dONLNdÕŒõ⁄û).¬†°dONLNdŒŒû⁄†) ¬†°dONLNdœŒ†⁄÷) Otherwise, ¬†°dONLNd⁄Œ÷⁄)6
  3478. NewSection¬†°dONLNd‰Œ⁄)< rï°dONLNdÊŒ⁄–)*eturns a handle to the allocated section rg`°dONLNdŒ–⁄‚)∏ecor9¿°dONLNdŒ‚⁄ı)d in °dONLNd€lÁ~(‰lthe °dONLNd€~ÁÑ)s°dONLNd€ÑÁ®)ection°dONLNd$€®ÁÆ)$H°dONLNd%€ÆÁ‡)
  3479.  parameter¬†°dONLNd/€flÁ‚)1.ˇC @ˇ ˇˇˇˇ@
  3480. ˇ·ˇ‚7^
  3481. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äUsing the Edition Manager
  3482. , (‡2-19
  3483. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  3484. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  3485. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  3486. 4€4—?òÄ
  3487. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  3488. ˛ˇˇˇ
  3489. ˛ˇˇˇ
  3490. ˛ˇˇˇ
  3491. ˛ˇˇˇ˜˝˛ˇ˛
  3492. ˛ˇ˛ˇˇ
  3493. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  3494. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  3495. ˛ˇ˛ˇˇ
  3496. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  3497. ˛ˇˇˇˇ
  3498. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  3499. ˛ˇˇˇˇ
  3500. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  3501. ˛ˇˇˇˇ
  3502. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿.°dONLNd\äh≠(eäSet the ,
  3503. Courier°dONLNd\≠hÔ)# initialMode°dONLNd\Ôh)B@ parameter to the update mode for each subscriber and publisher .°dONLNdSiäuí(räcrµ@°dONLNdUiíuÆ)eated. y°dONLNd\iØuµ)Y9Ä°dONLNd]iµu§)5ou can specify the update mode using these constants:.°dONLNdìÄäå®(âäCONST°dONLNdõÄ¿å)6 sumAutomatic°dONLNd¨Äå2)Z= 0;°dONLNd≥ÄPåÏ)6{subscriber receives new }°dONLNdŸéPöÊ*{ editions automatically}°dONLNdˆú¿®ˆ(•¿    sumManual°dONLNdú®2)Z= 1;°dONLNd úP®Ï)6{subscriber receives new }°dONLNd1™P∂»*{ editions manually}°dONLNdI∏¿ƒˆ(¡¿    pumOnSave°dONLNdW∏ƒ2)Z= 0;°dONLNd^∏Pƒ‘)6{publisher sends new }°dONLNdÄΔP“¬*{ editions on save}°dONLNd󑿇ˆ(›¿    pumManual°dONLNd•‘‡2)Z= 1;°dONLNd¨‘P‡Ï)6{publisher does not send }°dONLNd“‚PÓÚ*{ new editions until user }°dONLNdı¸(˘ °dONLNd˙P¸å)H
  3504. { request}.°dONLNdäõ(äSee ”°dONLNd    õ≠);“Using Publisher and Subscriber Options” beginning on page æ`°dONLNdDÆ¿(Æ2-43@°dONLNdH¡˘) for detailed °dONLNdVä!¨(ä@information on update modes for publishers and subscribers. See Ÿ`°dONLNdñ¨!⁄(¨ Listing 2-4y†°dONLNd°€! )/  beginning .°dONLNd¨"ä.ñ(+äon °dONLNdØ"ñ.Æ) page °dONLNd¥"Æ.¡)2-33°dONLNd∏"¡.%) for code that uses the °dONLNd–"%.a)d
  3505. NewSection°dONLNd⁄"a.ú)< function to crR`°dONLNdÈ"ú.Ê);eate a publisherï°dONLNd˘"Â.¸)I. See °dONLNdˇ/ä;‡(8äListing 2-6 on page °dONLNd/‡;È)V2-°dONLNd/È;Û)    40°dONLNd/Û;E)
  3506.  for code that uses °dONLNd+/E;Å)R
  3507. NewSection°dONLNd5/Å;ñ)< to crR`°dONLNd;/ñ;‡)eate a subscriberï°dONLNdL/fl;‰)I. 
  3508. `Hg4aHg bäb
  3509. ˇ·ˇ‚7^ˇˇ‹..ˇ◊°dONLNdPQä`(\ä%Saving a Document Containing Sectionsˇˇˇˇˇˇ€r(\2
  3510. °dONLNdwgäs¯(päQWhen saving a document that contains sections, you should write out each section .°dONLNd»täÄé*rR`°dONLNd…téĆ)ecor$¿°dONLNdÕt†Ä¿)d as a r˜ °dONLNd’tøÄ÷)esour…Ä°dONLNd⁄t÷Ä) ce of type …Ä°dONLNdÂtÄ')-'sect'…Ä°dONLNdÎt'Äù)$ and write out each alias rõ‡°dONLNdtùÄØ)vecorn@°dONLNd
  3511. tØÄœ)d as a r@†°dONLNdtœÄÊ) esour°dONLNdtÊÄ) ce of type °dONLNd"ÅäçÆ(ää'alis'°dONLNd(ÅÆçE)$" with the same ID as the section rR`°dONLNdJÅEçW)óecor$¿°dONLNdNÅWçÜ) d. See the $¿°dONLNdYÅÜç±)/    chapter “$¿°dONLNdbűçœ)+Resour˜ °dONLNdhÅŒç)
  3512. ce Manager˜ °dONLNdrÅç)3”˜ °dONLNdsÅç) ˜ °dONLNdtÅç)in .°dONLNdwéäöÊ(óäInside Macintosh: Mor¯Ä°dONLNdåéÊö)\e Macintosh TÆ°dONLNdôéö8)9oolboxÖ†°dONLNdüé9ö>) fYÄ°dONLNd°é?ö∫)or detailed information on rf¿°dONLNdΩé∫ö“){esourØ°dONLNd¬é“ö‰)ces. °dONLNd»†ä¨e(©ä2If a user closes a document that contains newly crc†°dONLNd˙†e¨)€'eated publishers without attempting to °dONLNd!≠äπ‡(∂äOsave its contents, you should display an alert box similar to the one shown in §¿°dONLNdp≠‡π¯(∂‡FigurwÄ°dONLNdu≠¯π)e 2-10°dONLNd{≠π).
  3513. €HÏ4‹HÏ"‹H]
  3514. ˇ·ˇ‚7^    °dONLNd~—ä‹∫(Ÿä Figure 2-10°dONLNdä—Ë:)BThe new publisher alert box
  3515. ÎàZòÄ4XùHH\*DˇˇˇˇˇˇXùÏäÃñŒˇ¯ÄœÄœüœˇ»üœˇ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»
  3516. ò˝‘»
  3517. ò˝<‘»
  3518. ò˝<‘»*ò˝f˝ÿ˚˛Ä ˚Ä0˝ĸ»)ò˝f˝˚˛Ä˙Ä0˝ĸ»3ò˝√˝%‡f√««Ä·„„«å¯pòôüé>6pèIJ»1ò˝√˝ôê332˝fcì31àÃûôôò˝ô338»ôôIJ»4ò˛ÅIJô¿330˝fcÉ31áÃÇôôòôôú330‡ôIJ»5ò˛ôIJ%ò‡330ffgÊcÉ31åÃÃpüôòôôé3?0pôIJ»5ò˛<¿˛òp330˛fcÉ31åÃÃ8òòôôá3008ôIJ»5ò˛<¿˛ô0332˛f&cì31åÃÃòòôêôôì310ôÄôIJ»5ò˛<`˛%ò‡>fcΔaÄ·„0«ÃÃpè‡üé30qÄIJ» ò˛<`’» ò˛ <0’» ò˛ <0’» ò˛<’» ò˛<’» ò˛0< ’» ò˛0< ’»%ò˛`<˙`˝˚¿`˛ˆ»%ò˛`˙`˝˚¿`˛ˆ»0ò˛¿˛ ¸f8<f<ü‡f√««Å„¿f<<|ü˘»/ò˛¿˛ffd`2Fffôê332˝fcΔ`l˛fôôò˘»/òÄÄffp`8>ffô¿330˝fcΔ`x˛fôôò˘»0*òÄÄff8`ff~ò‡330ffgÊcΔ`p~~füôò˘»0ò<¿ff`ff`òp330˛fcΔ`x``fòò˘»1ò<¿ffL`&fdbô0332˛f&cΔ`lbbfòôôÄ˙»1+ò`f>80>x<ôò‡>fcΔaÄc¿f<<|ôèôÄ˙»ò˛`‰`Ù»ò ˛0‰`Ù»ò˛ˇ÷»ò˛ˇ‡÷»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»(ò¯IJĸ0‡?0ĸÄ˚»(ò¯@˛ĸ0Ä 0ĸÄ˚»,ò¯å«ÄqÒ¯‡<x>˛á <fxè3?·„„¿˚»+ò¯Ãÿ…ô˛ôêÃ33å»Ãôåff0ôô˝31Ä˚»+ò¯áÃÿ¡ò˘˛ô¿Ã33å«Ãåff0ôò˝31Ä˚»+ò¯ÃÃœ¿¡˝ô¯‡Ã3?èÃÃå~<0ôò˛3Û1Ä˚»)ò˜˛Ã¡˝ôÄpÃ30å Ãå`f0ôò˛31Ä˚»+ò¯ÃÃå@…˝ôâ0Ã31åLÃôåbf0ôô˛31Ä˚»,ò¯"áœÄqò˘ò¯‡ x3áá«å<fè31„0¿˚»
  3519. òÔ‚» ò‚»
  3520. òÔ‚»òœ»òœ»òœ»òœ»ò¯ @1å ÿ˝0<Ó»ò¯ Äå ÿ ˝0˝FÓ»ò¯Ãœè3Ãx|H<l1·Δ|>Ó»ò¯ÃÃΔ1åÃÃêôåfqò33&ff Ó»ò˜ ÃΔ1åÃÃôåfaò33ÜffÓ»ò˜ ÃΔ1å¸Ãüåfa¯31ΔffÓ»ò˜ ÃΔ1å¿Ãò faÄ30ÊffÌ»ò˜ ÃΔ1åƒÃòåfaà32˛fÓ»ò˜Ã√0Ãx| <`1·Δf>Ó»
  3521. ò‰Ì»
  3522. ò‰FÌ»
  3523. ò‰<Ì»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»ò›˜ˇÄ»ò›˜ˇ‡»ò›˜ˇ»ò›˜x»ò¯?¯ˇÄ˚˙ˇ¯˘ˇ˛8»ò¯¿¯`¸Ä˙=Ģº»ò¯Ä¯ ¸˘9˜ú»ò˘˜¸˘:˜\»ò˘˜¸˘:˜\»+ò˘¯Δ¿˛¸‡˛:˛p˚\»+ò˘ÃΔ ˛¸˛:˛»˚\».ò˘ Ãx¯OΔc¿¸ „·√Δ:˛¿Òò˛\».ò˘˛ÃÜÑff`¸ 33&f:˛·ôò˛\».ò˘˛Ã√Êf`¸ Û3f:˛p˘ôò˛\».ò˘˛ÃÊfg‡¸ 33Ê:˛9ôô¯˛\».ò˘˛Ã˛f¸ 33:˛ôôIJ\».ò˘˛ÃffF ¸ 33&&:˛ôôëà˛\».ò˘ ¯xÃ√ÁÉ¿¸ ·Û1√Δ:˛p˘‡˛\»ò˘˜¸˘:˜\»ò˘˜¸˘:˜\œò˘˜¸˘:˜\»ò¯Ä¯ ¸˘9˜ú»ò¯¿¯`¸Ä˙=Ģºœò¯?¯ˇÄ˚˙ˇ¯˘ˇ˛8œò›˜¯»ò›˜ˇ»ò›˜ˇ‡»ò›˜ˇÄ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»òœ»üœˇ»üœˇ»ÄœÄœ Œˇ˙ÕŒŒŒŒÕÕÕÕÕÕÕÕÕŒŒŒŒŒŒŒÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕŒŒŒÕŒÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕŒŒŒÕŒÕÕÕÕ& üx‚˝80»˙@¬@˛¿ı%
  3524. ÄÑĸD0H˙@@@˛@ı/)@ÄÄDπ¿Ñ √àà"xFXqp8Cã∏"¯/)@`Ä"D¬ Ñ ë$Hà"DB"dâÄDDLë"¯/)ê@Ĭ"DÇ |Ñë$EP"DB Dâ<DHë¯/)\·Ä"DɇÑü'≈P"DBD˘DG»ë¯/)@Ä"DÇ Ñê$ "DBDÅDDë¯/)ÄÑÄ"LÇ @Hë$B &DB"DâDDHë"¯/)üx4Å¿|0é#Ç xBDq<Cà "¯
  3525. ıÛÈ
  3526. ı"ÛÈı⁄ÕՌՌŒŒÕÕÕÕÕÕÕÕÕÕÕŒŒÕ    !@◊˛¿ÿcå8∞G<qp‹"!D»Hô"DâÄ‹"!DàGëDâ€"!DàHë"D˘€"!DàHë"DÅ€"!DàHë"D†ƒ8àGë<q€ı⁄ıD⁄ı8⁄ÕÕÕÕ+Ä @  ˝¸A¯(Ä ¿  ˝˛!˘@¯0,é" "√å<pG1cá,"«.q„¬0·«q` Yã1Δ8„,˙0,ë" #$DDàHëëë2#"0â""âê "fL…""DA2˙0,ë@"$DàGêê""" y"‚â "DHâ" <A"˙0,ü@"#ÑD¯Hêé""" â""â "DHâ" DA"˙0,êÄ" DDÄHêÅ""" â""â "DHâ" DA"˙0,ëÄ"$DDàHëë""" â""â!"DHâ2""DA"˙0,éÄ"#Ñ<pGé«" "!é y„¬··àqDHà“"<1"˙ Ó ˝Á Ó@˝ÁÕÕÕÕÕ0˝›!˝›‡ Yè8qp,8flë "fHëâÄ2Dflàë "DHëâ"@flàë "DHë˘"@fl»ë "DHëÅ"@flHë!"DHìâ"DflO‡DO q"8fl˛¸˛˛@‡˛¸˛‹ˇl@ˇ ˇˇˇˇ@
  3527. ˇ·ˇ‚7^
  3528. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  3529. (‡*2-20    )BUsing the Edition Manager4^*¿¯
  3530. °dONLNd\lh÷(elIf you keep the section rmÄ°dONLNd\÷hË)jecor·‡°dONLNd\Ëh")ds and alias rzÄ°dONLNd+\#h5);ecorÓ‡°dONLNd/\5h„)(ds for each publisher and subscriber as .°dONLNdWilup(rlrR`°dONLNdXipuá)esour$¿°dONLNd]iáufi)ces, you can use the ,
  3531. Courier$¿°dONLNdrifiu8)WChangedResource$¿°dONLNdÅi8uE)Z or $¿°dONLNdÖiEuì)WriteResource$¿°dONLNdíiìu⁄)N function. If you .°dONLNd§vlÇ¡(ldetach the section rÙ@°dONLNd∏v¡Ç”)Uecorh†°dONLNdºv‘Ç)ds and alias r@°dONLNd vÇ!);ecoru†°dONLNdŒv!Ç5)ds frg@°dONLNd”v5Ç·)'om each section, you need to clone the .°dONLNd˙Élè»(ålhandles and use the °dONLNdÉ»è
  3532. )\ AddResource°dONLNdÉ
  3533. è¢)B" function. See the chapter “ResourR`°dONLNd;É¢èÁ)òce Manager” in .°dONLNdJêlú»(ôlInside Macintosh: Mor¯Ä°dONLNd_ê»ú)\e Macintosh TÆ°dONLNdlêú)9oolboxÖ†°dONLNdrêú®)! for detailed information on the .°dONLNdìùl©Δ(¶lChangedResource°dONLNd¢ùΔ©À)Z, °dONLNd§ùÀ©)WriteResource°dONLNd±ù©1)N, and °dONLNd∑ù1©s) AddResource°dONLNd¬ùs©†)B  functions.°dONLNdŒØlªë(∏lUse the °dONLNd÷ØëªÎ)%PBExchangeFiles°dONLNdÂØΪ5)Z function to ensurR`°dONLNd˜Ø5ª<)Je R`°dONLNd˘Ø<ªl)
  3534. that the fiR`°dONLNdØlªâ)0le ID r$¿°dONLNd Ø⪀)emains the same e$¿°dONLNdØ€ªÓ)Rach .°dONLNd ºl»<(≈l.time you save a document that contains sectioni‡°dONLNdNº=»C)—s.&‡°dONLNdPºD»t)  Saving a fi‚Ä°dONLNd\ºt»◊)0le typically involves cr@†°dONLNdtºÿ»ı)deating °dONLNd{…l’é(“la new fi~¿°dONLNdÉ…è’Í)#Rle (with a temporary name), writing data to it, closing it, and then deleting the °dONLNd’÷l‚ó(fll
  3535. original fiéÄ°dONLNd‡÷ó‚—)+le that you arÁ`°dONLNdÓ÷—‚‹):e rˆ°dONLNdÒ÷‹‚)
  3536. eplacing. 5†°dONLNd˚÷‚)+Yˆ °dONLNd¸÷ ‚)ou r∑¿°dONLNd÷‚Ö)ename the temporary fi&Ä°dONLNd÷Ü‚‹)hle with the original .°dONLNd+„lÔs(Ïlfi°dONLNd-„sÔ)lename, which leads to a new fi°dONLNdL„Ô2)è le ID. The °dONLNdW„2Ôå)0PBExchangeFiles°dONLNdf„åÔ‰)Z function swaps the .°dONLNdzl¸»(˘lcontents of the two fiV@°dONLNdê…¸)]les (even if they ar¿°dONLNd§¸ÿ)Q,e open) by getting both catalog entries and °dONLNd–˝l    !(l*swapping the allocation pointers. If the fi °dONLNd˚˝!    8)µles ar$ °dONLNd˝9    q)e open, the fiÍÄ°dONLNd˝q    í)8le contr€°dONLNd˝í    ‹)!ol block (FCB) is °dONLNd)
  3537. l»(lupdated so that the rw¿°dONLNd>
  3538. »ÿ)\efer#‡°dONLNdB
  3539. Ÿÿ)9ence numbers still access the same contents (under a new .°dONLNd{l#ò( l    name). Se°dONLNdÑò#ü),e .°dONLNdÜü#¸)Inside Macintosh: Files.F‡°dONLNdù˝#)^ fF‡°dONLNdü#é)or detailed information on the F‡°dONLNdæé#Ë)ãPBExchangeFilesF‡°dONLNdÕË#Í)Z .°dONLNdŒ$l0ì(-l    function.°dONLNdÿ6lBö* Listing 2-2 @°dONLNd„6õB)/ illustrates how to save a fi™‡°dONLNd6B—)u0le that contains sections. If the contents of a °dONLNd0ClOÇ(Ll?publisher have changed since the last save, the application-defiÒ‡°dONLNdpCÇOü(LÇned prÔ¿°dONLNdvCüOΩ)ocedurá°dONLNd|CæO≈)e .°dONLNd~Pl\¿(YlMySaveDocument°dONLNdåP¿\)T writes the publisher=`°dONLNd°P \€)`.’s data to its edition. It then writes out to .°dONLNdœ]li|(flthe ›`°dONLNd”]|i˝)saved document the section r͇°dONLNdÔ]˝i)Åecor_@°dONLNdÛ]iJ)ds and alias r˜‡°dONLNd]Ji\):ecorl@°dONLNd]]iΔ)ds of all publishers and .°dONLNdjlv°(slsubscribers. °dONLNd+j°vı)5MySaveDocument°dONLNd9jıvÅ)T calls another application-defi°dONLNdXjÅvó)åned rR`°dONLNd]jóv∏)outine, °dONLNdewlÉÍ(ÄlMyGetSectionAliasPair¬†°dONLNdzwÈÉ˝)}, to rï°dONLNdÄw˝ÉX)eturn a handle and rg`°dONLNdîwXÉo)[esour9¿°dONLNdôwoÉø)ce ID to a section. €`°dONLNd≠wæÉÃ)OAs .°dONLNd∞Ñlêµ(çldescribed earlierfÄ°dONLNd¡ѵêr)I-, you should write out the eligible section rT¿°dONLNdÓÑrêÑ)Ωecor… °dONLNdÚÑÑêæ)ds and alias ra¿°dONLNdÑøê—);ecor÷ °dONLNdÑ—êÈ)ds as °dONLNd
  3540. ëlùo(ölrE°dONLNd ëpùà)esourç@°dONLNdëàù‰)ces to allow for futur~¿°dONLNd&ë‰ù&)\e compatibility•Ä°dONLNd5ë%ù>)A. Ther&@°dONLNd;ë?ùO)e ar4‡°dONLNd?ëOùÑ)e several difz`°dONLNdLëÑùê)5fer\‡°dONLNdOëêù·) ent techniques for °dONLNdbûl™Ω(ßlsaving or adding rŸ†°dONLNdtûΩ™’)Qesour!‡°dONLNdyû÷™Ì)Cces; this listing illustrates one technique. The section handles ar˛†°dONLNdºûÏ™Û(ßÏe .°dONLNdæ´l∑‚(¥lstill valid after using the °dONLNd⁄´‚∑$)v AddResource°dONLNd´$∑Ë)B0 function because this listing illustrates just .°dONLNd∏lƒŸ(¡lsaving, not closing, the fisÄ°dONLNd0∏⁄ƒ‰)nle.°dONLNd4 l÷É(”lBeforÛ¿°dONLNd9 É÷∏)He you write out sections, you need to see if any publisher sections shar¡¿°dONLNdÅ π÷Í(”π e the same °dONLNdå◊l„Ç(‡lcontr>Ä°dONLNdë◊É„)ol block. Publishers that sharõÄ°dONLNdØ◊„I)e the same contr[†°dONLNdø◊J„Ç)Hol block sharq¿°dONLNdÃ◊Ç„‘)8e the same edition.°dONLNd‡Èlıö(Úl If a user crË°dONLNdÏÈöı).eates an identical copy of a fi;†°dONLNd     Èıs)Äle by choosing Save  °dONLNd    Èsıà)YAs fr•@°dONLNd    $ÈàıÎ)om the File menu and .°dONLNd    9ˆl!(ˇl'does not make any changes to this new fi°dONLNd    aˆ!Ö)µle, you simply use the °dONLNd    xˆÖÂ)dAssociateSection°dONLNd    àˆÂÁ)` .°dONLNd    âlÿ( lRfunction to indicate to the Edition Manager which document a section is located inLJ°dONLNd    €ÿ⁄( ÿ.ˇ3‹@ˇ ˇˇˇˇ@
  3541. ˇ·ˇ‚7^
  3542. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äUsing the Edition Manager
  3543. , (‡2-21
  3544. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  3545. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  3546. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  3547. 4€4—?òÄ
  3548. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  3549. ˛ˇˇˇ
  3550. ˛ˇˇˇ
  3551. ˛ˇˇˇ
  3552. ˛ˇˇˇ˜˝˛ˇ˛
  3553. ˛ˇ˛ˇˇ
  3554. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  3555. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  3556. ˛ˇ˛ˇˇ
  3557. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  3558. ˛ˇˇˇˇ
  3559. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  3560. ˛ˇˇˇˇ
  3561. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  3562. ˛ˇˇˇˇ
  3563. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  3564. gHn4gHn"hH_
  3565. ˇ·ˇ‚7^    °dONLNd\äg∂(dä Listing 2-2°dONLNd\Œgj)D%Saving a document containing sections,
  3566. Courier
  3567. .°dONLNd4väÇΔ(ä
  3568. PROCEDURE °dONLNd>vΔÇ“)<My°dONLNd@v“LJ) -SaveDocument(thisDocument: MyDocumentInfoPtr;°dONLNdsщê+  °dONLNdxÑê )6 °dONLNdyÑ êº)numberOfSections: Integer)°dONLNdìѺê¬)ú;°dONLNdïíäûê(õäV°dONLNdñíêûñ)A°dONLNdóíñûú)R°dONLNdö†ú¨¢+a°dONLNdõ†¢¨ÿ)    SectionH:°dONLNd™†¨V)fSectionHandle°dONLNd∑†V¨\)N;°dONLNd∫Æú∫¢(∑úc°dONLNdªÆ¢∫ˆ)opiedSectionH:°dONLNdœÆ∫,)fHandle°dONLNd’Æ,∫2)$;°dONLNdÿºú»¢(≈úc°dONLNdŸº¢»Í) opiedAliasH:°dONLNdκ»,)fHandle°dONLNdÒº,»2)$;°dONLNdÙ ú÷¢(”úr°dONLNdı ¢÷¿)esID:°dONLNd ÷2)fInteger°dONLNd 2÷8)*;°dONLNd
  3569. ÿú‰¢(·út°dONLNd ÿ¢‰Ã)hisone:°dONLNdÿ‰2)fInteger°dONLNdÿ2‰8)*;°dONLNd"ÊúÚ¿(ÔúmyErr:°dONLNd.ÊÚ,)lOSErr;°dONLNd5Ùä¢(˝äBEGI°dONLNd9Ù¢®)N°dONLNd<ú¢( úF°dONLNd=¢Ä)%OR thisone := 1 TO numberOfSections D°dONLNdbÄÜ)fiO°dONLNdeú¢(úB°dONLNdf¢¥)EGI°dONLNdi¥∫)N°dONLNdmÆ*¥('Æa°dONLNdn¥*¸) SectionH := °dONLNdz¸*)HMy°dONLNd|*˛) )GetSectionAliasPair(thisDocument, thisone°dONLNd•˛*
  3570. )ˆ, °dONLNdµ,t8Ä(5t  °dONLNd∑,Ä8Ü) r°dONLNd∏,Ü8§)esID)°dONLNdΩ,§8™);°dONLNd¡:ÆF¥(CÆI°dONLNd¬:¥FÜ)#F (aSectionH^^.kind = stPublisher) °dONLNdÂ:ÜFå)“&°dONLNdÍH¿TΔ(Q¿(°dONLNdÎHΔTz)aSectionH^^.mode = pumOnSave) °dONLNd    HzTÄ)¥&°dONLNdV¿b“(_¿(My°dONLNdV“bå)CheckForDataChanged(aSectionH))°dONLNd0Våb™)∫ THEN°dONLNd9d¿pΔ(m¿D°dONLNd:dΔpJ)oWriteEdition(aSection°dONLNdPdJpV)ÑH)°dONLNdRdVp\) ;°dONLNdUrú~¢({úE°dONLNdVr¢~¿)ND; {°dONLNd[r¿~Í)end of °dONLNdbrÍ~¸)*for°dONLNder¸~)}°dONLNdhÄúåÆ(âú{se°dONLNdkÄÆå)t the curResFile t°dONLNd}Äå,)lo t°dONLNdÄÄ,åÊ)he resource fork of thisDocumen°dONLNdüÄÊåÚ)∫t}°dONLNd£éúö¢(óúU°dONLNd§é¢öÜ)&seResFile(thisDocument^.resForkRefNum)°dONLNd éÜöå)‰;°dONLNdÕúú®Æ(•ú{wr°dONLNd–úÆ®Œ)0ite all section and alias records to the documen°dONLNdúŒ®⁄(•Œt}°dONLNd™ú∂¢(≥úF°dONLNd™¢∂Ä)%OR thisone := 1 TO numberOfSections D°dONLNd*™Ä∂Ü)fiO°dONLNd-∏úƒ¢(¡úB°dONLNd.∏¢ƒ¥)EGI°dONLNd1∏¥ƒ∫)N°dONLNd5ΔÆ“¿(œÆ{gi°dONLNd8Δ¿“¯)4ven an index, get the next section handle and resID °dONLNdlΔ¯“˛(œ¯}°dONLNdp‘Ƈ¥(›Æ{°dONLNdq‘¥‡⁄)1 from your internal list of sections for this fil°dONLNd¢‘⁄‡Ê(›⁄e}°dONLNdß‚ÆÓ¥(ÎÆa°dONLNd®‚¥Ó¸) SectionH := °dONLNd¥‚¸Ó)HMy°dONLNd∂‚Ó
  3571. ) +GetSectionAliasPair(thisDocument, thisone, °dONLNdÔt¸Ä+l  °dONLNdÒĸÜ) r°dONLNdÚܸ§)esID)°dONLNd˜§¸™);°dONLNd˚˛Æ
  3572. ¿(Æ{ch°dONLNd˛˛¿
  3573. º)*eck for duplication of control block value°dONLNd(˛º
  3574. »)¸s}°dONLNd- Æ¿(ÆMyC°dONLNd0 ¿»),heckForDupes(thisDocument, numberOfSections)°dONLNd\ »Œ(»;°dONLNd`Æ&¿(#Æ{sa°dONLNdc¿&P)ve section record to dis°dONLNd{P&\)êk}°dONLNdÄ(Æ4¥(1Æc°dONLNdÅ(¥4Ä)"opiedSectionH := Handle(aSectionH)°dONLNd£(Ä4Ü)Ã;°dONLNdß6ÆB‰(?Æ    myErr := °dONLNd∞6‰BÍ)6H°dONLNd±6ÍBÄ)andToHand(copiedSectionH)°dONLNd 6ÄBÜ)ñ;°dONLNdŒDÆP¥(MÆA°dONLNdœD¥PÊ)3ddResource(copiedSectionH, rSectionType, resID, '')°dONLNdDÊPÏ(MÊ;°dONLNdRÆ^¿([Æ{sa°dONLNd    R¿^D)ve alias record to dis°dONLNdRD^P)Ñk}°dONLNd$`Æl¥(iÆc°dONLNd%`¥l§)(opiedAliasH := Handle(aSectionH^^.alias)°dONLNdM`§l™);°dONLNdQnÆz‰(wÆ    myErr := °dONLNdZn‰zÍ)6H°dONLNd[nÍzt)andToHand(copiedAliasH)°dONLNdrntzz)ä;°dONLNdv|Æà¥(ÖÆA°dONLNdw|¥à⁄)1ddResource(copiedSectionH, rAliasType, resID, '')°dONLNd®|⁄à‡(Ö⁄;°dONLNd´äúñ¢(ìúE°dONLNd¨ä¢ñ¿)ND; {°dONLNd±ä¿ñÍ)end of °dONLNd∏äÍñ¸)*for°dONLNdªä¸ñ)}°dONLNdæòú§Æ(°ú{wr°dONLNd¡òƧP)ite rest of document to dis°dONLNd‹òP§\)¢k}°dONLNdfl¶ä≤ú(ØäEND°dONLNd‚¶ú≤®); ˇ@ˇ ˇˇˇˇ@
  3575. ˇ·ˇ‚7^
  3576. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  3577. (‡*2-22    )BUsing the Edition Manager4^*¿¯
  3578. k*r¯4l*r¯ mlm¯
  3579. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd\lk∑(gl2Opening and Closing a Document Containing Sectionsˇˇˇˇˇˇ€r(g2
  3580. °dONLNd4rl~ÿ({lPWhen opening a document that contains sections, your application should use the ,
  3581. Courier.°dONLNdÑlãÆ* GetResource°dONLNdèÆã()B function to get the section rR`°dONLNd≠(ã:)zecor$¿°dONLNd±:ãÖ)d and the alias r˜ °dONLNd¬Ñãñ)Jecor…Ä°dONLNdΔñãÛ)d for each publisher ˇˇ¨°dONLNd€ålò™(ïland subscribern®°dONLNdÈå™ò—)>
  3582. . Set the ˇˇr¿°dONLNdÛå—òÔ)'aliasˇˇ¨r¿°dONLNd¯åÔò˜) fi»°dONLNd˚å¯òI)    eld of the section r°H°dONLNdåIò[)Qecors®°dONLNdå[ò·)d to be the handle to the alias'‡°dONLNd2å‚ò¯)á. See .°dONLNd8ôl•ƒ(¢lthe chapter “Resourñ°dONLNdKôƒ•
  3583. )Xce Manager” in õ†°dONLNdZô
  3584. •f)FInside Macintosh: Mor °dONLNdoôg•†)]e Macintosh TË@°dONLNd|ôü•∏)8oolbox°@°dONLNdÇôπ•–) for dy°dONLNdàô—•Ò)etailed .°dONLNdê¶l≤¬(Ølinformation on the °dONLNd£¶¬≤)V GetResource°dONLNdƶ≤*)B     function°dONLNd∑¶*≤-)&.°dONLNdπ∏lƒs(¡lYï°dONLNd∫∏rƒπ)ou also need to rg`°dONLNdÀ∏πƒ>)Gegister each section using the g`°dONLNdÍ∏>ƒò)ÖRegisterSectiong`°dONLNd˘∏òƒ◊)Z function. The °dONLNd≈l—Δ(ŒlRegisterSection°dONLNd≈Δ—œ)Z< function informs the Edition Manager that a section exists.°dONLNdT‹lËí(Âl1err := RegisterSection(sectionDocument, sectionH,°dONLNdçÍ͈\+~  aliasWasUpdated);ˇˇ—°dONLNd°l( lThe ˇˇs0Q°dONLNd•Ä⁄)RegisterSectionˇˇ—Q°dONLNd¥⁄P)Z function adds the section r8¿°dONLNd–Pb)vecor  °dONLNd‘b“)d to the Edition Manager ¿°dONLNdÏ”¯)q ’s list of ˇˇ«Ê°dONLNd˜lp(lrR`°dONLNd¯pè)egister$¿°dONLNdˇèN),ed sections. This function assumes that the ˇˇW≤ú
  3585. °dONLNd+Nl)øaliasˇˇ«Êú
  3586. °dONLNd0lt) fic°dONLNd3uÕ)    eld of each section rUË°dONLNdHÕfl)Xecor(H°dONLNdLfl¯)d is a .°dONLNdSl(√(%lhandle to the alias rXÄ°dONLNdh√(’)WecorÇ°dONLNdl’()d. The alias rw °dONLNdz( )9ecorÎÄ°dONLNd~ (=)d is a rq†°dONLNdÜ>(N)efer¿°dONLNdäO(’) ence to the edition container frœ†°dONLNd™’(ˆ)Üom the .°dONLNd±)l5fl(2lsection’s document. If the °dONLNdÃ)fl59)sRegisterSection°dONLNd€)95Ô)Z+ function successfully locates the edition .°dONLNd6lB?(?l4container for a particular section, the section is r6 °dONLNd:6@B])‘egisterÖ@°dONLNdA6]Bw)ed thr√`°dONLNdG6wB™) ough a shars‡°dONLNdR6´Bœ)4ed contró¿°dONLNdZ6œBˆ)$
  3587. ol block. °dONLNddClOñ(Ll    The contrz@°dONLNdmCñOÙ)*ol block is a private fi˛Ä°dONLNdÖCÙOE)^eld in the section r‡°dONLNdôCFOX)RecorÖ@°dONLNdùCXO`)d..°dONLNd†Ulaà(^lIf the °dONLNdßUàa‚)RegisterSection°dONLNd∂U‚a0)Z function cannot fi°dONLNd…U0aÊ)N*nd the edition container for a particular °dONLNdÛblnò(kl
  3588. subscriber¬†°dONLNd˝bónú)+, ¬†°dONLNdˇbúnˆ)RegisterSection¬†°dONLNdbˆn¸)Z rï°dONLNdb¸n+) eturns the ï°dONLNdb+n£)/containerNotFoundWrnï°dONLNd/b£n©)x rg`°dONLNd1b©n‰)esult code. If °dONLNd@ol{~(xlthe °dONLNdDo~{ÿ)RegisterSection°dONLNdSoÿ{&)Z function cannot fi°dONLNdfo&{‹)N*nd the edition container for a particular °dONLNdê|làò(Öl    publisher¬†°dONLNdô|óàú)+, ¬†°dONLNdõ|úàˆ)RegisterSection¬†°dONLNd™|ˆà)Z crï°dONLNd≠|àÔ)
  3589. 6eates an empty edition container for the publisher in .°dONLNd„âlï‚(ílUthe last place the edition was located. The Edition Manager sends your application a °dONLNd8ñl¢ò*    Section W-‡°dONLNdAñò¢ ),rite event for that section. °dONLNd_®l¥Ú(±lVWhen a user attempts to open a document that contains multiple publishers to the same °dONLNdµµl¡Ü*@edition, you should warn the user by displaying an alert box (se¶°dONLNdıµÜ¡ç(æÜe Ô†°dONLNd˜µç¡…)“Duplicating °dONLNd¬lŒ(Àl$Publishers and Subscribers” on page ◊@°dONLNd(¬Œ")§2-58+ °dONLNd,¬#Œ&))°dONLNd-¬&Œ().°dONLNd/‘l‡Î(›lTWhen a user opens a document that contains a subscriber (with an update mode set to °dONLNdÉ·ļ*automatic), rΔ‡°dONLNdê·§ÌÈ)8Geceives a new edition, and then closes the document without making any °dONLNd◊Ól˙≥(˜lchanges to the fiJ¿°dONLNdËÓ¥˙Ô)HFle, you should update the document and simply allow the user to close °dONLNd.˚lw(lit. } °dONLNd2˚w}) Y=†°dONLNd3˚}◊)ou do not need to prT °dONLNdG˚◊Ä)Z&ompt the user to save changes to the fio`°dONLNdn˚Äá)©le!`°dONLNdq˚àä).°dONLNdslÅ(l<When closing a document that contains sections, you must unrj°dONLNdØŘ(Åegister each section (using .°dONLNdÀl&~(#lthe °dONLNdœ~&‰)UnRegisterSection°dONLNd‡‰&{)f# function) and dispose of each corrR`°dONLNd    {&œ)óesponding section r$¿°dONLNd    œ&·)Tecor˜ °dONLNd    ‡&Ë)d .°dONLNd    'l3ô(0l and alias r?‡°dONLNd    ''ö3¨).ecor¥@°dONLNd    +'¨3¥)d..°dONLNd    .>lJˆ(Glerr := UnRegisterSectio°dONLNd    E>ˆJ)än(°dONLNd    G>J>)
  3590. sectionH);°dONLNd    RVlbÄ(_lThe °dONLNd    VVÄbÊ)UnRegisterSection°dONLNd    gVÊb)f  function rR`°dONLNd    rVbl),emoves the section r$¿°dONLNd    ÜVlb~)Zecor$¿°dONLNd    ãV~bé)d fr˜ °dONLNd    èVçbÀ)om the list of .°dONLNd    ûcloo(llrE°dONLNd    ücpoç)egisterî °dONLNd    ¶cço)!ed sections and unlinks itself frŸ`°dONLNd    «coJ)â om the shar”†°dONLNd    “cJon)4ed contr˜Ä°dONLNd    ⁄cnoì)$    ol block.ˇ42@ˇ ˇˇˇˇ@
  3591. ˇ·ˇ‚7^
  3592. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äUsing the Edition Manager
  3593. , (‡2-23
  3594. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  3595. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  3596. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  3597. 4€4—?òÄ
  3598. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  3599. ˛ˇˇˇ
  3600. ˛ˇˇˇ
  3601. ˛ˇˇˇ
  3602. ˛ˇˇˇ˜˝˛ˇ˛
  3603. ˛ˇ˛ˇˇ
  3604. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  3605. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  3606. ˛ˇ˛ˇˇ
  3607. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  3608. ˛ˇˇˇˇ
  3609. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  3610. ˛ˇˇˇˇ
  3611. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  3612. ˛ˇˇˇˇ
  3613. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\äh∏(eä Listing 2-3 @°dONLNd \πh[)/& illustrates how to open an existing fi‡°dONLNd2\\h…)£le that contains sections. D`°dONLNdM\…h)mAs described °dONLNdZiäu¶(räearlier ‡°dONLNdai¶u„), you should rk¿°dONLNdoi„uc)=etrieve the section and alias rí°dONLNdéicu{)Äesour⁄@°dONLNdìi{u„)ces, connect the pair thri °dONLNd¨i‰u)i    ough the ,
  3614. Courier.°dONLNdµväÇ®(äalias°dONLNd∫v®ÇÆ) fPÄ°dONLNdºvÆÇ)ield of the section r"‡°dONLNd—vÇ)Wecorı@°dONLNd’vÇ8)d, and r«†°dONLNd›v8Ç)",egister the section with the Edition Manager
  3615. @°dONLNd    vÇ)À. .°dONLNd Éäèû(åäTher¿°dONLNdÉüèØ)e ar`°dONLNdÉØèfi)
  3616. e many dif7‡°dONLNdÉfièÍ)/fer`°dONLNd ÉÍè?) ent techniques for rß°dONLNd4É?èm)U etrieving rã¿°dONLNd?ÉmèÖ).esour‘°dONLNdDÉÖè˘)ces; this listing shows one °dONLNd`êäúõ(ôä>technique. If an alias was out of date and was updated by the *Ä°dONLNdûêõúˇ(ôõAlias Manager during .°dONLNd≥ùä©ú(¶äthe °dONLNd∑ùú©†)rR`°dONLNd∏ù†©G)%esolve, the Edition Manager sets the R`°dONLNd›ùG©°)ßaliasWasUpdatedR`°dONLNdÏù°©Ú)Z parameter of the °dONLNd˛™ä∂‰(≥äRegisterSection°dONLNd™‰∂)Z function to °dONLNd™∂/)3TRUE°dONLNd™/∂ )0. This means that you should save the document. .°dONLNdN∑ä√¬(¿ä Additionally‡°dONLNdZ∑¬√ó)82, your application must maintain its own list of rö†°dONLNdå∑ó√¥)’egisterÈ¿°dONLNdì∑¥√ )ed sections for each °dONLNd®ƒä–5(Õä&open document that contains sections. 䇰dONLNdŒƒ5–;)´YK`°dONLNdœƒ;–˝)/ou use this list to write out new editions for °dONLNd˛—ä›8(⁄ä%updated publishers within a document.
  3617. H4H"H_
  3618. ˇ·ˇ‚7^    °dONLNd%ˆä∂*$ Listing 2-3°dONLNd1ˆŒp)D&Opening a document containing sections
  3619. .°dONLNdYäΔ(ä
  3620. PROCEDURE °dONLNdcΔ“)<My°dONLNde“) 5OpenExistingDocument(thisDocument: MyDocumentInfoPtr)°dONLNdö(;°dONLNdúä*ú('äVAR°dONLNd°,ú8“+    sectionH:°dONLNd±,8n)~SectionHandle;°dONLNd¡:úFΔ(CúaliasH:°dONLNdœ:Fb)~ AliasHandle;°dONLNd›HúT¸(QúaliasWasUpdated:°dONLNdÙHTJ)~Boolean;°dONLNd˛Vúb‰(_ú registerErr:°dONLNdVb>)~OSErr;°dONLNddúp¿(múresID:°dONLNd&dpD)~Integer°dONLNd-dDpJ)*;°dONLNd0rú~fi({ú theResType:°dONLNdBr~J)~ResType;°dONLNdLÄúåÃ(âúthisone:°dONLNd[ÄåJ)~Integer;°dONLNdeéúö(óúnumberOfSections:°dONLNd}éöJ)~Integer;°dONLNdáúú®¿(•úaName:°dONLNdîú®>)~Str255°dONLNdöú>®D)$;°dONLNdú™ä∂¢(≥äBEGI°dONLNd†™¢∂®)N°dONLNd£∏úƒ¢(¡úU°dONLNd§∏¢ƒÜ)&seResFile(thisDocument^.resForkRefNum)°dONLNd ∏܃å)‰;°dONLNdÕΔú“Æ(œú{fi°dONLNd–ΔÆ“å)%nd out the number of section resource°dONLNdıΔå“ò)fis}°dONLNd˘‘ú‡¬(›ú1numberOfSections := Count1Resources(rSectionType)°dONLNd*‘¬‡»(›¬;°dONLNd-‚úÓ¢(ÎúF°dONLNd.‚¢ÓÜ)&OR thisone := 1 TO numberOfSections DO°dONLNdVú¸∫(˘úBEGIN°dONLNd^˛Æ
  3621. Ú+6sectionH := SectionHandle(Get1IndResource(rSectionType°dONLNdî˛Ú
  3622. ¯(Ú,°dONLNd† >D(> °dONLNd° DJ) °dONLNd£ PV)  °dONLNd® òû)H °dONLNd© û§)t°dONLNd™ §‘)hisone))°dONLNd≤ ‘⁄)0;°dONLNd∂Æ&2(#ÆIF sectionH = NIL THEN°dONLNd‘>&Ú)ê{something could be wrong with°dONLNdÚÚ&¯)¥ °dONLNdÛ¯&˛)}°dONLNd¯(¿4(1¿MySectionErr;°dONLNd (>4
  3623. )~"{ the file, handle appropriately} °dONLNd16ÆB“(?Æ{get r°dONLNd76“Bÿ)$e°dONLNd86ÿB)source I°dONLNd@6Bb)0D of the sectio°dONLNdO6bB˛)Zn & use same ID for alias}°dONLNdlDÆPz(MÆ"GetResInfo(Handle(sectionH), resID°dONLNdéDzP»)Ã, theResType,°dONLNdõD»P¯)N aName);°dONLNd¶RÆ^⁄([Æ2{detaching is not necessary, but it is convenient}°dONLNd€`Æln* DetachResource(Handle(sectionH))°dONLNd˚`nlt)¿;°dONLNdˇnÆz(wÆ{get the alias}°dONLNd|Æà¥*a°dONLNd|¥àÚ)5liasH := AliasHandle(Get1Resource(rAliasType, resID))°dONLNdG|Úà¯(ÖÚ;°dONLNdKäÆñ&(ìÆIF aliasH = NIL THEN°dONLNdgä>ñ˛)ê {something could be wrong with }°dONLNdãò¿§(°¿ MyAliasErr;°dONLNdùò>§
  3624. )~"{ the file, handle appropriately} °dONLNd¬¶Æ≤b(ØÆDetachResource(Handle(aliasH))°dONLNd‡¶b≤h)¥;ˇ@@ˇ ˇˇˇˇ@
  3625. ˇ·ˇ‚7^
  3626. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  3627. (‡*2-24    )BUsing the Edition Manager4^*¿¯,
  3628. Courier
  3629. .°dONLNd\êh¢(eê{co°dONLNd\¢h\)nnect section and alias togethe°dONLNd"\\hh)∫r}°dONLNd'jêv,(sêsectionH^^.alias := aliasH°dONLNdAj,v2)ú;°dONLNdExêÑ¢(Åê{re°dONLNdHx¢Ñ)gister the sectio°dONLNdYxÑ)fn}°dONLNd^Üêí‘(èê6registerErr := RegisterSection(thisDocument^.fileSpec,°dONLNdöîΔ†fi+6    °dONLNd°î¸†)6 °dONLNd•î2†8)6 °dONLNdßîD†Ê) sectionH, aliasWasUpdated)°dONLNd¬îʆÏ)¢;°dONLNdΔ¢êÆ‘(´ê6{The RegisterSection function may return an error if }°dONLNdˇ∞êºÚ*;{ a section is not registered. This is not a fatal error. }°dONLNd=æê ¬*3{ Continue looping to register remaining sections.}°dONLNdsÃêÿ¢*{ad°dONLNdvâÿ‡)5d this section/alias pair to your internal bookkeepin°dONLNd´Ã‡ÿÏ(’‡g}°dONLNd∞⁄êÊñ(„êM°dONLNd±⁄ñÊ»)3yAddSectionAliasPair(thisDocument, sectionH, resID)°dONLNd‰⁄»ÊŒ(„»;°dONLNdËËêÙñ(ÒêI°dONLNdÈËñÙ)F aliasWasUpdated THE°dONLNd˛ËÙ )~N °dONLNdˆ¢∞(ˇ¢-{If alias has changed, make a note of this. }°dONLNd5¢∞*-{ It's important to know this when you save.}°dONLNdf¢¥*MyA°dONLNdi¥J)liasHasChanged(sectionH);°dONLNdÑ ~,¢()~END; {°dONLNdä ¢,¿)$end o°dONLNdè ¿,‰)f FOR}°dONLNdñ.l:~(7lEND°dONLNdô.~:ê);  
  3630. `*g¯4a*g¯ blb¯
  3631. ˇ·ˇ‚7^ˇˇ‹..ˇ◊°dONLNdûQl` (\lReading and WÊv°dONLNd´Q `$)^riting a Sectionˇˇˇˇˇˇ€r(\2
  3632. °dONLNdΩglsr(plY@Ä°dONLNdægrs≥)Iour application writes publisher data to an edition. New publisher data rÛÄ°dONLNdg≥sÊ(p≥ eplaces the °dONLNdtlÄu(}lprG °dONLNdtvÄ;)
  3633. -evious contents of the edition, making the pr£Ä°dONLNdBt;Äæ)≈evious edition information irr– °dONLNd`tæÄÓ)É etrievable. °dONLNdlÅlçr(älY@Ä°dONLNdmÅrçº)our application r+†°dONLNd~źçÔ)J eads data fr≈°dONLNdäÅÔç€)34om an edition for each subscriber within a document.°dONLNdøìlü(úl&The following sections describe how to,Zapf Dingbats°dONLNdÊ©l∞q*n
  3634. °dONLNd˶x≤ï) use dif8 °dONLNdÔ¶ñ≤¢)fer†°dONLNdÚ¶¢≤) ent formats to write to or r‚@°dONLNd¶≤/)tead fr`Ä°dONLNd¶0≤m)om an edition°dONLNd"ªl¬q(¡ln
  3635. °dONLNd$∏xƒ) (open an edition to initiate writing or rûÄ°dONLNdL∏ƒ=)ßeading°dONLNdSÕl‘q(”ln
  3636. °dONLNdU x÷≈) set a format mark°dONLNdgfllÊq(Âln
  3637. °dONLNdi‹x˨) write to or r#°dONLNdv‹≠ËΔ)5ead fr°@°dONLNd|‹ΔË)om an edition°dONLNdäÒl¯q(˜ln
  3638. °dONLNdåÓx˙@) 0close an edition after successfully writing or rEÄ°dONLNdºÓA˙u)… eading data
  3639. *¯4*¯ l¯
  3640. ˇ·ˇ‚7^ °dONLNd…
  3641. l›(lFormats in an Editionˇˇˇˇˇˇ‘@(Ò2
  3642. °dONLNd‡l*r('lY@Ä°dONLNd·r*5).ou can write data to an edition in several dif °dONLNd5*A)√fer˚†°dONLNd@*¡) ent formats. These formats arˇ °dONLNd/¡*Ú)Å e the same °dONLNd:+l7q(4la°dONLNd;+q7Ä)s scÍ@°dONLNd?+Ä7))&rap format types. Scrap format types a]°dONLNde+*7-)™r"°dONLNdf+.7à)e indicated by a fourÌ¿°dONLNd{+à7Δ)Z-character tag.°dONLNdã=lIr(FlT∫¿°dONLNdå=qIî)ypicallyË¿°dONLNdî=ìIH)"*, when a user copies data, you identify th≠‡°dONLNdæ=II™)∂e scrap format types aΔ °dONLNd‘=™IË)and then write °dONLNd‚JlVù(Sl the data to Û`°dONLNdÓJùV≠)1the P¿°dONLNdÚJÆV‘)scrap. Wf °dONLNd˙J‘V=)&ith the Edition Manager%¿°dONLNdJ=VÂ)i', when a user decides to publish data, °dONLNd8Wlc≠(`lyou identify thL`°dONLNdGWÆcÙ)Be format types aB†°dONLNdWWıcñ)G&nd then write the data to an edition. s°dONLNd}Wñcú)°Y3Ä°dONLNd~Wúc’)ou can write °dONLNdãdlp(ml"multiple formats of the same data.°dONLNdÆvlÇ*(For an edition, you should write your pr&`°dONLNd÷vÇ3)≥eferr≈ °dONLNd€v3Çk) ed formats fiΔ†°dONLNdËvkÇÁ)8rst. In general, to write data ˇˇƒÏ.°dONLNdÉlèv(ålto °dONLNd
  3643. ÉwèF) /an edition, your application should use either ˇˇNƒ‚t°dONLNd9ÉFèj)œ'TEXT'ˇˇƒÏ‚t°dONLNd?Éjèó)$  format or ˇˇNƒ18°dONLNdJÉòèº).'PICT'ˇˇƒÏ18°dONLNdPɺè¯)$ format. This .°dONLNd^êlúı(ôlallows your application to sharö¿°dONLNd}êıúú)â&e data with most other applications. TÕ†°dONLNd£êõú⁄)¶o subscribe to .°dONLNd≤ùl©y(¶lan °dONLNdµùy©?)-edition, your application should be able to rR`°dONLNd‚ù?©i)Δ    ead both R`°dONLNdÎùi©ç)*'TEXT'R`°dONLNdÒùç©¢)$ and R`°dONLNdˆù¢©Δ)'PICT'R`°dONLNd¸ùΔ©œ)$ fiR`°dONLNdˇùœ©Ï)    les. In .°dONLNd™l∂Ú(≥lXaddition, your application can write any other private formats that you want to support.ˇ><@ˇ ˇˇˇˇ@
  3644. ˇ·ˇ‚7^
  3645. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äUsing the Edition Manager
  3646. , (‡2-25
  3647. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  3648. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  3649. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  3650. 4€4—?òÄ
  3651. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  3652. ˛ˇˇˇ
  3653. ˛ˇˇˇ
  3654. ˛ˇˇˇ
  3655. ˛ˇˇˇ˜˝˛ˇ˛
  3656. ˛ˇ˛ˇˇ
  3657. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  3658. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  3659. ˛ˇ˛ˇˇ
  3660. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  3661. ˛ˇˇˇˇ
  3662. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  3663. ˛ˇˇˇˇ
  3664. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  3665. ˛ˇˇˇˇ
  3666. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\äh‰(eäScrap format types aQ`°dONLNd\ÂhË)[r`°dONLNd\Èh9)e described in the Q¿°dONLNd(\9ha)P    chapter “ °dONLNd1\bh§))Scrap Manager ‡°dONLNd>\§h∂)B” in ц°dONLNdC\∑h)Inside Macintosh: °dONLNdUiäuõ(räMorÄ°dONLNdXiúu’)e Macintosh T͆°dONLNdei‘uÌ)8oolbox£†°dONLNdkiÓu).°dONLNdm{äáë(ÑäA∫†°dONLNdn{ëáÙ) few special formats arM@°dONLNdÖ{ıá)de defiâ°dONLNdã{áW)ned as constants.,
  3667. Courier.°dONLNdùíäû®(õäCONST°dONLNd§íÆû>)$kPublisherDocAliasFormat°dONLNd≈íPûÜ)¢    = 'alis';°dONLNdœíÜû)6{alias record from the }°dONLNdˆ†ܨ*{ edition to publisher}°dONLNdÆÆ∫¸(∑ÆkPreviewForma°dONLNdƸ∫)Nt°dONLNd'ÆP∫V)T=°dONLNd(ÆV∫Ü) 'prvw';°dONLNd1ÆÜ∫¯)0{'PICT' thumbnail }°dONLNdSºÜ»º*    { sketch}°dONLNd_ Æ÷(”ÆkFormatListForma°dONLNdo ÷)`t°dONLNdy P÷V)B=°dONLNdz V÷Ü) 'fmts';°dONLNdÉ Ü÷
  3668. )0{lists all available }°dONLNd®ÿ܉¬*
  3669. { formats}°dONLNd≥ä¸û(˘äThe °dONLNd∑û¸.)kPublisherDocAliasFormat°dONLNdœ.¸4)ê (°dONLNd—4¸X)'alis'°dONLNd◊X¸)$#) format is written by the Edition .°dONLNd˙˝ä    ±(äManagerT†°dONLNd˝±    )'. It is an alias rø°dONLNd˝    )?ecor3`°dONLNd˝    )d frË°dONLNd˝    ö)om the edition to the publisherM °dONLNd:˝ú    ◊)ä’s document. -°dONLNdG˝◊    ); Appended to °dONLNdS
  3670. än(ä7the end of the alias is the section ID of the publishere@°dONLNdä
  3671. n)‰$, which the Edition Manager uses to °dONLNdÆä#í( ä=distinguish between multiple publishers to a single edition. &†°dONLNdÎì#ô( ìYÁ °dONLNdÏò#)ou should discourage users °dONLNd$ä0ë(-äfrò‡°dONLNd    $ë0k)/om making multiple copies of the same publisherw‡°dONLNd8$k0z)⁄. SeÅ@°dONLNd<$z0Å)e  ‡°dONLNd>$Å0)“Duplicating Publishers and °dONLNdZ1ä=È(:äSubscribers” on page y`°dONLNdo1Í=¸)`2-58Õ@°dONLNds1¸=) f° °dONLNdu1=k)or detailed information..°dONLNdéCäO"(Lä"In addition to writing a publisher=`°dONLNd∞C#Oú)ô’s data to an edition in the =`°dONLNdÕCúO¿)y'TEXT'=`°dONLNd”C¿OÓ)$  format or =`°dONLNdfiCÓO).'PICT'=`°dONLNd‰CO)$ °dONLNdÂPä\≠(YäBformat, your application can also write data to an edition in the °dONLNd'P≠\(Y≠kPreviewFormat°dONLNd5P\)T °dONLNd6]äié(fä(°dONLNd7]éi≤)'prvw'°dONLNd=]≤i)$) format. If you prR`°dONLNdP]i&)Povide a R`°dONLNdX]&i,)$'R`°dONLNdY],iJ)prvw'R`°dONLNd^]Ji )+ format in an edition, the Edition Manager .°dONLNdâjävË(säuses it to display a prØ@°dONLNd†jËv})^#eview of the edition data in the prJ†°dONLNd√j~v£)ñeview arÄ°dONLNdÀj§v¸)&ea of the subscriber ˇˇò.°dONLNd‡wäÉ–(Äädialog box. The ˇ˛»H°dONLNdw—Éı)G'prvw'ˇˇòH°dONLNdˆwıÉá)$! format has the same format as a ˇ˛»X°dONLNdwàɨ)ì'PICT'ˇˇòX°dONLNdw¨É¥)$ fi†`°dONLNd w¥É«)le. TMh°dONLNd%w«É¯) o draw a prÁ‡°dONLNd0w¯É)1eview °dONLNd6Ñäêß(çäin the °dONLNd=ÑßêÀ)'prvw'°dONLNdCÑÀêi)$# format, the Edition Manager calls °dONLNdfÑiê´)û DrawPicture°dONLNdqÑ´ê“)B     with a rR`°dONLNdzÑ“ê)' ectangle of .°dONLNdÜëäùõ(öä120 °dONLNdäëúù©)by ñ¿°dONLNdçë©ùÓ)120 pixels. (See ø¿°dONLNdûëÓùZ)EInside Macintosh: ImagingÉÄ°dONLNd∑ë[ù~)m for morN°dONLNdøëùŸ)$e information about .°dONLNd”ûä™Ã(ßä DrawPicture°dONLNdfiûÙ’)B.) R`°dONLNd·û’™‹)    Yg`°dONLNd‚û€™N)our application should pr9¿°dONLNd˚ûN™ï)sovide data in a 9¿°dONLNd ûï™π)G'prvw'9¿°dONLNdûπ™)$ format so that the .°dONLNd%´ä∑Û(¥ädata displays well in a rΔ°dONLNd>´Û∑N)iectangle of this size. ò†°dONLNdU´N∑T)[YY °dONLNdV´T∑Ó)$our application can also use this pri¿°dONLNdz´Ó∑
  3672. )öeview °dONLNdÄ∏äƒó(¡ä=to display subscriber data within a document (to save space)..°dONLNdæ ä÷*If your application does not prR`°dONLNd› ÷@)à
  3673. ovide a pr$¿°dONLNdÁ @÷{).eview in the $¿°dONLNdÙ {÷ü);'prvw'$¿°dONLNd˙ ü÷)$ format for an edition, the °dONLNd◊ä„(‡äEdition Manager attempts to prR`°dONLNd4◊„F)é
  3674. ovide a pr$¿°dONLNd>◊F„Δ).eview by using the edition’s $¿°dONLNd[◊Δ„Í)Ä'PICT'$¿°dONLNda◊Í„)$     format. °dONLNdj‰äê(ÌäTï°dONLNdk‰è¬) o draw a prg`°dONLNdv‰¬˝)3eview in the g`°dONLNdɉ˝!);'PICT'g`°dONLNdâ‰!)$0 format, the Edition Manager examines the pictur9¿°dONLNdπ‰)fle’s °dONLNdΩÒä˝∏(˙ä
  3675. bounding rR`°dONLNd«Ò∏˝ ).ectangle and calls R`°dONLNd⁄Ò ˝M)S DrawPictureR`°dONLNdÂÒM˝t)B     with a r$¿°dONLNdÓÒt˝˝)'ectangle that scales the pictur˜ °dONLNdÒ¸˝)àe .°dONLNd˛ä
  3676. ì(äprG °dONLNd˛î
  3677. m)
  3678. 3oportionally and centers it in a 120-by-12-pixel ar-`°dONLNdD˛m
  3679. {)Ÿea. .°dONLNdIäû(äThe °dONLNdMû)kFormatListFormat°dONLNd^
  3680. )f (°dONLNd`
  3681. .)'fmts'°dONLNdf.–)$&) format is a virtual format that is rR`°dONLNdå–)¢ead but never .°dONLNdöä)v(&ä<written. It is a list of all the formats and their lengths. `°dONLNd÷w))Ì$Applications can use this format in .°dONLNd˙*ä6¬(3äplace of the °dONLNd    *¬6")8EditionHasFormat°dONLNd    *"6Ü)` function (described in °dONLNd    /*Ü6˛)d“Choosing Which Edition .°dONLNd    G7äC˚(@äFormat to Read” on page ˙†°dONLNd    _7˚C)q2-41NÄ°dONLNd    c7C>) ), which pr;‡°dONLNd    n7>Co)0 ovides a pr)Ä°dONLNd    y7oC˚)1 ocedural interface to determine °dONLNd    ôDäP’(Mäwhich formats ar¶¿°dONLNd    ©D’P)K e available..°dONLNd    ∂Väb˜(_äIf your application can rR`°dONLNd    œV˜b9)mead two or mor$¿°dONLNd    ›V9b≈)B e of the available formats, use $¿°dONLNd    ˝V≈bÈ)å'fmts'$¿°dONLNd
  3682. VÈbˆ)$ to °dONLNd
  3683. cäo…(läHdetermine the priority of these formats for a particular edition. The orR`°dONLNd
  3684. Oc…oÂ(l…der of R`°dONLNd
  3685. VcÂo    )'fmts'R`°dONLNd
  3686. \c    o )$ .°dONLNd
  3687. ]pä|ç(yärE°dONLNd
  3688. ^pé|ò)efl`°dONLNd
  3689. apô|≈) ects the orÏÄ°dONLNd
  3690. lp≈|E),der in which the formats wer#°dONLNd
  3691. àpF|p)Å
  3692. e written.ˇt@ˇ ˇˇˇˇ@
  3693. ˇ·ˇ‚7^
  3694. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  3695. (‡*2-26    )BUsing the Edition Manager4^*¿¯
  3696. .°dONLNd\lhÄ(elThe ,
  3697. Courier°dONLNd\Äh‡)FormatsAvailable°dONLNd\‡h#)` data type defi°dONLNd#\#h?)Cnes a rR`°dONLNd*\?hQ)ecor$¿°dONLNd.\Qhz)
  3698. d for the $¿°dONLNd8\zhû))'fmts'$¿°dONLNd>\ûh¬)$ format.°dONLNdGslP(|l&TYPE FormatsAvailable = ARRAY[0..0] OF°dONLNdoÅ~ç¢+RECORD°dONLNdxèêõ¿+theType:°dONLNdÑèÿõ)H FormatType;°dONLNdîè2õ⁄)Z{format type for an edition}°dONLNd≥ùê©Ã(¶ê
  3699. theLength:°dONLNd¡ùÿ©)HLongInt;°dONLNdŒù2©‘)Z{length of edition format }°dONLNdı´2∑\*{ type}°dONLNd˛π~≈ñ(¬~END;°dONLNd—l›u(⁄l9For example, an edition container may have a format type °dONLNd<—u›ô(⁄u'TEXT'°dONLNdB—ô›ı)$ of length 100, and a °dONLNdXfilͧ(Ál format type °dONLNddfi§Í»)8'styl'°dONLNdjfi»Í)$ of length 32. !†°dONLNdyfiÍ )<Aï°dONLNdzfi Ífi)2 subscriber to this edition can open it and then rg`°dONLNd¨fifiÍÒ)”ead ˇˇr⁄°dONLNd∞Îl˜¥(Ùlthe format type ˇ˛Xéÿé°dONLNd¿Î¥˜ÿ)H'fmts'ˇˇr⁄ÿé°dONLNdΔÎÿ˜≥)$5 to list all available formats. In this example, it r'r°dONLNd˚Î¥˜¯)‹eturns 16 bytes: °dONLNd ¯lê(l'TEXT'°dONLNd¯ê¬)$  $00000064 °dONLNd¯¬Ê)2'styl'°dONLNd#¯Ê)$  $00000020.
  3700. "*)¯4#*)¯ $l$¯
  3701. ˇ·ˇ‚7^ .°dONLNd0l#“(lOpening an Editionˇˇˇˇˇˇ‘@(Ò2
  3702. .°dONLNdD)l5±(2lFor a publisher¬†°dONLNdS)∞5◊)D
  3703. , use the ¬†°dONLNd])◊5+)'OpenNewEdition¬†°dONLNdk)+5ı)T0 function to initiate the writing of data to an .°dONLNdõ6lBã(?leditionø`°dONLNd¢6ãBB)+. (Note that the edition container must alrÕ‡°dONLNdÕ6BBá)∑eady exist befor|°dONLNd›6àBÈ)Fe you initiate writing; °dONLNdıClO|(Llsee –@°dONLNd˘C|Oå)“Cr¨@°dONLNd¸CåOe)0eating the Edition Container” beginning on page \`°dONLNd,CfOx)⁄2-32∞@°dONLNd0CxO}).).°dONLNd3Zlf‰(clerr := OpenNewEditio°dONLNdGZ‰f)xn(°dONLNdIZfò) publisherSectionH, fdCreator°dONLNdeZòfû)®,°dONLNdnhÍt(qÍ °dONLNdohtˆ)p°dONLNdphˆtº)!ublisherSectionDocument, refNum);ˇˇe¯°dONLNdíÄlå(âlThe ˇ˛1˯°dONLNdñÄåÂ)publisherSectionHˇˇe¯¯°dONLNdßÄÂå≤)f/ parameter is the publisher section that you arË°dONLNd÷Ä≤å˜)Õe writing to the °dONLNdÁçlô¶(ñledition. The °dONLNdÙç¶ô‹):    fdCreator°dONLNd˝ç‹ôF)6 parameter is the Finde°dONLNdçFôP)jr c°dONLNdçPôT)
  3704. rR`°dONLNdçTô“)eator type of the new editioR`°dONLNd4ç“ô‹)~n. .°dONLNd7öl¶Ç(£l(The †°dONLNd<öɶ÷)edition container fiÀ@°dONLNdPö÷¶Ï)Sle alr™†°dONLNdVö϶%)eady has a cr‚¿°dONLNdcö%¶œ)9'eator type; you can specify the same crs °dONLNdäö–¶Ë)´eator °dONLNdêßl≥‹(∞ltype or establish a new cr‹`°dONLNd™ß‹≥O)peator type for the edition.)ˇˇ™™.°dONLNd«πl≈(¬lThe ˇ˛ˇ˛*™°dONLNdÀπÄ≈)publisherSectionDocumentˇˇ™™*™°dONLNd„π≈=)ê     paramete’T°dONLNdÏπ=≈`)-r specifi˛°dONLNdıπa≈o)$es t*®°dONLNd˘πp≈¯)he document that contains the .°dONLNdΔl“ñ(œl    publisherÓ‡°dONLNd Δï“)). This parameter is used to crS`°dONLNd>Δ“T)Äeate an alias fr°°dONLNdNΔT“‹)?om the edition to the publisher °dONLNdmΔfi“Á)ä’s .°dONLNdp”lflÕ(‹ldocument. If you pass °dONLNdÜ”Õflfl)aNIL!†°dONLNdâ”flfl) for !†°dONLNdé”flÄ)publisherSectionDocument!†°dONLNd¶”ÄflÏ)ê, an alias is not made in °dONLNd¿‡lÏ®(Èlthe edition fi°dONLNdŒ‡®Ï )<le. The °dONLNd÷‡ ÏÓ)"refNum°dONLNd‹‡ÓÏ&)$  parameter rR`°dONLNdˇ&ÏY)8 eturns the r$¿°dONLNdÙ‡YÏk)3efer˜ °dONLNd¯‡jÏÊ)ence number for the edition.°dONLNdÚl˛±(˚lFor a subscriber¬†°dONLNd%Ú∞˛◊)D
  3705. , use the ¬†°dONLNd/Ú◊˛)' OpenEdition¬†°dONLNd:Ú˛à)B function to initiate the rï°dONLNdUÚà˛‘)oeading of data frg`°dONLNdfÚ‘˛„)Lom .°dONLNdjˇl õ(l an edition..°dONLNdvl"“*err := OpenEditio°dONLNdá“"fi)fn(°dONLNdâfi"Ü) subscriberSectionH, refNum);°dONLNd¶.l:Ä(7lThe °dONLNd™.Ä:Ï)subscriberSectionH°dONLNdº.Ï:ó)l' parameter is a handle to the section rR`°dONLNd„.ó:©)´ecor$¿°dONLNdÁ.©:„)d for a given °dONLNdı;lG§(Dlsection. The °dONLNd;§G»)8refNum°dONLNd;»G)$  parameter rR`°dONLNd;G3)8 eturns the r$¿°dONLNd ;3GE)3efer˜ °dONLNd$;DG¿)ence number for the edition..°dONLNdAMlYÆ(VlThe user may r‰@°dONLNdOMÆY_)B'ename or move the edition in the Finder’¿°dONLNdvM_Y{)±. BeforIÄ°dONLNd}M|Y¡)e writing to or rµ`°dONLNdéM¡Y˜)E eading data °dONLNdöZlfs(clfrò‡°dONLNdúZsf*)(om an edition, the Edition Manager verifiÀ†°dONLNd≈Z*f¿)∑#es the name of the edition. This pr„`°dONLNdËZ¿f„)ñ    ocess is °dONLNdÒglso(plrE°dONLNdÚgpsÑ)eferr„¿°dONLNd˜gÑs®)    ed to as >°dONLNdg©sÕ)%synching°dONLNdgŒs˙)%
  3706.  or synchr%@°dONLNdg˙sm),onization. Synching ensur°dONLNd+gmsÁ)ses that the Edition Manager0°dONLNdFgËsÒ){’s °dONLNdItlÄ„(}lexisting edition names corr+†°dONLNddt‰Ä?)xespond to the FinderäÄ°dONLNdxt@ÄË)\&’s existing edition names by updating °dONLNdûÅlçì(äl    the contrõ‡°dONLNdßÅìç∏)'    ol block.ˇ5‚@ˇ ˇˇˇˇ@
  3707. ˇ·ˇ‚7^
  3708. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äUsing the Edition Manager
  3709. , (‡2-27
  3710. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  3711. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  3712. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  3713. 4€4—?òÄ
  3714. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  3715. ˛ˇˇˇ
  3716. ˛ˇˇˇ
  3717. ˛ˇˇˇ
  3718. ˛ˇˇˇ˜˝˛ˇ˛
  3719. ˛ˇ˛ˇˇ
  3720. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  3721. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  3722. ˛ˇ˛ˇˇ
  3723. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  3724. ˛ˇˇˇˇ
  3725. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  3726. ˛ˇˇˇˇ
  3727. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  3728. ˛ˇˇˇˇ
  3729. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  3730. jHp4jHp käk
  3731. ˇ·ˇ‚7^ °dONLNd\äj”(fä Format Marksˇˇˇˇˇˇ‘@(f2
  3732. °dONLNdpä|Õ(yäIEach format has its own mark. The mark indicates the next position of a r¢Ä°dONLNdWpÕ|(yÕead or write °dONLNdd}äâ‹(Üäoperation. Initially¨†°dONLNdx}€â{)Q&, a mark automatically defaults to 0. ‡°dONLNdû}|âô)°After rp†°dONLNd•}ôâ)eading or writing data, the °dONLNd¡ääñx(ìä9format mark is set past the last position written to or r¢Ä°dONLNd˙äxñë)Óead fr ¿°dONLNdäíñ)om. The mark is similar to °dONLNdó䣑(†äthe File Manager÷@°dONLNd+ó’£)K’s currâÄ°dONLNd2óÒ£)ent r´‡°dONLNd7ó£ ).ead or write position marker for a data fork. ^‡°dONLNdeó £    )≈Any time that .°dONLNds§ä∞,(≠ä&an edition is open (after calling the ,
  3733. Courier°dONLNdô§,∞n)¢ OpenEdition°dONLNd§§n∞ç)B or the °dONLNd¨§ç∞·)OpenNewEdition°dONLNd∫§·∞)T  function), .°dONLNdΔ±äΩz(∫ä7any of the marks for each format can be queried or set.!‡°dONLNd˝±{Ω})Ò °dONLNdˇ√äœê(ÃäTµ¿°dONLNd√蜻)o set the curr†°dONLNd√…œΩ):9ent mark for a section format to a new location, use the .°dONLNdG–ä‹(ŸäSetEditionFormatMark°dONLNd[–‹+)x
  3734.  function.°dONLNdfÁäÛ&(äerr := SetEditionFormatMar°dONLNdÄÁ&Û2)úk(°dONLNdÇÁ2Û») whichEdition, whichFormat°dONLNdõÁ»ÛŒ)ñ,°dONLNd¶ı,2(˛, °dONLNdßı28)s°dONLNd®ı8t)
  3735. etMarkTo);ˇˇí°dONLNd≥äê(äTï°dONLNd¥èª) o get the cf∂°dONLNdøº…)-urr9°dONLNd¬…Í)ent mar)®°dONLNd…Έ)"k f:°dONLNdØl) or a format in an edition fiΩ¶°dONLNdËlõ)u le, use the ˇˇ—∂è\°dONLNdÙú)0GetEditionFormatMarkˇˇíè\°dONLNd)x .°dONLNd    ä&±(#ä    function..°dONLNd1ä=&*err := GetEditionFormatMar°dONLNd-1&=2)úk(°dONLNd/12=») whichEdition, whichFormat°dONLNdH1»=Œ)ñ,°dONLNdS?,K2(H, °dONLNdT?2K8)c°dONLNdU?8KÄ) urrentMark);
  3736. jHq4kHq läl
  3737. ˇ·ˇ‚7^ .°dONLNdc]äk‹(gäReading and W˘@°dONLNdp]‹k:)Rriting Edition Dataˇˇˇˇˇˇ‘@(g2
  3738. °dONLNdÖqä}ï(zäThr °dONLNdáqñ}„) e Edition Managel†°dONLNdóq‰})N
  3739. r allows y»†°dONLNd°q})+o> °dONLNd¢q},)u to r¬ °dONLNd®q,}ß)ead or write data a few byteC°dONLNdƒq®}≥)|s a°dONLNd«q¥}–) t a timA °dONLNdŒq–})e (as with a °dONLNd€~ää˛(áädata fork of a Macintosh fi‰‡°dONLNdˆ~˛ä)tle) iS °dONLNd˚~ä&)nsteamÄ°dONLNd~&äJ)    d of in o‡°dONLNd    ~Kär)%    ne block Å¿°dONLNd~räu)'(’†°dONLNd~uäz)a’†°dONLNd~zä†)    s with thyÄ°dONLNd~°äÁ)'e Scrap Manageá@°dONLNd+~ÁäÛ)Fr). † °dONLNd/~Ûä˘) Y`†°dONLNd0~˘ä)ou °dONLNd3ãäóü(îäcan r†°dONLNd8ã†ól)/ead sequentially by setting the mark to 0 and r¿†°dONLNdgãlóΩ)Ãepeatedly calling rD °dONLNdzãæó)Read, or you can °dONLNdäò䧓(°äjump to a specifiZ°dONLNdõò”§‚)Ic ofÊ°dONLNdüò‚§^)fset by setting the mark ther√`°dONLNdºò^§)|%e. The Edition Manager also adds the °dONLNd·•ä±Œ(Æäcapability to str‡°dONLNdÚ•œ± )EFeam multiple formats by keeping a separate mark for each format. This °dONLNd8≤äæ˚(ªäTallows you to write a few bytes of one format and then write a few bytes of another °dONLNdåøäÀ‰*format, and so forth.°dONLNd¢—ä›ø*EOnce you have opened the edition container for a particular publisher’ °dONLNdÁ—æ›(⁄æ, you can begin .°dONLNd˜fiäÍ.(Áä%writing data to the edition. Use the °dONLNdfi.Ív)§ WriteEdition°dONLNd(fivÍ)H% function to write publisher data to .°dONLNdMÎä˜π(Ùä an edition..°dONLNdYäˆ*err := WriteEditio°dONLNdkˆ)ln(°dONLNdm) -whichEdition, whichFormat, buffPtr, buffLen);°dONLNdõä&û(#äThe °dONLNdüû&Ê) WriteEdition°dONLNd´Ê&])H function writes the specifi°dONLNd«]&Î)w ed format (beginning at the currR`°dONLNdÁÎ&)é    ent mark °dONLNd'ä3Ù(0äfor that format type) frR`°dONLNd'Ù3#)j
  3740. om the buf$¿°dONLNd'#3Å)/fer pointed to by the $¿°dONLNd('Å3´)^buffPtr$¿°dONLNd/'´3˜)* parameter up to °dONLNd@4ä@¥(=äbuffLen°dONLNdG4¥@”)* bytes. .°dONLNdPFäR(OäUAfter you open the edition container for a subscriber and determine which formats to .°dONLNd•Sä_é*rR`°dONLNd¶Sé_Δ)ead, use the R`°dONLNd≥SΔ_)8 ReadEditionR`°dONLNdæS_?)B function to r$¿°dONLNdÃS?_é)7ead edition data.°dONLNdfijäv(säerr := ReadEditio°dONLNdÔjv¸)fn(°dONLNdÒj¸v
  3741. ) -whichEdition, whichFormat, buffPtr, buffLen);ˇÿ@ˇ ˇˇˇˇ@
  3742. ˇ·ˇ‚7^
  3743. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  3744. (‡*2-28    )BUsing the Edition Manager4^*¿¯
  3745. .°dONLNd\lhÄ(elThe ,
  3746. Courier°dONLNd\Äh¬) ReadEdition°dONLNd\¬hÓ)B  function rR`°dONLNd\Óhx),eads the data with the specifiR`°dONLNd8\xh™)ä ed format (R`°dONLNdC\™hÏ)2 whichFormatR`°dONLNdN\ÏhÚ)B) °dONLNdPilut(rlfrR`°dONLNdRituÏ)om the edition into the buf$¿°dONLNdmiÏu˘)xferg`°dONLNdpi¯u) . The g`°dONLNdviuS) ReadEditiong`°dONLNdÅiSuù)B function begins r9¿°dONLNdìiùu‹)Jeading at the °dONLNd°vlÇ}(lcurrR`°dONLNd•v}Ç;)+ent mark for that format and continues to r$¿°dONLNd–v;Çf)æ
  3747. ead up to $¿°dONLNd⁄vfÇê)+buffLen$¿°dONLNd·vêÇ‚)* bytes. The actual °dONLNdÙÉlè∑(ålnumber of bytes rR`°dONLNdÉ∑èÿ)Kead is r$¿°dONLNdÉÿè)!eturned in the $¿°dONLNdÉèC)AbuffLen$¿°dONLNd#ÉCèu)*
  3748.  parameterg`°dONLNd-Étè£)1 . Once the g`°dONLNd8É£èÕ)/buffLeng`°dONLNd?ÉÕèœ)* .°dONLNd@êlú†(ôl parameter rV°dONLNdKê†úç)45eturns a value smaller than the value you have specifiƒÄ°dONLNdÅêçúÆ)Ìed, therL@°dONLNdâêØúÕ)"e is no .°dONLNdëùl©«(¶ladditional data to rR`°dONLNd•ù«©)[ead, and the R`°dONLNd≤ù©D); ReadEditionR`°dONLNdΩùD©p)B  function r$¿°dONLNd»ùp©ï),    eturns a $¿°dONLNd—ùï©≥)%noErr$¿°dONLNd÷ù≥©π) r˜ °dONLNdÿù∏©È) esult code. 
  3749. ∑*≈¯4∏*≈¯    .°dONLNdÂ∂l¡(ælNote
  3750. ˇ·ˇ‚7^
  3751. °dONLNdÍ√lœÖ*The TˆÄ°dONLNdÔ√Ñœ®)Franslation Manager (if it is available) attempts implicit translation °dONLNd5œl€µ(ÿlunder certain cirv¿°dONLNdFœµ€Ü)I/cumstances. For instance, it does so when your °dONLNdu€lÁÿ(‰lapplication attempts to r◊†°dONLNdé€ÿÁ·)lea°@°dONLNdꀂÁÒ)
  3752. d frU‡°dONLNdî€ÚÁ)om a`°dONLNdò€Á))n editiofi¿°dONLNd†€)Á6)!n a0 °dONLNd£€7Á©) format type that is not in °dONLNdøÁlÛï(l
  3753. the editioK`°dONLNd…ÁñÛfl)*n. In this case, th`°dONLNd‹Á‡ÛÌ)Je Tî¿°dONLNdflÁÏÛq) ranslation Manager attempts tË°dONLNd¸ÁqÛx)Öo °dONLNd˛Ûlˇo(¸lt¬`°dONLNdˇÛoˇî)    ranslate 7¿°dONLNdÛïˇ„)&the data into the rá@°dONLNdÛ„ˇS)Nequested format. For mor˜†°dONLNd3ÛSˇî)pe information, °dONLNdBˇl |(lsee –@°dONLNdFˇ| å)the -†°dONLNdJˇç ª)
  3754. chapter “T*¿°dONLNdTˇª $).ranslation Manager” in QÄ°dONLNdkˇ$ n)iInside Macintosh: °dONLNd} l}(lMorÄ°dONLNdÄ ~Ñ)e z °dONLNdÇ Ñ±)
  3755. Macintosh ͆°dONLNdå ±∑)-T͆°dONLNdç ∂œ)oolbox£†°dONLNdì –“).,Zapf Dingbats#†°dONLNdïÿfi)u
  3756. 4*;¯45*;¯ 6l6¯
  3757. ˇ·ˇ‚7^ °dONLNdô'l5Ã(1lClosing an Editionˇˇˇˇˇˇ‘@(1Ò2
  3758. .°dONLNd≠;lG¶(Dl When you arR`°dONLNd∏;¶G):e done writing to or r$¿°dONLNdŒ;GC)\eading data fr˜ °dONLNd‹;BG™)@om an edition, call the ˜ °dONLNdÙ;™GÚ)h CloseEdition˜ °dONLNd;ÚGÙ)H .°dONLNdHlTì(Ql    function..°dONLNd _lkÿ*err := CloseEditio°dONLNd_ÿk‰)ln(°dONLNd_‰kÄ) whichEdition, successful);.°dONLNd:wlÉ◊(ÄlOEach time a user edits a publisher within a document, you must update the modifi5`°dONLNdäwÿÉı(Äÿcation °dONLNdëÑlê¬(çldate in the section rÏ`°dONLNd¶Ѭê‘)Vecor`¿°dONLNd™Ñ’êÔ)Ad (even if the data is not yet written). When the update mode is °dONLNdÎëlù∞(ölset to Manually¿°dONLNd˙ë∞ù)D, the user can compar3°dONLNdëùC)^ e the modifi4`°dONLNdëCùfi)5%cation dates for a publisher and its °dONLNd@ûl™_(ßl6edition in the publisher options dialog box. One modifi °dONLNdwû`™Ë)Ùcation date indicates when the °dONLNdñ´l∑∂(¥lpublisher last wr0°dONLNdß´∑∑w)K,ote data to the edition, and the other modifiŒ†°dONLNd‘´w∑Ô)¿cation date indicates when °dONLNdÔ∏lƒ(¡l&the publisher section was last edited..°dONLNd l÷à*If the °dONLNd à÷ƒ)
  3759. successful°dONLNd' ƒ÷G)< parameter for a publisher is °dONLNdE G÷_)ÉTRUE°dONLNdI _÷v), the °dONLNdO v÷æ) CloseEdition°dONLNd[ æ÷Ê)H
  3760.  function .°dONLNde◊l„Ø(‡lHmakes the newly written data available to subscribers and sets the modifiH¿°dONLNdÆ◊∞„Ó(‡∞cation date in ˇˇ√6.°dONLNdΩ‰l}(Ìlthe ˇˇI¢C6°dONLNd¡‰~¢)mdDateˇˇ√6C6°dONLNd«‰¢™)$ fil°dONLNd ‰´)    eld of the edition to corr®⁄°dONLNd‰‰q)kespond to the modifiÚ|°dONLNd¯‰qÓ)[cation date of the publisherº¥°dONLNd‰Ô˜)~’s .°dONLNdÒl˝ë(˙l    section r≠Ä°dONLNd Òë˝£)%ecor!‡°dONLNd$Ò§˝)d. If the two dates difk`°dONLNd;Ò˝)^feræ °dONLNd>Ò˝Ù) 4, the Edition Manager sends a Section Read event to °dONLNdr˛l
  3761. ã(lall currˇ¿°dONLNdz˛ã
  3762. œ)ent subscribers.ˇˇÏN.°dONLNdãlá(lIf the ˇˇƒÍXú°dONLNdíàƒ)
  3763. successfulˇˇÏNXú°dONLNdúƒF)< parameter for a subscriber is ˇˇƒÍ‚p°dONLNdªF^)ÇTRUEˇˇÏN‚p°dONLNdø^t), the ˇˇƒÍª °dONLNd≈uΩ) CloseEditionˇˇÏNª °dONLNd—Ω˜)H function sets .°dONLNd‡l)ô(&l    the modifi7¿°dONLNdÍö)).cation date of the subscriber=`°dONLNd)E)} ’s section rÔ °dONLNdE)W).ecorcÄ°dONLNdX)})    d to corr‘Ä°dONLNd })ÿ)%espond to the modifiØÄ°dONLNd4Ÿ)ˆ)\cation °dONLNd;*l6ø(3ldate of the edition..°dONLNdP<lH‚*If you cannot successfully rR`°dONLNdl<‚H˝)vead fr$¿°dONLNdr<˝H©)(om or write data to an edition, set the $¿°dONLNdö<©HÂ)¨
  3764. successful$¿°dONLNd§<ÂHÁ)< ˇˇí™°dONLNd•IlU®(Rlparameter to ˇ˛∑˛•T°dONLNd≤I®UΔ)<FALSEˇˇí™•T°dONLNd∑IΔU). For a publisherüÚ°dONLNd»IU˜)H:, data is not written to the edition, but it should still .°dONLNd    Vlbı(_lWbe saved with the document that contains the section. When the document is next saved, °dONLNd    Yclo#*+data can then be written to the edition. SeœÄ°dONLNd    Ñc#o*)∑e  °dONLNd    Üc+oÑ)“Closing an Edition ò`°dONLNd    öcÑo–)YAfter Reading or .°dONLNd    ´pl|w(ylW¬†°dONLNd    ¨pv|ª)
  3765. riting” on page ¬†°dONLNd    ºpª|Œ)E2-88¬†°dONLNd    ¿pŒ|‘) f¬†°dONLNd    ¬p‘|i)!or additional information on the ¬†°dONLNd    „pi|±)ï CloseEdition¬†°dONLNd    Ôp±|⁄)H
  3766.  function.ˇH@ˇ ˇˇˇˇ@
  3767. ˇ·ˇ‚7^
  3768. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äUsing the Edition Manager
  3769. , (‡2-29
  3770. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  3771. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  3772. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  3773. 4€4—?òÄ
  3774. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  3775. ˛ˇˇˇ
  3776. ˛ˇˇˇ
  3777. ˛ˇˇˇ
  3778. ˛ˇˇˇ˜˝˛ˇ˛
  3779. ˛ˇ˛ˇˇ
  3780. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  3781. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  3782. ˛ˇ˛ˇˇ
  3783. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  3784. ˛ˇˇˇˇ
  3785. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  3786. ˛ˇˇˇˇ
  3787. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  3788. ˛ˇˇˇˇ
  3789. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  3790. kHr4lHr mäm
  3791. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd\äk(gäCreating a Publisherˇˇˇˇˇˇ€r(g2
  3792. °dONLNdrä~ê({äY@Ä°dONLNdrê~˘)ou need to support a CrD@°dONLNd.r˘~)i:eate Publisher menu command in the Edit menu. When a user °dONLNdhäãY(àä.selects a portion of a document and chooses Cr¿‡°dONLNdñYã°)œeate Publisher fr„ °dONLNdß°ãˆ)Hom this menu, you °dONLNdπåäòm(ïä3should display the publisher dialog box on the userÃ`°dONLNdÏånòÑ)‰’s scr¬‡°dONLNdÚåÑò∂) een. The Cr?@°dONLNd˝å∑ò)3eate Publisher menu °dONLNdôä•›(¢äcommand should rO°dONLNd!ôfi•Ì)T<emain dimmed until the user selects a portion of a document..°dONLNd^´ä∑Ø(¥äUse the ,
  3793. Courier°dONLNdf´Ø∑)%NewPublisherDialog°dONLNdx´∑)l5 function to display the publisher dialog box on the °dONLNd≠∏äƒú(¡äuser=`°dONLNd±∏ùƒ≤)’s scr¿°dONLNd∑∏≤ƒN)%een. This function is similar to the ¿°dONLNd‹∏Nƒú)úCustomPutFile¿°dONLNdÈ∏úƒ®)N pr‚ °dONLNdÏ∏߃ƒ) ocedur¥Ä°dONLNdÚ∏ƒƒ)e described in the .°dONLNd≈ä—≤(Œä    chapter “B`°dONLNd≈≥—’))Standarv†°dONLNd≈’—)"d File PackagT°dONLNd"≈—');e” in ◊`°dONLNd(≈'—Ñ)Inside Macintosh: Filesû@°dONLNd?≈Ö—á)^..°dONLNdA‹äË(Âäerr := NewPublisherDialo°dONLNdY‹Ë&)êg(°dONLNd[‹&ËP) reply);.°dONLNdcÙä1(˝ä&The dialog box contains space for a prø°dONLNdâÙ1)ß0eview (a thumbnail sketch) of the edition and a °dONLNdπäÙ(
  3794. äspace for the user to typû@°dONLNd“Ù˛)je t*@°dONLNd’ˇ) =he name of the edition in which to write the publisher data. °dONLNdä¢(äFigurR¿°dONLNd¢∂)e 2-1c†°dONLNd∂ª)1c†°dONLNdªs)+ illustrates a sample publisher dialog box.
  3795. <HM4=HM"=H]
  3796. ˇ·ˇ‚7^    °dONLNdJ2ä=∫(:ä Figure 2-11°dONLNdV2Ã=“)BA0°dONLNdW2“=D) sample publisher dialog box
  3797. .°dONLNduÔä˚û(¯äThe °dONLNdyÔû˚
  3798. )NewPublisherDialog°dONLNdãÔ
  3799. ˚x)l function displays the prR`°dONLNd§Ôx˚§)n    eview (pr$¿°dONLNd≠Ô§˚”),
  3800. ovided by .°dONLNd∑¸ä°(äyour ˛`°dONLNdº¸°—)Gapplication), displays a text box with the default name of the edition °dONLNd    äó(ä(prõ°dONLNd    ó∏)ovided  @°dONLNd    πΔ)"by ∑°dONLNd    Δ›)your 5`°dONLNd    fiÊ)?application), and handles all user input until the user clicks °dONLNdUä"≠(äPublish wÄ°dONLNd]Æ"⁄)$
  3801. or Cancel.†Ç†é
  3802. Pä◊÷ò@0˛0˛Päo÷¬ˇ¸Ä√ Ä√ ü√ˇÏü√ˇÃò√Lò√Lò√Lò√Lò√Lò√Lò√Lò√Lò√LòÔ˘ˆˇ¸ÎLòʈÎLòÔ˘ˆÎLòʈÎLòÔ˘¿3¿˝ÎL'ò¸Ä0?ÅÄ0¸ˆIJ|¿L*ò¸ ¿ˆ˘ AÅÛ<«èáˆIJf¿L-ò¸ Õû31„3Ú¸AÉ3˛ÃÅˇΔ¯ˇ¡Éœ¯ffiyÁÄL.ò¸ Œ¸3˚˘ A„3ÃÃŒˇÜ¯!ÜlÕfÊû¿L*ò¸å¸3Ú AÉ3Ãë¯!Ülï|Δë¿L1ò¸ ?33Û3˚˘ AÉ3ÃÃ√Ä>¯!ÜlÕò`Δ¸Ã¿L-ò¸ 0333Ú AÉ3ÃÅį!ÜlÕò`Δ¿Ã¿L1ò¸ 1232˚˘ ¡ÒÛ «å«¯ˇ¡ÜlÕò`ΔƒÃ¿L&ò¸ <1„¸Úˇ¿˘ˆ ÛÃï`Δxg¿LòÔ˘ˆÎLòʈÎLòÔ˘ˆÎLòʈˇ˛ÎLòÔ¯ˆˇ˛ÎLò√L
  3803. òÔ÷Lò√L
  3804. òÔ÷LòÌ?ÁˇÛLòÔ ÈÛLòÌ ÈÛLòÔ È˘ˇ˛LòÌ ˝00Û(˘ÄL!òÔ ‡˛00ÛD¯ÄL òÌ !Ä1·¿><xÙÇ ¯@L"òÔ!@#33 fF1Ù     ¯@L&òÌ !@33Äf>0¯Ù «ê *Ä@L(òÔ!@33Ò¿ff1òÙD @@L&òÌ !@33‡ff1òÙD  †¢Ä@Lò@0`˛0`˛oäé÷'òÔ!@33`ff1òÙD ˛˛@L&òÌ !@1·¿>>¯Ù| (àÄÄ@LòÔ ˇÄÎ  Q˛@LòÌ È      ˛Ä@LòÔ È ˇ ˛@LòÌ È *††Ä@LòÔ È ˛¸@LòÌ È ˛à¸@L ò˜Ä˚ È ˛P¸@L#ò˜¿˘ ™Ä ˚ı¯ÄL%òˆ†˚!U@˚ı˘ÄL'òˆ˘ ÄÄ
  3805.  
  3806.  †Ä(˛†¢Äˆ˘ˇ˛L"òˆX˚
  3807. !@Q˛AıÛL òˆL˘ ÄÄ
  3808. ""Ä ˛àÇıÛL"òˆD˚!@Q@AQıÛL#ò˘Ä˘  ÄÄ""† ÄààÇıÛL%ò˘¿"˚!U@˛@AıÛL#ò¯#˘ ™Ä
  3809.  
  3810.  †Ä ˛†ÄĈÛLò¯f!˚ ˘ÚÛLò¯#!Ä˙ ¯ÄÛÛLò¯10∞¸ È˘ˇ˛Lò¯Ä∞˙ È˘ÄLò¯¿∞¸ È¯ÄLò˙¯`˙ È ¯@L ò˙0¿¸ È ¯@L$ò˙√à¿˙ È  ¯Ä¿˛@L%ò˘`‡ĸ È  ÃÄ¿˛@L#ò˙px ˘ È Ãxqô„«¿@L'ò˚¿¸ È ÃÃ…∞Δf`@L%ò˚ ˙ È Ã÷‡Δf`@L'ò˚˛¸ È Ã¸q¿Δf`@L&ò˚¯0˚ È Ã¿9‡Δf`@L(ò˚ 0˝ È Ãƒô∞Δf`@L&ò˚?ć ` ˚ È ¯xqòc«¿@L%ò˚88¿˝ È ˚@L ò¯Ä˚ È ˚@L!ò˘‡¬@{¿˛ È ¯@Lò˘ >`¿˚ È¯ÄL!ò˘É0Äú˝ È˘ÄLò¯·˚ È˘ˇ˛Lò¯0Ã|˝ ÈÛLò˙˛F˚ ÈÛLò˙<¯cIJ ÈÛLò˙‡!˛¿¸ ÈÛLò˚Ä1Ä`˛ ÈÛLò˚˛Ä0¸ ÈÛLò˚¸0@¸ ˛ ÈÛL"ò˚ ¯ @¸ È˘ˇ˛Lò@`ê˛`ê˛éä≠÷$ò˚`@Δ˛ È˘ÄL ò˙0p¿@b¸ È¯ÄL%ò˙`¿@@2˛ È ˚@L&ò¸√ɲ¸ È ¸@L*ò¸ ܲ¯ ˛ È Ç˛ˇ¯@L(ò¸v)å˛≥ ¸ È ¬˛@L*ò¸ƒ—˛†˛ È ‚<f`@L(ò¸    ç:6ú¿¿¸ È Úff`@L+ò˝
  3811. &Ë0ê¿`˛ È ∫ff`@L(ò¸    ì`Ñ0 ¸ È û~f`@L+ò˝
  3812. @É`>0˛ È é`f`@L)ò˝
  3813. & Å¿¿ò–¸ È Übf@@L+ò˝
  3814. hDÄ@É x˛ È Ç<Ä@L'ò˝
  3815. ¿¿74Ä@
  3816. Ѹ È ¸@L*ò˛ Ä≈ÄCëÙ˛ È ¸ˇ¸@Lò˘5lÅú˚ È ¯@L%ò˛
  3817. $2 ô#˝ È¯ÄL#ò˝    H .˚ È˘ÄL$ò˝@ x¸ È˘ˇ˛Lò˝Ä p˙ ÈÛLò˝&Äì4`¸ ÈÛLò˛!.ÖĢ ÈÛLò˛@ Å˚ ÈÛLò˛Å@¿d˘ ÈˇÛL ò˛
  3818. ãÄÄ˝ ÈÛLò˛#˛¿˚ ÈÛLò¸l˛ ˝ È|ÛLò˚ò˛0˙ ÈDÛLò˚˛`¸ ÈDÛLò˚Dz Ñ@˚ ÈD˜U@Lò˚˛dÄ˝ È «êÛLò˚Å˛Ä ˚ È    ÛLò˜˝ ÈÇÛLò˚˛˚ ÈDÛLò˜IJ È(ÛLò˙ÄYÇĸ ÈÛLò¯êIJ ÈÛLò˙@ĸ ÈÛLò˙ x¿˛?ÁˇÛLò¯¿`“Lò˙Ä1É0˛÷Lò˙"AœLò˘ $    ˚‚˘ˇ˛Lò˙d)€˘ÄLò˚ÄHĸ‚¯ÄLò˙0¿Ä‹ ¯@Lò¸¿∞ĸ‚ ¯@Lò˚¸?ÄDÄ‹ ¿˛ @Lò@ê¿˛ê¿˛≠äÃ÷!ò¸á‡@ĸ‚  ˛ @Lò¸ ˛Åê€  «√áå@Lò¸˛˘‚  ffLÃ@L%ò¯˜¸8¸1åÛ  Êf Ã@L*ò¯ @¸Ѹ`¸ÄÛ  ffÃ@L/ò¯¿˙ƒxˇáÄx>303Ãx¯¿ˆ  ff @L1ò¯v@¸    ‰åÃÿÃ`˛30331åÃÿˆ  &ffLL@L.ò¯¿`˙t|ÃÿÃ`˛30331åÃÃı  √Êcáå@L*ò¯4†¸<ÃÃœ¿Ã`3?30?31åÃÃı ¯@L(ò¯(˙˛Ã Ã`3030031åÃÃı ¯@L+ò¯ ¸ ˛Ã@Ã`313 131åÃÿˆ ¯@L&ò¯`˜|ëÄx`3?¿0Ãxÿˆ¯ÄLò¯@˘‚˘ÄLò¯@Ÿ˘ˇ˛Lò¯@˘÷L
  3819. ò¯@ÕLò¯@˘÷L
  3820. ò¯¿ÕLòÔ?ÁˇÛLòÌ ÁÛLòÔ ÁÛLòÌ Á¯ˇÄLòÔ Á¯ˇ‡LòÌ Á˜ˇLòÔ!Δ¸Ú¯¯LòÌ# ¸Ò«˘ˇ˛8L"òÔ#«Δ<Êœ‡Ûÿ˘ºLòÌ#Ü˝fg˛ôêÛê¯úL òÔ!Δ˝ff˛ôÄÛ†¯\LòÌ Ê˛f~f˛ôÄÛ†¯\L&òÔ ˝f`f˛ôÄÛ†Ä0\L$òÌ"˝fbf˛ôêÛ†Ä0\L'òÔ!ΔfgΔ<Êüò‡Û†ôüé>\L!òÌ ˛`†˝ô3\L$òÔ  `†ôôú3\LòÌ ¸¿Ó†ôôé3\LòÔ Á†ôôá3\LòÌ Á†ôôì3\LòÔ Á†üé3\LòÌ?Áˇ†¯\LòÔ„†¯\Lò–†¯\LòÔ„ê¯úLò–ÿ˘ºLòÔ„«˘ˇ˛8Lò–¯¯L
  3821. òœ˜ˇL òœ¯ˇ‡Lò@¿˛¿˛ÃäÎ÷ òœ¯ˇÄLò√Lò√Lò√Lò√Lò√Lò√Lò√Lò√Lü√ˇÃê√ Ä√ ¬ˇ¸¬ˇ¸¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@ ˛ ˛Îä
  3822. ÷¡¡¡,˝
  3823. Û¿¿¯Ä˛˝Ä  ˛D¿Ì*˝      Ä˝Ä ¸Ä˛@@Ì0˝*Åáë.pÄ
  3824. ·≈òá‚'Ña≈áÃ8CáÅ·ƒ@0˝"Äàë0àÄ
  3825. &dààÅ$D"&Hò˛DHÅ$@0˝*‚„«¡àë à‰DààÅ$D"HêD<DHÅ"Ä/˝" Äàë ¯‚$DàèÅ$D!ƒOê˛DHÅ!Ô0˝" Äàë Ä?Ä$Dàà$D $H˛DHÅ"Ä0˝"  Äàì à Å$DààÅdD"$Hê˛DHÅ$@0˝*Û¿¿Äáç pÄ Ä·‰Dá·ßÑ!ƒGƒ<CáÅ·ƒ@ÚÄıÄıÄÌÛÄıĈÄÌ
  3826. ÛÊÏ¡¡¡¡¡¡˝"@Õ˝ åÕ˝ Ê8√ãTqa√«“˝ "DLÅ$âí$Hò“˝ ‚"DHÅy‰Hê“˝ "DHÅâ$Oê“˝ "DHÅâ$H“˝ "DHÅâ$Hê“˝ Ò‚ CàÅy„«“Ú@—Û@—ÛÄ—¡¡¡¡,˝à@@ ˝a Ä‡¸ Ô)˝à˛@å˛ ˝  ˙Ó1˝+H‚",8√«Tp„8p‚¿,p‚Á<#qá≈ò≥,a√é0‚¿Ò1˝+I"2DDHÅ$ââ 2!ë"!" àô&dÃë2"$D Ò1˝+)T"@DHÅyâ "!ë"! àë$Dàë""ƒ Ò1˝+)ÒT"8DOÅâà‚ "!Úë"!" àë$Dàë""D Ò1˝+à"DHâà "!ë"!" àë$Dàë""D Ò1˝+à"DDHÅââ "!ë"!" àë$Dàì""$D Ò1˝+‡à"8C«x· p‚""‚û<!á·ƒDàç"!√√‚ Ò ϸ fi ϸ fiò@ 2˛ 2˛
  3827. ä÷¡¡¡¡¡¸ ‡˛˛ ‘¸ ˛˛ ‘¸PÒ·≈òÒá"√Ä÷¸Pâ&dâò#$@÷¸àâ$Dâê"$’¸àâ$Dâê"$’˝¸â$Dâ"$’˝â$Dâ1ê"$@÷˝Ò··ƒD–« "#à÷˚Å˚IJ ”˚Å˚IJ@”¡¡†è†Éˇ@ˇ ˇˇˇˇ@
  3828. ˇ·ˇ‚7^
  3829. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  3830. (‡*2-30    )BUsing the Edition Manager4^*¿¯
  3831. .°dONLNd\lhs(elYï°dONLNd\rh‚)ou pass a new publisher rg`°dONLNd\‚h˝)peply r9¿°dONLNd \˝h)ecor  °dONLNd$\hz)d as a parameter to the ,
  3832. Courier  °dONLNd<\zhÊ)kNewPublisherDialog  °dONLNdN\ÊhË)l .°dONLNdOiluì(rl    function..°dONLNdYÄlå*TYPE NewPublisherReply = °dONLNdté~ö¢+RECORD°dONLNd}úꮿ+canceled°dONLNdÖú¿®Δ)0:°dONLNdäúÿ®fi)B°dONLNdãúfi®)oolean;°dONLNdòúD®h)f{user °dONLNdûúh®§)$
  3833. clicked Ca°dONLNd®ú§®∂)<nce°dONLNd´ú∂®¬)l}°dONLNd∞™ê∂Δ(≥ê    replacing°dONLNdπ™Δ∂Ã)6:°dONLNdæ™ÿ∂fi)B°dONLNdø™fi∂)oolean;°dONLNdÙD∂»)f{user chose existing }°dONLNdÔ∏DƒJ*{°dONLNd∏Jƒ‡) filename for an edition}°dONLNd Δê“∫(œêusePart°dONLNdΔ∫“¿)*:°dONLNdΔÿ“fi)B°dONLNdΔfi“)oolean;°dONLNd&ΔD“Ú)f{always FALSE in version 7.0}°dONLNdF‘ê‡∫(›êpreview°dONLNdM‘∫‡¿)*:°dONLNdR‘ÿ‡fi)H°dONLNdS‘fi‡)andle;°dONLNd_‘D‡Ï)f{handle to 'prvw', 'PICT', }°dONLNdà‚DÓ⁄*{ 'TEXT', or 'snd ' data}°dONLNd§급(˘êpreviewFormat:°dONLNdºD¸™)¥{type of preview}°dONLNd‘˛ÿ
  3834. fi(ÿF°dONLNd’˛fi
  3835. )    ormatType°dONLNdfi˛
  3836. )6;°dONLNdÁ êΔ(ê    container°dONLNd ΔÃ)6:°dONLNdı ÿV)EditionContainerSpec;°dONLNd VÚ)~{initially, default name }°dONLNd8D&Ï(#D{ and location of edition; }°dONLNda(D4Ú*{ on return, edition name & }°dONLNdã6DBÊ*{ location chosen by the } °dONLNd≥DDP‡*{ user to publish data to}°dONLNdœR~^Ñ([~E°dONLNd–RÑ^ñ)ND;°dONLNd‘jlvs(slYï°dONLNd’jrvÖ)ou fiï°dONLNd⁄jÖv¨)
  3837. ll in the ï°dONLNd‰j¨v÷)'usePartï°dONLNdÎj÷v€)*, ï°dONLNdÌj€v)preview™°dONLNdÙjv    )), ™°dONLNdˆj    vW)previewFormat™°dONLNdjWvo)N, and ™°dONLNd    jov•)    container™°dONLNdj•vÆ)6 fi™°dONLNdjÆvÙ)    elds of the new .°dONLNd%wlÉú(Äl publisher rÒ@°dONLNd0wúɵ)0eply ryÄ°dONLNd6w∂É»)ecoṙ°dONLNd:w»É–)d.ˇˇé“.°dONLNd=âlï±(ílAlways set the ˇ˛¨v,v°dONLNdLâ≤ï‹)FusePartˇˇé“,v°dONLNdSâ‹ï‰)* fiªH°dONLNdVâ‰ïˇ)eld to ˇ˛¨vÿÏ°dONLNd]âˇï)FALSEˇˇé“ÿÏ°dONLNdbâï5). The ˇ˛¨vˆê°dONLNdhâ5ï_)previewˇˇé“ˆê°dONLNdoâ_ïg)* fiÖb°dONLNdrâhï⁄)    eld should contain either ˇ˛¨v¿™°dONLNdåâ⁄ïÏ)rNILˇˇé“bJ°dONLNdèâÏï¯) or °dONLNdìñl¢Ó(ülthe data to display in the prR`°dONLNd∞ñÓ¢
  3838. )Çeviewg`°dONLNdµñ    ¢"). The g`°dONLNdªñ"¢p)previewFormatg`°dONLNd»ñp¢y)N fig`°dONLNdÀñy¢Œ)    eld should contain g`°dONLNdfiñŒ¢Ú)U'PICT'g`°dONLNd‰ñÚ¢˜)$, °dONLNdÊ£lØê(¨l'TEXT'°dONLNdÏ£êØï)$, °dONLNdÓ£ïØπ)'snd '°dONLNdÙ£πØ…)$, or °dONLNd˘£…ØÌ)'prvw'°dONLNdˇ£ÌØ)$.°dONLNdµl¡è(ælSet the °dONLNd    µè¡≈)#    container°dONLNdµ≈¡Œ)6 fi°dONLNdµŒ¡ˆ)    Celd to be the default name and folder for the edition. The default .°dONLNdX¬lŒ´(Àlname should rC °dONLNde¬¨Œ∂)@eflÄ°dONLNdh¬∑Œ`) 'ect the data contained in the publishero‡°dONLNdè¬_ŒÚ)®#. For example, if a user publishes °dONLNd≤œl€Ÿ(ÿlVa bar chart of sales information entitled “sales data,” then the default name for the °dONLNd‹lË◊*Pedition could also be “sales data.” Otherwise, you should use the document name °dONLNdXÈlı€*Qfollowed by a hyphen (-) and a number to establish uniqueness. For example, your °dONLNd©ˆl* default name could be “January T@°dONLNd…ˆ*)ï otals - 3.”°dONLNd’l€(lRIf the document has not been saved, the default name should be “untitled edition <ê °dONLNd'€‡(€n@°dONLNd(·Ó)>” °dONLNd+l!Ç(lwher7°dONLNd/É!ä)e Ć°dONLNd1ä!è)n¿°dONLNd2ê!Í)O is a number to establish uniqueness. The default folder should be the same as °dONLNdÅ"l.(+l%the edition for the last publisher crˇ`°dONLNd¶".¡)ò,eated in the same document. If this is the fiÄ°dONLNd”"¬.œ)ærst °dONLNd◊/l;Œ(8lQpublisher in the document, the default folder should be the same folder that the °dONLNd(<lH∞*document is in.ˇˇe4.°dONLNd8NlZ*The ˇ˛/úÂ4°dONLNd<NZØ)canceledˇˇe4Â4°dONLNdDNØZ∑)0 fiJh°dONLNdGN∏Z()    eld of the new publisher rðdONLNdaN)ZC)qeply rN`°dONLNdgNCZU)ecor ¿°dONLNdkNUZ¯)%d indicates whether the user clicked °dONLNdê[lg§(dl Cancel. The °dONLNdú[§g⁄)8    replacing°dONLNd•[⁄g„)6 fi°dONLNd®[„gö)    )eld indicates whether the user chose to rR`°dONLNd—[ögÌ)∑eplace an existing °dONLNd‰hltñ(ql    edition fi°dONLNdÓhñtÆ)*le. If °dONLNdıhÆt‰)    replacing°dONLNd˛h‰tÍ)6 rR`°dONLNdhÍt)eturns R`°dONLNdht%)FALSER`°dONLNd h%tP) , call the R`°dONLNdhPtÏ)+CreateEditionContainerFileR`°dONLNd1hÏtÓ)ú .°dONLNd2ulÅß(~lfunction to cr{`°dONLNd@ußÅ);eate an edition fiÓÄ°dONLNdRuÅ˙)Ile.ˇ9“@ˇ ˇˇˇˇ@
  3839. ˇ·ˇ‚7^
  3840. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äUsing the Edition Manager
  3841. , (‡2-31
  3842. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  3843. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  3844. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  3845. 4€4—?òÄ
  3846. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  3847. ˛ˇˇˇ
  3848. ˛ˇˇˇ
  3849. ˛ˇˇˇ
  3850. ˛ˇˇˇ˜˝˛ˇ˛
  3851. ˛ˇ˛ˇˇ
  3852. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  3853. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  3854. ˛ˇ˛ˇˇ
  3855. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  3856. ˛ˇˇˇˇ
  3857. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  3858. ˛ˇˇˇˇ
  3859. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  3860. ˛ˇˇˇˇ
  3861. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿.°dONLNd\ähû(eäThe ,
  3862. Courier°dONLNd\ûh‘)    container°dONLNd\‘h›)6 fi°dONLNd\›h2)    eld is of data type °dONLNd$\2h™)UEditionContainerSpec°dONLNd8\™h≠)x.°dONLNd:sä2(|äTYPE EditionContainerSpec = °dONLNdXÅúç¿+RECORD°dONLNdaèÆõfi+theFile:°dONLNdnèõ,)ZFSSpec°dONLNdtè,õ2)$;°dONLNdyèPõ˛)${record that identifies the }°dONLNd¢ùP©V*{°dONLNd£ùV©\) °dONLNd§ù\©Ú)file to contain edition d°dONLNdΩùÚ©
  3863. )ñata}°dONLNdƒ´Æ∑(¥ÆtheFileScript:°dONLNd◊´∑D)Z
  3864. ScriptCode°dONLNd·´D∑J)<;°dONLNdÊ´P∑V) {°dONLNdÁ´V∑Ê)script code of filename}°dONLNdπÆ≈fi(¬ÆthePart:°dONLNdπ≈2)ZLongInt°dONLNdπ2≈8)*;°dONLNdπP≈V){°dONLNdπV≈Œ)which part of file, °dONLNd0πŒ≈‘)x}°dONLNd=«P”V(–P{°dONLNd>«V”⁄) always kPartsNotUsed}°dONLNdW’Æ·ˆ(fiÆ thePartName:°dONLNdh’·&)ZStr31°dONLNdm’&·,);°dONLNdr’P·V)*{°dONLNds’V·Ê)not used in version 7.0}°dONLNdé„ÆÔ(ÏÆthePartScript:°dONLNd°„ÔD)Z
  3865. ScriptCode°dONLNd´„DÔJ)<;°dONLNd∞„PÔV) {°dONLNd±„VÔÊ)not used in version 7.0}°dONLNdÀÒú˝¥(˙úEND;ˇˇËR°dONLNd–    ä§(äThe fihR°dONLNd÷    •µ)eld ˇˇ∏ˆP§°dONLNd⁄    ∂⁄)theFilP§°dONLNd‡    ⁄‡)$eˇˇËRP§°dONLNd·    ‡˙) is a fi    ö°dONLNdÈ    ˚D)le system specifi⁄>°dONLNd˙    De)Ication rî°dONLNd    fx)"ecorgP°dONLNd    xÆ)d, a data str F°dONLNd    Ø≈)7ucturfi¶°dONLNd    ƒ )e Δ¯°dONLNd    ÀÏ)of type ˇˇ∏ˆóú°dONLNd"    Ì)"FSSpecˇˇËRóú°dONLNd(    )$. .°dONLNd*ä"ê(äY@Ä°dONLNd+ê"?)(ou identify the edition using a volume r†°dONLNdS@"P)∞efer≠¿°dONLNdWP"â) ence number5†°dONLNdbâ"ö)9, dir˛¿°dONLNdgö"·)ectory ID, and fiᇰdONLNdx‚")Hlename. °dONLNdÄ#ä/Y(,ä.When specifying an edition, follow the standar‡°dONLNdÆ#Y/ )œd conventions described iÖ†°dONLNd«# /“)qn °dONLNd…0ä<§(9äInside qÄ°dONLNd–0•<Á)Macintosh: FilesF‡°dONLNd‡0Ë<Í)C.°dONLNd‚BäN©(KäAfter fi&Ä°dONLNdÍB™N‚) lling in the fid°dONLNd˘B‚NX)8elds of the new publisher rx¿°dONLNdBXNq)veply r°dONLNdBrNÑ)ecoru`°dONLNdBÑN )!d, pass it as a parameter to the .°dONLNd?Oä[ˆ(XäNewPublisherDialog°dONLNdQOˆ[›)l3 function, which displays the publisher dialog box.°dONLNdÖfär(oäerr := NewPublisherDialo°dONLNdùfr&)êg(°dONLNdüf&rP) reply);°dONLNdß~ääo(áä3After displaying the publisher dialog box, use the °dONLNd⁄~oä )ÂCreateEditionContainerFile°dONLNdÙ~ ä)ú °dONLNdıãäó√(îäfunction to crR`°dONLNdã√ó8)9eate the edition containerï°dONLNdã7óv)t, and then use ï°dONLNd,ãvóà)?the ï°dONLNd0ãàóƒ)
  3866. NewSectionï°dONLNd:ãƒóˇ)< function to crg`°dONLNdIãˇó);eate .°dONLNdNòä§ø(°äthe section r
  3867. ‡°dONLNd[ò¿§“)6ecor@°dONLNd_ò“§)d and the alias r8@°dONLNdpò§+)Gecor¨†°dONLNdtò+§@)d. Se—¿°dONLNdyò@§å)e the next sectionÁ@°dONLNdãòå§ë)L, Á@°dONLNdçò맰)“Cr√@°dONLNdêò°§Ú)eating the Edition °dONLNd£•ä±∂(Æä    Containerÿ‡°dONLNd¨•µ±º)+,”X‡°dONLNdÆ•Ω±ƒ) aÿ‡°dONLNd∞•ƒ±“)nd F°dONLNd≥•”±„)“Cr"°dONLNd∂•„±L)eating the Section Recor·‡°dONLNdŒ•L±h)id and å`°dONLNd‘•h±ö) Alias Recor¿°dONLNdfl•õ±Œ)3 d” on page A@°dONLNdÍ•Œ±‡)32-15ï °dONLNdÓ•‡±Â) fi°dONLNd•Ê±Ò)or °dONLNdÛ≤äæÁ(ªädetailed information.°dONLNd    ƒä–∫*CThe following code segment illustrates how your application might rp °dONLNdLƒ∫–¯(Õ∫espond to the °dONLNdZ—ä›ü(⁄äuser `°dONLNd_—†›Â)choosing the Crl@°dONLNdn—›Í)E=eate Publisher menu item. In this case, the code sets up the °dONLNd´fiäÍì(ÁäprG °dONLNd≠fiîÍ∞)
  3868. eview @°dONLNd≥fi±Íø)@for the edition, sets the default name for the edition containera °dONLNdÛfiøÍ˙(Áø, and calls an .°dONLNdÎä˜÷(Ùäapplication-defi°dONLNdÎ÷˜)Lned function (°dONLNd Î˜f)<DoNewPublisher¬†°dONLNd.Îe˜î)S , shown in ¬†°dONLNd9Îî˜Í)/Listing 2-4 on page ¬†°dONLNdMÎ͘Û)V2-¬†°dONLNdOÎÛ˜˝)    33¬†°dONLNdQν˜)
  3869. ) to .°dONLNdV¯äL(ä,display the publisher dialog box on the userΩ@°dONLNdǯMc)√’s scr≥¿°dONLNdà¯cw)een. ∫°dONLNdç¯w˙)An application might call the .°dONLNd´äfi(äDoNewPublisher°dONLNdπfi)T function in rR`°dONLNd«h)7esponse to the user¿°dONLNd⁄i¶)T’s choosing Cr‚ °dONLNdË•Ò)<eate Publisher fr¥Ä°dONLNd˘Ò)Lom the .°dONLNdä’(äEdit menu or in r?@°dONLNd÷L)Lesponse to handling the CrˆÄ°dONLNd+L·)v"eate Publisher event. The chapter °dONLNdMä+“((ä“Responding to ;¿°dONLNd\“+Ú)HAApple Events” in this book gives an example of a handler for the °dONLNdù,ä8ï(5äCr\°dONLNdü,ï8©) eate ±†°dONLNd§,©8)Publisher event..°dONLNdµCäOú(LäVAR°dONLNd∫Qú]+thisDocument: °dONLNdœQ]å)~MyDocumentInfoPtr; °dONLNd‰_úk(húpromptForDialog: °dONLNd¸_kJ)~Boolean;°dONLNdmúy“(vú    preview: °dONLNdmyJ)~Handle; °dONLNd {úáˆ(ÑúpreviewFormat: °dONLNd6{áb)~ FormatType; °dONLNdDâúï(íúdefaultLocation: °dONLNd\âïò)~EditionContainerSpec;°dONLNdsóú£¿(†úmyErr:°dONLNdÄó£>)~OSErr;ˇ.@ˇ ˇˇˇˇ@
  3870. ˇ·ˇ‚7^
  3871. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  3872. (‡*2-32    )BUsing the Edition Manager4^*¿¯,
  3873. Courier
  3874. .°dONLNd\lhä(elBEGIN°dONLNdj~v¯+?{Get a preview to show the user. The MyGetPreviewForSelection }°dONLNdHx~ÑÜ*,{ function returns a handle to the preview.}°dONLNdvÜ~í™*2preview := MyGetPreviewForSelection(thisDocument);°dONLNd™î~†*previewFormat := 'TEXT';°dONLNdƒ¢~Æ‘*9defaultLocation := MyGetDefaultEditionSpec(thisDocument);°dONLNdˇ∞~º*promptForDialog := TRUE;ˇ˛Ã»°dONLNdæ~ ˜*@myErr := DoNewPublisher(thisDocument, promptForDialog, preview, °dONLNdcÃÿŒ+ê previewFormat, defaultLocation);°dONLNdÑ⁄lÊÑ(„lEND;
  3875. * ¯4* ¯ l¯
  3876. ˇ·ˇ‚7^ .°dONLNdä¯l *Creating the Edition Containerˇˇˇˇˇˇ‘@(Ò2
  3877. .°dONLNd™ lë(lUse the °dONLNd≤ ë-)%CreateEditionContainerFile°dONLNdà -h)ú function to crR`°dONLNd€ hÂ);eate an edition container to .°dONLNd¯l%’("lhold the publisher data..°dONLNd0l<,* err := CreateEditionContainerFil°dONLNd10,<8)¿e(°dONLNd308<º) editionFile, fdCreator°dONLNdI0º<¬)Ñ,°dONLNdV>2J8(G2 °dONLNdW>8J>)e°dONLNdX>>J¬)ditionFileNameScript);.°dONLNdoVlb±(_lThis function cr€°dONLNdV±b")Eeates an edition container0Ä°dONLNdôV"bÛ)q3. The edition container is empty (that is, it does °dONLNdÃclo(ll¬ contain any formats) at this time.°dONLNdÛulÅr*Tµ¿°dONLNdÙuqÅ7).o associate an icon with the edition containerí@°dONLNd"u7ÅD)Δ, cr«Ä°dONLNd&uDÅ})eate the apprC¿°dONLNd3u~ÅÙ):opriate entries for the icon °dONLNdPÇléë(ãlDin your application’s bundle. See the chapter “Finder Interface” in *¿°dONLNdîÇíé‹(ãíInside Macintosh: °dONLNd¶èlõü(òl Macintosh TÄ°dONLNd±èûõ‚)2oolbox EssentialsµÄ°dONLNd¬è„õÛ)E> for additional information. Depending on the contents of the .°dONLNdúl®´(•ledition, the fi°dONLNdú´®Ô)?le type will be °dONLNdúÔ®)D'edtp'°dONLNd%ú®Y)$ (for graphics), °dONLNd6úY®})F'edtt'°dONLNd<ú}®∏)$ (for text), or °dONLNdLú∏®‹);'edts'°dONLNdRú‹®fi)$ .°dONLNdS©lµ~(≤l(for ‡°dONLNdX©µ†)sound)..°dONLNd`ªl«è(ƒlAfter crR`°dONLNdhªè«)#eating the edition containerï°dONLNdѪ «3)}
  3878. , use the ï°dONLNdéª3«o)'
  3879. NewSectionï°dONLNdòªo«™)< function to crg`°dONLNdߪ™«Û);eate the section .°dONLNd∏»l‘o(—lrE°dONLNdπ»p‘Ç)ecorπ`°dONLNdΩ»Ç‘∏)d and alias r°dONLNd »π‘À)7ecorâ`°dONLNdŒ»À‘)d for the section..°dONLNd·⁄lÊú(„l Listing 2-4°dONLNdÏ⁄úÊ˘)0 illustrates how to crR`°dONLNd⁄˘ÊC)]eate a publisherï°dONLNd⁄BÊ[)I. The ï°dONLNd⁄[ÊØ)DoNewPublisherï°dONLNd&⁄Øʈ)T function shown .°dONLNd6ÁlÛË(lin the listing is a function pr™‡°dONLNdUÁËÛ˜)|>ovided by an application. Note that an application might call .°dONLNdìÙl~(˝lthe °dONLNdóÙ~“)DoNewPublisher°dONLNd•Ù“Û)T functio°dONLNd≠ÙÛ    )!n in rR`°dONLNd≥Ù    \)esponse to the user¿°dONLNdΔÙ]¨)T’s choosing the Cr‚ °dONLNdÿÙ´Ã)Neate Pu‚ °dONLNdflÙÃÔ)!blisher .°dONLNdÁlö(
  3880. lcommand z‡°dONLNdÔõ∂)/or in ra¿°dONLNdˆ∂fl)    esponse tz`°dONLNdˇflÍ))o t≤@°dONLNdÍ) he Cr©@°dONLNd[)eate Publisher eventˇ‡°dONLNd[fl)Y. The chapter “Responding to °dONLNd8ló(lCApple Events” in this book gives an example of a handler for the Cr`Ä°dONLNd{óÚ(óeate Publisher event..°dONLNdë l,”()lThe parameters to the °dONLNdß ”,')gDoNewPublisher°dONLNdµ ',‡)T+ function include a pointer to information .°dONLNd‡-l9Â(6lVabout the document, a Boolean value that indicates if the function should display the °dONLNd6:lF¸* new publisher dialog box, the prY†°dONLNdV:¸Fw)êeview for the edition, the prO¿°dONLNds:wF◊){eview format, and an °dONLNdàGlS∑(Pledition containerÒÄ°dONLNdôG∂S∏)J.°dONLNdõYleI(bl3The function displays the publisher dialog box if rcÄ°dONLNdŒYIe‰)›%equested, letting the user accept or °dONLNdÛflrW(ol4change the name of the edition and the location wher_Ä°dONLNd'fWrµ)Îe the edition should rö°dONLNd=fµrÙ)^eside. Use the .°dONLNdLsl(|lCreateEditionContainerFile°dONLNdfsC)ú function to crR`°dONLNdusCÓ);%eate the edition with the given name °dONLNdöÄlåŒ(âland location. Use the °dONLNd∞ÄŒå
  3881. )b
  3882. NewSection°dONLNd∫Ä
  3883. åE)< function to crR`°dONLNd…ÄEåÂ);$eate a new section for the publisherï°dONLNdÌĉåÁ)ü.ˇ/ä@ˇ ˇˇˇˇ@
  3884. ˇ·ˇ‚7^
  3885. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äUsing the Edition Manager
  3886. , (‡2-33
  3887. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  3888. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  3889. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  3890. 4€4—?òÄ
  3891. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  3892. ˛ˇˇˇ
  3893. ˛ˇˇˇ
  3894. ˛ˇˇˇ
  3895. ˛ˇˇˇ˜˝˛ˇ˛
  3896. ˛ˇ˛ˇˇ
  3897. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  3898. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  3899. ˛ˇ˛ˇˇ
  3900. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  3901. ˛ˇˇˇˇ
  3902. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  3903. ˛ˇˇˇˇ
  3904. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  3905. ˛ˇˇˇˇ
  3906. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähÁ(eäAfter the section is cr∫@°dONLNd\Áh¡)]2eated, you must write out the edition data. Be sur¯@°dONLNdI\¡h)⁄e to add the newly °dONLNd\iäuí(räcrµ@°dONLNd^iíuô)>eated section to your list of sections for this document. Ther4@°dONLNdúiöu™(röe arB‡°dONLNd†i™ufl)e several difà`°dONLNd≠ifluÎ)5ferj‡°dONLNd∞iÎu˚) ent °dONLNd¥väÇ”(ätechniques for crÄ°dONLNd≈v‘Ç)JFeating publishers and unique IDs; this listing displays one technique.°dONLNd àäî´(ëäAfter crO°dONLNdà¨îC)"#eating the edition container and cr“Ä°dONLNd7àCî£)óeating a new section rΔ‡°dONLNdMà£îµ)`ecor;@°dONLNdQà∂î¡)d, .°dONLNdTïä°ú(ûäthe ,
  3907. Courier°dONLNdXïú°)DoNewPublisher°dONLNdfï°¢)T' function calls another application-defi°dONLNdé∏)≤ned rR`°dONLNdìï∏°Ÿ)outine, °dONLNdõ¢äÆfi(´äDoWriteEdition°dONLNd©¢fiÆñ)T+, to open the edition and write data to it.
  3908. —HŸ4“HŸ"“H_
  3909. ˇ·ˇ‚7^    .°dONLNd÷«ä“∂(œä Listing 2-4°dONLNd‚«Œ“)DCreating a publisher
  3910. .°dONLNd¯·äÌb(Íä$FUNCTION DoNewPublisher(thisDocument°dONLNd·bÌÜ)ÿ: MyDo°dONLNd"·ÜÌ‘)$cumentInfoPtr°dONLNd/·‘Ì⁄)N;°dONLNd9Ô˚ (¯p°dONLNd:Ô ˚∞)romptForDialog: Boolean;°dONLNdRÔ∞˚∂)ê °dONLNd\˝     (p°dONLNd]˝     t)review: Handle°dONLNdk˝t    z)T;°dONLNdu  (p°dONLNdv  h) reviewFormat°dONLNdÇ hz)H: F°dONLNdÖ z∞)    ormatType°dONLNdé ∞∂)6;°dONLNdò% ("e°dONLNdô %\)
  3911. ditionSpec°dONLNd£\%n)<: E°dONLNd¶n%‡)ditionContainerSpec°dONLNdπ‡%Ê)r)°dONLNd√'3 (0:°dONLNdƒ' 3J) OSErr;°dONLNdÃ5äAú(>äVAR°dONLNd—CúO +getLastErr, dialogErr:°dONLNdÔC,OP)êOSErr;°dONLNd˜Qú] (ZúcreateErr, sectionErr:°dONLNdQ,]P)êOSErr;°dONLNd_úk¿(húresID:°dONLNd+_,k\)êInteger;°dONLNd5múyÍ(vúthisSectionH:°dONLNdJm,yÄ)êSectionHandle;°dONLNdZ{úá¿(Ñúreply:°dONLNdh{,áò)êNewPublisherReply;°dONLNd{âäï®(íäBEGIN°dONLNdÇóú£Æ+{se°dONLNdÖóÆ£§))t up info for new publisher reply record}°dONLNd∞•ú±2(Æúreply.replacing := FALSE;°dONLNdÀ≥úø&*reply.usePart := FALSE;°dONLNd‰¡úÕ2*reply.preview := preview;°dONLNdˇœú€z*%reply.previewFormat := previewFormat;°dONLNd&›úÈP*reply.container := editionSpec°dONLNdD›PÈV)¥;°dONLNdGÎú˜¢(ÙúI°dONLNdH΢˜,)F promptForDialog THEN °dONLNda˘ú¥(úBEGI°dONLNde˘¥∫)N°dONLNdh˘¿Δ) {°dONLNdi˘Δh)user interaction is allowed°dONLNdÑ˘hn)¢}°dONLNdàÆ¿(Æ{di°dONLNdã¿í)#splay dialog box and let user selec°dONLNdÆíû)“t}°dONLNd≥Æ!ò(Æ'dialogErr := NewPublisherDialog(reply);°dONLNd›#Æ/¿*{di°dONLNd‡#¿/b)spose of preview data handl°dONLNd˚#b/n)¢e}°dONLNd1Æ=“(:ÆDispos°dONLNd1“=ÿ)$e°dONLNd1ÿ=V)Handle(reply.preview)°dONLNd1V=\)~;°dONLNd ?ÆK¥(HÆI°dONLNd!?¥K⁄)1F dialogErr <> noErr THEN MyErrHandler(dialogErr)°dONLNdR?⁄K‡(H⁄;°dONLNdVMÆY¥(VÆI°dONLNdWM¥Y2)F reply.canceled THEN°dONLNdo[ÆgÃ(dÆBEGIN°dONLNdw[‰gí)6{do nothing if user canceled}°dONLNdòi¿uå(r¿"DoNewPublisher := userCanceledErr;°dONLNdæw¿É>*EXIT(DoNewPublisher);°dONLNd÷ÖÆëΔ(éÆEND;°dONLNd‹ìúü¥(úúEND;°dONLNd‚ì¿ü8)${of promptForDialog}ˇ@ˇ ˇˇˇˇ@
  3912. ˇ·ˇ‚7^
  3913. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  3914. (‡*2-34    )BUsing the Edition Manager4^*¿¯,
  3915. Courier
  3916. .°dONLNd\~hÑ(e~I°dONLNd\Ñh )F NOT reply.replacing THEN°dONLNdj~vñ(s~BEGI°dONLNd!jñvú)N°dONLNd'xêѯ(Åê<{if user isn't replacing an existing file, create a new one}°dONLNdfÜêífi*createErr := °dONLNdwŒ+2CreateEditionContainerFile(reply.container.theFile°dONLNd©îŒ†‘(ùŒ,°dONLNd∂¢2Æ8(´2 °dONLNd∑¢8Æ>) °dONLNd∏¢>ÆD)k°dONLNdπ¢DÆå) AppSignature°dONLNd≈¢åÆí)H,°dONLNd“∞2º8(π2 °dONLNd”∞8º>) °dONLNd‘∞>ºD)r°dONLNd’∞DºÚ)eply.container.theFileScript)°dONLNdÚ∞Úº¯)Æ;°dONLNdˆæê ñ(«êI°dONLNd˜æñ ,)F createErr <> noErr THEN°dONLNdÃêÿÆ(’êBEGIN°dONLNd⁄¢Êí+(DoNewPublisher := errAEPermissionDenied;°dONLNdHË¢Ù *EXIT(DoNewPublisher);°dONLNd`ˆê®(ˇêEND;°dONLNdf~ñ(~END;°dONLNdjñ) {of not replacing}°dONLNd~⁄(~:{Advance counter to make a new unique sectionID for this }°dONLNdª ~,‡*;{ document. It is not required that you equate section IDs °dONLNdˆ ‡,Ê()‡}°dONLNd˘.~:ê(7~{ w°dONLNd¸.ê:®)ith °dONLNd.®:Í) resources.}°dONLNd<~HÑ(E~t°dONLNd<ÑHÚ)=hisDocument^.nextSectionID := thisDocument^.nextSectionID + 1°dONLNdK<ÚH¯(EÚ;°dONLNdNJ~Vê(S~{cr°dONLNdQJêV)eate a publisher sectio°dONLNdhJV&)än}°dONLNdlX~dt(a~)sectionErr := NewSection(reply.container,°dONLNdüfr∞+ê thisDocument^.fileSpecPtr,°dONLNd¬tÍÄ(}Í °dONLNd≈tÄV)$  stPublisher°dONLNd—tVÄ\)H,°dONLNd‹Çé(ã °dONLNd›Çéº)thisDocument^.nextSectionID,°dONLNdêÍú(ôÍ °dONLNdêú™)$ pumOnSave, thisSectionH);ˇˇ@°dONLNd û~™Ú(ß~?IF (sectionErr <> noErr) & (sectionErr <> multiplePublisherWrn)@°dONLNd_ûÛ™¯(ßÛ °dONLNdd¨¢∏¥(µ¢& (°dONLNdg¨¥∏í)%sectionErr <> notThePublisherWrn) THE°dONLNdå¨í∏ò)fiN°dONLNdê∫êΔñ(√êM°dONLNdë∫ñΔ )yErrHandler(sectionErr)°dONLNd®∫ Δ&)ä;°dONLNd´»~‘Ñ(—~r°dONLNd¨»Ñ‘V)#esID := thisDocument^.nextSectionID°dONLNdœ»V‘\)“;°dONLNd“÷~‚ê(fl~{ad°dONLNd’÷ê‚2)d this section/alias pair t°dONLNd÷2‚h)¢    o app's i°dONLNd˘÷h‚‘)6nternal bookkeepin°dONLNd ÷‘‚‡)lg}°dONLNd‰~ä(Ì~My°dONLNd‰äŒ) 6AddSectionAliasPair(thisDocument, thisSectionH, resID)°dONLNdG‰Œ‘(ÌŒ;°dONLNdJÚ~˛ê(˚~{wr°dONLNdMÚê˛)ite out first editio°dONLNdaÚ˛)xn}°dONLNde~ (    ~DoWriteEdition(thisSection°dONLNd &)úH)°dONLNdÅ& ,) ;°dONLNdÑ~Ñ(~{°dONLNdÖÑ‘)8Remember that the section and alias records need to be }°dONLNdø~(¬(%~6{ saved as resources when the user saves the document.°dONLNdı¬(»(%¬}°dONLNd¯*~6ê(3~{se°dONLNd˚*ê6h)$t the function result appropriately}°dONLNd!8~D>(A~ DoNewPublisher := MyGetLastError°dONLNdA8>DD)¿;°dONLNdCFlR~(OlEND°dONLNdFF~Rä); ˇ3H@ˇ ˇˇˇˇ@
  3917. ˇ·ˇ‚7^
  3918. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äUsing the Edition Manager
  3919. , (‡2-35
  3920. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  3921. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  3922. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  3923. 4€4—?òÄ
  3924. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  3925. ˛ˇˇˇ
  3926. ˛ˇˇˇ
  3927. ˛ˇˇˇ
  3928. ˛ˇˇˇ˜˝˛ˇ˛
  3929. ˛ˇ˛ˇˇ
  3930. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  3931. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  3932. ˛ˇ˛ˇˇ
  3933. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  3934. ˛ˇˇˇˇ
  3935. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  3936. ˛ˇˇˇˇ
  3937. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  3938. ˛ˇˇˇˇ
  3939. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  3940. jHp4jHp käk
  3941. ˇ·ˇ‚7^ °dONLNd\äjC(fä!Opening an Edition Container to W™@°dONLNd!\Cjp)π    rite Dataˇˇˇˇˇˇ‘@)Ã2
  3942. °dONLNd,pä|∞(yä    Several r@°dONLNd5p±|‹)'
  3943. outines ar›†°dONLNd?p‹|Á)+e rÏ@°dONLNdBpÁ|˛) equirÄ°dONLNdGpˇ|y)ed to write (publish) data frÌÄ°dONLNddpx|˜)yom a publisher to an edition °dONLNdÅ}äâ≥(Üä    container2 °dONLNdä}≥â)). (For information on cr4¿°dONLNd¢}âê)geating an edition containerÃÄ°dONLNdΩ}èâæ)u , see the prA@°dONLNd…}øâ)0evious section.) .°dONLNd⁄ääñ£(ìäBeforR`°dONLNdflä£ño)/e writing data to an edition, you must use the ,
  3944. CourierR`°dONLNdäoñ√)ÃOpenNewEditionR`°dONLNdä√ñ)T function. This .°dONLNd,óä£(†äUfunction should be used only for a publisher within a document. Use this function to °dONLNdŧä∞:*+initiate the writing of data to an edition..°dONLNd≠ªä«*err := OpenNewEditio°dONLNd¡ª«)xn(°dONLNd√ª«∂) publisherSectionH, fdCreator°dONLNdflª∂«º)®,°dONLNdË…’(“ °dONLNdÈ…’)p°dONLNdÍ…’⁄)!ublisherSectionDocument, refNum);.°dONLNd ·äÌë(ÍäA∫†°dONLNd·ëÌ)Y user may try to save a document containing a publisher that is unable to write its data °dONLNdfÓä˙l(˜ä2to an edition—because another publisher (that sharÿ`°dONLNdòÓl˙ı)‚!es the same edition) is writing, °dONLNdπ˚ä(äanother subscriber (that shar, °dONLNd÷˚    p)es the same edition) is rË`°dONLNdÔ˚pı)geading, or a publisher located °dONLNdäó(äon F‡°dONLNdò˜)another computer is râ¿°dONLNd&˜)_egisterÿ‡°dONLNd-ˆ)5ed to the section. In such a case, you may decide to °dONLNdbä!ç(ärE°dONLNdcé!±)    efrain frß¿°dONLNdl±!À)#Bom writing to the edition so that the user does not have to wait. W‡°dONLNdÆÃ!“(ÃY`°dONLNdØ“!)
  3945. ou should °dONLNdπ"ä.û(+äalso ö‡°dONLNdæ"û.°)r_‡°dONLNdø"¢.≈)    efrain fr¬†°dONLNd»"≈.!)#om displaying an err‚`°dONLNd‹"!.[)\or to the user¢¿°dONLNdÍ"[.Ï):". The contents of the publisher arä`°dONLNd "Ï.)ëe saved °dONLNd/ä;î(8ä<to disk with the document. The next time that the user savesöÄ°dONLNdP/î;”(8î the document1‡°dONLNd]/‘;˛)@
  3946. , you can °dONLNdg<äH6(Eä)write the publisher data to the edition. ÿ°dONLNdê<6H<)¨Yç@°dONLNdë<<Hk)
  3947. ou should ô°dONLNdõ<kHt)/diù °dONLNdù<tHÜ)    splaƒ†°dONLNd°<ÜHì)y a”¿°dONLNd§<ìHƒ) n alert box 1‡°dONLNd∞<≈H)2to discourage °dONLNdæIäU´(Räusers frV@°dONLNdΔI´U )!Mom making multiple copies of the same publisher and pasting them in the same °dONLNdVäb„(_äor other documents §†°dONLNd&V„bÔ)Y(seˇ °dONLNd)VÔbˆ) e H¿°dONLNd+V˜b◊)1“Duplicating Publishers and Subscribers” on page ≤¿°dONLNd\V◊bÈ)‡2-58†°dONLNd`VÍbÌ))ZÄ°dONLNdaVÌbÔ).°dONLNdchät¯(qäTIf a user clicks Send Edition Now within the publisher options dialog box (to write °dONLNd∑uäÅ*]publisher data to an edition manually), and the publisher is unable to write its data to its °dONLNdÇäé*edition (for any of the rÄ°dONLNd-ÇÒéÕ)g1easons outlined above), you should display an errU†°dONLNd^ÇÕé)‹ or message..°dONLNdjî䆡(ùä After you arR`°dONLNdvœ)7e fiR`°dONLNdzå)+nished writing data to an edition, use the R`°dONLNd•î冑)Ω CloseEditionR`°dONLNd±î‘†)H function to .°dONLNdæ°ä≠‘(™äclose the edition.°dONLNd—≥äø∏* Listing 2-5 @°dONLNd‹≥πør)/, illustrates how to write data to an editionV°dONLNd≥rø)π#. For an existing edition container≥°dONLNd+≥ø)ì,3°dONLNd,≥ø
  3948. ) .°dONLNd-¿äÃÅ(…ä7you must open the edition, write each format using the °dONLNdd¿ÅÃ…)˜ WriteEdition°dONLNdp¿…Ã)H function, and ˇˇ∂⁄°dONLNdÕäŸ(÷äclose the edition using the ˇˇ$éB°dONLNdõÕŸI)w CloseEditionˇˇ∂⁄B°dONLNdßÕIŸ)H0 function. This listing shows how to write text .°dONLNd◊⁄äÊù(„äonly"†°dONLNd€⁄ùÊ>)(. If the edition is written successfully@°dONLNd⁄=Êz)†, subscribers r
  3949.  °dONLNd⁄{Ê)>eceive Section Read eventsÓ¿°dONLNd,⁄ÊÚ)u.ˇd@ˇ ˇˇˇˇ@
  3950. ˇ·ˇ‚7^
  3951. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  3952. (‡*2-36    )BUsing the Edition Manager4^*¿¯
  3953. g*n¯4g*n¯"h*_
  3954. ˇ·ˇ‚7^°dONLNd\lgò(dl Listing 2-5°dONLNd\∞g∏)DW’ê°dONLNd\∏g)riting data to an edition,
  3955. Courier
  3956. .°dONLNd)vlÇ™(l5PROCEDURE DoWriteEdition(thePublisher: SectionHandle)°dONLNd^v™Ç∞(™;°dONLNd`Ñlêr(çlV°dONLNdaÑrê~)AR°dONLNdeí~ûÆ+ eRefNum:°dONLNdríÿû,)ZEditionRefNum;°dONLNddž~¨Æ(©~openErr:°dONLNdè†ÿ¨¸)ZOSErr;°dONLNdóÆ~∫¥(∑~    writeErr:°dONLNd•Æÿ∫¸)ZOSErr;°dONLNd≠º~»¥(≈~    closeErr:°dONLNdªºÿ»¸)ZOSErr;°dONLNd√ ~÷Ã(”~thisDocument:°dONLNd’ ÿ÷D)ZMyDocumentInfoPtr;°dONLNdÈÿ~‰¿(·~ textHandle:°dONLNd˘ÿÿ‰¸)ZHandle°dONLNdˇÿ¸‰)$;°dONLNdÊlÚr(ÔlB°dONLNdÊrÚä)EGIN°dONLNdÙ~ê+ {fi°dONLNd Ùêò),nd out which document this section belongs t°dONLNd7Ùò§(˝òo}°dONLNd;~Ñ( ~t°dONLNd<Ñfi)hisDocument := °dONLNdKfiÍ)ZMy°dONLNdMÍÜ) FindDocument(thePublisher)°dONLNdgÜå)ú;°dONLNdj~ê(~{op°dONLNdmê)en edition for writin°dONLNdÇ)~g}°dONLNdÜ~*¬('~6openErr := OpenNewEdition(thePublisher, kAppSignature,°dONLNd¡,¥8¿+6  °dONLNd≈,ÿ8‰)$  °dONLNd ,8Ú)6&  thisDocument^.fileSpecPtr, eRefNum);°dONLNdÚ:~F(C~IF openErr <> noErr THE°dONLNd    :F)äN°dONLNdHêTñ(QêM°dONLNdHñT)yErrHandler(openErr)°dONLNd"HT)x;°dONLNd$HTû){handle error and exit}°dONLNd=V~bê(_~{ge°dONLNd@Vêb)t the text data to writ°dONLNdWVb&)äe}°dONLNd[d~pÑ(m~t°dONLNd\dÑp“)extHandle := °dONLNdid“pfi)NMy°dONLNdkdfipÊ) ,GetTextInSection(thePublisher, thisDocument)°dONLNdódÊpÏ(mÊ;°dONLNdör~~ê({~{wr°dONLNdùrê~)ite out text dat°dONLNd≠r~¸)`a}°dONLNd±Ä~åÍ(â~HLock(textHandle);°dONLNd≈é~ö¬*6writeErr := WriteEdition(eRefNum, 'TEXT', textHandle^,°dONLNdú¥®∫+6 °dONLNdúÿ®fi)$ °dONLNdú®∂)6 GetHandleSize(textHandle));°dONLNd%™~∂ˆ(≥~HUnLock(textHandle);°dONLNd;∏~ƒ*IF writeErr <> noErr THEN°dONLNdVΔ~“ú*BEGIN°dONLNd^‘ê‡Ê+9{There were problems writing; simply close the edition. }°dONLNdö‚êÓ‡*8{ When successful = FALSE, the edition data <> section }°dONLNd’긑*6{ data. Note: this isn't fatal or bad; it just means }°dONLNd˛ê
  3957. Ú*;{ that the data wasn't written and no Section Read events }°dONLNdL ê*{ will be generated.}°dONLNddê&Ü*)closeErr := CloseEdition(eRefNum, FALSE);°dONLNdè(~4ê(1~END°dONLNdí(ê4ñ) °dONLNdï6~BÑ(?~E°dONLNdñ6ÑBñ)LSE°dONLNdõD~Pú(M~BEGIN°dONLNd£Rê^¬+3{The write was successful; now close the edition. }°dONLNdŸ`êlÚ*;{ When successful = TRUE, the edition data = section data.}°dONLNdnêzŒ*5{ This edition is now available to any subscribers. }°dONLNdO|êàÚ*;{ Section Read events will be sent to current subscribers.}°dONLNdçäêñÄ*(closeErr := CloseEdition(eRefNum, TRUE);°dONLNd∑ò~§ñ(°~END;°dONLNdº¶l≤~(ØlEND°dONLNdø¶~≤ä); ˇF&@ˇ ˇˇˇˇ@
  3958. ˇ·ˇ‚7^
  3959. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äUsing the Edition Manager
  3960. , (‡2-37
  3961. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  3962. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  3963. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  3964. 4€4—?òÄ
  3965. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  3966. ˛ˇˇˇ
  3967. ˛ˇˇˇ
  3968. ˛ˇˇˇ
  3969. ˛ˇˇˇ˜˝˛ˇ˛
  3970. ˛ˇ˛ˇˇ
  3971. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  3972. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  3973. ˛ˇ˛ˇˇ
  3974. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  3975. ˛ˇˇˇˇ
  3976. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  3977. ˛ˇˇˇˇ
  3978. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  3979. ˛ˇˇˇˇ
  3980. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  3981. kHr4lHr mäm
  3982. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd\äk(gäCreating a Subscriberˇˇˇˇˇˇ€r(g2
  3983. °dONLNdrä~ê({äY@Ä°dONLNdrê~…)ou need to cr™†°dONLNd%r…~)9eate a Subscribe Tfi°dONLNd7r~Ú)N-o menu command in the Edit menu. When a user °dONLNddäã‚(àächooses Subscribe TŒ°dONLNdw·ã)Wo fr‹`°dONLNd{ã)=om this menu, your application should display the subscriber °dONLNd∏åäòÏ(ïädialog box on the userx‡°dONLNdŒåÌò)c’s scro`°dONLNd‘åò)een..°dONLNdŸûä™Ø(ßäUse the ,
  3984. Courier°dONLNd·ûØ™!)%NewSubscriberDialog°dONLNdÙû!™    )r6 function to display the subscriber dialog box on the °dONLNd*´ä∑ú(¥äuser=`°dONLNd.´ù∑≤)’s scr¿°dONLNd4´≤∑N)%een. This function is similar to the ¿°dONLNdY´N∑ú)úCustomGetFile¿°dONLNdf´ú∑®)N pr‚ °dONLNdi´ß∑ƒ) ocedur¥Ä°dONLNdo´ƒ∑)e described in the .°dONLNdÇ∏äƒ≤(¡ä    chapter “B`°dONLNdã∏≥ƒ’))Standarv†°dONLNdí∏’ƒ)"d File Package†°dONLNd†∏ƒ)@”†°dONLNd°∏ƒ) ù†°dONLNd¢∏ƒ')in ◊`°dONLNd•∏'ƒÑ) Inside Macintosh: Filesû@°dONLNdº∏Öƒá)^.°dONLNdæ ä÷ê(”äTµ¿°dONLNdø è÷ü)o cr‡Ä°dONLNd√ ü÷Ë)eate a subscriberꆰdONLNd‘ Ë÷h)I, you must get information frf@°dONLNdÒ h÷ú)Ä om the user– °dONLNd¸ õ÷Ó)3, such as the name °dONLNd◊ä„ï(‡äof …`°dONLNd◊ï„•) the &¿°dONLNd◊¶„˜)Pedition being subscribed to. The dialog box displays a listing of all available °dONLNdf‰äØ(Ìä    editions |`°dONLNdo‰∞√)&and ÈÄ°dONLNds‰√5)allows the user to see a pr¿°dONLNdé‰5)r2eview (thumbnail sketch) of the edition selected. °dONLNd¿Òä˝¢(˙äFigurR¿°dONLNd≈Ò¢˝ª)e 2-12@°dONLNdÀÒª˝g)& shows a sample subscriber dialog box.
  3985. H04 H0" H]
  3986. ˇ·ˇ‚7^    °dONLNdÛä ∫(ä Figure 2-12°dONLNdˇÃ “)BA0°dONLNd“ I) sample subscriber dialog box
  3987. °dONLNd¬äŒˆ(ÀäTThe subscriber dialog box allows the user to choose an edition to subscribe to. The .°dONLNdsœä€¸*NewSubscriberDialog°dONLNdÜœ¸€Û)r; function handles all user interaction until a user clicks .°dONLNd¡‹äËó(Âä=Subscribe or Cancel. When a user selects an edition containerr†°dONLNd˛‹óˢ(Âó, the Edition Manager °dONLNdÈäı (Úäaccesses the prO@°dONLNd#ÈÀı‰)AEeview for the edition container (if it is available) and displays it.
  3988. /à™òÄ@W˛HHM2@ˇˇˇˇˇˇW˛2ä’¬ˇ¸Ä√ Ä√ ü√ˇÏü√ˇÃò√Lò√Lò√Lò√Lò√Lò√Lò√Lò√Lò√LòÔ˘ˆˇ¸ÎLòʈÎLòÔ˘ˆÎLòʈÎLòÔ˘¿3¿˝ÎL(ò¸Ä0?ÅÄ0¸˜IJ|¿˛L+ò¸ ¿ˆ˘ AÅÛ<«èá˜IJf¿˛L.ò¸ Õû31„3Ú¸AÉ3˛ÃÅˇΔ˘ˇ¡Éœ¯ffiyÁÄL/ò¸ Œ¸3˚˘ A„3ÃÃŒˇÜ˘!ÜlÕfÊû¿L+ò¸å¸3Ú AÉ3Ãë˘!Ülï|Δë¿L2ò¸ ?33Û3˚˘ AÉ3ÃÃ√Ä>˘!ÜlÕò`Δ¸Ã¿L.ò¸ 0333Ú AÉ3ÃÃ…Ä˘!ÜlÕò`Δ¿Ã¿L2ò¸ 1232˚˘ ¡ÒÛ «å«˘ˇ¡ÜlÕò`ΔƒÃ¿L'ò¸ <1„¸Úˇ¿˘˜ ÛÃï`Δxg¿LòÔ˘ˆÎLòʈÎLòÔ˘ˆÎLòʈˇ˛ÎLòÔ¯ˆˇ˛ÎLò√L
  3989. òÔ÷Lò√L
  3990. òÔ÷LòÌ?ÁˇÛLòÔ?Èˇ¯ÛLòÌ?Èˇ¯ÛLòÔ?Èˇ¯˘ˇ˛L"òÌ?U«?ˇˇ?˝ˇ¸¸ˆˇ¯(˘ÄL"òÔ>™øõ˛ˇ?˝ˇ¸ıˇ¯D¯ÄL#òÌ
  3991. ?ü08É&˛„˜ˇ¯Ç ¯@L$òÔ>ˇøè˝3?3˛ÃÕ˜ˇ˘ ¯@L(òÌ?«˝3?3> ÃÃœ˜ˇ˚«ê *Ä@L+òÔ>ˇø„˛30?3<˛Ãœ˜ˇ ¯D ˛@L,ò˜0¯?Û˝3ˇ3<˛Ãœ˜ˇ¯D  †¢Ä@L-ò˜<˙>™ø≥˝3ø3<˛ÃÕ˜ˇ¯D ˛˛@L-ò˜¯?U«338É> ʡ¯| (àÄÄ@L*ò˜˙?¸ˇ?ˇˇÛˇ¸Ùˇ ¯ Q˛@L(ò˜    ¯?¸ˇ?ˇˇsˇ¸Ùˇ    ¯  ˛Ä@L$ò˜    Ä˚?˘ˇáˇ     ˛@L ò˜ Ģ?Èˇ¯ *††Ä@L"ò˘ @˚ È ˛¸@L ò˘`˘ È ˛à¸@L"ò˘¿ ˚ È ˛P¸@Lò˘@ ˘ È¯ÄLò˘ 0˚ È˘ÄLò˘0˘ È˘ˇ˛L#ò˘˚ ‡˛¿¿ÛÛL"ò˙Å˘
  3992. !Ä¿¿ÛÛL%ò˙8ÒÉ:˚!@8x«á¯Ò„¿ÙÛL#ò˙ Å:˘ !@dåÃÃÅôƒ`ÙÛL%ò˙Ä2˚!@p|ÃŒò¯√‡ÙÛL$ò˚ˇÄ˘ !@8Ãœ«ôòΔ`ÙÛL&ò˚ÅÄ˚!@ÃÃÅôòΔ`ÙÛL$ò˚Ģ !@LÃÃIÅôòΔ`ÙÛL+ò˚p˛@˙ ˇÄ8|«á¯¯c‡Ù˘ˇ˛L ò˚¡ˇÄB¸˙ È˘ÄL!ò˚áB¸ È¯ÄLò˚¸F ˙ È ¯@L"ò˚¿ÄD¿˝ È ¯@L#ò¯¿D0`˚ È  ¯Ä¿˛@L&ò˘˛H˝ È  ÃÄ¿˛@L#ò˘„Δ<˙ È Ãxqô„«¿@L.ò˘8#7¸ ™Ä¿˚ ı ÃÃ…∞Δf`@L-ò˘1ÄÄ˚!U@¿˚ ı Ã÷‡Δf`@L1ò˘Ä¸ ÄÄ8x«á≥«√Δfiı Ã¸q¿Δf`@L1ò˙?ÒÑ@‡˚ !@dåÃÃÅΔffg ı Ã¿9‡Δf`@L4ò˚‡Ü` ˝
  3993.  ÄÄp|ÃŒܲf ı Ãƒô∞Δf`@L2ò˚ 0˚ !@8Ãœ«áÊff ı ¯xqòc«¿@L1ò˚ ˝ ÄÄÃÃÅÜff ı ˚@L/ò˚0˚ !U@LÃÃIÅÜ&ff ı ˚@L.ò˚?‡É˝ ™Ä8|«áÉ«√Δı ¯@L$ò˚p‡Ç¿·˚ ˘Ú¯ÄL(ò˚AÅ¿Ê1IJ ˘Ú˘ÄL"ò˚<ĸ È˘ˇ˛Lò¸˛IJ ÈÛLò¸ ƒ00>˚ ÈÛL ò˝
  3994. ÒL``cÅIJ ÈÛLò˝
  3995. &à¿p‡Ä¸ ÈÛLò˝     9¿px ˝ ÈÛLò˝    (—0a…Ä˚ ÈÛLò˝     6@c    ˝ ÈÛLò˝    08ËDnÃ˚ ÈÛLò˝    ê dL t˝ ÈÛLò˝     DHc˚ ÈÛL ò˛
  3996. ªHP1˝ ÈÛL"ò˛˛DH`P=˚ È˜U@Lò˙@ê 7¸ ÈÛLò˛    †Ä $C˙ ÈÛLò˝@@0¡¸ ÈÛLò˛ 0O˘ ÈÛLò˛N˚ ÈÛLò˝≤»êÄL˘ ÈÛLò˛åp8†¿˚ ÈÛLò˛    `¿¯ ÈÛLò˛åX˝Ä`¸ ÈÛLò˛ ˝Ä˙ ÈÛLò˝H˝Åò¸ ÈÛLò¸    `˝É ˙ ÈÛL"ò¸¿˝Ü¸ È˘ˇ˛L ò˚ `å˙ È˘ÄL"ò¸àò¸ È¯ÄL ò¸†˙ È ¯@L#ò¸˛ÄÄ˝ È ¯@L'ò¸Ä¿˚ È ¿˛ @L%ò¯ ¿`˝ È  ˛ @L'ò¸˛8@ ˚ È «√áå@L(ò˚ D¿ ˝ È ffLÃ@L'ò¸˛8@ ˚ È Êf Ã@L)ò¸@0˝ È ffÃ@L$ò˘ @˚ È ff @L)ò¸Ä88` ˝ È &ffLL@L#ò˙@ ` ˘ È √Êcáå@L!ò¸@Å ˚ È ¯@Lò¸ ¿Ö ˘ È ¯@L!ò¸Ä ˚ È ¯@Lò¸ ˜ È¯ÄL"ò¸ @˚ È˘ÄLò¸·¯4ů È˘ˇ˛Lò¸<?$!˚ ÈÛLò¸`˛h˘ ÈÛLò¸¿˛–˚ ÈÛLò¯Ä˘ ÈÛLòˆ(˚ ÈÛLò˘¿H˘ ÈÛLò˘  ˚ ÈÛLò˘0$˘ È¯ˇÄLò˘¿ ˚ È¯ˇ‡Lò˘¿˙ È˜ˇLò˘˛@¸ È¯¯Lò˘ˆ È«˘ˇ˛8Lò˘¯ Èÿ˘ºLò˘ˆ Èê¯úLò˘¯ È†¯\Lò˘ˆ È†¯\L!ò˘ ¯ È†00\Lò̠Ȇ0˛0\LòԠȆ3>8€>\LòÌ Èˇ†332d„33\LòԠȆ338`√33\Lò̠Ȇ33`√3?\LòÔ È|†33`√30\LòÌ ÈD†33&d√31\OòÔ ÈD†>8√>\LòÌ ÈD†¯\LòÔ È «ê†¯\OòÌ È    †¯\OòÔ ÈÇê¯úLòÌ ÈDÿ˘ºLòÔ È(«˘ˇ˛8LòÌ È¯¯LòԠȘˇLò̠ȯˇ‡LòÔ?Áˇ¯ˇÄLò√Lò√Lò√Lò√Lò√Lò√Lò√Lò√Nò√Nò√Oü√ˇŒê√Ä√¬ˇ˛¬ˇ˛¬¡¡¡¡¡¡¡¡¡¡¡¡¬¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¬¡¡¡¡¡¡¡¡¬¡¡¡¡¡¡¬¬¬¬¬¬¬¡¡¡¡¡¬¡¡¡¡¡¡¡¡¡¡¡¬¡¡¡¡¡¡¡¡¡¡¡,˚    œÄ<ÉÄÒ˝8˝˛˛à˛àÄ-˚@BÑ@¸D"˝˛˛˛ÄÄÒ1˚+ @Ä@"\‡B√ã1·ƒO]è.òpá√àÄÛ1˚# 0Ä@"a$L…$Hë"`àë0˛àë$HÄÛ0˚*»  ÄÄ·"A>"»âHê @àë àxàë$EÚ0˚#.pÅ"A"ƒHâƒHé @àü ˛àë$BÚ0˚# Ç"A $Hâ$HÅ @àê ˛àë$EÚ1˚#@BÑ&A@ A$Hâ$»ë"@àë ˛àë$HÄÛ1˚+œÄ<á¿@‡|~A√»â·√O@è àxá√àÄÛÒıÚÔÒıÚÔ
  3997. ÒÂÔ¡¡¡¡¡¡¡¡¬¡¡¡¡¡¡¡¬¬¬¡¬¡˚!@œ˚˛¿œ˚ cå8∞G<qp‘˚ "!D»Hô"DâÄ‘˚ "!DàGëDâ”˚ "!DàHë"D˘”˚ "!DàHë"DÅ‘˚ "!DàHë"Dâ‘˚  ƒ8àGë<q‘Ò”ÒD”Ò8“¡¡¡¡+˚Ä @  ˝¸A*˚Ä ¿  ˝˛!˘@Ò0˚*é" "√å<pG1cá,"«.q„¬0·«q` Yã1Δ8„,Ú2˚*ë" #$DDàHëëë2#"0â""âê "fL…""DA2Û2˚*ë@"$DàGêê""" y"‚â "DHâ" <A"Û2˚*ü@"#ÑD¯Hêé""" â""â "DHâ" DA"Û0˚*êÄ" DDÄHêÅ""" â""â "DHâ" DA"Ú0˚*ëÄ"$DDàHëë""" â""â!"DHâ2""DA"Ú0˚*éÄ"#Ñ<pGé«" "!é y„¬··àqDHà“"<1"Ú Í ˝fl Í@˝fl¡¡¡¡¡˚0˝÷˚!˝’˚‡ Yè8qp,8◊˚ë "fHëâÄ2Dÿ˚àë "DHëâ"@ÿ˚àë "DHë˘"@◊˚»ë "DHëÅ"@◊˚Hë!"DHìâ"D◊˚O‡DO q"8 ÿ˙¸˛‘˙¸˛‘ˇÿ@ˇ ˇˇˇˇ@
  3998. ˇ·ˇ‚7^
  3999. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  4000. (‡*2-38    )BUsing the Edition Manager4^*¿¯
  4001. .°dONLNd\lhs(elYï°dONLNd\rh‚)ou pass a new subscriber rg`°dONLNd\‚h˝)peply r9¿°dONLNd!\˝h)ecor  °dONLNd%\hz)d as a parameter to the ,
  4002. Courier  °dONLNd=\zhÏ)kNewSubscriberDialog  °dONLNdP\ÏhÓ)r .°dONLNdQiluì(rl    function..°dONLNd[Älå~*TYP°dONLNd^Ä~åÑ)E°dONLNdaÄêåñ)N°dONLNdbÄñå)ewSubscriberReply =°dONLNdxéêö¥(óêRECORD°dONLNdÇú¢®“+canceled°dONLNdäú“®ÿ)0:°dONLNdèúÍ®)B°dONLNdêú®)oolean°dONLNdñú®)$;°dONLNdõú2®8){°dONLNdúú8®J)use°dONLNdüúJ®í) r clicked Ca°dONLNd´úí®§)Hnce°dONLNdÆú§®∞)l}°dONLNd¥™¢∂®(≥¢f°dONLNdµ™®∂‰)
  4003. ormatsMask°dONLNdø™‰∂Í)<:°dONLNdƒ™Í∂)S°dONLNd≈™∂&)    ignedByte°dONLNdŒ™&∂,)6;°dONLNd”™2∂8) {°dONLNd‘™8∂û)formats required}°dONLNdÈ∏¢ƒfi(¡¢
  4004. container:°dONLNd˜∏̓h)HEditionContainerSpec;°dONLNd∏hƒÊ)~{initially, default }°dONLNd3Δ2“Ê(œ2{ name & location of edition }°dONLNd]‘2‡Ï*{ to subscribe to; on return, }°dONLNdà‚2Ó‘*{ edition name & location }°dONLNdØ2¸∞*{ chosen by the user}°dONLNd«˛ê
  4005. ñ(êE°dONLNd»˛ñ
  4006. ®)ND;°dONLNdÃl"Ä(lThe °dONLNd–Ä"∞)canceled°dONLNdÿ∞"π)0 fi°dONLNd€π"Œ)    eld rR`°dONLNd‡Œ"A)eturns a Boolean value of R`°dONLNd˙A"Y)sTRUER`°dONLNd˛Y"ÿ) if the user clicked Cancel. Tg`°dONLNd◊"fi)~o .°dONLNd#l/fi(,lUindicate which edition format types (text, graphics, or sound) your application can rÇ°dONLNds#fi/Ú(,fiead, .°dONLNdx0l<ü(9l you set the °dONLNdÑ0ü<·)3 formatsMask°dONLNdè0·<Í)B fi°dONLNdí0Í<3)    eld to one or morR`°dONLNd£03<å)Ie of these constants:°dONLNdπGlSä(PlCONST°dONLNd¿GêSÍ)$kPICTformatMask°dONLNd’G¸S)l= 1°dONLNdÿGS);°dONLNdfiGVSh)H{ca°dONLNd·GhS‡)n subscribe to 'PICT°dONLNdıG‡SÏ)x'}°dONLNd˜GÏSÚ)  °dONLNd˚UêaÍ(^êkTEXTformatMask°dONLNdU¸a)l= 2°dONLNdUa);°dONLNdUVa»)H{can subscribe to '°dONLNd,U»a‡)rTEXT°dONLNd0U‡aÏ)'}°dONLNd5cêo‰(lêksndFormatMask°dONLNdIc¸o)l= 4;°dONLNdRcVo\)Z{°dONLNdSc\o»)can subscribe to '°dONLNdec»o‡)lsnd °dONLNdic‡oÏ)'}.°dONLNdl{lár(ÑlTµ¿°dONLNdm{qáá)>o support a combination of formats, add the constants together#°dONLNd´{ááœ(Ñá. For example, a .°dONLNdºàlîÆ(ël formatsMask°dONLNd«àÆî–)BB of 3 displays both graphics and text edition format types in the .°dONLNd    ïl°Õ(ûlsubscriber dialog box.ˇˇ¬ .°dONLNd ßl≥*The ˇˇF$B °dONLNd$ßÄ≥∂)    containerˇˇ¬ B °dONLNd-ß∂≥æ)6 fi°dONLNd0ßø≥)    eld is of data type ˇˇF$ŒT°dONLNdDß≥ä)SEditionContainerSpecˇˇ¬ ŒT°dONLNdXßä≥é)x. b¿°dONLNdZßè≥ñ)Yw¿°dONLNd[ßï≥¯)ou must initialize the °dONLNdr¥l¿¢(Ωl    container°dONLNd{¥¢¿®)6 fPÄ°dONLNd}¥®¿V)&ield with the default edition volume r"‡°dONLNd£¥V¿h)Æeferı@°dONLNdߥg¿ú) ence number7‡°dONLNd≤¥ú¿Ø)5, dir
  4007. @°dONLNd∑¥Ø¿fi) ectory ID, °dONLNd¬¡lÕs( lfi°dONLNdƒ¡sÕÀ)lename, and part. Tï°dONLNd◊¡ Õ)Wo do so, use the ï°dONLNdË¡Õ∞)DGetLastEditionContainerUsedï°dONLNd¡∞Õ„)¢ function to .°dONLNdŒl⁄(◊l@obtain the name of the last edition displayed in the dialog box..°dONLNdQÂlÒ2*!err := GetLastEditionContainerUse°dONLNdrÂ2Ò>)Δd(°dONLNdtÂ>ÒÄ) container);.°dONLNdÄ˝l    ≠(lThis function rj¿°dONLNdè˝≠    √)A@eturns the last edition container for which a new section was cr•°dONLNdœ˝√    ›(√eated ˇˇÚ⁄.°dONLNd’
  4008. lñ(l
  4009. using the ˇˇÿée¥°dONLNdfl
  4010. ó”)+
  4011. NewSectionˇˇÚ⁄e¥°dONLNdÈ
  4012. ”)< function. If ther¢°dONLNd˚
  4013. ¯)I5e is no last edition, or if the edition was deleted, °dONLNd0l#( lGetLastEditionContainerUsed°dONLNdK#*)¢ still rR`°dONLNdS*#j)eturns the corr$¿°dONLNdbj#†)@ ect volume r˜ °dONLNdnü#±)5efer…Ä°dONLNdr±#Ë) ence number °dONLNd~$l0ç(-land dirR`°dONLNdÖ$ç0 )!"ectory ID to use, but leaves the fiR`°dONLNd®$ 0v)ìlename blank and r$¿°dONLNd∫$v0•)V eturns the $¿°dONLNd≈$•0…)/fnfErr$¿°dONLNdÀ$…0À)$ .°dONLNdÃ1l=o(:lrE°dONLNdÕ1p=á)esult ˝Ä°dONLNd”1á=û)code.ˇ1F@ˇ ˇˇˇˇ@
  4014. ˇ·ˇ‚7^
  4015. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äUsing the Edition Manager
  4016. , (‡2-39
  4017. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  4018. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  4019. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  4020. 4€4—?òÄ
  4021. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  4022. ˛ˇˇˇ
  4023. ˛ˇˇˇ
  4024. ˛ˇˇˇ
  4025. ˛ˇˇˇ˜˝˛ˇ˛
  4026. ˛ˇ˛ˇˇ
  4027. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  4028. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  4029. ˛ˇ˛ˇˇ
  4030. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  4031. ˛ˇˇˇˇ
  4032. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  4033. ˛ˇˇˇˇ
  4034. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  4035. ˛ˇˇˇˇ
  4036. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿.°dONLNd\ähû(eäThe ,
  4037. Courier°dONLNd\ûh‘)    container°dONLNd\‘h›)6 fi°dONLNd\›h2)    eld is of data type °dONLNd$\2h™)UEditionContainerSpec°dONLNd8\™h≠)x.°dONLNd:sä2(|äTYPE EditionContainerSpec = °dONLNdXÅúç¿+RECORD°dONLNdaèÆõfi+theFile:°dONLNdoèõD)lFSSpec;°dONLNd{ètõ)Z{file containing edition }°dONLNd£ùt©û*{ data}°dONLNd≠´Æ∑(¥ÆtheFileScript:°dONLNd¡´∑\)l ScriptCode;°dONLNd—´t∑
  4038. )Z{script code of filename}°dONLNdÌπÆ≈fi(¬ÆthePart:°dONLNd˚π≈J)lLongInt;°dONLNdπt≈¯)Z{which part of file, }°dONLNd,«t”˛*{ always kPartsNotUsed}°dONLNdF’Æ·ˆ(fiÆ thePartName:°dONLNdX’·>)lStr31;°dONLNdc’t·∞)Z
  4039. {reserved}°dONLNdp„ÆÔ(ÏÆthePartScript:°dONLNdÑ„Ô\)l ScriptCode;°dONLNdî„tÔ∞)Z
  4040. {reserved}°dONLNd†Òú˝¥(˙úEND;°dONLNd•    ä•(äThe fi°dONLNd´    •∂)eld °dONLNdØ    ∂‡)theFile°dONLNd∂    ‡)*  is of type °dONLNd¬    2).FSSpec°dONLNd»    2I)$. See .°dONLNdŒ    I¶)Inside Macintosh: Files.F‡°dONLNd    ß)^ for further information .°dONLNd˛ä"ù(äon fiS†°dONLNdû"Ê)le system specifi\‡°dONLNdÊ")Hcation rÉ¿°dONLNd")!ecor¯ °dONLNd "%)ds.°dONLNd$(ä4©(1äAfter fi&Ä°dONLNd,(™4‚) lling in the fid°dONLNd;(‚4[)8elds of the new subscriber r‰`°dONLNdW([4t)yeply rl†°dONLNd](u4á)ecor·°dONLNda(á4)!d, pass it as a parameter to the .°dONLNdÇ5äA¸(>äNewSubscriberDialog°dONLNdï5¸A„)r4 function, which displays the subscriber dialog box.°dONLNd LäXV(Uä"err := NewSubscriberDialog(reply);°dONLNdÌdäps*5After displaying the subscriber dialog box, call the °dONLNd"dspØ)È
  4041. NewSection°dONLNd,dØpÍ)< function to crR`°dONLNd;dÍp);    eate the .°dONLNdDqä}Ø(zä    section r≠Ä°dONLNdMqØ}¡)%ecor!‡°dONLNdQq¬})d and the alias r⁄‡°dONLNdbq})FecorO@°dONLNdfq}7)d. See æ°dONLNdmq7}G)“Crö°dONLNdpqG}∞)eating the Section RecorY‡°dONLNdàq±}Õ)jd and `°dONLNdéqÕ}ˇ) Alias Recor{¿°dONLNdôqˇ} )2d” °dONLNdú~ääfi(áäbeginning on page V °dONLNdÆ~fläÒ)U2-15™°dONLNd≤~Òä`) for detailed information.°dONLNdÕêäú    (ôä If the subscriber is set up to r °dONLNdÌê
  4042. ú˘)Ä6eceive new editions automatically (not manually), the °dONLNd#ùä©Ê(¶äKEdition Manager sends your application a Section Read event. Whenever your °dONLNdn™ä∂¬*application r{‡°dONLNd{™¬∂r)8)eceives a Section Read event, it should r_`°dONLNd§™r∂)∞%ead the contents of the edition into °dONLNd…∑ä√«(¿äthe subscriber∑‡°dONLNd◊∑«√…)=.°dONLNdŸ…ä’∏(“ä Listing 2-6 @°dONLNd‰…π’)/ illustrates how to cr&Ä°dONLNd˙…’\)Zeate a subscriber÷†°dONLNd …[’`)H. x@°dONLNd…`’∏)As described earlier„°dONLNd!…∑’)W, you must set up °dONLNd3÷ä‚π(fläFand display the subscriber dialog box to allow the user to subscribe tÜ`°dONLNdy÷π‚Ô(flπo any of the °dONLNdÜ„äÔè(Ïäa°dONLNdá„èÔ‹)vailable editions. Œ†°dONLNdö„‹ÔI)MAfter your application crR‡°dONLNd≥„JÔó)neates a subscriber@°dONLNd≈„óÔÎ)M, your application r∫@°dONLNdŸ„ÎÔ)T
  4043. eceives a °dONLNd„ä¸Ô(˘äSection Read event to r»¿°dONLNd˙Ô¸©)e+ead in the data being subscribed to. Be sur$‡°dONLNd%™¸˛)ªe to add the newly °dONLNd8˝ä    í(äcrµ@°dONLNd:˝í    Y)1eated section to your list of sections for this fi@°dONLNdl˝Z    {)»le. Ther9°dONLNdt˝{    ã)!e arG†°dONLNdx˝ã    ∫)
  4044. e many difp °dONLNdÇ˝∫    Δ)/ferR†°dONLNdÖ˝Δ    ) ent techniques °dONLNdî
  4045. ä°(äfor crÒ@°dONLNdö
  4046. °’)Geating subscribers and unique IDs; this listing displays one technique.ˇh@ˇ ˇˇˇˇ@
  4047. ˇ·ˇ‚7^
  4048. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  4049. (‡*2-40    )BUsing the Edition Manager4^*¿¯
  4050. g*n¯4g*n¯"h*_
  4051. ˇ·ˇ‚7^°dONLNd\lgò(dl Listing 2-6°dONLNd\∞g)DCreating a subscriber,
  4052. Courier
  4053. .°dONLNd$vlÇ»(l:PROCEDURE DoNewSubscriber(thisDocument: MyDocumentInfoPtr)°dONLNd^v»ÇŒ(»;°dONLNd`Ñlêr(çlV°dONLNdaÑrê~)AR°dONLNdeí~û¿+  getLastErr:°dONLNduíÿû¸)ZOSErr;°dONLNd}†~¨∫(©~
  4054. dialogErr:°dONLNdå†ÿ¨¸)ZOSErr;°dONLNdîÆ~∫¿(∑~ sectionErr:°dONLNd§Æÿ∫¸)ZOSErr;°dONLNd¨º~»¢(≈~resID:°dONLNd∑ºÿ»)ZInteger;°dONLNd¡ ~÷Ã(”~thisSectionH:°dONLNd” ÿ÷,)ZSectionHandle;°dONLNd„ÿ~‰¢(·~reply:°dONLNdÓÿÿ‰D)ZNewSubscriberReply°dONLNdÿD‰J)l;°dONLNdÊlÚr(ÔlB°dONLNdÊrÚä)EGIN°dONLNd    Ù~ê+ {pu°dONLNd Ùêz)'t default edition name into reply recor°dONLNd3ÙzÜ)Íd}°dONLNd7~Δ( ~ getLastErr :°dONLNdCΔÿ)H= G°dONLNdFÿ⁄)+etLastEditionContainerUsed(reply.container)°dONLNdq⁄‡( ⁄;°dONLNdt~ê(~{ca°dONLNdwêD)n subscribe to pictures or tex°dONLNdïDP)¥t}°dONLNdô~*8('~reply.formatsMask := kPICTforma°dONLNd∏8*D)∫tM°dONLNd∫D*§) ask + kTEXTforma°dONLNd §*∞)`tM°dONLNdÃ∞*¬) ask°dONLNdœ¬*»);°dONLNd“,~8ê(5~{di°dONLNd’,ê8Í)splay dialog bo°dONLNd‰,Í8)Zx & l°dONLNdÈ,8V)et user selec°dONLNdˆ,V8Ú)Nt edition to subscribe to}°dONLNd:~Fh(C~'dialogErr := NewSubscriberDialog(reply)°dONLNd9:hFn)Í;°dONLNd<H~TÑ(Q~I°dONLNd=HÑT)F dialogErr <> noErr THEN°dONLNdVHT )ñ °dONLNdZVêbñ(_êM°dONLNd[Vñb)yErrHandler(dialogErr)°dONLNdqVb )Ñ;°dONLNd{V2bº){handle error and exit}°dONLNdîd~pÑ(m~I°dONLNdïdÑp¸)F reply.canceled THE°dONLNd©d¸p)xN °dONLNd∏rê~ñ({êE°dONLNdπrñ~)XIT(DoNewSubscriber);°dONLNd◊r2~‡)ú{do nothing if user canceled}°dONLNdˆÄ~åê(â~{Ad°dONLNd˘Äêå⁄)7vance counter to make a new unique sectionID for this }°dONLNd2é~öÊ(ó~<{ document. It is not necessary to equate section IDs with }°dONLNdpú~®Ã*{ resources.}°dONLNd™~∂Ú*>thisDocument^.nextSectionID := thisDocument^.nextSectionID + 1°dONLNdΩ™Ú∂¯(≥Ú;°dONLNd¿∏~ƒê(¡~{cr°dONLNd√∏ꃠ)eate a subscriber sectio°dONLNd€∏ ƒ,)ên}°dONLNdflΔ~“t(œ~)sectionErr := NewSection(reply.container,°dONLNd‘¥‡∫+6 °dONLNd‘‡∞)Z thisDocument^.fileSpecPtr,°dONLNd8‚Óh* stSubscriber, °dONLNdQ¸º* thisDocument^.nextSectionID,°dONLNds˛¥
  4055. ∫(¥ °dONLNdy˛
  4056. º)Z sumAutomatic, thisSectionH);°dONLNdò ~(~IF sectionErr <> noErr THE°dONLNd≤  )úN°dONLNd∂ê&ñ(#êM°dONLNd∑ñ&&)yErrHandler(sectionErr);°dONLNd–&&∞)ê{handle error and exit}°dONLNdÈ(~4Ñ(1~r°dONLNdÍ(Ñ4V)#esID := thisDocument^.nextSectionID°dONLNd(V4\)“;°dONLNd6~Bê(?~{ad°dONLNd6êB2)d this section/alias pair t°dONLNd.62Bh)¢    o app's i°dONLNd76hB‘)6nternal bookkeepin°dONLNdI6‘B‡)lg}°dONLNdMD~Pä(M~My°dONLNdODäPŒ) 6AddSectionAliasPair(thisDocument, thisSectionH, resID)°dONLNdÖDŒP‘(MŒ;°dONLNdàR~^Ñ([~{°dONLNdâRÑ^Ú)=Remember that you will receive a Section Read event to read }°dONLNd»`~l‘(i~9{ in the edition that you just subscribed to because the °dONLNd`‘l⁄(i‘}°dONLNdn~zb(w~&{ initial mode is set to sumAutomatic.°dONLNd*nbzh)‰}ˇˇ¸°dONLNd-|~àÑ(Ö~{°dONLNd.|Ñà˜)?Remember that the section and alias records need to be saved } °dONLNdoä~ñû(ì~0{ as resources when the user saves the document.°dONLNdüäûñ§(ìû}°dONLNd°òl§~(°lEND°dONLNd§ò~§ä); ˇ9Ó@ˇ ˇˇˇˇ@
  4057. ˇ·ˇ‚7^
  4058. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äUsing the Edition Manager
  4059. , (‡2-41
  4060. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  4061. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  4062. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  4063. 4€4—?òÄ
  4064. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  4065. ˛ˇˇˇ
  4066. ˛ˇˇˇ
  4067. ˛ˇˇˇ
  4068. ˛ˇˇˇ˜˝˛ˇ˛
  4069. ˛ˇ˛ˇˇ
  4070. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  4071. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  4072. ˛ˇ˛ˇˇ
  4073. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  4074. ˛ˇˇˇˇ
  4075. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  4076. ˛ˇˇˇˇ
  4077. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  4078. ˛ˇˇˇˇ
  4079. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  4080. jHp4jHp käk
  4081. ˇ·ˇ‚7^ °dONLNd\äjq(fä)Opening an Edition Container to Read Dataˇˇˇˇˇˇ‘@(f2
  4082. .°dONLNd+pä|£(yäBeforR`°dONLNd0p£|Æ)e r$¿°dONLNd3pÆ|Ô) eading data fr˜ °dONLNdApÓ|{)@ om an edition, you must use the ,
  4083. Courier˜ °dONLNdap{|Ω)ç OpenEdition˜ °dONLNdlpΩ|Ë)B  function. …Ä°dONLNdwpË|Ô)+YfiÄ°dONLNdxpÓ|˛)our .°dONLNd|}äâÖ(Üä:application should only use this function for a subscriberp°dONLNd∂}Öâ)˚$. Use this function to initiate the °dONLNd⁄ääñç(ìärE°dONLNd€äéñ◊)eading of data fr3†°dONLNdÏä◊ñ)Iom an edition..°dONLNd˚°ä≠(™äerr := OpenEditio°dONLNd °≠¸)fn(°dONLNd°¸≠§) subscriberSectionH, refNum);.°dONLNd+πä≈©(¬äAs a prK`°dONLNd2π™≈) ecaution, you should r]‡°dONLNdHπ≈
  4084. )c;etain the old data until the user can no longer undo. This °dONLNdÉΔä“:(œä(allows you to undo changes if the user r`°dONLNd´Δ;“g)± equests it..°dONLNd∑ÿä‰ë(·äYï°dONLNd∏ÿê‰)our application can supply a prg`°dONLNd◊ÿ‰9)åocedur9¿°dONLNd›ÿ9‰b)
  4085. e such as 9¿°dONLNdÁÿb‰∞))DoReadEdition9¿°dONLNdÙÿ∞‰¡)N to r  °dONLNd˘ÿ¡‰ˇ)ead in data frfiÄ°dONLNdÿ˛‰)=om .°dONLNd
  4086. ÂäÒ¸(Óäthe edition to a subscriber/ °dONLNd%¸Òˆ)r6. When your application opens a document containing a °dONLNd[Úä˛(˚äsubscriber that is set up to rbÄ°dONLNdyÚ˛ô)z!eceive new editions automatically¿°dONLNdöÚô˛˚)ï, the Edition Manager °dONLNd∞ˇä Û(äQsends you a Section Read event if the edition has been updated. The Section Read °dONLNd ä§*event M@°dONLNd •R))supplies the handle to the section that r”¿°dONLNd0 Ri)≠equirΰdONLNd5 i¢)es updating. !‡°dONLNdB £—): Listing 2-7¬ °dONLNdM —”).,B °dONLNdN ‘÷) ¬ °dONLNdO ÷)shown in the °dONLNd\ä%√("änext section, ÓÄ°dONLNdj√%Ã)9prµ†°dONLNdlÕ%1)
  4087. ovides an example of r∂@°dONLNdÇ1%n)deading data fr[Ä°dONLNdêo%Æ)>om an edition.
  4088. CHJ4DHJ EäE
  4089. ˇ·ˇ‚7^ °dONLNd†6äD`(@ä%Choosing Which Edition Format to Readˇˇˇˇˇˇ‘@(@2
  4090. °dONLNd«JäVÆ(SäCAfter your application opens the edition container for a subscriberA`°dONLNd
  4091. JÆV˛(SÆ, it can look in the ˇˇìî.°dONLNdWäc@(`ä*edition for formats that it understands. T
  4092. x°dONLNdIW@c¥)∂o accomplish this, use the ˇ˛∫ºÏ\°dONLNddW¥c)tEditionHasFormatˇˇìîÏ\°dONLNdtWc)` .°dONLNdudäp±(mä    function..°dONLNd{äá*err := EditionHasForma°dONLNdï{á)Ñt(°dONLNdó{á) 'whichEdition, whichFormat, formatSize);°dONLNdøìäüû(úäThe °dONLNd√ìûü˛)EditionHasFormat°dONLNd”ì˛ü*)`  function rR`°dONLNdfiì*üY), eturns the R`°dONLNdÈìYüè)/    noTypeErrR`°dONLNdÚìèüï)6 r$¿°dONLNdÙìïüŸ)esult code if a r˜ °dONLNdìÿü)C    equested .°dONLNd†ä¨(©ä!format is not available. If the rÜ`°dONLNd/†¨Õ)Ö-equested format is available, this function rS`°dONLNd\†Œ¨¸)ø eturns the .°dONLNdg≠äπ®(∂änoErr°dONLNdl≠®πÆ) rR`°dONLNdn≠Æπ)esult code, and the R`°dONLNdÇ≠π@)V
  4093. formatSizeR`°dONLNdå≠@π)<0 parameter contains the size of the data in the °dONLNdº∫äΔ®(√äspecifi°dONLNd√∫®Δ·)ed format or °dONLNd–∫·ΔY)9kFormatLengthUnknown°dONLNd‰∫YΔØ)x (–1), which signifi°dONLNd¯∫ØΔ)Ves that the size is .°dONLNd «ä”¥(–äunknownV‡°dONLNd«µ”∑)+.
  4094. ·HÔ4‚HÔ    °dONLNd‡äÎù(ËäNote
  4095. ˇ·ˇ‚7^
  4096. °dONLNdÌä˘£*The TˆÄ°dONLNdÌ¢˘Δ)Franslation Manager (if it is available) attempts implicit translation °dONLNde˘ä”(äunder certain cirv¿°dONLNdv˘”§)I/cumstances. For instance, it does so when your °dONLNd•äˆ(äapplication attempts to r◊†°dONLNdæˆ)lead frU‡°dONLNdƒº)(om an edition a format type that is not °dONLNdÏäï(äin π¿°dONLNdÔï)  the edition. In this case, the TŒÄ°dONLNd¢)Äranslation Manager attempts to °dONLNd.ä)≤(&ä
  4097. translate 7¿°dONLNd8≥)))the data into the rá@°dONLNdK)q)Nequested format. For mor˜†°dONLNdcq)≤)pe information, °dONLNdr)ä5ö(2äsee –@°dONLNdv)ö5™)the -†°dONLNdz)´5Ÿ)
  4098. chapter “T*¿°dONLNdÑ)Ÿ5B).ranslation Manager” in QÄ°dONLNdõ)B5å)iInside Macintosh: °dONLNd≠5äAõ(>äMorÄ°dONLNd∞5úA¢)e z °dONLNd≤5¢Aœ)
  4099. Macintosh ͆°dONLNdº5œA’)-T͆°dONLNdΩ5‘AÌ)oolbox£†°dONLNd√5ÓA).,Zapf Dingbats#†°dONLNd≈8ˆ@¸)u
  4100. °dONLNd»FäRë(OäAG@°dONLNd…FíRÙ)Ofter your application opens the edition container and determines which formats .°dONLNdSä_î(\äit °dONLNdSî_¿)
  4101.  
  4102. wants to rR`°dONLNd%S¿_¸),ead, call the R`°dONLNd3S¸_>)< ReadEditionR`°dONLNd>S>_u)B function to r$¿°dONLNdLSu_Ó)7ead in the edition data. Se$¿°dONLNdgSÓ_ı)ye .°dONLNdi`äl”(iä“Reading and Wå°dONLNdw`”lS)Iriting Edition Data” on page • °dONLNdî`Sle)Ä2-27˘°dONLNdò`elj) fÇ°dONLNdö`kl‘)or detailed information.°dONLNd≥rä~({äXAfter you have completed writing the edition data into the subscriber section, call the .°dONLNd     äã“* CloseEdition°dONLNd    “ã`)H" function to close the edition. Se°dONLNd    9`ãg)ée °dONLNd    ;gãÍ)“Closing an Edition” on page °dONLNd    XÍã˝)É2-28°dONLNd    \˝ã) f°dONLNd    ^ã)or .°dONLNd    aåäòÁ(ïädetailed information.ˇ.@ˇ ˇˇˇˇ@
  4103. ˇ·ˇ‚7^
  4104. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  4105. (‡*2-42    )BUsing the Edition Manager4^*¿¯
  4106. °dONLNd\lhö(el Listing 2-7 @°dONLNd \õh)/ illustrates how to r∂@°dONLNd \h)U ead data fr†°dONLNd+\ hb)0om an edition. Ä°dONLNd:\bh∫)BAs described earliery@°dONLNdN\πhÍ)W , you must .°dONLNdYilu?(rl.open the edition, determine which formats to rR`°dONLNdái?uw)”ead, use the ,
  4107. CourierR`°dONLNdîiwuπ)8 ReadEditionR`°dONLNdüiπuÏ)B function to °dONLNd¨vlÇp(lrR`°dONLNd≠vpÇı)ead in data, and then use the R`°dONLNdÀvıÇ=)Ö CloseEditionR`°dONLNd◊v=ǘ)H- function to close the edition. This listing .°dONLNdÉlèØ(ålshows how to r2†°dONLNdÉ∞èÎ)Dead only text.
  4108. ≤*∫¯4≥*∫¯"≥*_
  4109. ˇ·ˇ‚7^    °dONLNd"®l≥ò(∞l Listing 2-7°dONLNd.®∞≥ )DReading in edition data
  4110. .°dONLNdG¬lŒ∞(Àl6PROCEDURE DoReadEdition(theSubscriber: SectionHandle);°dONLNd~–l‹~*VAR°dONLNdÉfi~ÍÆ+eRefNum:°dONLNdëfiÍÍ>)lEditionRefNum;°dONLNd°Ï~¯Æ(ı~openErr:°dONLNdØÏͯ)lOSErr;°dONLNd∑˙~Æ(~readErr:°dONLNd≈˙Í)lOSErr;°dONLNdÕ~¥(~    closeErr:°dONLNd‹Í)lOSErr;°dONLNd‰~"Ã(~thisDocument:°dONLNd˜Í"V)lMyDocumentInfoPtr;°dONLNd $~0¿(-~ textHandle:°dONLNd$Í0)lHandle;°dONLNd%2~>∫(;~
  4111. formatLen:°dONLNd52Í>)lSize;°dONLNd;@lLä(IlBEGIN°dONLNdBN~Z§+1{find out which document this section belongs to}°dONLNdu\~hí*.thisDocument := MyFindDocument(theSubscriber);°dONLNd•j~v2*{open the edition for reading}°dONLNd≈x~Ñò*/openErr := OpenEdition(theSubscriber, eRefNum);°dONLNdˆÜ~í*IF openErr <> noErr THEN°dONLNdîê†+MyErrHandler(openErr);°dONLNd/î †™)ê{handle error and exit}°dONLNdH¢~Æ(´~{look for 'TEXT' format}°dONLNdb∞~ºÊ*<IF EditionHasFormat(eRefNum, 'TEXT', formatLen) = noErr THEN°dONLNd†æ~ ú*BEGIN°dONLNd®Ãêÿz+'{get the handle of location to read to}°dONLNd“⁄êÊ∞*0textHandle := MyGetTextInSection(theSubscriber, °dONLNdËDÙJ+¥ °dONLNdËJÙP) °dONLNdËPÙ§)thisDocument);°dONLNd"ˆên(ˇê%SetHandleSize(textHandle, formatLen);°dONLNdJê¸*HLock(textHandle);°dONLNd_êŒ*5readErr := ReadEdition(eRefNum, 'TEXT', textHandle^, °dONLNdû ,\+~  formatLen);°dONLNdÆ.ê:Ú(7ê;MyUpdateSubscriberText(theSubscriber, textHandle, readErr);°dONLNdÏ<êH*HUnLock(textHandle);°dONLNdJêV*IF readErr = noErr THEN°dONLNdXêdÆ*BEGIN°dONLNd(f¢rÏ+7{The read was successful; now close the edition. When }°dONLNdct¢ÄÊ*6{ successful = TRUE, the section data = edition data.}°dONLNdùÇ¢éí*(closeErr := CloseEdition(eRefNum, TRUE);°dONLNd…ê¢ú*EXIT(DoReadEdition);°dONLNd‡ûê™®(ßêEND;°dONLNdÚ¨~∏ñ(µ~END;°dONLNd¯¨¢∏ )${of EditionHasFormat}ˇ@–@ˇ ˇˇˇˇ@
  4112. ˇ·ˇ‚7^
  4113. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äUsing the Edition Manager
  4114. , (‡2-43
  4115. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  4116. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  4117. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  4118. 4€4—?òÄ
  4119. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  4120. ˛ˇˇˇ
  4121. ˛ˇˇˇ
  4122. ˛ˇˇˇ
  4123. ˛ˇˇˇ˜˝˛ˇ˛
  4124. ˛ˇ˛ˇˇ
  4125. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  4126. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  4127. ˛ˇ˛ˇˇ
  4128. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  4129. ˛ˇˇˇˇ
  4130. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  4131. ˛ˇˇˇˇ
  4132. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  4133. ˛ˇˇˇˇ
  4134. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿,
  4135. Courier.°dONLNd\úhÊ(eú7{'TEXT' format wasn't found or read error; just close }°dONLNd9júv¯*:{ the edition. FALSE tells the Edition Manager that your }°dONLNduxúÑ∞*.{ application did not get the latest edition.}°dONLNd•Üúíí*)closeErr := CloseEdition(eRefNum, FALSE);°dONLNdœî䆮(ùäEND; 
  4136. ΔHÕ4«HÕ »ä»
  4137. ˇ·ˇ‚7^ˇˇ‹..ˇ◊°dONLNd÷∑äΔ|*%&Using Publisher and Subscriber Optionsˇˇˇˇˇˇ€r(¬2
  4138. °dONLNd˛ÕäŸê(÷äY@Ä°dONLNdˇÕêŸ$)#ou can allow users to set several sË¿°dONLNd"Õ$ŸÔ)î.pecial options associated with publishers and °dONLNdP⁄äÊ∑(„ä
  4139. subscriber‡°dONLNdZ⁄∏Êæ).s.‘‡°dONLNd\⁄æÊ¿) T‡°dONLNd]⁄¡Ê«)T䆰dONLNd^⁄ΔÊ)o set these prt@°dONLNdl⁄Ê):efer `°dONLNdp⁄ÊÌ)2ences, users change settings in two dialog boxes pT‡°dONLNd¢⁄ÌÊ)‹r‡°dONLNd£⁄ÒÊ)ovided °dONLNd™ÁäÛÚ(äby the Edition Manager†°dONLNd¿ÁÛÛ∏)i-: publisher options and subscriber options. TK °dONLNdÌÁ∑Û«)ƒo m†°dONLNdÁ»Û)ake these dialog °dONLNdÙä˙(˝äboxes available to the use°dONLNdÙ˚˛)qr5@°dONLNdÙ˛ ), pr¸`°dONLNd Ù 3)    ovide a cV °dONLNd)Ù4π)(ommand in the Edit menu thad°dONLNdDÙπÊ)Ö t toggles bÛ °dONLNdOÙÊ)-etween °dONLNdVäÊ(
  4140. äMPublisher Options (when the user has selected a publisher within a document) °dONLNd£äù*and Ì °dONLNdßùı)LSubscriber Options (when a user has selected a subscriber within a document)Ω†°dONLNdÛˆ¯(ˆ.=†°dONLNdÙ˘˚) °dONLNdˆ ä,Ë()äWhen a user chooses ]°dONLNd
  4141.  È,)_one of 6‡°dONLNd ,’)+these menu commands, you need to display th[`°dONLNd< ’,Ò)Œe apprn@°dONLNdB Ò,)opriate ˇˇË∫.°dONLNdJ-ä9ê(6äd°dONLNdK-ê9‚)ialog box. Use the ˇˇ∫."Ë°dONLNd^-„9[)SSectionOptionsDialogˇˇË∫"Ë°dONLNdr-[9æ)x function to display th≈–°dONLNdâ-æ9)ce publisher options .°dONLNdù:äFÔ(Cäor subscriber options dB°dONLNd¥:FL)fialog box on the user °dONLNd…:MFc)]’s scr†°dONLNdœ:cFt)een..°dONLNd‘Qä]&(Zäerr := SectionOptionsDialo°dONLNdÓQ&]2)úg(°dONLNdQ2]\) reply);.°dONLNd¯iäu5(rä&Each dialog box contains information r‰‡°dONLNdi5uH)´egar†°dONLNd"iIu÷)"ding the section and its edition. A`°dONLNdDi÷uÓ)çFigur °dONLNdIiÓu)e 2-13±†°dONLNdOiu    ) °dONLNdPväÇ‚(äLshows the publisher options dialog box with the update mode set to On Save. 
  4142. §Hµ4•Hµ"•H]
  4143. ˇ·ˇ‚7^    °dONLNdûöä•∫*# Figure 2-13°dONLNd™öÕ’)B@The publisher options dialog box with update mode set to On Save
  4144. ¥à2òÄ>VÌHH\*4ˇˇˇˇˇˇVÌ∑ãßÀƒˇ¯Ä≈Ä≈ü≈ˇ»ü≈ˇ»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»òÙˇ¯Â»òÙ »òÙ »òÙ »òÙ »$
  4145. ò>03` ˛™„¸ ˛ »#
  4146. ò300` ˛Uê¸ ˝ »&ò33>3|<l<`˛É?„„Ûgèèåpˇå»$ò˝3 2ffp f`√˝33à˛Ã»ˇ »%ò>˛38ff` f˛„˝33˛Ã¿˛ »&ò0˛3 f~` fs˛3?3 ˛Ã¿| »%ò0˛3f`` f˛˝303 ˛Ã¿8 »%ò0˛3 &fb` f`U˝313 ˛Ã» »& ò0>3f<`<`™„33„ÛœåÃp »òÙ¸˛0 ¸ »òÙ¸0 ¸ »òÙ˘‡˙ »òÙ »òÙ »òÙˇ¸Â»òÙˇ¸Â»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»    ò»ˇ¯»ò≈»    ò»ˇ¯»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈» òÅ3¿–»
  4147. ò ÄÅÄ0œ»ò ÅÅÛ<«èá”»
  4148. òôôÅÉ3˛Ãò”»òôôÅ„3ÃÃŒ“»ò
  4149. ÉüôôÅÉ3Ãëș®Úˇ˛»òòôÅÉ3ÃÃ√ÄÈÚÄ»ò    òôôÅÉ3ÃÃ…òÊÒÄ»òèÅÒÛ «å«È Ò@» òÿ Ò@»ò› <˝¿¯¿ÃIJ@»òÿ b˝¿Ã¿¿IJ@»ò› `<|8x¿ÃïÃqÒ∞@»òÿ `Ffdÿ˝Ã…ôô¿@»ò›  `>f`ÿ¯˛Ã·ôôÄ@»òÿ `ff`¸¿¿˛Ãqô˘Ä@»ò› `ff`˛¿˛Ã9ôÅÄ@»òÿ bffdƒ¿¿˛ÃôôâÄ@»ò› <>f8x¿¿|¯ÃqòÒÄ@»ò¸xfi Ò@»
  4150. ò܇ Ò@»ò˝02‚ Ò@»òy3‡0<f<ËÒÄ»ò˝¸É308FffÂÚÄ»ò¸É30>ffËÚˇ˛»ò˝¸É30ff~“»ò¸É30ff`ËÏ»ò˝y30&fdb“»ò„0>x<ËÏ» ò˝ÜÀ»ò˛x·Ï»ò≈» ò›Ï»ò≈»òÔÚˇ¯Ï»òÌ`ÚÍ»òÔ@ÚÏ»ò¸xÛÄÚÍ»òÜÛÄÚÏ»%ò˝˝3˙ ÄÅ3¿Ç˛Í»(ò˝3˙Ä ÄÅÄ0˛¬˛Ï»'ò˝    Éá>333˚Ä ÅÅÛ<«èÄ‚<f`Í»*òÉœ#33#33˚ÄôôÅÉ3ÃÿÚff`Ï»'ò˝    Ç˚3333˚ÄôôÅ„3Ãÿ∫ff`Í»&òÇs˚3˚ÄüôôÅÉ3Ãÿûff`Ï»#ò˝#˚3˚ÄòôÅÉ3Ãÿéff`Í»&ò˚3˚Ä    òôôÅÉ3ÃÿÜff@Ï»'ò˝    Ü33˚ÄèÅÒÛ «å¿Ç<ÄÍ»ò˛x˙˚ÄÚÏ»òÙ#˚ÄÚÍ»òˆ˚ÄÚÏ»òÌ@ÚÍ»òÔ`ÚÏ»òÌÚˇ¯Í» ò›Ï»ò≈» ò›Ï»ò≈» ò›Ï»ò≈» ò›Ï»ò≈» ò›Ï» òÿ*Ò™†»+    ò xI¸¿8G¿q«¿‡Ä„É» Ï»)ò @A˚D¿@ä(ÑÅB,`λ- ò Œc∏A€≥8@˛cú…DŒg`@Ää(áÖÖB*†Ï»+
  4151. ò $îrI§˝î$)E$î•Ä@Äy«ÄAÅC… Î»,
  4152. ò ‰ÛBI§˝Û$ÈEîΩA
  4153.  ÄA¡B Ï»+
  4154. ò!$ÄêBI§˝Ä•)E$î°A!AÅB Î»- ò<‚gy»ì$@˛gÁ8¬gAaΔчфǠÏ»òÔ˚Í˙ˇ»òÒ˚ˆˆ˙ˇ¿» òœ˙ˇ‡»ò›ˆ>˚»òÿ˚ˇ‡8˚ˇ¸p»ò›˚{˚x»òÿ˚r˚8»ò› ˚t˙∏»òÿ ˚t˙∏»ò› ˝0t¿∏»òÿ IJ0tôÄ∏»ò› 0tõ˛∏»òÿ ôô30tû˛∏»ò› ôò30tú˛∏»òÿ ôò?0tû˛∏»ò› ôò00tõ˛∏»òÿ ˛ô10tôÄ∏»ò› ôé0t¿∏»òÿ ˚t˙∏»ò› ˚t˙∏»òÿ ˚t˙∏»ò›˚r˚8»òÿ˚{˚x»ò›UT˚ˇ‡8˚ˇ¸p»òœ>˚» òœ˙ˇ‡» òœ˙ˇ¿» òœ˙ˇ»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ü≈ˇ»ü≈ˇ»Ä≈Ä≈ƒˇ¯√√√√√√√√√√√ƒ√√ƒƒ√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√ƒ√ƒ√√√√√√√√√√√√√√√√ƒ√√√√√√ƒƒ<    ?>‰˛ A¿˛Ä@ ˛Ä@˛D˛@ ˛˚: !˝ Ĭ Ä ˛˛˝D˛@ ˛˚=7  Å
  4155. iòÅ@ ∞¿∞ä¬N,1`≈éå,pNÉB¡àÑEuÅÉN9Åf4`8cĸ<6  Ä¿ô$Ä@ … »ã"Q2IÅ&Hí2à&QD√"EEFAD—"Aô$LêDí˚<6? Ä0    B@¿äÑäP"Ö(°"ÄBC(B%©DA(C$!BÖA
  4156. ˚:6  ∏    ¬    ~8@ ãÑäN"˝(°"pBM(B"©DA(M'·BÖ¯9˙˙:6  Ä    @@ äÑäA"Å(°"BQ(B%DA(Q$BÖ˙:6 !ô4$B â »õ"Q"I&Hí"à&SD√"EDA6D”"A$LêDí˙;7?>h‘ÄA¿à¿∞j¬N"1≈Üå"pLëÉB¡àÅ4@’ÉLôÅ4`8aÄ˚˜˜Ä˚˘@˚˜ê˜Ä˚˙Ä˚Ò˜`˜Ä˚˙˙√√ Ô<Ä€ ÔB@€Ô¿Å,›Ô Å2ë$›ÔÅ"ÅäB›ÔÅ"Fä~›ÔÅ"HÑ@›Ô B"IÑ$›Ô ¿<"ÜD›√√√√√√√√√√√√√√√√√√√√√√√ ¯ ÇÀ IJΔÀÄÛa≈Ä™8∞·„ãÄ— Å"&@íD…$L— Ò"$@Ç<àÚ$H– Å"$@ÇDâ'»– Å"$@ÇDâ$– Å"$@ÇDâ$H– ¯Ò!ƒ@Ç<àÒ„à–ˆ œ˜ œ    ˜¿–ƒƒ√ƒ*ƒ  ÇÄ˝0Ä@¸Ì'ƒ˛ Δ˛˝˙Ï/+§qa„Ä™8qã8q`8qsèá8√ã‚ÃYàñ0·«q`Ô/+§â""$@íDàåàDâêâÑHëàëDLÅ2fHô"âêÔ/+îà™ "$@Ç<ÄààDÅâ»ëàDHÅ"DHë‚âÔ/+"'¿ÇDÄààDq˘HëàDHÅ"DHë"âÔ/+åÄD"$ÇDÄààD    ÅHëàDHÅ"DHë"âÔ/ åàD""$@ÇD˛àDââHëàëDHÅ    "DIë"âÔ/+ÑpD!„ÄÇ<pàÜ8q qœá CàÄ‚"DFë··àqÔ ¸‹ ¸‹√√√√√Ä˝Ä“Ľē(xá‚Ãxâ√ãÄa¿’(DààÅ2DàÑLí ‘DDààÅ"DàÑH‘DDàèÅ"Dàố˛Dàà"DàÑ‘ÇDààÅ    "DòÑH ‘Çxá‚"xhc଑@ĸ@˛—@ĸ@˛ —ˇ4“@ˇ ˇˇˇˇ@
  4157. ˇ·ˇ‚7^
  4158. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  4159. (‡*2-44    )BUsing the Edition Manager4^*¿¯
  4160. °dONLNd\lhÑ(elFigurR¿°dONLNd\Ñhù)e 2-14@°dONLNd \ùh√)A shows the publisher options dialog box with the update mode set °dONLNdLiluw(rlto ∑‡°dONLNdOiwu°) ManuallyI¿°dONLNdWi°u£)*.
  4161. ó*®¯4ò*®¯"ò*]
  4162. ˇ·ˇ‚7^    °dONLNdZçlòú(ïl Figure 2-14°dONLNdfçÆòî)B9The publisher options dialog box with update mode set to êê°dONLNdüçîò∫)Ê    Manually 
  4163. °dONLNd™3l?€(<lAs a shortcut for the userS@°dONLNdƒ3€?ı)o?, you should display the publisher options dialog box when the °dONLNd@lL∑(Iluser double-clickf†°dONLNd@∏L√)Ls a#†°dONLNd@ƒL )  publisher sectiog°dONLNd(@ L)Hn i†¿°dONLNd+@LX) n a document. °dONLNd:Rl^Ñ([lFigurR¿°dONLNd?RÑ^ù)e 2-15@°dONLNdERù^—)E shows the subscriber options dialog box with the update mode set to °dONLNdä_lk´(hlAutomaticallyπ`°dONLNdó_™kØ)>. 
  4164. ç*û¯4é*û¯"é*]
  4165. ˇ·ˇ‚7^    °dONLNdõÉléú(ãl Figure 2-15°dONLNdßÉÆéô)B:The subscriber options dialog box with update mode set to ê°dONLNd·Éôé—)ÎAutomatically 
  4166. ßj¯òÄFU+HH\*4ˇˇˇˇˇˇU+´`ໃˇ˚
  4167. ≈˚
  4168. ≈˚
  4169. ≈ˇ˘˚
  4170. ≈ˇ˘˚
  4171. ≈˚
  4172. ≈˚
  4173. ≈˚
  4174. ≈˚
  4175. ≈˚
  4176. ≈˚
  4177. ≈˚
  4178. ≈˚
  4179. ≈˚
  4180. ≈˚
  4181. ≈˚ÛˇÂ˚Û@ÒÄÊ˚Û@ÒÄÊ˚Û@ÒÄÊ˚Û@ÒÄÊ˚*¿` IJ@U@``˝ÅÄÄÊ˚*` IJ@™†2˛`˝IJÄÊ˚+fgΔcèáçÉ«å˛@0g¸|c¿>l˛ÒéÒÄÊ˚)˝f LÃŒåÃ@Ä 8˝f`fq˛ô?·ÄÊ˚*Δffg ÃÃå¿˛@˝f
  4182. `f`˘ôôò¡ÄÊ˚+ffcåœÃå¿@Ä ˛fg‡fa˛ôòÅÄÊ˚*ffaÃà å¿˛@˝ffa˛ôòÄÊ˚)ffdÃÃLåÃ@™†&˝f fa˝ôÄÊ˚+#ÁΔcå«å«å@U@ff|c¿>`˘ÒôéÄÊ˚Û@¸`Ä˝ÄÊ˚Û@¸`FÄ˝ÄÊ˚Û@˘<˙ÄÊ˚Û@ÒÄÊ˚Û@ÒÄÊ˚ÛˇÄÊ˚Û?ˇÄÊ˚
  4183. ≈˚
  4184. ≈˚
  4185. ≈˚
  4186. ≈˚
  4187. ≈˚
  4188. ≈˚»ˇ˚
  4189. ≈˚»ˇ˚
  4190. ≈˚
  4191. ≈˚
  4192. ≈˚
  4193. ≈˚
  4194. ≈˚
  4195. ≈˚
  4196. ≈˚
  4197. ≈˚
  4198. ≈˚
  4199. ≈˚
  4200. ≈˚˛‡0>c–˚ ê00œ˚Å„·0>gòÒ„”˚√3300fcôôì”˚˛
  4201. „330<fcôô¿”˚PsÛ300fcôò‡ÈU˛Òˇ¿˚ 3300fcôòpËÄÒ0˚3300fcôô3ÊÒ˚ ·„1>>aòÒò„ËÄÒ˚ÿÒ˚!‹ÄIJÄ0˛˚ÿ @˛Ä0˛˚!‹Ä èáôüé>6˚ÿ ÃÃôò˝ô338˚!‹Ä ÃÃòôôú330˚ÿ ÃÃòôôé3?0˚!‹Ä ÃÃ˛
  4202. ôôá300˚ÿ LÃÃòòôôì310˚%˛‡Äáëüé30˚¸0¿flÒ˚˛@ <ÄÂÄÒ˚¸@ f@„Ò˚ ˛Äf|å«ÄËÄÒ˚¸ÄffÃÿÊÒ0˚ ˛ÄffáÃÿËÄÒˇ¿˚¸ÄffÃÃœ¿”˚˛@ ff˛ÃÁÄÌ˚¸@ ffÃÃå@”˚˛0¿<fáœÄËÄÌ˚¸À˚‹ÄÌ˚
  4203. ≈˚‹ÄÌ˚
  4204. ≈˚ÔÒˇÄÌ˚Ì Ò¿Î˚ÔÒ@ÄÌ˚¸ÛÒ Î˚˛0¿ÙÒ ÄÌ˚+¸@ @ ˛`˚‡0>c@˛ Î˚/˛O ``˛`˚ê00˛@˛ ÄÌ˚,¸    üêp„«ΔcΔf`¸Å„·0>gòÒGåàÎ˚0˛    üêy‰ffdff`¸√3300fcôòLÃàÄÌ˚,¸    üê_cÊfcÊf`¸„330<fcôòLÃàÎ˚-˛üêN˚f`¸ sÛ300fcôò˛Ã ÄÌ˚)¸O D˚f`¸ 3300fcôò˛Ã Î˚-˛@ @˚f`¸3300fcôòÃû ÄÌ˚,¸    0¿@cÊc„Êc‡¸·„1>>aòÒòGè Î˚˛˘`¸Ò ÄÌ˚Ù`¸Ò Î˚ˆ¿¸Ò ÄÌ˚ÌÒ@Î˚Ô Ò¿ÄÌ˚ÌÒˇÍ˚‹ÄÌ˚
  4205. ≈˚‹ÄÌ˚
  4206. ≈˚‹ÄÌ˚
  4207. ≈˚‹ÄÌ˚
  4208. ≈˚‹ÄÌ˚ÿÒUT˚0 Ä    "˝CÄq«Ä·ÛÉ» ˝ÄÌ˚, Ä ˝ƒ@ä(ÅÅ$B,`Ë˚1%Ãw;vg©ús$∏¿D@ä(ÇÑDB*†˝ÄÌ˚-%íÇI"îÄJR꧕ CÄyËÑÄ!„√… Ë˚1%ûbI"îÄ
  4209. R징‡D@(á¿AB ˝ÄÌ˚-%$êI"îÄ
  4210. RD@HÄÄÅÇ Ë˚1%úL·9dà    ísú „§¿CÑaáÖÒ„ ˝ÄÌ˚ ˝Ê˚ˇ‡˚Ú@˝ÚĘ˙ˇ¯˚œ˙ˇ¸˚‹Ä˜¿˚>˚◊˚ˇ¸˚ˇé˚‹Ä˚`˚o˚7    @˚CÄq«Ä·ÛÉ» ˚˚@˚'˚8    @˚ƒ@ä(ÅÅ$B,`˝Ä˙ÄÄ˚˚9 Óqús˛©ús$∏¿D@ä(ÇÑDB*†˚˙ÄÄ˚˚B HRîIJJR꧕ CÄyËÑÄ!„√… ˝Ä‡˛ÄÄ„˚@ ƒI“óIJ
  4211. R징‡D@(á¿AB ˚˛ÄÄ30˚A $$JRî˝
  4212. RD@HÄÄÅÇ ˝Ä„·√ΔÄÄ3`˚@ ù¬I“s˛    ísú „§¿CÑaáÖÒ„ ˚33&fÄÄ3¿˚.˚˘ ˝ÚÄÛ3fÄÄ3Ä˚*˘`˘@˝33ÊÄÄ3¿˚!‹Ä33ÄÄ3`˚ÿ33&&ÄÄ30˚!‹Ä·Û1√ΔÄÄ„˚ÿ˙ÄÄ˚˚‹Ä˙ÄÄ˚˚ÿ˙ÄÄ˚˚‹Ä˚@˚'˚ÿ˚`˚o˚‹™Ä˚ˇ¸˚ˇé˚œ¿˚>˚œ˙ˇ¸˚œ˙ˇ¯˚Œ˚ˇ‡˚
  4213. ≈˚
  4214. ≈˚
  4215. ≈˚
  4216. ≈˚
  4217. ≈˚
  4218. ≈˚
  4219. ≈˚
  4220. ≈˚
  4221. ≈˚
  4222. ≈˚
  4223. ≈ˇ˘˚
  4224. ≈ˇ˘˚
  4225. ≈˚
  4226. ≈˚ƒˇ˚ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªF¸¯¿à˛¿@Ú˛˝˛Ä ˛@@˛˛˛ `CÄÑ ˝ ¿0Dz˝˝ ˝@@˛˛å˛ GEÄÇ((yÁ @PÇ√ÄÒ¬0‚√ãÅ«é0‚√Äyáp<8àXû8·¿Yá√éTqb#Ñ" G"ÄÇHâÄ @êÉ$@â"$L$D$@˛àâ"Dàdë"DB fHë"$D$âí$D" GE¸Ç¿àâÄAAÇ$@â"$H$D$àáàâ"DP
  4227. °Dë"<B DHë"Dy#ƒ" G"ÄLJ'¸âÄÄBÇ'¿â"‚'»$D#IJàâ"D 
  4228. °Dë"DC‡DHë>«ƒâ$D" G"ÄÇ âC¯Ç$â"$$D @˛àâ"DPADë"DBDHë $â$D" G"ÄÑ â2Ç@Ç$@â2"$H$D$@˛àâ"DàAD    ë"DB DHë"$DâdD" GE¸¯¿x“‡@Ç#Ä”¬‚#à«É‚#Äxáàp<8àADû<1¿DG√Ééy£ƒ!‡¯ˆÄ˙¯˘Ì ¯àˆÄ˙˘˘Ó ¯p‰‡Â¿ªªªªªªªªªªªªªªªªªªªªª
  4229. ¯ Ç¬
  4230. Ä˛Δ¬ ÄÛa≈Ä™8∞·„ãÄ» Å"&@íD…$L« Ò"$@Ç<àÚ$H« Å"$@ÇDâ'»« Å"$@ÇDâ$« Å"$@ÇDâ$H« ¯Ò!ƒ@Ç<à҄૘ Δ¯ Δ¯¿Δªªªª)ƒ  ÇÄ˝0Ä@¸‰&ƒ˛ Δ˛˝˙„.*§qa„Ä™8qã8q`8qsèá8√ã‚ÃYàñ0·«q`Ê.*§â""$@íDàåàDâêâÑHëàëDLÅ2fHô"âêÊ.*îà™ "$@Ç<ÄààDÅâ»ëàDHÅ"DHë‚âÊ.*"'¿ÇDÄààDq˘HëàDHÅ"DHë"âÊ.*åÄD"$ÇDÄààD    ÅHëàDHÅ"DHë"âÊ.
  4231. åàD""$@ÇD˛àDââHëàëDHÅ    "DIë"âÊ.*ÑpD!„ÄÇ<pàÜ8q qœá CàÄ‚"DFë··àqÊ Ò¸” Ò¸”ªªªªªÄ˝Ä…Ľą(xá‚Ãxâ√ãÄa¿À(DààÅ2DàÑLí ÀDDààÅ"DàÑH DDàèÅ"Dàá» ˛Dàà"DàÑ ÇDààÅ    "DòÑH ÀÇxá‚"xhcà¬À@ĸ@˛»@ĸ@˛ »
  4232. ùj¯òÄ>LÌHH\*4ˇˇˇˇˇˇLÌûmv≠ƒˇ¯Ä≈Ä≈ü≈ˇ»ü≈ˇ»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»òÙˇ¯Â»òÙ »òÙ »òÙ »òÙ »$ò`` ™„¸ ˛ »#ò2`˛` Uê¸ ˝ »&ò0f|8q∂|<l<`˛É?„„Ûgèèåpˇå»%ò8ffd…Δffp f`√˝33à˛Ã»ˇ »%òffp¡Üff` f˛„˝33˛Ã¿˛ »&òff8¡Üf~` fs˛3?3 ˛Ã¿| »%òff¡Üf`` f˛˝303 ˛Ã¿8 »%ò&ffL…Üfb` f`U˝313 ˛Ã» »& ò>|8qÜ|<`<`™„33„ÛœåÃp »òÙ¸˛0 ¸ »òÙ¸0 ¸ »òÙ˘‡˙ »òÙ »òÙ »òÙˇ¸Â»òÙˇ¸Â»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»    ò»ˇ¯»ò≈»    ò»ˇ¯»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»
  4233. òćf1Äœ»    ò @`0Œ»ò èÊyè0“»    ò Δf1˛ô0“»ò
  4234. çÃΔΔf1ôôúË™®Úˇ˛» ò œΔf1ôôéÁÚÄ» ò Ãf1ôôá‰ÒÄ»ò ÃFf1ôôì0Ë Ò@»òáÉ„Êèé0 Ò@»ò› ¿˛ ò˛@»òÿ  ˛ IJ˛@»ò› «√áå ümü@»òÿ ffLÃôô2qôôú@»ò› Êf Ãôú0aôôò@»òÿ ffÃôôé0aôüò@»ò› ff ôôá0aôò@»òÿ &ffLL    ôôì2aôòò@»"ò˛<· √Êcáåüaü@»ò¸√fi Ò@» 
  4235. òŇIJcfÏ Ò@»ò˝<É0IJ`fÈ Ò@»!ò~C33«è¯xÛ<ffÌÒÄ»ò˝~C31åÃÃåc2FffÍÚÄ»"ò~CÛ1åÃÃ|c0>ffÌÚˇ˛»ò˝~C31å˛Ãc0˛f◊»
  4236. ò<É31å˛Ãc0˛fÌÏ»ò˝É31å˛Ãc2˛f◊»ò˛ √1«åÃ|3>f>ÌÏ»ò¸<ˆ◊»òÚFÌÏ»
  4237. ò<◊» ò›Ï»ò≈»òÔÚˇ¯Úˇ˛»òÌ`Ú˝ÚÄ»òÔ@ÚÒÄ»ò¸<ÛÄÚ˝ Ò@»ò˛√ÛÄÚ Ò@»7ò˝Ç˝3˙ Ä<01å ˛˝ ‡˛>03`˝@»9òÉ˝3˙ Äb0Ä  ˛ 0˛300`˝@»:ò˝    Cá>333˚Ä`<x3Ãx¯#Δf˝ 3·„‡33>3|<l@»;òCœ#33#33˚Ä`f031åÃÃ&ff ˛30˝32ffp@»:ò˝    B˚3333˚Änf031åÃà ¶ff˝ ˛30>˛38ff`@»8òBs˚3˚Äf~031åÃà   Êff 33Û00˛3f~`@»6ò˝Ç#˚3˚Äf`031åÃÃÊff˝ 3300˛3f``@»8òÇ˚3˚Äfb031åÃÃffd 3300˛3&fb`@»9ò¸√33˚Ä<<0ÃxÃ#«¯˝ „·„00>3f<`@»"ò˛<˙˚ÄÚ Ù@»òÙ#˚ÄÚ˝ Ù@»òˆ˚ÄÚ Ò@»òÌ@Ú˝ÒÄ»òÔ`ÚÚÄ»òÌÚˇ¯˝Úˇ˛» ò›Ï»ò≈» ò›Ï»ò≈» ò›Ï»ò≈» ò›Ï»ò≈» ò›Ï» òÿ*Ò™†»+    ò xI¸|@Ä@@|áp|8<ÇÏ»(ò @A˚@˛@ à¢à@D"ΔÍ»- ò Œc∏A€≥8@˛&9ÃêLÊqñà¢àxQ(QD"™Ï»*
  4238. ò $îrI§˝)BBêRIJXáúxHD<íÍ»,
  4239. ò ‰ÛBI§˝/2NêPIK–Ä¢|D ÇÏ»*
  4240. ò!$ÄêBI§˝(
  4241. RêRIJÅ"DD ÇÍ»- ò<‚gy»ì$@˛ÊqŒpÉå&qê@Ü`8NN8 ÇÏ»òÔÄ˚@Í˙ˇ»òÒa˙Ĉˆ˙ˇ¿» òœ˙ˇ‡»ò›ˆ>˚»òÿ˚ˇ‡8˚ˇ¸p»ò›˚{˚x»òÿ˚r˚8»ò› ˚t˙∏»òÿ ˚t˙∏»ò› ˝0t¿∏»òÿ IJ0tôÄ∏»ò› 0tõ˛∏»òÿ ôô30tû˛∏»ò› ôò30tú˛∏»òÿ ôò?0tû˛∏»ò› ôò00tõ˛∏»òÿ ˛ô10tôÄ∏»ò› ôé0t¿∏»òÿ ˚t˙∏»ò› ˚t˙∏»òÿ ˚t˙∏»ò›˚r˚8»òÿ˚{˚x»ò›UT˚ˇ‡8˚ˇ¸p»òœ>˚» òœ˙ˇ‡» òœ˙ˇ¿» òœ˙ˇ»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ò≈»ü≈ˇ»ü≈ˇ»Ä≈Ä≈ƒˇ¯√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√√;
  4242. Û¿¿¿ƒ˝8!¯˘˛˛˝˛@ ˝Ñ  ˝Ä9      ¸DaA˛˛˝˝˝  ˝Ä?= <âsÄÑ!Aa¿8â·√ã±·≈¿„«qa¿<√Ñ8xDâé,Op‡,√áé>%ÄDâÑ@!Aí Dâ$L&"âí ˝Dà"DàÑ2Hë"!3$Hë?=‚„«¡@ÑDâ@x A @â$"âDCƒDà"(PÑ"Hë!"$Hë>% @Dâ¿ A‡8⃉"â¿˝Dà"PÑ"Hë"!"$Hü>% @Dâ  Aâ$"â ˝Dà"( Ñ"Hë"!"$Hê>%  @Dô@@!A Dô$H$"â ˝Dà"D Ñ"»ë"!"$Hë?;Û¿¿Ä<iĸ A¿8i·√à·ƒ„¡àq¿<Cƒ8xD É"O‡"#áéˇˆÌ¯˘˜ˆDÌ¯à˘˜
  4243. ˆ8„pÓ√√√ÎÄ ˛ Ä1ÄÁÎÄ ˛ ÄÁÌ8q¿p‡
  4244. 8qfqáàÄËÌDàÄ!
  4245. âô" àëàÄËÌ@àÄ!â ààÄËÌ8¯Ä!â" ààÄËÌÄÄ!?ëâ" ààÄËÌDàÄ! ìâ" àëàÄËÌ8p`‡ ç qááÄË›ÄËfiÄËfiÁ√√√√√ƒ√√ƒƒ√√√√√√√√√ "@À  åÀ Ê8√ãTqa√«– "DLÅ$âí$Hò– ‚"DHÅy‰Hê– "DHÅâ$Oê– "DHÅâ$H– "DHÅâ$Hê– Ò‚ CàÅy„«–ˆ@œ˜@œ˜Äœ√√√√*à@@ ˝a Ä‡¸ Ì'à˛@å˛ ˝  ˙Ï/+H‚",8√«Tp„8p‚¿,p‚Á<#qá≈ò≥,a√é0‚¿Ô/+I"2DDHÅ$ââ 2!ë"!" àô&dÃë2"$D Ô/+)T"@DHÅyâ "!ë"! àë$Dàë""ƒ Ô/+)ÒT"8DOÅâà‚ "!Úë"!" àë$Dàë""D Ô/+à"DHâà "!ë"!" àë$Dàë""D Ô/+à"DDHÅââ "!ë"!" àë$Dàì""$D Ô/+‡à"8C«x· p‚""‚û<!á·ƒDàç"!√√‚ Ô ¸ ‹ ¸ ‹√√ƒ√ƒ ‡˛˛ “ ˛˛ “PÒ·≈òÒá"√Ä‘Pâ&dâò#$@‘àâ$Dâê"$”àâ$Dâê"$”¸â$Dâ"$”â$Dâ1ê"$@‘Ò··ƒD–« "#Ñ‘Å˚IJ —Å˚IJ@—ˇF\@ˇ ˇˇˇˇ@
  4246. ˇ·ˇ‚7^
  4247. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äUsing the Edition Manager
  4248. , (‡2-45
  4249. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  4250. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  4251. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  4252. 4€4—?òÄ
  4253. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  4254. ˛ˇˇˇ
  4255. ˛ˇˇˇ
  4256. ˛ˇˇˇ
  4257. ˛ˇˇˇ˜˝˛ˇ˛
  4258. ˛ˇ˛ˇˇ
  4259. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  4260. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  4261. ˛ˇ˛ˇˇ
  4262. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  4263. ˛ˇˇˇˇ
  4264. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  4265. ˛ˇˇˇˇ
  4266. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  4267. ˛ˇˇˇˇ
  4268. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\äh¢(eäFigurR¿°dONLNd\¢hª)e 2-16@°dONLNd \ªh‰)B shows the subscriber options dialog box with the update mode set °dONLNdMiäuï(räto ∑‡°dONLNdPiïuø) ManuallyI¿°dONLNdXiøu¡)*.
  4269. óH®4òH®"òH]
  4270. ˇ·ˇ‚7^    °dONLNd[çäò∫(ïä Figure 2-16°dONLNdgçÃò€)BBThe subscriber options dialog box with update mode set to Manually
  4271. °dONLNd´2ä>˘(;äAs a shortcut for the userS@°dONLNd≈2˘>)o<, you should display the subscriber options dialog box when °dONLNd?äKÊ(Häthe user double-clickƒ°dONLNd?ÊKÒ)\s aÅ°dONLNd?ÚK=)  subscriber sectio0°dONLNd+?>KI)Ln ii¿°dONLNd.?IKà) n a document..°dONLNd<Qä]ë(ZäYï°dONLNd=Qê])ou pass a section options rg`°dONLNdXQ])reply r9¿°dONLNd^Q]/)ecor  °dONLNdbQ/]ö)d as a parameter to the ,
  4272. Courier  °dONLNdzQö])kSectionOptionsDialog  °dONLNdéQ])x .°dONLNdè^äj±(gä    function..°dONLNdôuäÅ,*TYPE SectionOptionsReply = °dONLNd∂Éúè¿+RECORD°dONLNdøëÆù‰+    canceled:°dONLNdÃëˆù&)HBoolean;°dONLNd⁄ëbùå)l{user c°dONLNd·ëåù¬)*    licked Ca°dONLNdÍë¬ù‘)6nce°dONLNdÌë‘ù‡)l}°dONLNdÚüÆ´fi(®Æchanged:°dONLNd˛üˆ´&)HBoolean;°dONLNd üb´Ú)l{changed section record}°dONLNd'≠Æπ‰(∂Æ    sectionH:°dONLNd4≠ˆπP)HSectionHandle; °dONLNdI≠bπ˛)l{handle to the specified }°dONLNdpªb«»*{ section record}°dONLNdÑ…Æ’ÿ(“Æaction:°dONLNdè…ˆ’&)HResType;°dONLNdù…b’∂)l{action codes}°dONLNd≠◊ú„¥(‡úEND;°dONLNd≤Ôä˚≠(¯äSet the °dONLNd∫Ô≠˚›)#sectionH°dONLNd¬Ô›˚ì)0) parameter to the handle to the section rR`°dONLNdÎÔì˚•)∂ecor$¿°dONLNdÔÔ•˚)d for the section the .°dONLNd¸äü(äuser `°dONLNd
  4273. ¸†≈)    selected..°dONLNdä®(äUpon rR`°dONLNd®fi)eturn of the R`°dONLNd'fiV)6SectionOptionsDialogR`°dONLNd;Vì)x function, the R`°dONLNdJì√)=canceledR`°dONLNdR√ÿ)0 and R`°dONLNdWÿ)changedR`°dONLNd^)* °dONLNd_ä'ë($äfi°dONLNdaë'∞)elds arR`°dONLNdh∞'Â)e set. If the R`°dONLNdvÂ')5canceleR`°dONLNd}')*dR`°dONLNd~') fiR`°dONLNdÅ'3)    eld iR`°dONLNdÜ3'S)    s set to R`°dONLNdèS'k) TRUER`°dONLNdìk'ñ) , the user R`°dONLNdûñ'Δ)+
  4274. clicked CaR`°dONLNd®Δ'œ)0ncR`°dONLNd™œ'€)    el.R`°dONLNd≠€')  Otherwise, °dONLNdπ(ä4ô(1äthi°dONLNdº(ô4¶)s fi°dONLNd¿(¶4ª)eld i°dONLNd≈(ª4¡)s °dONLNd«(¡4€)set to °dONLNdŒ(€4˘)FALSE°dONLNd”(˘4)    . If the °dONLNd‹(4>)!change°dONLNd‚(>4D)$d°dONLNd„(D4M) fi°dONLNdÊ(M4b)    eld i°dONLNdÎ(b4h)s °dONLNdÌ(h4Ç)set to °dONLNdÙ(Ç4ö)TRUE°dONLNd¯(ö4÷), the section rR`°dONLNd(÷4Ë)<ecor$¿°dONLNd (Ë4˙)d is .°dONLNd5äAπ(>ä@changed. For example, the user may have changed the update mode.
  4275. ßàòÄ@DÙHH\*4ˇˇˇˇˇˇDÙ™á}Àƒˇƒƒ?≈ˇê?≈ˇê    0Δê    0Δê    0Δê    0Δê    0Δê    0Δê    0Δê    0Δê    0Δê    0Δê    0Δê0ÙˇÊê0ÙÊê0ÙÊê0ÙÊê0ÙÊê'08¿ ¿TΔ¸˛Êê&0d¿˛¿
  4276. ™ ¸˝Êê)0`ïp„l¯xÿ<x¿˛«Δ<Êœ‡ˇÊê(0pÃÃ…ìåÃÇÿÜ˝fg˛ôê˛Êê(08ÃÃ·É ÃÿÃ˛Δ˝ff˛ôĸÊê)0ÃÃqÉ Ã¸¿ÃÊ˛f~f˛ôįÊê(0 ÃÃ9É Ã¿¿Ã˛˝f`f˛ôÄpÊê(0LÃÃôì ÿÿ
  4277. ™˝fbf˛ôê Êê)!08|¯p„ ¯x¿ x¿TΔfgΔ<Êüò‡Êê0Ù¸˛`¸Êê0Ù¸`¸Êê0Ù˘¿˙Êê0ÙÊê0ÙÊê0Ùˇ¯Êê0Ùˇ¯Êê    0Δê    0Δê    0Δê    0Δê    0Δê    0Δê 0»ˇê    0Δê 0»ˇê    0Δê    0Δê    0Δê    0Δê    0Δê    0Δê    0Δê    0Δê    0Δê    0Δê    0Δê    0Δê
  4278. 0 ¿Ãcœê
  4279. 0Ä ¿`œê0ÃÛ>`”ê0å Ãc332`”ê0ôååÃc338ËUPÚˇ¸ê0 üå Ãc33Á0Úê0ò  Ãc33‰ Úê0 òå Ãc33&`Ë@ÒÄê0«Ã33`Â@ÒÄê 0 ›@IJ00˛Äê0ÿ@ @˛0˛0˛Äê 0 ›@ èá3>8€>6Äê0ÿ@ ÃÃôò332d„338Äê 0 ›@ ÃÃò338`√330Äê0ÿ@ ÃÃò33`√3?0Äê 0 ›@ ÃÃ33`√300Äê0ÿ@ LÃÃòò33&d√310Äê$0 ˛x·@áë>8√>0Äê0˝Üfi@ÒÄê!
  4280. 0 ¿˝ΔÃÏ@ÒÄê0˝`˝¿ÃÈ@ÒÄê$0 ÜfgèÒÊ8xÃÃÌ Úê 0˝ÜfcôôΔdåÃÃÍ0Úê$0 áÊcôò¯Δ`|ÃÃÌÚˇ¸ê0˝
  4281. ÜfcôôòΔ`˛Ãÿê0 fcôôòΔ`˛ÃÌÌê0˝
  4282. fcôôòΔd˛Ãÿê0 Üc·èò¯f8|Ã|ÌÌê0¸xˆ ÿê0 ÚåÌÌê0xÿê0 ›Ìê    0Δê0 Ô?ÚˇÚˇ¸ê0Ì¿Ú ˝0Úê0 ÔÄÚ Úê0¸xÙÒ˝@ÒÄê0 ÜÙÒ@ÒÄê:0˝˝f˚x`>c@˛˝@¿˛|`f¿˝Äê<    0 y˝f˚ƒ`0˛@˛@`˛f``¿˝Äê=0˝    ¸á<|f<ff¸¿x0>gòÒGåÃ˝@g√«¿ff|f8¯xÿÄê>0 ¸áûFffFff¸¿Ã`0fcôòLÃÃ@˛f`˝f    dÃÇÄê=0˝    ¸Öˆ>ff>ff¸‹Ã`<fcôòLÃÃ˝@˛f`|˛f    pÃÿÄê;    0 ¸ÑÊ˚f¸ ø`0fcôò˛Ã@fgÊ``˛f    8ø¿Äê90˝yF˚f¸ ÿ`0fcôò˛Ã˝@ff``˛f    ÿ¿Äê;    0 ˚f¸Ã`0fcôòÃû@ff&``˛f    LÿÄê=0˝    Ü>f>>f>¸xx0>>aòÒòGè˝@«√Δ``>|f8Ãx¿Äê$0 ˛x˙¸Ò@ÙÄê0ÙF¸Ò˝@ÙÄê0 ˆ<¸Ò@ÒÄê0ÌÄÚ˝ Úê0 Ô¿Ú 0Úê0Ì?Úˇ˝Úˇ¸ê0 ›Ìê    0Δê0 ›Ìê    0Δê0 ›Ìê    0Δê0 ›Ìê    0Δê0 ›Ìê 0ÿU@ê.
  4283. 0 @ í ˝ Ä8áp||<Ç˝Ìê)    0@ ÄǸ1Ä Dà¢à "ΔËê/#0 Aú«pÉ∑fpÄ*ô«2@KåDà¢à(DD"™˝Ìê+ 0@I( ‰í)H˛$•)
  4284. @JR8áûàH8<íËê/ 0 A…Ê Ñí)H˛ •):@J^DÄÇà| Ç˝Ìê+ 0BI Ñí)H˛ •)J@JPDÅàD ÇËê/#0 yƒŒÛë&HÄ ô'9¬:L8@ÜpDN8 Ç˝Ìê0B¸@Á˚ˇ˛ê0 ÛѸÄÛˆ˙ˇÄê0œ?˙ˇ¿ê0 ›ˆ|˚‡ê0ÿ˚ˇ¿q˚ˇ¯‡ê: 0 @A‡˛ Ä8áp||<Ç˝0˚0ˆ˚ê70@A˛˛1Ä Dà¢à "Δ˙ ˚‰˚pê:#0 Aé·Õ@*ô«2@KåDà¢à(DD"™˝@˚Ë˚pê7 0@PA‰•$§§˛$•)
  4285. @JR8áûàH8<í˙@˚Ë˚pê? 0 AÃAG°‰ß§˛ •):@J^DÄÇà| Ç˝@˝`Ë1Äpê< 0BBA$%D$˛ •)J@JPDÅàD Ç˙@1˝`Ë33pê@#0 y‹!ƒC@ ô'9¬:L8@ÜpDN8 Ç˝@0><`Ë36pê#0B¸@@0#32f`Ë3<pê)0 ÛѸÄÛ@030f`Ë38pê0ÿ@0330~`Ë3<pê 0 ›@0330``Ë36pê0ÿ@1332b`Ë33pê 0 ›@3<`Ë1Äpê0ÿ@˚Ë˚pê0 ›@˚Ë˚pê0ÿ@˚Ë˚pê0 › ˚‰˚pê0ÿ0˚0ˆ˚ê0*›™®˚ˇ¿q˚ˇ¯‡ê0œ|˚‡ê0œ?˙ˇ¿ê0œ˙ˇÄê0œ˚ˇ˛ê    0Δê    0Δê    0Δê    0Δê    0Δê    0Δê    0Δê    0Δê    0Δê    0Δê?≈ˇê?≈ˇêƒƒƒˇ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡5˘> ˛ÄÄ»˛˛à˝@˛"`IJ!˛˝˚8|@‡ ˝@˛˛˝˝  Ä˝!˛˝˚>:@à¡ a‰Kú@ ƒO]è.8√ãÊ!√¿‚ DLq`"xx„áf<p¸>$@ÑB "$L"@Ä ë$Hë"`àë0ëDLë˛"$@â DD!ê"DâÅô"Dà¸>:@ÑC‡<"$H"á¡@ëHê @àë ëDHê""$@â@*Ñ!"DàÒÅ"Dà¸>$xѯÒB "$H>@üƒHé @àü ëDHé˛"$@âÄ*Ñ!"DâÅ"D¯¸>$@ÑB "$H @ê$HÅ @àê ëDHÅ˛"$@â@!"Dâ"Dĸ>$@ÑB "$»"@ë$»ë"@àë ëDHë˛"$@â !&DâÅ"Dà¸>:@àB !„H¿Äé√O@è  Càé‚!√¿‚ xx«<p¸|A‡˛ Ì¯@˘@Ù¯ Ì˘@˘@Ù ¯¿‰ÄΡ¡¡¡Ì˛ `flÌå˛ flÔ áTqb#Ñ" ‡Ô Hà$âí$D" ‡Ô ày#ƒ" ‡Ô èàâ$D" ‡Ó Hâ$D" ‡Ô HàâdD" ‡Ô áéy£ƒ!‡‡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡√ˇ¡¡√ˇ√ˇ¡
  4286. ¯ Ç»
  4287. Ä˛Δ» ÄÛa≈Ä™8∞·„ãÄŒ Å"&@íD…$LÕ Ò"$@Ç<àÚ$HÕ Å"$@ÇDâ'»Õ Å"$@ÇDâ$Õ Å"$@ÇDâ$HÕ ¯Ò!ƒ@Ç<àÒ„àÕ˜ Ã¯ Ã¯¿Ã¡¡¡¡)ƒ  ÇÄ˝0Ä@¸Í&ƒ˛ Δ˛˝˙È.*§qa„Ä™8qã8q`8qsèá8√ã‚ÃYàñ0·«q`Ï.*§â""$@íDàåàDâêâÑHëàëDLÅ2fHô"âêÏ.*îà™ "$@Ç<ÄààDÅâ»ëàDHÅ"DHë‚âÏ.*"'¿ÇDÄààDq˘HëàDHÅ"DHë"âÏ.*åÄD"$ÇDÄààD    ÅHëàDHÅ"DHë"âÏ.
  4288. åàD""$@ÇD˛àDââHëàëDHÅ    "DIë"âÏ.*ÑpD!„ÄÇ<pàÜ8q qœá CàÄ‚"DFë··àqÏ Ò¸Ÿ Ò¸Ÿ¡¡¡¡¡Ä˝ÄœÄ˝Äœ(xá‚Ãxâ√ãÄa¿—(DààÅ2DàÑLí —DDààÅ"DàÑH–DDàèÅ"Dàồˇ˛Dàà"DàÑ–ÇDààÅ    "DòÑH ”ˇÇxá‚"xhcà¿—@ĸ@˛—@ĸ@˛ Œˇ∫@ˇ ˇˇˇˇ@
  4289. ˇ·ˇ‚7^
  4290. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  4291. (‡*2-46    )BUsing the Edition Manager4^*¿¯
  4292. .°dONLNd\lhÄ(elThe ,
  4293. Courier°dONLNd\Äh¯)SectionOptionsDialog°dONLNd\¯h$)x  function rR`°dONLNd#\$h^),eturns in the R`°dONLNd1\^hÇ):actionR`°dONLNd7\ÇhÌ)$ parameter the code for .°dONLNdOiluè(rlone of fif†°dONLNdXiêu‚)$Mve user actions. The function dismisses the publisher and subscriber options °dONLNd•vlÇ%(l,dialog boxes after the user clicks a button.,Zapf Dingbats°dONLNd“ålìq*n
  4294. .°dONLNd‘âxï∏) Action code is °dONLNd„â∏ï‹)@'read'°dONLNdÈâ‹ïó)$+ for a click of the Get Edition Now button..°dONLNdûl•q(§ln
  4295. .°dONLNdõxß∏) Action code is °dONLNd&õ∏ß‹)@'writ'°dONLNd,õ‹ßù)$, for a click of the Send Edition Now button..°dONLNdY∞l∑q(∂ln
  4296. .°dONLNd[≠xπ∏) Action code is °dONLNdj≠∏π‹)@'goto'°dONLNdp≠‹πë)$* for a click of the Open Publisher button..°dONLNdõ¬l…q(»ln
  4297. .°dONLNdùøxÀ∏) Action code is °dONLNd¨ø∏À‹)@'cncl'°dONLNd≤ø‹ÀÙ)$A for a click of the Cancel Publisher or Cancel Subscriber button..°dONLNdÙ‘l€q(⁄ln
  4298. .°dONLNdˆ—x›∏) Action code is °dONLNd—∏›ƒ)@' °dONLNd—ƒ› )  °dONLNd— ›–) °dONLNd    —–›÷) °dONLNd
  4299. —÷›‹)'°dONLNd —‹›ï)+ ($20202020) for a click of the OK button. .°dONLNd7‚lÓö(Îl Listing 2-8 @°dONLNdB‚õÓt)// shows an example of how your application can r'°dONLNdq‚tÓÎ)Ÿespond to the action codes °dONLNdåÔl˚o(¯lrE°dONLNdçÔp˚õ)
  4300. eceived frU`°dONLNdóÔõ˚)+om the section options rP°dONLNdØÔ˚)jeply rÿ@°dONLNdµÔ˚0)ecorL†°dONLNdπÔ1˚7)dh`°dONLNd∫Ô7˚<). :¿°dONLNdºÔ<˚B)Y˚@°dONLNdΩÔA˚v) ou can use sÑ@°dONLNd…Ôw˚†)6
  4301. everal difC °dONLNd”Ô°˚≠)*fer%†°dONLNd÷Ô≠˚Ë) ent techniqueÙ@°dONLNd„ÔË˚Ó);s °dONLNd¸l∫(lfor this purpose; t1†°dONLNd¯¸ªG)O his listing shows one technique.
  4302. +*3¯4,*3¯",*_
  4303. ˇ·ˇ‚7^    °dONLNd!l,ò()l Listing 2-8°dONLNd&!∞,)DResponding to action codes
  4304. .°dONLNdB;lG§(Dl4PROCEDURE DoOptionsDialog(theSection: SectionHandle)°dONLNdv;§G™(D§;°dONLNdxIlUr(RlV°dONLNdyIrU~)AR°dONLNd}W~c¢+ reply:°dONLNdâWÍc8)lSectionOption°dONLNdñW8c>)Ns°dONLNdóW>cb)Reply;°dONLNdüe~qÿ(n~theEditionInfo:°dONLNd¥eÍqV)lEditionInfoRecord;°dONLNd»s~®(|~action:°dONLNd’sÍ)lResType;°dONLNdflÅ~ç¢(ä~sodErr°dONLNdÂÅ¢ç“)$, geiErr°dONLNdÌÅ“çÿ)0:°dONLNdÙÅÍç)OSErr°dONLNd˘Åç);°dONLNd¸è~õÿ(ò~gpiErr, gpsErr:°dONLNdèÍõ)lOSErr°dONLNdèõ);°dONLNd´l∑r(¥lB°dONLNd´r∑ä)EGIN°dONLNd π~≈&+ reply.sectionH := theSection°dONLNd<π&≈,)®;°dONLNd?«~”&(–~{display options dialog box}°dONLNd]’~·\*%sodErr := SectionOptionsDialog(reply)°dONLNdÇ’\·b)fi;°dONLNdÖ„~Ôê(Ï~{de°dONLNdà„êÔ∂)1termine what the user did and handle appropriatel°dONLNdπ„∂Ô¬(Ï∂y}°dONLNdΩÒ~˝¸(˙~IF reply.canceled THE°dONLNd“Ò¸˝)~N°dONLNd€Ò˝&){use°dONLNdflÒ&˝n) r selected t°dONLNdÎÒn˝‘)Hhe Cancel button}°dONLNdˇˇê ñ(êE°dONLNdˇñ )XIT(DoOptionsDialog)°dONLNdˇ )x;°dONLNd~Ñ(~I°dONLNdѸ)F reply.changed THEN°dONLNd/ê'¢+ {th°dONLNd2¢'∂).e section record has changed; make note of thi°dONLNd`∂'¬($∂s}°dONLNde)ê5ú(2êMy°dONLNdg)ú5P) SectionHasChanged(theSection);°dONLNdà7êC¢(@ê{if°dONLNdã7¢C) you customiz°dONLNdò7C¸)Ne,°dONLNdö7¸Cò)  you may want to do some }°dONLNd∑EêQ(Nê{ post-processing no°dONLNdÀEQ)xw}°dONLNdœS~_¸(\~{get the action code}°dONLNdÊa~mÑ*a°dONLNdÁaÑm)ction := reply.action°dONLNd¸am)~;°dONLNdˇo~{Ñ(x~I°dONLNdoÑ{)F (action = 'read') THEN°dONLNd}~âú(Ü~BEGIN°dONLNd"}¥âΔ)6{us°dONLNd%}Δâå)!er selected Get Edition Now butto°dONLNdF}åâò)Δn}°dONLNdKãêó&(îêDoReadEdition(theSection)°dONLNddã&ó,)ñ;°dONLNdhôê•ñ(¢êE°dONLNdiôñ•)XIT(DoOptionsDialog);°dONLNdÄß~≥ê(∞~END°dONLNdÉßê≥ñ);ˇ3™@ˇ ˇˇˇˇ@
  4305. ˇ·ˇ‚7^
  4306. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äUsing the Edition Manager
  4307. , (‡2-47
  4308. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  4309. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  4310. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  4311. 4€4—?òÄ
  4312. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  4313. ˛ˇˇˇ
  4314. ˛ˇˇˇ
  4315. ˛ˇˇˇ
  4316. ˛ˇˇˇ˜˝˛ˇ˛
  4317. ˛ˇ˛ˇˇ
  4318. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  4319. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  4320. ˛ˇ˛ˇˇ
  4321. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  4322. ˛ˇˇˇˇ
  4323. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  4324. ˛ˇˇˇˇ
  4325. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  4326. ˛ˇˇˇˇ
  4327. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿,
  4328. Courier.°dONLNd\úh¢(eúI°dONLNd\¢h2)F (action = 'writ') THEN°dONLNdjúv∫(súBEGIN°dONLNd#j“v‰)6{us°dONLNd&j‰v∞)"er selected Send Edition Now butto°dONLNdHj∞vº)Ãn}°dONLNdMxÆÑP(ÅÆDoWriteEdition(theSection);°dONLNdkÜÆí2*EXIT(DoOptionsDialog);°dONLNdÉîú†Æ(ùúEND°dONLNdÜîƆ¥);°dONLNdâ¢úÆ¢(´úI°dONLNd䢢Æ2)F (action = 'goto') THEN°dONLNd§∞úº¥(πúBEGI°dONLNd®∞¥º∫)N°dONLNd¨∞“º‰){us°dONLNdØ∞‰º§) er selected Open Publisher butto°dONLNdœ∞§º∞)¿n}°dONLNd‘æÆ Ê(«Æ4geiErr := GetEditionInfo(theSection, theEditionInfo)°dONLNdæÊ Ï(«Ê;°dONLNd ÃÆÿ¥(’ÆI°dONLNdÃ¥ÿ8)F geiErr <> noErr THEN°dONLNd#Ã8ÿ>)Ñ °dONLNd(⁄¿ÊΔ(„¿M°dONLNd)⁄ΔÊ>)yErrHandler(geiErr);°dONLNd>⁄>Ê»)x{handle error and exit}°dONLNdXËÆÙ¥(ÒÆg°dONLNdYË¥Ù˛)7psErr := GotoPublisherSection(theEditionInfo.container)°dONLNdê˲Ù(Ò˛;°dONLNdîˆÆ¥(ˇÆI°dONLNd)F gpsErr <> noErr°dONLNd¶ˆ8)f THEN°dONLNdØ¿Δ(¿M°dONLNd∞Δ>)yErrHandler(gpsErr);°dONLNd≈>»)x{handle error and exit}°dONLNdflÆ2(ÆEXIT(DoOptionsDialog);°dONLNd˜ ú,Æ()úEND°dONLNd˙ Æ,¥);°dONLNd˝.ú:¢(7úI°dONLNd˛.¢:2)F (action = 'cncl') THEN°dONLNd<úH∫(EúBEGIN°dONLNd<∫H¿) °dONLNd<¿H“){Us°dONLNd"<“H∞)%er selected Cancel Publisher or Cance°dONLNdG<∞H)fil Subscriber }°dONLNdXJÆV¿(SÆ{ b°dONLNd[J¿V‰)utton.°dONLNdaJ‰VÍ)$ °dONLNdbJÍVå)Call the UnRegisterSection °dONLNd}JåV)¢function and dispose }°dONLNdñXÆd¿(aÆ{ o°dONLNdôX¿dV)f the section record and °dONLNd≤XVd™)ñalias record.}°dONLNd√fÆr¥(oÆE°dONLNdƒf¥r2)XIT(DoOptionsDialog);°dONLNd€túÄ¥(}úEND;°dONLNd‡Çäéú(ãäEND°dONLNd„Çúé¢);.°dONLNdÂöä¶B(£ä*The following sections describe the featurY°dONLNdöB¶˝)∏+es of the publisher and subscriber options °dONLNd:ßä≥ƒ(∞ädialog boxes.
  4329. —Hÿ4“Hÿ ”ä”
  4330. ˇ·ˇ‚7^ °dONLNdIƒä“ô*1Publishing a New Edition While Saving or Manuallyˇˇˇˇˇˇ‘@(Œ2
  4331. °dONLNd|ÿä‰(·äZBy default, your application should write publisher data to an edition each time the user °dONLNd÷ÂäÒÑ*8saves the document and the contents of the publisher dif]°dONLNdÂÑÒô)˙fer fr°dONLNdÂöÒ)om the latest edition. In the °dONLNd2Úä˛(˚äWpublisher options dialog box, the user can choose to write new data to an edition each °dONLNdâˇä Ä*7time the document is saved (by clicking On Save) or onl    ¿°dONLNd¿ˇÅ ¶)˜y upon t+`°dONLNd»ˇ¶ Δ)%he user °dONLNdœˇ« Œ)!’s`°dONLNd—ˇŒ Ï) specifiˆÄ°dONLNdŸˇÏ Ú)c °dONLNd€ äç(ärE°dONLNd‹ éß)equesµÄ°dONLNd· ß∞)t (À¿°dONLNd‰ ∞)    by clicking Manually).°dONLNd˚ä*('äSWhen the update mode is set to manual, a user must click the Send Edition Now butto    ¿°dONLNdN*('n °dONLNdP+ä7å(4äih`°dONLNdQ+ç7)Vn the publisher options dialog box to write publisher data to an edition. When a user .°dONLNdß8äD†(Aäclick°dONLNd¨8†D⁄)s this button,°dONLNd∫8⁄D6): the section options rR`°dONLNd–86DQ)\eply r$¿°dONLNd÷8QDc)ecor˜ °dONLNd⁄8bD◊)d contains the action code ˜ °dONLNdı8◊D˚)u'writ'˜ °dONLNd˚8˚D )$. In .°dONLNdEäQı(Näthis case, you should wrîÄ°dONLNdEıQR)kite out the new editioÖ@°dONLNd.ESQ[)^n.÷†°dONLNd0E[Qg) Wô@°dONLNd2EgQ) (riting to an edition manually is useful °dONLNdZRä^R([ä*when a user tends to save a document numer”¿°dONLNdÑRR^ù)»ous times while röÄ°dONLNdïRû^…)L evising it.°dONLNd°däp(mäWEach time the user saves the document, check the update mode of the publisher section. °dONLNd¯qä}ç*IfiÄ°dONLNd˘qç}£)f the ¿°dONLNdˇq§}b)-publisher section sends its data to an editioí`°dONLNd,qb}Î)æn when the document is saved,¨Ä°dONLNdIqÎ})â chec®°dONLNdNq}    )k °dONLNdP~ääí(áäw◊°dONLNdQ~íäü)>hether the publisher data has changed since it was last writte °dONLNdè~†ä´(á†n t™‡°dONLNdí~´äˇ) o the edition. If so, °dONLNd®ãäóú(îäwritÙ`°dONLNd¨ãúó›)e the publisherÖ°dONLNdªãfló )C ’s data to ta†°dONLNd«ãóQ).he new edition.ˇ¶@ˇ ˇˇˇˇ@
  4332. ˇ·ˇ‚7^
  4333. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  4334. (‡*2-48    )BUsing the Edition Manager4^*¿¯
  4335. °dONLNd\lh#(el)In addition, you may also support a Stop Y`°dONLNd)\#h∫)∑All Editions menu command to pr؇°dONLNdH\∫h‹)óovide a °dONLNdPilu](rl5method for temporarily suspending all update activity`°dONLNdÖi\uk). Seà¿°dONLNdâikur)e “`°dONLNdãiruá)“Intr    †°dONLNdêiàu)oduction to Publishers, °dONLNd®vlÇ8(l-Subscribers, and Editions” beginning on page È`°dONLNd’v8ÇE)Ã2-4=@°dONLNdÿvFÇK) f °dONLNd⁄vLÇø)or additional information.
  4336. †*߯4°*߯ ¢l¢¯
  4337. ˇ·ˇ‚7^ °dONLNdˆìl°Ù(ùlSubscribing to an Edition ‡¿°dONLNdìÛ°{)áAutomatically or Manuallyˇˇˇˇˇˇ‘@)˛2
  4338. °dONLNd+ßl≥Î(∞lWBy default, your application should subscribe to an edition each time new edition data °dONLNdÇ¥l¿Ã*Qbecomes available. In the subscriber options dialog box, the user can choose to rt°dONLNd”¥ÿÛ(ΩÃead new °dONLNd€¡lÕâ( ldata frw°dONLNd‚¡âÕd)4om an edition as the data is available (by clicking µ@°dONLNd¡dÕı)€ Automatically) or only upon the °dONLNd6Œl⁄(◊luser=¿°dONLNd:ŒÄ⁄•)    ’s specifi0 °dONLNdDŒ¶⁄∞)&c rÂ`°dONLNdGŒ∞⁄5)
  4339. equest (by clicking Manually).°dONLNdf‡lÏÏ(ÈlTWhen the update mode is set to manual, the user must click the Get Edition Now buttoù¿°dONLNd∫‡ÏÏÙ(ÈÏn °dONLNdºÌl˘n(ˆlih`°dONLNdΩÌo˘)(n the subscriber options dialog box to rÈ°dONLNdÂÌ˘fi)¨-eceive new editions. When a user clicks this .°dONLNd˙lÁ(lbutton, the section options rR`°dONLNd/˙Á){eply r$¿°dONLNd5˙)ecor˜ °dONLNd9˙à)d contains the action code ,
  4340. Courier˜ °dONLNdT˙à¨)u'read'˜ °dONLNdZ˙¨È)$. In this case, .°dONLNdjl§(l you should rfl‡°dONLNdv§®)8e©Ä°dONLNdw©)ad in the new editioº`°dONLNdã    )Xn.¿°dONLNdç
  4341. )     Seó °dONLNdê) e ‡¿°dONLNdíÎ),“Opening an Edition Container to Read Data” °dONLNdæl ¿(lbeginning on page V °dONLNd–¡ ”)U2-41™°dONLNd‘” ÿ) f}‡°dONLNd÷Ÿ B)or detailed information.°dONLNdÔ&l2{(/l<When the update mode is set to automatic, your application rx °dONLNd+&{2‡(/{eceives a Section Read °dONLNdB3l?W(<l5event each time a new edition becomes available. In râ`°dONLNdw3W?∑)Îesponse, you should r?Ä°dONLNdå3∏?)a ead the new .°dONLNdò@lLˇ(Il edition data beginning with the °dONLNd∏@ˇL)ìOpe°dONLNdª@L)nE°dONLNdΩ@LA) dition°dONLNd√@ALj)$
  4342.  function..°dONLNdŒRl^r([lY@Ä°dONLNdœRr^‰)our application does not rL¿°dONLNdÈR‰^∑)r1eceive Section Read events for subscribers that r›`°dONLNdR∑^Í)” eceive new °dONLNd%_lkº(hleditions manuallym°dONLNd6_ªkΩ)O.°dONLNd8ql}r(zlY@Ä°dONLNd9qr}Ì)ou may also support a Stop I`°dONLNdTqÌ}Ñ){All Editions menu command to prü‡°dONLNdsqÑ}⁄)óovide a method for °dONLNdÜ~lä)(ál*temporarily suspending all update activityÄ¿°dONLNd∞~(ä7)º. Seä °dONLNd¥~7ä>)e ”¿°dONLNd∂~>äS)“Intr °dONLNdª~TäÙ)%oduction to Publishers, Subscribers, °dONLNd‡ãló(îl and Editions” beginning on page ¿°dONLNdãó)ï2-4e†°dONLNdãó) f9Ä°dONLNdãóÑ)or additional information÷‡°dONLNdãÑóÜ)p.
  4343. µ*º¯4∂*º¯ ∑l∑¯
  4344. ˇ·ˇ‚7^ °dONLNd!®l∂·(≤lCanceling Sections W⁄°dONLNd5®·∂7)uithin Documentsˇˇˇˇˇˇ‘@(≤Ò2
  4345. °dONLNdFºl»¿(≈lOThe option of canceling publishers and subscribers is available to the user thr
  4346. ¿°dONLNdﺡ»Í(≈¡    ough the °dONLNdû…l’o(“l:Cancel Publisher and Cancel Subscriber buttons in the corr†°dONLNdÿ…p’„(“pesponding options dialog °dONLNdÒ÷l‚Δ(fllboxes. When the use‡°dONLNd÷«‚C)[r clicks one of these buttons,… °dONLNd"÷C‚Î)|( the action code of the section options .°dONLNdJ„lÔp(ÏlrR`°dONLNdK„pÔã)eply r$¿°dONLNdQ„ãÔù)ecor˜ °dONLNdU„úÔ®)d i˜ °dONLNdX„®Ô¨) s˜ °dONLNdY„¨ÔÆ) ˜ °dONLNdZ„ÆÔ¥)'˜ °dONLNd[„¥Ô“)cncl'˜ °dONLNd`„“Ô‚). Se˜ °dONLNdd„‚ÔÈ)e ˜ °dONLNdf„ÈÔ{) “Relocating an Edition” on page ˜ °dONLNdÜ„{Ôé)í2-60˜ °dONLNdä„éÔî) f˜ °dONLNdå„îÔ”)or additional .°dONLNdöl¸(˘l#information on canceling a section.°dONLNdælÿ*TWhen a user cancels a section (either a publisher or subscriber) and then saves the °dONLNdlœ*Mdocument, or when a user closes an untitled document (which contains newly crÀ†°dONLNd_œÈ(œeated °dONLNdel(◊(%lsections) without saving7†°dONLNd}ÿ(‡)l it‚`°dONLNdć(!), you must unrÊ °dONLNdé!(i)Aegister each corr Ä°dONLNdüj(¿)Iesponding section rm@°dONLNd≤¿(“)Vecor·†°dONLNd∂“(Ó)d and .°dONLNdº)l5ä(2lalias rR`°dONLNd√)ä5ú)ecor$¿°dONLNd«)ú5œ) d using the $¿°dONLNd”)œ55)3UnRegisterSection$¿°dONLNd‰)55‡)f( function. In addition, you should also °dONLNd     6lB¬(?ldelete the section rR`°dONLNd     6¬B‘)Vecor$¿°dONLNd    $6‘B)d and alias r˜ °dONLNd    16 B)8ecor…Ä°dONLNd    56BQ) d using the …Ä°dONLNd    A6QBu)3Dispos…Ä°dONLNd    G6uB{)$e…Ä°dONLNd    H6{Bü)Handle…Ä°dONLNd    N6üB´)$ prõ‡°dONLNd    Q6´B») ocedurn@°dONLNd    W6»B›)e. Sen@°dONLNd    \6›B‰)e .°dONLNd    ^ClOŸ(LlInside Macintosh: Memory.—°dONLNd    vCŸOfl)m f—°dONLNd    xCflOt)!or additional information on the —°dONLNd    ôCtOò)ïDispos—°dONLNd    üCòOû)$e—°dONLNd    †CûO¬)Handle—°dONLNd    ¶C¬OŒ)$ pr£`°dONLNd    ©CŒOÎ) oceduru¿°dONLNd    ØCÎOÛ)e..°dONLNd    ≤UlaÁ(^lTWhen a user cancels a publisher section and then saves the document, or when a user °dONLNd
  4347. blnY*4closes an untitled document (which contains newly cr¿°dONLNd
  4348. :bYnÍ)Ì eated publishers) without savingRÄ°dONLNd
  4349. ZbÎnÌ)í °dONLNd
  4350. [ol{r(xlit™¿°dONLNd
  4351. ]or{˘), you must also delete any corrÕ °dONLNd
  4352. |o˘{‰)á6esponding edition containers (in addition to deleting °dONLNd
  4353. ≤|làë(Öl    section r≠Ä°dONLNd
  4354. ª|ëà£)%ecor!‡°dONLNd
  4355. ø|§àfi)ds and alias r∫Ä°dONLNd
  4356. Õ|fià):ecor.‡°dONLNd
  4357. —|Òà)ds).ˇ4h@ˇ ˇˇˇˇ@
  4358. ˇ·ˇ‚7^
  4359. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äUsing the Edition Manager
  4360. , (‡2-49
  4361. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  4362. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  4363. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  4364. 4€4—?òÄ
  4365. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  4366. ˛ˇˇˇ
  4367. ˛ˇˇˇ
  4368. ˛ˇˇˇ
  4369. ˛ˇˇˇ˜˝˛ˇ˛
  4370. ˛ˇ˛ˇˇ
  4371. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  4372. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  4373. ˛ˇ˛ˇˇ
  4374. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  4375. ˛ˇˇˇˇ
  4376. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  4377. ˛ˇˇˇˇ
  4378. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  4379. ˛ˇˇˇˇ
  4380. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\äh((eä$Do not delete an edition container fil`°dONLNd%\)h[)üle, section rK‡°dONLNd2\[hm)2ecor¿@°dONLNd6\mhû)d, or alias r‡°dONLNdC\üh±)2ecorã@°dONLNdG\±h)d until the user saves °dONLNd^iäuâ(rä7the document; the user may decide to undo changes befor%†°dONLNdïiäu(räe saving the document.°dONLNd¨{äáê(ÑäTµ¿°dONLNd≠{èáÿ)o locate the appr,°dONLNdæ{Ÿáû)J.opriate edition container to be deleted (befor5@°dONLNdÏ{ûá⁄)≈e you use the ,
  4381. Courier.°dONLNd˙àäî(ëäUnRegisterSection°dONLNd àîA)f function), use the °dONLNdàAîï)QGetEditionInfo°dONLNd-àïîæ)T
  4382.  function.°dONLNd8üä´(®äerr := GetEditionInf°dONLNdLü´)xo(°dONLNdNü´ò) sectionH, editionInfo);°dONLNdf∑ä√û(¿äThe °dONLNdj∑û√‡) editionInfo°dONLNdu∑‡√*)B parameter is a rR`°dONLNdÜ∑*√<)Jecor$¿°dONLNdä∑<√~)d of data type $¿°dONLNdô∑~√‰)BEditionInfoRecord$¿°dONLNd™∑‰√Á)f.°dONLNd¨Œä⁄ (◊äTYPE EditionInfoRecord = °dONLNd«‹úË¿+RECORD°dONLNd–Íƈÿ+crDate:°dONLNd€Íˆˆ2)H
  4383. TimeStamp;°dONLNdÏÍtˆ
  4384. )~{date edition container }°dONLNd¯t»*{ was created}°dONLNd$Æÿ(ÆmdDate:°dONLNd/ˆ2)H
  4385. TimeStamp;°dONLNd@tÚ)~{date of last change}°dONLNdXÆ Í(Æ
  4386. fdCreator:°dONLNdfˆ  )HOSType;°dONLNdtt »)~{file creator}°dONLNdÖ"Æ.ÿ(+ÆfdType:°dONLNdê"ˆ. )HOSType;°dONLNdû"t.∂)~ {file type}°dONLNd¨0Æ<Í(9Æ
  4387. container:°dONLNd∫0ˆ<t)HEditionContainerSpec;°dONLNd÷0t<¬)~{the edition}°dONLNdÂ>úJ¥(GúEND;°dONLNdÍVäbû(_äThe °dONLNdÓVûbÚ)GetEditionInfo°dONLNd¸VÚb)T  function rR`°dONLNdVb˛),4eturns the edition container as part of the edition .°dONLNd;cäo¡(lä information.ˇˇGN.°dONLNdHuäÅù*The ˇ˝’Í«N°dONLNdLuùÅ¡)crDateˇˇGN«N°dONLNdRu¡Å…)$ fiú°dONLNdUu Å)    eld contains the cr∂Ê°dONLNdhuÅ°)O eation date of the edition. The ˇ˝’Íb∫°dONLNdàu¢ÅΔ)âmdDateˇˇGNb∫°dONLNdéuΔÅŒ)$ fi™°dONLNdëuŒÅ)eld contains the .°dONLNd¢Çäéß(ãämodifi⁄`°dONLNd®Çßé)cation date of the edition..°dONLNdƒîä†û(ùäThe °dONLNd»îû†¬)fdType°dONLNdŒî¬†È)$     and the °dONLNd◊îȆ)'    fdCreator°dONLNd‡î†()6 fi°dONLNd„î(†G)    elds arR`°dONLNdÍîG†í)e the type and cr$¿°dONLNd˚îí†Û)Keator of the edition fi$¿°dONLNdîÛ†)ale. The ˇˇiL°dONLNd°ä≠¿(™ä    containerˇˇÕƒ°dONLNd#°¿≠≈)6 fD°dONLNd%°Δ≠0)ield includes a volume r'¥°dONLNd=°0≠B)jefer˙°dONLNdA°A≠u) ence number
  4388. x°dONLNdL°v≠à)5, dir™ú°dONLNdQ°à≠∫) ectory ID, f§°dONLNd]°ª≠)3ilename, script, and .°dONLNdrÆä∫(∑äpart number for the edition..°dONLNdè¿äÃê*Tï°dONLNdê¿èÃö)o rg`°dONLNdì¿öÃ) emove the edition container™°dONLNdÆ¿Ã>)}
  4389. , use the ™°dONLNd∏¿>Ã⁄)'DeleteEditionContainerFile™°dONLNd“¿⁄Ã)ú
  4390.  function.°dONLNd›◊ä„J(‡ä err := DeleteEditionContainerFil°dONLNd˝◊J„V)¿e(°dONLNdˇ◊V„§) editionFile);
  4391. H    4H     ä
  4392. ˇ·ˇ‚7^ .°dONLNdıä˙(ˇäLocating a Publisher Q@°dONLNd#ı˙m)pThrough a Subscriberˇˇˇˇˇˇ‘@(ˇ2
  4393. °dONLNd9    ä(ä"The user can locate a publisher frù°dONLNd[    ˝)í2om a subscriber within a document by clicking the °dONLNdçä"î(ä<Open Publisher button in the subscriber options dialog box. dONLNd…î"”(îAs a shortcut, ≠`°dONLNdÿ”")?Apple °dONLNdfi#ä/Ñ(,ä:suggests that you also allow the user to locate a publishe´¿°dONLNd#Ñ/ú)˙r by sÚ °dONLNd#ú/¨)elecfi°dONLNd"#≠/Δ)ting aÈ@°dONLNd(#Δ/Ú)
  4394.  subscribeÄ°dONLNd2#Û/¸)-r iiÄ°dONLNd5#¸/ )    n a °dONLNd90ä<÷(9ädocument and prÓ@°dONLNdH0÷<fl)LesÙ‡°dONLNdJ0fl<˚)    sing O÷†°dONLNdP0¸<Q)ption–double-click..°dONLNddBäN (KäWhen the action code of the °dONLNdÄB N})ÅSectionOptionsReply°dONLNdìB}NÉ)r rR`°dONLNdïBÉNï)ecor$¿°dONLNdôBïNß)d is $¿°dONLNdûBßNÀ)'goto'$¿°dONLNd§BÀNÚ)$
  4395. , use the °dONLNdÆOä[(XäGoToPublisherSection°dONLNd¬O[+)x
  4396.  function.°dONLNdÕfär&(oäerr := GoToPublisherSectio°dONLNdÁf&r2)ún(°dONLNdÈf2rn)
  4397. container)°dONLNdÛfnrt)<;ˇ@ˇ ˇˇˇˇ@
  4398. ˇ·ˇ‚7^
  4399. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  4400. (‡*2-50    )BUsing the Edition Manager4^*¿¯
  4401. .°dONLNd\lhÄ(elThe ,
  4402. Courier°dONLNd\Äh¯)GoToPublisherSection°dONLNd\¯he)x function locates the corrR`°dONLNd2\eh±)mect document by r$¿°dONLNdC\±hÎ)Lesolving the .°dONLNdPiluÃ(rlSalias in the edition, and it launches the document’s application if necessary (the °dONLNd£vlÇè*Edition ëÄ°dONLNd´vèÇÂ)#GManager sends an Open Documents event). The Edition Manager then sends °dONLNdÚÉlè|(ålthe ›`°dONLNdˆÉ|è)$publishing application a Section Scr≠`°dONLNdÉèœ)û*oll event. If the document containing the °dONLNdDêlúo(ôlrE°dONLNdEêpúù)Dequested publisher is located on the same computer as its subscriberdÄ°dONLNdâêùú·(ôù, the document °dONLNdòùl©®(¶lopens and scr/°dONLNd•ù©©B)=%olls to the location of the publisherú‡°dONLNd ùA©–)ò!. If the document containing the °dONLNdΙl∂o(≥lrE°dONLNdÏ™p∂)'equested publisher is located on a shar?°dONLNd™∂p)´ed volume (using fi:‡°dONLNd&™q∂‰)Vle sharing), the document °dONLNd@∑l√®(¿lopens and scr/°dONLNdM∑©√Ì)=Nolls to the location of the publisher only if the user has privileges to open °dONLNdõƒl–≤(Õlthe document fr0@°dONLNd™ƒ≥–Ò)Gom the Finder∫†°dONLNd∑ƒ–Ú)=..°dONLNdπ÷l‚s(fllYï°dONLNd∫÷r‚™)ou need to prg`°dONLNd«÷™‚ÿ)8
  4403. ovide the g`°dONLNd—÷ÿ‚P).GoToPublisherSectiong`°dONLNdÂ÷P‚)x$ function with the edition container™°dONLNd    ÷Ô‚Ù)ü. °dONLNd „lÔr(ÏlTï°dONLNd „qÔË)o accomplish this, use the ï°dONLNd'„ËÔ<)wGetEditionInfoï°dONLNd5„<Ôï)T function. See the prg`°dONLNdJ„ïÔÿ)Yevious section, °dONLNdZl¸“(˘l“Canceling Sections WÛ`°dONLNdo—¸#)eithin Documents,”Û`°dONLNdÄ#¸ä)R for information on the Û`°dONLNdòä¸fi)gGetEditionInfoÛ`°dONLNd¶fi¸‡)T .°dONLNdß˝l    ì(l    function.
  4404. .*5¯4/*5¯ 0l0¯
  4405. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd≤l.v*$'Renaming a Document Containing Sectionsˇˇˇˇˇˇ€r(*2
  4406. °dONLNd€5lAñ(>l If a user rw¿°dONLNdÊ5ñA†)*:enames a document that contains sections by choosing Save ≠¿°dONLNd 5†Aµ(>†As frJ‡°dONLNd%5∂AÈ) om the File °dONLNd1BlN„(KlWmenu, or if a user pastes a portion of a document that contains a section into another .°dONLNdàOl[Ω*document, use the °dONLNdöOΩ[)QAssociateSection°dONLNd™O[F)`
  4407.  function.°dONLNdµalmë(jlUse the °dONLNdΩaëmÒ)%AssociateSection°dONLNdÕaÒmv)` function to update the alias rR`°dONLNdÏavmà)Öecor$¿°dONLNdaàmß)d of a r˜ °dONLNd¯a¶m≈)egister…Ä°dONLNdˇa≈mÙ) ed section.°dONLNd xlÑ∂(Ål7err := AssociateSection (sectionH, newSectionDocument);°dONLNdCêlúÄ*The °dONLNdGêÄú‡)AssociateSection°dONLNdWê‡úc)` function internally calls the °dONLNdvêcú•)É UpdateAlias°dONLNdÅê•ú‰)B function. It is .°dONLNdíùl©Ä(¶lalso ö‡°dONLNdóùÄ©˛)possible to update the alias r«Ä°dONLNdµù˛©)~ecor;‡°dONLNdπù©E) d using the „†°dONLNd≈ùD©´)3Alias Manager (see the L °dONLNd‹ù¨©œ)hchapter °dONLNd‰™l∂q(≥l“°dONLNd™q∂ä)Alias ’°dONLNdΙä∂±)Managerg°dONLNdÚ™≤∂ƒ)(” in  ¿°dONLNd˜™≈∂")Inside Macintosh: FilesÁ†°dONLNd™"∂')] fªÄ°dONLNd™(∂û)or additional information).
  4408. €*‚¯4‹*‚¯ ›l›¯
  4409. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd-Ãl€{(◊l+Displaying Publisher and Subscriber Bordersˇˇˇˇˇˇ€r(◊2
  4410. °dONLNdZ‚lÓô(ÎlAEach publisher and subscriber within a document should have a borË°dONLNdõ‚ôÓ„(Îôder that appears °dONLNd¨Ôl˚H(¯l4when a user selects the contents of these sections. ÇÄ°dONLNd‡ÔH˚N)‹YC°dONLNd·ÔN˚„)!ou should display a publisher borw‡°dONLNdÔ„˚Ù)ïder °dONLNd¸lÑ(las thr¿°dONLNd ¸Ö¯)ee pixels wide with 50 per3¿°dONLNd&¸¯î)s$cent gray lines and a subscriber borÇ °dONLNdJ¸îæ)ú
  4411. der as thro‡°dONLNdT¸æÊ)*
  4412. ee pixels °dONLNd^    l∂(lwide with 75 per†°dONLNdn    ∑†)K8cent gray lines. Separate the contents of the section fr≥`°dONLNd¶    †–)È
  4413. om the ború`°dONLNd∞    –·)0der °dONLNd¥l"(l'itself with one pixel of white space. T´@°dONLNd€")£o cr÷°dONLNdfl"Y)eate your borl °dONLNdÏZ"ÿ);ders, you should use patternæ@°dONLNdÿ"Á)~s, nÆ°dONLNd Á"Ú)ot °dONLNd#l/(,lcolors. Depending on the user›‡°dONLNd,#Ò/–)Ö3’s monitor type, colors may not be distinguishable.°dONLNd`5lA¨(>lIn general, bor¿¿°dONLNdo5¨Aæ)@>ders for publishers and subscribers should behave like the bor'†°dONLNd≠5øAfl(>øders of .°dONLNdµBlNê(Kl'PICT'°dONLNdªBêN‡)$ graphics in a worR`°dONLNdÕB‡NÙ)Pd-pr$¿°dONLNd—BÙNI)ocessing document. Δ`°dONLNd‰BHNP)TA9¿°dONLNdÂBPN`) bor  °dONLNdÈB`N‚)der should appear when the .°dONLNd    Ol[Ÿ(Xluser clicks the content arw°dONLNd    OŸ[≈)m5ea of a publisher or a subscriber and disappear when °dONLNd    T\lh (el&the user clicks outside the content ar °dONLNd    z\hO)°ea of a section. Ï°dONLNd    ã\OhU)BY¨Ä°dONLNd    å\Uh›)ou can also make all publisher °dONLNd    ¨iluæ(rland subscriber bor« °dONLNd    æiæu≤)R5ders appear or disappear by implementing an optional °dONLNd    ÙvlÇ£(l
  4414. Show/Hide  °dONLNd    ˛v§Ç≥)8Borb@°dONLNd
  4415. v≥Ç)ders menu command. ˇD@ˇ ˇˇˇˇ@
  4416. ˇ·ˇ‚7^
  4417. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äUsing the Edition Manager
  4418. , (‡2-51
  4419. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  4420. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  4421. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  4422. 4€4—?òÄ
  4423. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  4424. ˛ˇˇˇ
  4425. ˛ˇˇˇ
  4426. ˛ˇˇˇ
  4427. ˛ˇˇˇ˜˝˛ˇ˛
  4428. ˛ˇ˛ˇˇ
  4429. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  4430. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  4431. ˛ˇ˛ˇˇ
  4432. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  4433. ˛ˇˇˇˇ
  4434. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  4435. ˛ˇˇˇˇ
  4436. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  4437. ˛ˇˇˇˇ
  4438. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\äh¢(eäFigurR¿°dONLNd\¢hª)e 2-17@°dONLNd \ªhâ)+ displays the Edition Manager Show/Hide BorK °dONLNd6\äh)œders menu command in the °dONLNdOiäu∫(rä
  4439. Edit menu.
  4440. óH®4òH®"òH]
  4441. ˇ·ˇ‚7^    °dONLNd[çäò∫*# Figure 2-17°dONLNdgçÃòö)B-Edit menu with Show/Hide Borders menu command
  4442. °dONLNdñYäeñ(bä:Depending on your application, you may choose to include r"†°dONLNd–Yóe(bóesize handles or similar °dONLNdÈfärÙ(oäcomponents in your boró`°dONLNdˇfÙr)jders. Seµ¿°dONLNdfr)"e ˇ`°dONLNd    fr•)“Object-Oriented Graphics BorVÄ°dONLNd&f¶rÊ)âders” on page ç@°dONLNd4fÊr¯)@2-56· °dONLNd8f¯r˝) fµ°dONLNd:f˛r    )or °dONLNd=säŒ(|äan example of r⁄ °dONLNdLsŒ )Desize handles.°dONLNd[Öäëf(éä2Whenever a user selects a portion of a publisher oà °dONLNdçÖfë˙)‹$r sets the insertion point within a °dONLNd±íäûê(õäpÇ °dONLNd≤íêû¥)ublisherÓ‡°dONLNd∫í≥û/)#, you should display the bor‰°dONLNd÷í/ûg)|der as 50 per    ¿°dONLNd„íhûê)9    cent grayÃÄ°dONLNdÏíèûî)'. n °dONLNdÓíîûõ)A®¿°dONLNdÔíõû) user can copy the contents °dONLNd üä´˙(®äWof a publisher or subscriber without copying the section itself by selecting the data, °dONLNdb¨ä∏v*6copying, and then pasting the data in a new location. n¿°dONLNdò¨v∏})ÏA©`°dONLNdô¨}∏)$ user can cut and paste a selection °dONLNdΩπä≈“(¬äthat contains an ¿°dONLNdŒπ”≈Ê)Ientir[†°dONLNd”πÊ≈È)e?@°dONLNd‘πÍ≈R) publisher or subscriber. °dONLNdÏπR≈)h$, but you should discourage users frÈ¿°dONLNdπ≈)ûom °dONLNdΔä“1(œä%making multiple copies of a publisher]Ä°dONLNd8Δ1“@)ß. Sef‡°dONLNd<Δ@“G)e ∞Ä°dONLNd>ΔG“),“Duplicating Publishers and Subscribers” on °dONLNdj”äfl°(‹äpage Z‡°dONLNdo”¢fl¥)2-58Æ¿°dONLNds”¥flπ) fdž°dONLNdu”∫fl#)or detailed information.°dONLNdéÂäÒÍ(ÓäWhen the user modifi§Ä°dONLNd¢ÂÍÒ')`es a publisher°dONLNd∞Â'Ò¢)=, your application should gr2Ä°dONLNdâү){ow or shrink its bor⁄‡°dONLNd‡Â¯Ò)Vder to °dONLNdÁÚä˛^(˚ä-accommodate the new dimension of the section.°dONLNdäê*Y@Ä°dONLNdêF)(ou should display only one publisher borƒ@°dONLNd>F)∂0der within a document at a time. If a cursor is °dONLNdnäÇ(ä:inserted within a publisher that is contained within a lar‚@°dONLNd®Çº)¯ger publisherÄ°dONLNdµΩˆ);, you should °dONLNd¬ä*Ù('ädisplay only the smaller7 °dONLNd⁄Ù*Y)j, internal publisher boró†°dONLNdÚY*g)eder≤@°dONLNdıg*)+. If it is absolutely necessary to display °dONLNd +ä7«(4äall section bor˚`°dONLNd/+«7≠)=3ders within a document at the same time, you can crú†°dONLNdb+Æ7)Áeate a Show/Hide °dONLNds8äDô(AäBor÷@°dONLNdv8ôDfi)ders menu item)¿°dONLNdÑ8flD‰)F. °dONLNdáJäVê(SäY@Ä°dONLNdàJêVÍ)ou do not need to prW°dONLNdúJÍV)Z@ovide support for publishers contained within other publishers. °dONLNd‹Wäcì(`äIf ≤`°dONLNdflWìc,)    !you do not, you should dim the Cr°dONLNdW-c)ö4eate Publisher menu command (to indicate that it is °dONLNd4däp@(mä*not selectable) when a user attempts to cr÷¿°dONLNd^d@p)∂-eate a publisher within an existing publisher»†°dONLNdãdp)ƒ.
  4443. ßàAòÄ:õ–HH\*4ˇˇˇˇˇˇõ–´/∂]
  4444. ˝ˇ¸fi
  4445. ˝ˇ¸fi
  4446. ˝ˇ¸fi
  4447. ˝ˇ¸fi ¯?3ü¸fi ˘ˇ?ü¸fi ˘¯3¸fi ˘Û3ü¸fi ¯s3ü¸fi ˘Û3ü¸fi ˘Û3ü¸fi ˘Û3ü¸fi ¯83œ¸fi
  4448. ˝ˇ¸fi
  4449. ˝ˇ¸fi
  4450. ˝ˇ¸fi
  4451. ˝ˇ¸fi
  4452. ˝ˇ¸fi
  4453. ÔˇÏ
  4454. ÔÏ
  4455. ÔÏ
  4456. ÔÏÄĘ1¯ÏÄĘ    HÏü蘠   HÏ˛ôį0Ï˛ôį@`Ï˛ôį¿Ï˛ôį    IÄÏ˛ôį    IÄÏèè˜1¯Ï
  4457. ÔÏ
  4458. ÔÏ
  4459. ÔÏ
  4460. ÔÏ
  4461. ÔÏ
  4462. ÔÏ
  4463. ÔÏ
  4464. ÔÏ
  4465. ÔÏ
  4466. ÔÏ
  4467. ÔÏ
  4468. ÔÏ
  4469. Ô™∏Ï
  4470. ÔÏ
  4471. ÔÏ
  4472. ÔÏ
  4473. ÔÏ
  4474. ÔÏ
  4475. ÔÏ
  4476. ÔÏ
  4477. ÔÏ
  4478. ÔÏ
  4479. ÔÏ ˆ1òÏÄ ˆ    IòÏûˆ    IòÏåˆÒòÏåˆ@ÏåˆÒòÏ删   IòÏô删   IòÏ܈1òÏ
  4480. ÔÏ
  4481. ÔÏ
  4482. ÔÏ
  4483. ÔÏ
  4484. ÔÏ
  4485. ÔÏ
  4486. ÔÏÙ0ÏÄı    IàÏį    IÄÏôôįÒÄÏôôįAÄÏôôįÒÄÏôôį    IÄÏ˛ôį    IàÏį0Ï˛ÄıÏ˛ÄıÏ˝ÙÏ
  4487. ÔÏ
  4488. ÔÏ
  4489. ÔÏ
  4490. ÔÏ˜1òÏĘ    IòÏè<x¯    IòÏëôïÒòÏúïAòÏ鸯ÒòÏ`    IòÏ샯    IêÏé x¯1‡Ï
  4491. ÔÏ
  4492. ÔÏ
  4493. ÔÏ
  4494. ÔÏ
  4495. ÔÏ
  4496. ÔÏ    0Òò˚0Ï    0ôò˚    IòÏ    1·«Åôò˚    IòÏ˛3#ôò˚ÒòÏ˛3˘ò˚A¯Ï    ?3Ûôò˚ÒòÏ    03ôò˚    IòÏ    13#ôò˚    IòÏ    1·¡Åôò˚1òÏ
  4497. ÔÏ
  4498. ÔÏ
  4499. ÔÏ
  4500. ÔÏ
  4501. ÔÏ
  4502. ÔÏ
  4503. ÔÏ
  4504. ÔÏ
  4505. ÔÏ
  4506. ÔÏ
  4507. ÔÏ
  4508. ÔÏ
  4509. Ô™∏Ï
  4510. ÔÏ
  4511. ÔÏ
  4512. ÔÏ
  4513. ÔÏ
  4514. ÔÏ
  4515. ÔÏ
  4516. ÔÏ
  4517. ÔÏ
  4518. ÔÏ
  4519. ÔÏ˛0Ä0¸ÏÄ0Ä0¸Ï<<xôüé>6˛ÏfF1ò˝ô338˛Ïf>1òôôú330˛Ï~f1¯ôôé3?0˛Ï`f1Äôôá300˛Ïòbf1àôôì310ÿÏ<>üé30ÿÏ
  4520. ÔÏ
  4521. ÔÏ
  4522. ÔÏ
  4523. ÔÏ
  4524. ÔÏ
  4525. ÔÏ
  4526. ÔÏ 00‡˙Ï0˛0Ä˙Ï 3>8€>áÄ˚Ï 332d„33å¿˚Ï 338`√33å¿˚Ï 33`√3?å¿˚Ï 33`√30å¿˚Ï33&d√31åÃøÏ>8√>áåøÏ
  4527. ÔÏ
  4528. ÔÏ
  4529. ÔÏ
  4530. ÔÏ
  4531. ÔÏ
  4532. ÔÏ
  4533. ÔÏ00Ä0˝Ï0˛0 ¿¸Ï3>8€>6 œè1„·¿Ï332d„338 ÃΔ˛3 Ï338`√330 ÃΔ˛3ÄÏ33`√3?0 ÃΔ331¿Ï33`√300 ÃΔ330‡Ï33&d√310 ÃΔ332ffÏ>8√>0èÉ1„1ΔfÏˆ ˚Ïˆ ˚Ï
  4534. ÔÏ
  4535. ÔÏ
  4536. ÔÏ
  4537. ÔÏ
  4538. ÔÏ0˛> ˘Ï0˛3 ˘Ï>3036|xŸ¿¸Ï˛30338ÃÄ ¸Ï˛30>30ÃÃ√ĸÏ˛30330ø¡¿¸Ï˛30330ÿ¿‡¸Ï˛3 330ì`¸Ï3?¿>0|x¡¿¸Ï
  4539. ÔÏ
  4540. ÔÏ
  4541. ÔÏ
  4542. ÔÏ
  4543. ÔÏ
  4544. ÔÏ
  4545. ÔÏ
  4546. ÔÏ
  4547. ÔÏ
  4548. ÔÏ
  4549. ÔÏ
  4550. ÔÏ
  4551. Ô™∏Ï
  4552. ÔÏ
  4553. ÔÏ
  4554. ÔÏ
  4555. ÔÏ
  4556. ÔÏ
  4557. ÔÏ
  4558. ÔÏ
  4559. ÔÏ
  4560. ÔÏ
  4561. ÔÏ0˛30˛ ˝Ï0˛100˛ ˝Ï>3003>>6|˝Ï˛300˝3#8Ã˝Ï˛300˝30Ã˝Ï˛300¸30Ã˝Ï˛300¸30Ã˝Ï˛3 1¸30Ã˝Ï3?¿3>>0|˝Ï˘0¯Ï˘0¯Ï
  4562. ÔÏ
  4563. ÔÏ
  4564. Ôˇ¯Ï
  4565. Ôˇ¯Ï««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««fiÎ-    >xx!¯‚˝8¸¯˚! !| Ù+ DÑ`¸D0Ä˙!! !B Ù;9 BÄ Dπ¿ÑÄÛòqb DLq` ,8àÇ!0Ò¿B8π„ãúòqb 8qf,√ã;9 BÄ "D¬ Ådâí DD!ê 2DàÑ! |D¬$L"dâí Dâô3$Lë;9<B|x¯  ¬"DÇ |ÒDâ *Ñ!"DU? BDÇ$H Dâ @â"#»ë;9 B  "DɇÅD˘ *Ñ!"DU!‡BDÇ'»D˘ @â"$Hë;9 B @"DÇ  ÅDÅ !"D"!BDÇ$DÅ @â"$Hë;9 DÑ @"LÇ @ ÅDâ`!!"D"! BDÇ$H"Dâ`Dâ"$Hë;9>xx @4Å¿¸ ¯ÒDq†"8"!Ò¿|8Å„àDq†8q"#»è˜“˜"“˜“«««««««««««««««««««««««««««««
  4566. ¯ ÇŒ
  4567. Ä˛ΔŒ ÄÛa≈Ä™8∞·„ãÄ‘ Å"&@íD…$L” Ò"$@Ç<àÚ$H” Å"$@ÇDâ'»” Å"$@ÇDâ$” Å"$@ÇDâ$H” ¯Ò!ƒ@Ç<àÒ„à”˜ “¯ “¯¿“««««)ƒ  ÇÄ˝0Ä@¸&ƒ˛ Δ˛˝˙Ô.*§qa„Ä™8qã8q`8qsèá8√ã‚ÃYàñ0·«q`Ú.*§â""$@íDàåàDâêâÑHëàëDLÅ2fHô"âêÚ.*îà™ "$@Ç<ÄààDÅâ»ëàDHÅ"DHë‚âÚ.*"'¿ÇDÄààDq˘HëàDHÅ"DHë"âÚ.*åÄD"$ÇDÄààD    ÅHëàDHÅ"DHë"âÚ.
  4568. åàD""$@ÇD˛àDââHëàëDHÅ    "DIë"âÚ.*ÑpD!„ÄÇ<pàÜ8q qœá CàÄ‚"DFë··àqÚ Ò¸fl Ò¸fl«««««Ä˝Ä’ĽĒ(xá‚Ãxâ√ãÄa¿◊(DààÅ2DàÑLí ◊DDààÅ"DàÑH÷DDàèÅ"Dàá»÷˛Dàà"DàÑ÷ÇDààÅ    "DòÑH ◊Çxá‚"xhcà¿◊@ĸ@˛◊@ĸ@˛ ‘ˇ2 @ˇ ˇˇˇˇ@
  4569. ˇ·ˇ‚7^
  4570. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  4571. (‡*2-52    )BUsing the Edition Manager4^*¿¯
  4572. °dONLNd\lhÑ(elFigurR¿°dONLNd\Ñhù)e 2-18@°dONLNd \ùh“)  shows the r*Ä°dONLNd\”h )6ecommended bor` °dONLNd%\ hÈ)M,der behavior for publishers. The top window °dONLNdQiluÒ(rlshows a publisher with its bor¡ °dONLNdoiÒuŸ)Ö0ders displayed. The middle window shows how the °dONLNdüvlÇz(lborB °dONLNd¢v{ÇÓ)Sders look when a user selects some of the contents of a section. The bottom window °dONLNdıÉlè¿(ålshows how the borU@°dONLNdÉ¿èÚ)TEders look when a user selects data within a document that includes a °dONLNdKêlú∫(ôlpublisher section.
  4573. æ*œ¯4ø*œ¯"ø*]
  4574. ˇ·ˇ‚7^    °dONLNd_¥løú*# Figure 2-18°dONLNdk¥ÆøÙ)BPublisher borders
  4575. Œjv¯òÄ,LTHH\*ˇˇˇˇLT—*~
  4576. ˘·ˇˇ
  4577. ˘·ˇ
  4578. ˘·ˇ
  4579. ˘·ˇ˘Ô˛¸ˇ¸Ò˝ˇ˛ˇÔÿˇ ˘˚ ˛ò˛˙Ç ˇ$˘Ë¸ˇ¸ ˛Ä˛˝ˇ˛Ç/ÿˇ ˘˚áçü6pò„„3˙Ç ˇ$˘Ë¸ˇ ¸ ÃŒ338»ôì3#˛3˝ˇ˛Ç/ÿˇ˘˚ ÃÃ330‡ô√3˛3˙Ç ˇ$˘Ë¸ˇ
  4580. ¸ ÃÃ3?0pò„˛3?3˝ˇ˛˛/ÿˇ ˘˚     ÃÃ3008òs˛303˙Ä ˇ#˘Ë¸ˇ    ¸ ÃÃ310òô˝313˝ˇ˛Ä/ÿˇ ˘˚áå0pò„„˙Ä ˇ˘Ô˛¸ˇ¸¯˛˝ˇ˛ˇÔÿˇ˘#ˆˇ˘Ìˆˇ
  4581. ˘·ˇ
  4582. ˘·ˇ¯ˇ ˘„ˇ ˘„ˇ ˘„ˇ ˘„$ˇ ˘„Bˇ ˘„Åˇ ˘„    òˇ ˘„ √ÿˇ ˘„Bˇ ˘„Bˇ ˘„Bˇ ˘„~ˇ ˘„ˇ ˘„ˇ ˘„ˇ¯ˇ ˘„ˇ¯ˇ ˘„ 8ˇ ˘„ 8ˇ ˘„ 8ˇ ˘„ 8ˇ ˘„ 8ˇ ˘    xÒ„p˛˛0 ˜ 8ˇ˘    Õõ30˛¸ ˜ 8ˇ#˘¡É«1««èú|˛q„ûqÛÄ˙ 8ˇ#˘yÅ„mõ3mÉf€6p€1∂ÃŸΔ¿˙ 8ˇ#˘Ä3õ3ÁÊ€>`€1≥ßÉÄ˙ 8ˇ#˘Ä3õ3Éf€0`€1∂ßĿ˙ 8ˇ#˘Õõ3mõ3mÉf€6`€1∂ßܿ˙ 8ˇ#˘
  4583. “[I´m4õm´Le´6 qõl€)*˙™ 8ˇ˘ÂU 8ˇ˘
  4584. ™ˇ¯ˇ˘Êàòˇ˘Ê
  4585. "8ˇ˘Êàòˇ%˘‡ ¸Ç$qƒ @
  4586. "8ˇ#˘ê˙Ç$"ä$ @àòˇ'˘!âëf1¡åÁŒcá0w Ç8ÀpgqÉådÄ
  4587. "8ˇ'˘!äJ)JRî•$îÇH$§Ń%, îÇJBBïàòˇ'˘!ã (yÇîΩÙÇH$ºÄ$%( îÇK¬NÜ
  4588. "8ˇ'˘!í)@BRî°$ÑÇH$†"ä$%( îÇJRïàòˇ'˘!·Ñ&3Ååîò¬cÅ0òqƒ8»dÅIÉédÄ
  4589. "8ˇ˘ ¯àòˇ˘ ¯
  4590. "8ˇ˘Êàòˇ˘Ê
  4591. "8ˇ˘Êàòˇ#˘ÑÄê ˙˛
  4592. "8ˇ!˘ĸ ˙˛àòˇ'˘!g„c7π∏vI‹8»ò;å≥8ÀK≥å∞
  4593. "8ˇ'˘!íîÑêîѧêIJ$%$Rƒ•,    JJR¿àòˇ'˘!íóÑìîѧêIIà$Â<^Ñ•Ë    JJ^Ä
  4594. "8ˇ'˘!íîîîѧêIHH%" PÑ•    JJPÄàòˇ'˘!bììîɧàI;Ñ$‚
  4595. LÉ8»    :KåÄ
  4596. "8ˇ˘ ˙àòˇ˘ ˙
  4597. "8ˇ˘Êàòˇ˘Ê
  4598. "8ˇ˘Êàòˇ&˘ÑÄÄ  Ä˛ ˝L
  4599. "8ˇ%˘˝Ä  ˛˛ ˝Dàòˇ'˘!geª7Ã≥á2√∏¿ÊEò«`Çe§ÀYåÂ"
  4600. "8ˇ'˘!íñ$îÑíƒK%!)(•(êTñ(%,bRE%àòˇ'˘#íÙ$îúíÉJ%·/(°ÊêTî0!(C–E"
  4601. "8ˇ'˘!íÑ$î§íÄÇJ%(•ê(î(%(BE%àòˇ'˘!bd$îúLá2§¿ÊòŒ`(d$»Aå$‚
  4602. "8ˇ˘Ê%àòˇ˘Ê¬
  4603. "8ˇ˘Êàòˇ˘Ê
  4604. "8ˇ˘Êàòˇ%˘˝˝@Äé8Ä ÄÑ
  4605. "8ˇ%˘˝˝@ÄQDÄ ˛àòˇ'˘#g9ÉñdLÁ3±é`Ê„@É9∏7ú¿
  4606. "8ˇ'˘§BX˛í    
  4607. HRêIîÉê8ѧ§†• àòˇ'˘#t§BPÚûí    :I“IóÄPÑ$§ò•‡
  4608. "8ˇ'˘!î§BPÅí    JJRÄIîQDѧ§Ñ•àòˇ'˘#tú    Éêa ë:IŒ`&ìé8É$∏∏ú¿
  4609. "8ˇ˘˛˙¯ ¸àòˇ˘˛˙ ¯ ¸
  4610. "8ˇ˘Êàòˇ˘Ê
  4611. "8ˇ˘Êàòˇ˘˚Ì
  4612. "8ˇ˘˚Ìàòˇ˘ ëí∞c;9.eÄÔ
  4613. "8ˇ˘
  4614. íR¿î§•$ñÓˇ¯ˇ˘
  4615. íRÄѧ•$ÙÓˇ˘
  4616. íRÄ$ÑÓˇ˘ qéÄc$∏‚dÔ~ˇ˘˝ ÏBˇ˘`˝ ÏBˇ˘ÊBˇ˘
  4617. ™ √ÿˇ˘ÂU    òˇ˘
  4618. ™Åˇ ˘„Bˇ ˘„$ˇ ˘„ˇ ˘„ˇ ˘„ˇ
  4619. ˘·ˇ¯ˇ˘?ˇ‰ËDˇ˘ 01Èˇ˘`0$ËD    ¸ˇ˘†01È    ˇ˘>0$ËD|âÿˇ˘01È@IXˇ˘0$ËD@)Xˇ˘01È@)Xˇ˘0$ËD@I¸XU˘>01È|à@X
  4620. ™˘†0$ËD@XU˘`01È@Xˇ˘ 0$ËDÿˇ˘?ˇÒÈˇ
  4621. ˘·ˇ¯ˇ
  4622. ˘·ˇ¯ˇ◊ c◊◊t◊î◊ s’
  4623. ˘·ˇ‡ˇ
  4624. ˘·0ˇ
  4625. ˘·0ˇ
  4626. ˘·0ˇ˘˚ˇø˛ˇ¯Ô?˛ˇ˝ˇfl∞ˇ"˘Ä˙ 0000Ä¿˝@0ˇ'˘˙ø˛ˇ¯˛ 00Ä¿?˛ˇ˝_∞ e%˘Ä˝<|x‡>1Û„1Û„«á¿˝@0ñ$˘˙ø˛ˇ¯ ôôåff1ê˚31åÿ?˛ˇ˝_∞Ù"˘Ä˝ ôåff1¿˚31åÿ˝@0Ñ$˘˙ø˛ˇ¯ ôå~f0‡˚31èÿ?˛ˇ˝¸_∞ d"˘Ä˝ ôå`f0p˚31å ¿˝@0ˇ$˘˙ø˛ˇ¯ ôôåbf10˚31åL¿?˛ˇ˝_∞ˇ%˘Ä˝Ü<f‡31Û31Û0«á¿˝@0ˇ˘˚ˇø˛ˇ¯˜00˝?˛ˇ˝ˇfl∞ˇ˘Ò00ˆ0ˇ˘Ò‡‡ˆ0ˇ
  4627. ˘·0ˇ
  4628. ˘·ˇ
  4629. à ˘„0 ˘„0 ˘„00 ˘„H0 ˘„Ñ0ˇ ˘„0ˇ ˘„0ˇ ˘„á∞ˇ ˘„Ñ0ˇ ˘„Ñ0  ˘„Ñ0  ˘„¸0 Ê ˘„0) ˘„0/ ˘„ˇ( ˘„ˇÊ ˘„pˇ ˘„pˇ ˘„pˇ ˘„pˇ ˘„pˇ˘    <x¿˝¿¿ ˜pˇ˘    3fÿ ˝¿¿˝˜pˇ#˘0`¿¿q«åq¿q„¡Á?úxÁú|‡˙pˇ#˘`x¿€fÀ`Ÿ∂¿Õú6Ãm≥6q∞˙pˇ#˘` ¿¡ÊÃ˘¿y∂¿œò6ÃlÛ6`‡˙pˇ#˘` ¿√fÿ`Ÿ∂¿Ã6Ãm≥6`0˙pˇ#˘3fÿ€fÀ`Ÿ∂¿Õò6Ãm≥6a∞˙pˇ#˘¥ñ“j€M&€j”jÕ≤úfΔ[6 J˙™òpˇ˘ÂUXpˇ˘™üˇˇ˘ÊQ0U˘Áˇ¸îDp
  4630. ™˘Áˇ˝Q0U%˘Gˇ˜¸ˇ˛ˇflˆˇ¯„顡˜ˇˇoˇ˛ˇ¸îDpˇ#˘[˙ˇ˛ˇflˆˇ˜]vˇˇ˜ˇˇoˇ˛ˇ˝Q0ˇ'˘!]õ¶sèúΔ9Ãg3‚9˜fl~ÒÕ#Ê>#üÊfl¸îDpˇ'˘!]mu≠kZ÷∂⁄flmˆ÷¯fl鈥˜⁄flmooZø˝Q0ˇ'˘!]u·ü{Z–æ¬flmˆ–ˇ_ˆˆµ˜⁄flml^¸îDpˇ'˘#[~ıØÔkZ◊∂fiflmˆ◊˜]vˆµ˜⁄flmkZø˝Q0ˇ'˘#Gûˆsú⁄Ÿœg≥˙Ÿ¯„éÒÕ˚Êfl≠üffl¸îDp"˘Òˇ˜¯ˇ˝Q0à˘Òˇ˜¯ˇ¸îDp"˘Áˇ˝Q0à˘Áˇ¸îDp"˘Áˇ˝Q0à#˘ûflˇˇ˚ˇˇ€ˇˇ˝˜ˇˇ˚˙ˇˇˇ¸îDp"!˘~fl¸ˇ˚ˇˇ˝˜ˇˇ˚˙ˇˇˇ˝Q0à'˘#f<G>'2>—ë‚màÒÕŸÒ¯”1Õ<m”ˇ¸îDp"'˘#[~⁄fi€⁄fi÷€Ì≠}ˆˆ∂˚k{N÷¥˝≠mkOˇ˝Q0à'˘#[~⁄€fi÷€Ì≠ùˆΔ∞˚h{^÷Ö˝≠mh_ˇ¸îDp"'˘#[~⁄˛⁄⁄fi÷€Ì≠̈∑w˚k˚^÷Ω˝≠mkflˇ˝Q0à'˘#g[>€fl›Ì±ˆ«y˝l¯fl1Õ˝±mflˇ¸îDp"˘Òˇ˚ˇ˜˙ˇ˝Q0à˘Òˇ˚ˇ˜˙ˇ¸îDpˇ˘Áˇ˝Q0ˇ˘Áˇ¸îDpˇ˘Áˇ˝Q0ˇ&˘ûˇˇ˚ˇflˇˇüˇ∑ˇ˜ˇflˇ˛˛ˇ˜˝ˇϸîDpˇ%˘~˝ˇflˇˇˇ∑ˇ˜˛ˇ˛˛ˇ˜˝ˇÓ˝Q0ˇ'˘!f<fë29å”3OœΔnôŒ<gflfñ˘Õ)úΔ¥îDpˇ'˘![~⁄v⁄fi€Nˇm?∂∑µµ÷µ˛€Í⁄uˆ¥ÁknµQ0ˇ'˘#[~¬ˆ⁄ÿ€_?m∂á¥5◊Ü~€Í⁄Û˜µÔ Ó¥îDpˇ'˘![~fiˆ⁄÷€_flm∂øµ˚÷øæ€ı⁄ıˆµÔ{nµQ0ˇ'˘!gfˆ⁄ÿÏfi?s÷œΔ{ŸÃgıʈ˘ÕÔúˆƒîDpˇ˘ÁˇıQ0ˇ˘ÁˇÃîDpˇ˘ˡÄQ0ˇ˘ˡÄîDpˇ˘ˡÄQ0ˇ%˘˛˚¸ˇø˛ˇÔ˛flˇqfl˜fl˚ˇfiˇÄîDpˇ%˘˛˚¸ˇø˛ˇÔ˛fl˛ÎÆfl˜˛ˇ˛ˇÄQ0ˇ'˘#f8ÒüfÏΔ>3úgΔ|G>˚Ôfl1ëÚ8òœÄîDpˇ'˘!z÷˚oi€[[}ΩmÎ[Ìæ⁄flÒfi÷÷˙◊÷∑ÄQ0ˇ'˘#b÷˚ok√X[}±mãCÌæ⁄βfiˆ÷˙Ÿ÷áÄîDpˇ'˘!Z÷˚okflª€}≠mk_Ìæ⁄˛ÎÆfi÷÷˙fi÷øÄQ0ˇ'˘#bÿ˝üÁº€æ1mågˆ[?qfl6—˙—ÿœÄîDpˇ˘˛ˇ˙ˇ˘ˇ˜˝ˇÄQ0ˇ˘˛ˇ˚ˇ¸¯ˇ˜˝ˇÄîDpˇ˘ÊQ0ˇ˘ÂîDpˇ˘ÊQ0ˇ˘˚ÏîDpˇ˘˚ÌQ0ˇ˘ $d¨ŒŒKô`ÓîDpˇ˘ $î∞%))I%ÄÔ_ˇˇ˘
  4631. $î†!))I=Ìê0ˇ˘
  4632. $î†%))I!ÓP0ˇ˘ c†….8ôÓê¸0ˇ˘˝ÏPÑ0ˇ˘˝ÎêÑ0ˇ˘ÊPÑ0ˇ˘™óá∞ˇ˘ÂUR0ˇ˘™ë0ˇ ˘„Ñ0ˇ ˘„H0ˇ ˘„00ˇ ˘„0ˇ ˘„0ˇ
  4633. ˘·ˇˇ˘ˇ˘È0ˇ˘ ÈDH0ˇ˘     È ¯0ˇ˘( ÈDH
  4634. 0ˇ˘Oå    È˘∞ˇ˘Äå ÈDHÄí∞ˇ˘å    ÈÄR∞ˇ˘å ÈDHÄR∞ˇ˘Äå    ÈÄì¯∞U˘Oå ÈDH˘Ä∞
  4635. ™˘(     È
  4636. Ä∞U˘ ÈDH Ä∞ˇ˘     Èˇ∞ˇ˘ˇ¸ÈDH0ˇ
  4637. ˘·ˇ ˇ
  4638. ˘·ˇ ˇ◊Á◊ z◊ b◊ Z◊„
  4639. ˘·ˇ‡ˇ
  4640. ˘·0ˇ
  4641. ˘·0ˇ
  4642. ˘·0ˇ'˘˚ˇø˛ˇÄ0 ¿Ã¿`0˛ˇ˝ˇfl∞ˇ#˘Ä˚0 ¿¿¿`0˝@0 ˇ'˘˙ø˛ˇüé>6å|¯Ã|¯Ò·˛ˇ˝_∞ ˇ!˘Ä˝˝ô338 ˚Ãc30˝@0Ê$˘˙ø˛ˇ˛ôú330 ˚Ãc30˛ˇ˝_∞ Z"˘Ä˝˛ôé3?0 ˚ÃcÛ0˝@0 B$˘˙ø˛ˇ˛ôá300 ˚Ãc0˛ˇ˝¸_∞ ^"˘Ä˝˛ôì310 ˚Ãc0˝@0Ê'˘˙ø˛ˇüé30 Ã|ÃÃ|Ã1·˛ˇ˝_∞ˇ˘Ä˝¯ ˘@0ˇ ˘˚ˇø˛ˇ¯åå˝˛ˇ˝ˇfl∞ˇ˘xxˆ0ˇ
  4643. ˘·0ˇ
  4644. ˘·0ˇ
  4645. ˘·ˇˇ ˘„0    L ˘„0; ˘„00x ˘„H0{ ˘„Ñ0| ˘„0ˇ ˘„0ˇ ˘„á∞ˇ ˘„Ñ0ˇ ˘„Ñ0ˇ ˘„Ñ0˜ ˘„¸0˜ ˘„0Δ ˘„0µ ˘„ˇ¥ ˘„ˇµ ˘„pΔ ˘„pˇ ˘„pˇ˘Áˇ˛pˇ˘Áˇ˛pˇ ˘    a√á?ˇ˘„˝ˇ??ˇˇÛˇ¸¯ˇ˛pˇ˘    Lô3?ˇ˘Û˝ˇ??˝ˇ¸¯ˇ˛pˇ$˘Oü??é8sé?é>‡¿cácÉ˚ˇ˛pˇ$˘aüá?$ô3$ü&I?2c…3íL…éO˚ˇ˛pˇ$˘|üÛ?>3?ÜI?0g…3ì …ü˚ˇ˛pˇ$˘|üÛ?<ô3?ü&I?3Á…3íL…üœ˚ˇ˛pˇ$˘Lô3?$ô3$ü&I?2g…3íL…ûO˚ˇ˛pˇ#˘˚i-ï$≤Ÿ$ï,Êï2Mcô9§…5µ˙UXpˇ˘*Ê™∏pˇ˘’ÊU_ˇˇ˘Áˇ˛±0ˇ˘Áˇ˛TDpU˘Áˇ˛±0
  4646. ™%˘Gˇ˜¸ˇ˛ˇflˆˇ¯„顡˜ˇˇoˇ˛ˇ˛TDpU#˘[˙ˇ˛ˇflˆˇ˜]vˇˇ˜ˇˇoˇ˛ˇ˛±0ˇ'˘!]õ¶sèúΔ9Ãg3‚9˜fl~ÒÕ#Ê>#üÊfl˛TDpˇ'˘!]mu≠kZ÷∂⁄flmˆ÷¯fl鈥˜⁄flmooZø˛±0ˇ'˘!]u·ü{Z–æ¬flmˆ–ˇ_ˆˆµ˜⁄flml^˛TDpˇ'˘![~ıØÔkZ◊∂fiflmˆ◊˜]vˆµ˜⁄flmkZø˛±0ˇ'˘#Gûˆsú⁄Ÿœg≥˙Ÿ¯„éÒÕ˚Êfl≠üffl˛TDpˇ˘Òˇ˜¯ˇ˛±0à˘Òˇ˜¯ˇ˛TDp"˘Áˇ˛±0à˘Áˇ˛TDp"˘Áˇ˛±0à#˘ûflˇˇ˚ˇˇ€ˇˇ˝˜ˇˇ˚˙ˇˇˇ˛TDp"!˘~fl¸ˇ˚ˇˇ˝˜ˇˇ˚˙ˇˇˇ˛±0à'˘#f<G>'2>—ë‚màÒÕŸÒ¯”1Õ<m”ˇ˛TDp"'˘#[~⁄fi€⁄fi÷€Ì≠}ˆˆ∂˚k{N÷¥˝≠mkOˇ˛±0à'˘#[~⁄€fi÷€Ì≠ùˆΔ∞˚h{^÷Ö˝≠mh_ˇ˛TDp"'˘#[~⁄˛⁄⁄fi÷€Ì≠̈∑w˚k˚^÷Ω˝≠mkflˇ˛±0à'˘#g[>€fl›Ì±ˆ«y˝l¯fl1Õ˝±mflˇ˛TDp"˘Òˇ˚ˇ˜˙ˇ˛±0à˘Òˇ˚ˇ˜˙ˇ˛TDp"˘Áˇ˛±0ˇ˘Áˇ˛TDpˇ˘Áˇ˛±0ˇ&˘ûˇˇ˚ˇflˇˇüˇ∑ˇ˜ˇflˇ˛˛ˇ˜˝ˇÏ˛TDpˇ%˘~˝ˇflˇˇˇ∑ˇ˜˛ˇ˛˛ˇ˜˝ˇÓ˛±0ˇ'˘!f<fë29å”3OœΔnôŒ<gflfñ˘Õ)úΔ∂TDpˇ'˘![~⁄v⁄fi€Nˇm?∂∑µµ÷µ˛€Í⁄uˆ¥Ákn∂±0ˇ'˘#[~¬ˆ⁄ÿ€_?m∂á¥5◊Ü~€Í⁄Û˜µÔ Ó∂TDpˇ'˘![~fiˆ⁄÷€_flm∂øµ˚÷øæ€ı⁄ıˆµÔ{n∂±0ˇ'˘!gfˆ⁄ÿÏfi?s÷œΔ{ŸÃgıʈ˘ÕÔúˆΔTDpˇ˘Áˇˆ±0ˇ˘ÁˇŒTDpˇ˘Áˇ˛±0ˇ˘Áˇ˛TDpˇ˘Áˇ˛±0ˇ%˘˛˚¸ˇø˛ˇÔ˛flˇqfl˜fl˚ˇfiˇˇ˛TDpˇ%˘˛˚¸ˇø˛ˇÔ˛fl˛ÎÆfl˜˛ˇ˛ˇˇ˛±0ˇ'˘#f8ÒüfÏΔ>3úgΔ|G>˚Ôfl1ëÚ8òœˇ˛TDpˇ'˘!z÷˚oi€[[}ΩmÎ[Ìæ⁄flÒfi÷÷˙◊÷∑ˇ˛±0ˇ'˘#b÷˚ok√X[}±mãCÌæ⁄βfiˆ÷˙Ÿ÷ᡲTDpˇ'˘!Z÷˚okflª€}≠mk_Ìæ⁄˛ÎÆfi÷÷˙fi÷øˇ˛±0ˇ'˘#bÿ˝üÁº€æ1mågˆ[?qfl6—˙—ÿœˇ˛TDpˇ˘˛ˇ˙ˇ˘ˇ˜¸ˇ˛±0ˇ˘˛ˇ˚ˇ¸¯ˇ˜¸ˇ˛TDpˇ˘˙ˇ˛Ó±0ˇ˘˙ˇ˛ÓTDpˇ˘˙ˇ˛Ó±0ˇ˘¸ˇ˛ˇ˛ÓTDpˇ˘¸ˇ˛ˇ˛Ó±0ˇ˘ [õSÁ11¥fûÓTDpˇ˘ [kO⁄÷÷∂⁄~Óøˇˇ˘ [k_fi÷÷∂¬˛ÓP0ˇ˘ [k_⁄÷÷∂fi˛Ó∞0ˇ˘ cú_Á6—«f˙ÓP¸0ˇ˘{˝ˇ˜ˇˇ˛Ó∞Ñ0ˇ˘g˝ˇ˜ˇˇ˛ÓPÑ0ˇ˘Â∞Ñ0ˇ˘™Wá∞ˇ˘ÂU20ˇ˘™—0ˇ ˘„Ñ0ˇ ˘„H0ˇ ˘„00ˇ ˘„0ˇ ˘„0ˇ
  4647. ˘·ˇˇ˘ˇ˘È0ˇ˘ ÈDH0ˇ˘     È ¯0ˇ˘( ÈDH
  4648. 0ˇ˘Oå    È˘∞ˇ˘Äå ÈDHÄí∞ˇ˘å    ÈÄR∞ˇ˘å ÈDHÄR∞ˇ˘Äå    ÈÄì¯∞
  4649. ™˘Oå ÈDH˘Ä∞U˘(     È
  4650. Ä∞
  4651. ™˘ ÈDH Ä∞ˇ˘     Èˇ∞ˇ˘ˇ¸ÈDH0ˇ
  4652. ˘·ˇ ˇ
  4653. ˘·ˇ ˇ◊Á◊ z◊ b◊ Z◊„◊ˇ◊ˇ◊ˇ◊ˇ◊ˇ◊ ˇ◊ ˇ◊Ê◊ Z◊ B◊ ^◊Ê◊ˇ◊ˇ◊ˇ◊ˇ◊ˇ◊ˇ◊ˇ◊    L◊;◊x◊{◊|◊ˇ◊ˇ◊ˇ◊ˇ◊ˇ◊˜◊˜◊Δ◊µ◊¥◊µ◊Δ◊ˇ◊ˇ’’’’’’’’’’’’’◊U◊
  4654. ™◊U’’’’’◊ˇ◊à◊"◊à◊"◊à◊"◊à◊"◊à◊"◊à◊"◊à$    ˘‡‡É¿ƒ˝8 ˆ"#ÅÑ ¸Daˆˇ(!ÅÑ  <âsÄÑ!    ¬0‚√ãÉ√ãû8π¿˘ˇ%!ÅÉ¿DâÑ@     "$L$L"D¬ ˜$ Ò    Ò„‡Ñ ÑDâ@¯!Ò"$H$H"DLj%!ÅÑ Dâ¿!"‚'»$H"|Å¿˜%!ÅÑ Dâ !"$$H"@Ä ˜%!ÅÑ Dô@@!2"$H$H"DÇ ˜%!˘‡‡É¿<iĸ ”¬‚#à√à8Å¿˜˜‡˜D‡˜8‡’’’ ¯‡
  4655. GăÄ<ć
  4656. D@ƒÄBć
  4657. Ñ#ħq¿@8pá‡
  4658. Ñ$@§àÄ@Dààч
  4659. Ñ$@îàÄ<@xàч
  4660. Ñ$@îàÄ@àèч
  4661. Ñ$@åàÄ@àà‡DD@åàÄBD˛à‡
  4662. GÉÄÑp`<8xᇠ¯‡’’’’’’’’’’’’’’’’’’’’’’
  4663. ¯ Ç‹
  4664. Ä˛Δ‹ ÄÛa≈Ä™8∞·„ãÄ‚ Å"&@íD…$L· Ò"$@Ç<àÚ$H· Å"$@ÇDâ'»· Å"$@ÇDâ$· Å"$@ÇDâ$H· ¯Ò!ƒ@Ç<àÒ„à·˜ ‡¯ ‡¯¿‡’’’’)ƒ  ÇÄ˝0Ä@¸˛&ƒ˛ Δ˛˝˙˝-+§qa„Ä™8qã8q`8qsèá8√ã‚ÃYàñ0·«q`-+§â""$@íDàåàDâêâÑHëàëDLÅ2fHô"âê-+îà™ "$@Ç<ÄààDÅâ»ëàDHÅ"DHë‚â-+"'¿ÇDÄààDq˘HëàDHÅ"DHë"â-+åÄD"$ÇDÄààD    ÅHëàDHÅ"DHë"â-
  4665. åàD""$@ÇD˛àDââHëàëDHÅ    "DIë"â-+ÑpD!„ÄÇ<pàÜ8q qœá CàÄ‚"DFë··àq Ò¸Ì Ò¸Ì’’’’’Ä˝Ä„ĽĄ(xá‚Ãxâ√ãÄa¿Â(DààÅ2DàÑLí ÂDDààÅ"DàÑH‰DDàèÅ"Dàỉ˛Dàà"DàщÇDààÅ    "DòÑH ÂÇxá‚"xhcà¬Â@ĸ@˛‚@ĸ@˛ ‚ˇQ@ˇ ˇˇˇˇ@
  4666. ˇ·ˇ‚7^
  4667. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äUsing the Edition Manager
  4668. , (‡2-53
  4669. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  4670. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  4671. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  4672. 4€4—?òÄ
  4673. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  4674. ˛ˇˇˇ
  4675. ˛ˇˇˇ
  4676. ˛ˇˇˇ
  4677. ˛ˇˇˇ˜˝˛ˇ˛
  4678. ˛ˇ˛ˇˇ
  4679. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  4680. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  4681. ˛ˇ˛ˇˇ
  4682. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  4683. ˛ˇˇˇˇ
  4684. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  4685. ˛ˇˇˇˇ
  4686. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  4687. ˛ˇˇˇˇ
  4688. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\äh¢(eäFigurR¿°dONLNd\¢hª)e 2-19@°dONLNd \ªh)  shows the r*Ä°dONLNd\Òh>)6ecommended bor` °dONLNd%\>h
  4689. )M-der behavior for subscribers. The top window °dONLNdRiäu(räshows a subscriber with its bor,¿°dONLNdqiu˚)â0ders displayed. The middle window shows how the °dONLNd°väÇò(äborB °dONLNd§vôÇ)Qders look when a user selects the contents of a section. The bottom window shows °dONLNdıÉäèø(åä how the borΩ`°dONLNdÉøèÒ)5Eders look when a user selects data within a document that includes a °dONLNdEêäú€(ôäsubscriber section.
  4690. æHœ4øHœ"øH]
  4691. ˇ·ˇ‚7^    °dONLNdZ¥äø∫*# Figure 2-19°dONLNdf¥Ãø)BSubscriber borders
  4692. °dONLNdzkäwm(tä8If a user tries to select only a portion of a subscriber8°dONLNd≤kmwˆ)„ , you should highlight the entir»‡°dONLNd“kˆw˝)âe °dONLNd‘xäÑ˙(Åäcontents of the subscriberï °dONLNdÓx˙Ñˇ)p. 6¿°dONLNdxˇÑ)Aq`°dONLNdÒxÑp) user cannot edit the dat@°dONLNd
  4693. xqÑ{)ka ip†°dONLNdx{Ñ∏)
  4694. n a subscriberÄ°dONLNdx∏Ñ«)=. Se%‡°dONLNdx«ÑŒ)e oÄ°dONLNd!xŒÑ )“Modifying a °dONLNd.ÖäëÂ(éäSubscriber” on page <`°dONLNdBÖÊë¯)\2-59ê@°dONLNdFÖ¯ë˝) fd °dONLNdHÖ˛ëg)or detailed information.°dONLNdaóä£˛(†äWIf a user cancels a section using the publisher or subscriber options dialog box, your °dONLNd∏§ä∞*Yapplication should leave the contents of the section within the document, but you should °dONLNd±äΩ•*be surZ`°dONLNd±•Ωª)e to r†‡°dONLNd±ªΩ˙)emove the bor√`°dONLNd*±˙Ω)?ders frq@°dONLNd1±Ω√))om this data, as it is no longer considerßÄ°dONLNdZ±√Ω˘)¨ed a section.
  4695. ŒàSòÄ,>UHH\*4ˇˇˇˇˇˇ>U—oƒ
  4696. ˛„ˇ¯
  4697. ˛„¯
  4698. ˛„¯
  4699. ˛„¯˛ ˜ˇ˛ˇ¿Ò˛ˇ˛ˇÔÿ¯!˛¸IJÃÄĸÇ ¯%˛ Ù˛ˇ¿IJ¿ÄIJˇ˛Ç/ÿ¯!˛¸√ΔœèÃqÒèèĸÇ ¯%˛ Ù˛ˇ ¿fgôúd Ã…ôë˛ôIJˇ˛Ç/ÿ¯!˛¸ ffôòp ÷ôè˛ôĸÇ ¯%˛ Ù˛ˇ
  4700. ¿ffüò8 Ãq˛ôüôIJˇ˛˛/ÿ¯!˛¸    ffò Ã9˛ôòĸÄ ¯$˛ Ù˛ˇ    ¿ffòòL Ã˝ôòôIJˇ˛Ä/ÿ¯!˛¸
  4701. √Δè8ÃqÒ˛èĸÄ ¯˛ ˜ˇ˛ˇ¿¯ÄIJˇ˛ˇÔÿ¯˛ÒÄį¯˛Ó˜¯
  4702. ˛„¯
  4703. ˛„ˇ¯¯ ˛Â¯ ˛Â¯ ˛Â¯ ˛Â$¯ ˛ÂB¯ ˛Âů ˛Â    ò¯ ˛Â √ÿ¯ ˛ÂB¯ ˛ÂB¯ ˛ÂB¯ ˛Â~¯ ˛Â¯ ˛Â¯ ˛Âˇ¯¯ ˛Âˇ¯¯ ˛Â 8¯˛@Äqƒ`Äı 8¯˛ @Ä"ä$ ˝Äı 8¯˛ß8ò ÇŒ&eª7Ã≥Ę 8¯˛˛§ Ń$))ñ$îÑ탈 8¯˛Ù§ºÄ$ È/Ù$îúíɈ 8¯ ˛§†"ä$%)(Ñ$î§íÄĢÓ 8¯ ˛8òqƒÓ&d$îúLá˛˙ª∫ 8¯˛ ˘Ó 8¯˛ †˚
  4704. 8¯˛Ì‡˚ 8¯˛Ì
  4705. †Ä
  4706. 8¯˛Ì
  4707. ‡¸‡ 8¯%˛˛Ä ˛@      †á<
  4708. 8¯%˛˛Ä ˛@˛      ‡ˇ‡ˇ¯¯%˛ñ`„,Ë&YÅÃã1éΔpgs¿†8
  4709. àò¯%˛Xêê±%AbBRQJP    !  • ‡œ
  4710. "8¯%˛–ì°%GC¬^QCà   ' r#° †3Ò‡
  4711. àò¯%˛PÄî°"âBP!J    ) í$• ‡ºp˛8
  4712. "8¯%˛–`솂áAÅÃ!1ú'qô †ˇ·¸„ˇäàò¯˛Ì
  4713. ·œÅ˚ÄŒ
  4714. "8¯˛Ì
  4715. £{√Jàò˙ˇ˛Ì
  4716. ‚'º˛Œ
  4717. "8¯˛Ì
  4718. ¶ˇá¸Íàò¯˛Ì
  4719. Ó;ˇ¯ˇ¿Ó
  4720. "8¯'˛ qƒ`Ù˝˛
  4721. ¨aˇ˛`Íàò˙ˇ$˛ "ä$ D˝˛
  4722. Ó!ˇˇ¡¸Œ
  4723. "8¯(˛ò ÇŒ&Gf…;á8¿¶¿ˇˇw0 àò˙ˇ%˛$Ń$))D•â    )A§% „Ä=ˇ˛†Ó
  4724. "8¯(˛$Ä$ È/DΩ    )1º% †ˇˇÉ˘Íàò˙ˇ%˛$$"ä$%)(D°    )    †% ‡ˇˇ˘ˇÓ
  4725. "8¯(˛òqƒÓ& Dô    'pá$¿†ˇˇn àò˙ˇ˛Ì
  4726. ‡ˇˇ
  4727. "8¯˛Ì†˛˜˝O
  4728. àò˙ˇ˛Ì‡˛˝fl
  4729. "8¯˛Ì†˛ˇø
  4730. àò˙ˇ˛Ì‡˝˛
  4731. "8¯#˛˝ H@˛†˝>?
  4732. àò¯˛˝H˛˚‡¸
  4733. "8¯&˛±ñ`Ó3Ɇò9ñÏ‹g2ŒÅƸ
  4734.  
  4735. àò˙ˇ#˛JXêI
  4736. A$XíRK
  4737. @@‡¸ 
  4738. "8¯#˛JPI:A$–íRrJ
  4739. A¿†¸
  4740. àò¯#˛JPÄIJA
  4741. $íRíJ
  4742. B@‡¸
  4743. "8¯"˛Iê`):@ä    êíRq2
  4744. A¿†˚
  4745. àò¯˛Ì˘Ó
  4746. "8¯˛Ì˙ª∫àò¯˛Ì˘Ó
  4747. "8¯ ˛Âàò¯ ˛Â
  4748. "8¯˛«@Îàò¯˛(¢@Í
  4749. "8¯˛ Aúf‡Ïàò¯˛»BRêÏ
  4750. "8¯˛(BrêÏàò¯˛(¢BRíêÏ
  4751. "8¯˛«AíríÏàò¯ ˛Â
  4752. "8¯ ˛Âàò¯ ˛Âˇ¯¯ ˛Â¯ ˛Â¯ ˛Â~¯˛ÂB˙›˛ÂB˙w˛ÂB˙›˛Â √ÿ˘˛Â    ò˘˛ÂÅ˘˛ÂB˘˛Â$˘˛Â˘˛Â˘˛Â˘˛„ˇ¯˙˛ˇÚÎ"$˙˛Îàå˙Ò˛0Î"$    ¸˙ô˛PÎàå    ˘È˛üÎ"$|âÿ˘9˛    Îàå@IX˘}˛
  4753. Î"$@)X˙›˛
  4754. Îàå@)X˙˛    Î"$@I¸X˙˛üÎàå|à@X˙˛PÎ"$@X˙˛0Îàå@X˙=˛Î"$ÿ˙˝˛ˇ¯Îàå˙Ÿ˛„ˇ¯˙·˛„ˇ¯˙·◊·◊·◊¡◊·◊!˛„ˇ˙A˛„˙a˛„˙°˛„˙·˛ ˜ˇˇˇ¯Ôˇˇ˛ˇÔÿ˘#˛˙ 0000Ä¿˝Ç ˙›(˛ Ùˇˇ¯˛ 00Ä¿ˇˇ˛Ç/ÿ˙w&˛˝<|x‡>1Û„1Û„«á¿˝Ç ˙›"˛ Ùˇˇ¯ ôôåff1ê˚3
  4755. 1åÿˇˇ˛Ç/ÿ¯ ˛˝ ôåff1¿˚31åÿ˝Ç ¯"˛ Ùˇˇ¯ ôå~f0‡˚3
  4756. 1èÿˇˇ˛˛/ÿ¯ ˛˝ ôå`f0p˚31å ¿˝Ä ¯"˛ Ùˇˇ¯ ôôåbf10˚3
  4757. 1åL¿ˇˇ˛Ä/ÿ¯#˛˝Ü<f‡31Û31Û0«á¿˝Ä ¯˛ ˜ˇˇˇ¯˜00˝ˇˇ˛ˇÔÿ¯˛Ú00˜¯˛Ú‡‡˜¯
  4758. ˛„¯
  4759. ˛„ˇ¯¯ ˛Â¯ ˛Â¯ ˛Â¯ ˛Â$¯ ˛ÂB¯ ˛Âů ˛Â    ò¯ ˛Â √ÿ¯ ˛ÂB¯ ˛ÂB¯ ˛ÂB¯ ˛Â~¯ ˛Â¯ ˛Â¯ ˛Âˇ¯¯˛Âˇ¯˙ˇ˛Â 8˙IJ@Äqƒ`Äı 8˙IJ @Ä"ä$ ˝Äı 8˙Ä!˛ß8ò ÇŒ&eª7Ã≥Ę 8˙Ä ˛˛§ Ń$))ñ$îÑ탈 8˙è ˛Ù§ºÄ$ È/Ù$îúíɈ 8˙à#˛§†"ä$%)(Ñ$î§íÄĢÓ 8˙à#˛8òqƒÓ&d$îúLá˛˙ª∫ 8˙à˛ ˘Ó 8˙à˛ †˚
  4760. 8˙è˛ÌÔ˚ˇÓ 8˙IJÌ
  4761. Øˇˇ‡ˇˇÍ 8˙IJÌ
  4762. Ôˇ¯ˇˇÓ 8˙Ä(˛˛Ä ˛@      Øˇ˙x√ˇˇÍ 8˙Ä(˛˛Ä ˛@˛      Ôˇ˛ˇÓˇ¯˙ˇ(˛ñ`„,Ë&YÅÃã1éΔpgs¿Øˇ˜ˇÒ«ˇÍàò˙ˇ%˛Xêê±%AbBRQJP    !  • ÔˇÁˇ‡0ˇÓ
  4763. "8¯%˛–ì°%GC¬^QCà   ' r#° Ø˛ˇÃÍàò¯%˛PÄî°"âBP!J    ) í$• Ô¯Cˇè«Ó
  4764. "8¯%˛–`솂áAÅÃ!1ú'qô Øjàò¯˛Ì
  4765. Ó0~˛„.
  4766. "8¯˛Ì
  4767. ¨ÑÄ<ˇ¯™àò˙ˇ˛Ì
  4768. ÌÿC‡ˇ˛.
  4769. "8¯˛Ì
  4770. ©xˇ¸
  4771. àò¯˛Ì
  4772. ·ƒ?Ò
  4773. "8¯'˛ qƒ`Ù˝˛
  4774. £û¯ü˜
  4775. àò˙ˇ$˛ "ä$ D˝˛
  4776. ·fi>Á.
  4777. "8¯(˛ò ÇŒ&Gf…;á8¿©?àœ*àò˙ˇ%˛$Ń$))D•â    )A§% Ï¬‡_
  4778. "8¯(˛$Ä$ È/DΩ    )1º% Øˇ|
  4779. àò˙ˇ%˛$$"ä$%)(D°    )    †% Ôˇ¸
  4780. "8¯(˛òqƒÓ& Dô    'pá$¿Øˇˇ·ë*àò˙ˇ˛Ì
  4781. Ôˇˇ¯ÄÓ
  4782. "8¯˛ÌØ˛ˇ∞Íàò˙ˇ˛ÌÔ˛ˇÄ Ó
  4783. "8¯˛ÌØ˛ˇ@Íàò˙ˇ˛ÌÔ˝ˇÄÓ
  4784. "8¯#˛˝ H@˛Ø˝ˇ¡¿Íàò¯˛˝H˛˚Ô¸ˇÊÓ
  4785. "8¯&˛±ñ`Ó3Ɇò9ñÏ‹g2ŒÅÄظˇıÍàò˙ˇ#˛JXêI
  4786. A$XíRK
  4787. @@Ô¸ˇÙÓ
  4788. "8¯#˛JPI:A$–íRrJ
  4789. A¿Ø¸ˇÚÍàò¯#˛JPÄIJA
  4790. $íRíJ
  4791. B@Ô¸ˇÓ
  4792. "8¯"˛Iê`):@ä    êíRq2
  4793. A¿†˚
  4794. àò¯˛Ì˘Ó
  4795. "8¯˛Ì˙ª∫àò¯˛Ì˘Ó
  4796. "8¯ ˛Âàò¯ ˛Â
  4797. "8¯˛«@Îàò¯˛(¢@Í
  4798. "8¯˛ Aúf‡Ïàò¯˛»BRêÏ
  4799. "8¯˛(BrêÏàò¯˛(¢BRíêÏ
  4800. "8¯˛«AíríÏàò¯ ˛Â
  4801. "8¯ ˛Âàò¯ ˛Âˇ¯¯ ˛Â¯ ˛Â¯ ˛Â~¯˛ÂB˙›˛ÂB˙w˛ÂB˙›˛Â √ÿ˘˛Â    ò˙˝˛ÂÅ˙˝˛ÂB˙˝˛Â$˙˝˛Â˙˝˛Â˙˝˛Â˙˝˛„ˇ¯˙˝˛ˇÚÎ"$˘˝˛Îàå˘˛0Î"$    ¸˙e˛PÎàå    ˙˛üÎ"$|âÿ˙≈˛    Îàå@IX˙Å˛
  4802. Î"$@)X˙!˛
  4803. Îàå@)X˙·˛    Î"$@I¸X˙²üÎàå|à@X˙²PÎ"$@X˙·˛0Îàå@X˘¡˛Î"$ÿ˘˛ˇ¯Îàå˙% ˛„ˇ¯˘˛„ˇ¯˙◊÷÷=÷◊›˛„ˇ˙Ω˛„˙ù˛„˙]˛„˙˛ ˜ˇˇˇÔˇˇ˛ˇÔÿ˘%˛¸˛3˛¿¿ ¿ ˝Ç ˙›(˛ Ùˇˇ˛˛¿ ˇˇ˛Ç/ÿ˙w&˛˝„3·√ç≥·„`¯«œå«œè˝Ç ˙›"˛ ÙˇˇÒì33&N˛3Ä˚à   Δ33ˇˇ˛Ç/ÿ¯!˛˛√33Ü ˛3˚ÃΔ33˝Ç ¯"˛ Ùˇˇ„31Δ 33Û˚à   Δ?3ˇˇ˛˛/ÿ¯ ˛˝s30Ê 33˚ÃΔ03˝Ä ¯"˛ ÙˇˇÒ332fL33˚à   Δ13ˇˇ˛Ä/ÿ¯#˛˝·Û·√å3·„ëÃëÃ√˝Ä ¯˛ ˜ˇˇˇˆ¿¿˛ˇˇ˛ˇÔÿ¯˛Ò¿¿¯¯˛ÒÄį¯
  4804. ˛„¯
  4805. ˛„ˇ¯¯ ˛Â¯ ˛Â¯ ˛Â¯ ˛Â$¯ ˛ÂB¯ ˛Âů ˛Â    ò¯ ˛Â √ÿ¯˛ÊˇËB¯˛ÊˇËB¯˛ÊˇËB¯˛ÊˇË~¯˛ÊˇË¯˛ÊˇË¯˛ÊˇÔˇ¯¯˛ÊˇÔˇ¯˙ˇ˛ÊˇÏ8˙IJflˇ?Ò«ˇ˚œ˝ˇˇ˜ˇøıˇÏ8˙IJ flˇøÓ∫Ìˇ˚Ô˝˝ˇøıˇÏ8˙Ä#˛¨c≥Ôæ˝ÛòϯÕ"ds¶?ˇˇ˘àÏ8˙Ä$˛˛≠ ÒøÌÎk}¥ÌµΩ∂ù˛ˇ¢˙"Ï8˙è#˛≠°˛øÌÔãh}Ö̵±∂æˇˇ˘àÏ8˙à%˛u≠ØÓ∫ÌÌkk˝Ω̵≠∂øøˇˇØ˚ˇ˙Ï8˙à%˛tc≥Ò«ÛàÏ˛Õ̵±Ÿºˇˇè˚ˇ¯Ï8˙à˛˝Ôˇ
  4806. Øˇˇ?ˇˇ˙Ï8˙à˛˝Ôˇ
  4807. èˇ¸èˇˇ¯Ï8˙è˛Óˇ
  4808. Øˇ˝<aˇˇ˙Ï8˙IJӡ
  4809. èˇ¯ˇ¯Ï8˙IJӡ
  4810. Øˇ˚ˇ¯„ˇ˙Ï8˙Ä(˛ˇˇøˇÔ˛ˇflˇˇ˚Ô˛ÔˇèˇÛˇ¯Ï8˙Ä(˛ˇˇøˇÔ˛ˇfl˛ˇ˚Ô˛ÔˇØˇˇÊ˙Ôˇ¯˙ˇ(˛4œéiãÏ”?∫g8Ò«ÃFsè¸!ˇ«Ä„¯Ëàò˙ˇ%˛”∑∑ßm_Nfi÷◊Z◊˚ooˆÔ≠oدé:Í"8¯%˛á∂/m\^–◊^˚loΔÓ/oè??ÒòËàò¯%˛◊øµØnª^˛◊ÔZ˛˚ko∂Ì≠oÆB¿¸ZÍ"8¯%˛œ∂/éº_?Ôg1˝lw«v3oéÏ!ˇˇËàò¯˛Óˇ
  4811. ¨¯<ˇ˛
  4812. Í"8¯˛Óˇ
  4813. à‚įàËàò˙ˇ˛Óˇ
  4814. ©œ¸O˚äÍ"8¯˛Óˇ
  4815. àÔÛòËàò¯˛Óˇ
  4816. ¨üăgöÍ"8¯&˛ ˇÒ«ˇ˚œˇ¸ˇ}˛ˇ
  4817. é?·/àËàò˙ˇ#˛ ˇÓ∫Ìˇ˚Ôˇ›¸ˇ}˛ˇ
  4818. Øˇ¯>
  4819. Í"8¯(˛3ÛÔæ˝ÛòÏˇ‹sL¯õb<s„üèˇ˛Ëàò˙ˇ%˛m˝ÒøÌÎk›≠;{k_}≠ÌoØˇˇÄHöÍ"8¯(˛mÒ˛øÌÔãh›°x{kg}°Ìoèˇˇ¸@xËàò˙ˇ%˛mÌÓ∫ÌÌkkˇ›Ø{˚k{}ØÌoØ˛ˇÑXzÍ"8¯(˛≥ÒÒ«ÛàÏÔ›≥|˚lGºsÌüè˛ˇ¿xËàò˙ˇ˛ÓˇØ˛ˇ¯ zÍ"8¯˛Óˇè˝ˇ¿¯Ëàò˙ˇ˛ÓˇØ˝ˇ‡‡zÍ"8¯˛Óˇè¸ˇÛxËàò˙ˇ˛ÓˇØ¸ˇ˙˙Í"8¯#˛˛ˇ €ˇˇˇ˜ˇˇfl˛ˇˇ˚˛ˇè¸ˇ˙xËàò¯ ˛˛ˇ€ˇˇˇ˜˛ˇ˛˚ˇØ¸ˇ˘zÍ"8¯&˛'4œàÊ>/≥„4âëÃfòÚ??ˇè¸ˇ¯xËàò˙ˇ"˛⁄”∑€zflumˆ”∂÷ˆ⁄w˙flflˇØ˚ˇ˙Í"8¯ ˛⁄◊á€bflumˆ∂÷Δ⁄˘˙flˇ˘àËàò¯!˛⁄◊ø€Zflz̈˜∂÷∂⁄˛˙fiflˇ¢˙"Í"8¯ ˛€7œÎbfl∫Û˚7∂÷«fÒ˙flˇ˘àËàò¯˛ÊˇÍ"8¯˛ÊˇËàò¯˛ÊˇÍ"8¯˛ÊˇËàò¯˛ÊˇÍ"8˙ˇ˛qfl˜˛ÎˇËàò˙ˇ˛ÎÆfl˜ÍˇÍ"8˙ˇ˛˚Ôfl1ÃèÏˇËàò˙ˇ˛Òfi÷ˆ∑ÏˇÍ"8˙ˇ˛βfiˆΔ∑ÏˇËàò˙ˇ˛ÎÆfi÷∂∑ÏˇÍ"8˙ˇ˛qfl6Δ∂ÏˇËàò˙ˇ˛ÊˇÍ"8˙ˇ˛ÊˇËàò˙ˇ˛ÊˇÔˇ¯˙ˇ˛ÊˇË˙˛ÊˇË˙D˛ÊˇË~˙˛ÊˇËB˙ˇ˛ÊˇËB˙ˇ˛ÂB˙ˇ˛Â √ÿ˙ˇ˛Â    ò˙ˇ˛ÂÅ˙ˇ˛ÂB˙ˇ˛Â$˙ˇ˛Â˙ˇ˛Â˙˛Â˘˛„ˇ¯˙3˛ˇÚÎ"$˙ã˛Îàå˙„˛0Î"$    ¸˙¡˛PÎàå    ˙˛üÎ"$|âÿ˙q˛    Îàå@IX˙s˛
  4820. Î"$@)X˙Û˛
  4821. Îàå@)X˙Ò˛    Î"$@I¸X˘a˛üÎàå|à@X˘˛PÎ"$@X˙˛0Îàå@X˘˛Î"$ÿ˙˛ˇ¯Îàå˙˛„ˇ¯˙ ˛„ˇ¯˘◊◊o◊_◊O◊/◊◊ˇ◊◊D◊◊ˇ◊ˇ◊ˇ◊ˇ◊ˇ◊ˇ◊ˇ◊ˇ◊ˇ◊ˇ◊ˇ◊ˇ◊ˇ◊ˇ◊ˇ◊ˇ◊ˇ◊ˇ◊ˇ◊ˇ’’’’’’’’’◊ˇ◊Ä◊Ä◊Ä◊Ä◊è◊à◊à◊à◊à◊è◊Ä◊Ä◊Ä◊Ä◊ˇ◊ˇ’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’"    ˘‡‡É¿ƒ˝8 ˛"ı!ÅÑ ¸Da˛ı&"ÅÑ  <âsÄÑ!√ác√ãÉ√ãû8π¿¯&"ÅÑ DâÑ@!$Hò"$L$L"D¬ ¯%!Ò    Ò„‡Ñ ÑDâ@¯!Ò$"$H$H"Dǘ&"ÅɇDâ¿ ¯    #à"'»$H"|Å¿¯&"ÅÄ Dâ       H"$$H"@Ä ¯&"ÅÄ@Dô@@     2$Hê"$H$H"DÇ ¯&"˘‡‡ÉÄ<iĸ ‡”√á#√à√à8Å¿¯˜‡˜D‡˜8‡’’’ ¯‡
  4822. GăÄ<ć
  4823. D@ƒÄBć
  4824. Ñ#ħq¿@8pá‡
  4825. Ñ$@§àÄ@Dààч
  4826. Ñ$@îàÄ<@xàч
  4827. Ñ$@îàÄ@àèч
  4828. Ñ$@åàÄ@àà‡DD@åàÄBD˛à‡
  4829. GÉÄÑp`<8xᇠ¯‡’’’’’’’’’’’’’’’’’’’’’’’
  4830. |ÑA‹
  4831. @˛c‹ @yé0‚¿UXpÒ≈¿‚ @àÑ I"dâ&· xàÑ ADy$· @àÑ A"D≷ @àÑ A"Dâ· @àÑ A"Dâ$· |xÉ‚ ADxÒƒ·    ˜‚s
  4832. ¯‚Ñ    ˜‡‚◊◊◊◊)b˛ÄA@ÄÄ˝@ x¸˛&b˛Äc˛ÄÄ˝˛Ñ˙˝-+R8àÄã0Ò¿U8≈é8∞ã8π«è√áa≈ÄÄqf,ƒKp„å8∞-+RDàÄåë I"DFD"D»åàD¬$HàDHà"&@Äâô3$LàâD»-+JDUàê A@DD"@àààDʼnHàDà"$@Äâ"$HàÄÒDà-+J|Uàé‡A"@DD"8ààà|Ç$HàDà"$@Äâ"$HàÅDà-+F@"àÅA"@DD"ààà@Ç$HàDà"$@Äâ"$HàÅDà-
  4833. FD"àë A"˛D"DàààDÇ$HàDHà"$@Ñâ"$»àâDà-+B8"àéÒ¿A8DC8àÄàÜ8ÅÁèCáÜ!ƒ@xq"#Hàpƒ8à Ä˝Ì Ò¸Ì’’’’’¿x˝@„@Ñ˝@„<xCÄÄqf<D·≈¿∞‡Â"DD@Äâô"DB&…Â""DD@Äâ"DB$â‰""DG¿Äâ"DC‰â‰"DDÄâ"DBâ‰A"DD@Ñâ"LB$âÂA<xCÄxq<41ƒà‡Â @¸ ˛Â @¸ ˛‚ˇ(é@ˇ ˇˇˇˇ@
  4834. ˇ·ˇ‚7^
  4835. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  4836. (‡*2-54    )BUsing the Edition Manager4^*¿¯
  4837. °dONLNd\lhó(el    GenerallyºÄ°dONLNd    \ñh¶)*=, the appearance and function of publisher and subscriber borù¿°dONLNdF\¶hÈ(e¶ders should be °dONLNdUilu£(rl the same acrm@°dONLNdai£uø)7oss dif °dONLNdhi¿uÃ)ferȆ°dONLNdkiÀu) ent applications:‡°dONLNd{iu")G. Th-°dONLNdi#u°)e following sections entitled °Ä°dONLNdùi°u¨)~“T◊@°dONLNdüi´u )
  4838. ext Bor‚ °dONLNd¶i u‰)ders,”w °dONLNd¨iÂuÁ) °dONLNd≠vlÇÄ(l“Spr܇°dONLNd±vÄÇ∏) eadsheet Bor&Ä°dONLNdΩvπÇ”)9ders,”ªÄ°dONLNd√v”Ç’) ;Ä°dONLNdƒv÷Ç^)“Object-Oriented Graphics Bor톰dONLNd·v^Çx)àders,”'†°dONLNdÁvyÇÜ) any°dONLNdÍvÜÇé)d ¿°dONLNdÏvèÇÚ)    “Bitmapped Graphics °dONLNdÉlè{(ålBor÷@°dONLNdÉ{èì)ders”Î@°dONLNdÉìè¿)  describe sÁ °dONLNdÉ¡è
  4839. ).pecialized featurm†°dONLNd$É è§)J#es for publisher and subscriber bor#†°dONLNdGÉ•è≈)öders in °dONLNdOêlú}(ôlworÄ°dONLNdRê~úç)d-pÉ@°dONLNdUêçúê)rH@°dONLNdVêëú…)ocessing, spr憰dONLNdcê…ú_)8"eadsheet, or graphics applicationsŒ‡°dONLNdÖê_úd)ñ. 
  4840. ∫*¡¯4ª*¡¯ ºlº¯
  4841. ˇ·ˇ‚7^ °dONLNdâ≠lªs(∑lT°dONLNdä≠rªØ) ext Bordersˇˇˇˇˇˇ‘@(∑Ò2
  4842. °dONLNdó¡lÕâ( lIn wor¡`°dONLNdù¡âÕú)d-pr¯ °dONLNd°¡úÕ›)Eocessing documents, a publisher may contain other publishers. Howeverfl`°dONLNdÊ¡›ÕÙ( ›, one °dONLNdÏŒl⁄ (◊lpublisher should not D†°dONLNdŒÀ⁄Ë)_overlap≥†°dONLNdŒË⁄9) another publisher9`°dONLNdŒ9⁄>)Q.  ¿°dONLNdŒ>⁄D)YÃ@°dONLNdŒC⁄Í)%ou should display only one publisher °dONLNdB€lÁz(‰lborB °dONLNdE€{Á˜)Yder at a time. If an insertion point is placed within a publisher that is encompassed by °dONLNdûËlÙú(Òl another larƒ@°dONLNd©ËúÙ÷)0ger publisher˛Ä°dONLNd∂Ë÷Ù›):<, you should display only the smaller internal publisher borÓ`°dONLNdÚË›ÙÎ(Ò›der    °dONLNdıËÏÙÓ).°dONLNd˜˙la(l8In exceptional cases, it may be necessary to display mor‡°dONLNd/˙b )ˆe than one publisher or °dONLNdGl´(lsubscriber borZ°dONLNdU´Â)?Hder at a time. For example, a publisher may consist of a paragraph that °dONLNdùl Ó(lXincludes a marker for a footnote. The data contained within the footnote should also be °dONLNdı!l-ë*consider‡°dONLNd˝!í-˘)&ed part of the publisher9°dONLNd!˘-œ)g0. When a user selects the paragraph, you should °dONLNdE.l:Ï(7lsimultaneously display a bort@°dONLNda.Ï:)Äder arë@°dONLNdg.:W)ound the footnote.°dONLNdz@lLé(IlThe bor}‡°dONLNdÅ@éLÙ)"Rder of a publisher that contains text should be located between characters within °dONLNd”MlY}(Vl=the text. The insertion point, when placed on such a boundaryP°dONLNdM}YÊ(V}, should gravitate towar¿°dONLNd(MÁYÔ)jd °dONLNd*Zlf¶(clthe publisherL@°dONLNd7Z¶f˛):. That is, a click in frπ °dONLNdOZ˛fê)X$ont (to the left) of a publisher borˇ`°dONLNdsZêfÏ)íder should place the °dONLNdàgls‚(plcursor inside the publisher‡°dONLNd£g‚s…)v5, so that subsequent typing goes inside the publisher1°dONLNdÿg…sı)Á . Clicking °dONLNd„tlÄ"(}l,at the end (to the right) of a publisher borI °dONLNdt#Äfl)∑,der should also place the cursor inside the °dONLNd;Ålçñ(äl    publisherÓ‡°dONLNdDÅïçó)).°dONLNdFìlüÊ(úlWhenever two separate borp‡°dONLNd_ìÊü)zders ar ‡°dONLNdfìü,)    e adjacení@°dONLNdoì-ü2))t,T†°dONLNdqì3üÏ)) the boundary click should go in between °dONLNdö†l¨¬(©lthem. This is also tr™ °dONLNd؆¬¨Ù)V ue for a bory°dONLNdª†ı¨˜)3<der that is next to other nontextual aspects of a document, .°dONLNd˜≠lπé(∂lsuch as ,
  4843. Courier°dONLNdˇ≠éπ≤)"'PICT'°dONLNd≠≤π
  4844. )$ graphics or page brR`°dONLNd≠
  4845. π")Xeaks..°dONLNdølÀ©(»lWhen a user r1¿°dONLNd,ø™À )>emoves information frΔ°dONLNdAø À∑)b(om a publisher that contains text data, W@°dONLNdiø∏ÀÏ)¨ you should °dONLNdtÃlÿo(’lrE°dONLNduÃpÿà)esize }†°dONLNd{Ãàÿß)the borù °dONLNdÇÃßÿ±)deÇÄ°dONLNdÑÃ≤ÿÊ) r so that it b0 °dONLNdíÃÁÿ)5ecome} °dONLNdóÃÿ)s∫ °dONLNdòÃÿ&) smalleÂÄ°dONLNdüÃ&ÿ))r¿°dONLNd†Ã*ÿ,).ö¿°dONLNd°Ã,ÿ”)% When a user adds information to the °dONLNdΔŸlÂñ(‚l    publisherÓ‡°dONLNdœŸïÂö)), Ó‡°dONLNd—ŸöÂÂ)you should enlar“ °dONLNd·ŸÂÂı)Kge tÌ@°dONLNdŸıÂ)he bor `°dONLNdΟÂ)deØ¿°dONLNd̟¶) r to accommodate the new text.;‡°dONLNd ŸßÂÊ)ã The insertion °dONLNdÊlÚ™(Ôlpoint should rG‡°dONLNd(Ê´Ú")?emain within the publisherx`°dONLNdBÊ"Ú')w. °dONLNdE¯lÊ(lIf a user highlights the entir¿°dONLNdc¯ÊΩ)z1e contents of a publisher and then chooses Cut fræ`°dONLNdî¯ΩÛ)◊ om the Edit °dONLNd†l9(l-menu, you should not delete the publisher borâ`°dONLNdÕ9Í)Õ&der within the document. The user may °dONLNdÛlB(l2intend to delete the existing publisher data and rJ‡°dONLNd    %Cˆ)◊)eplace it with new data, or the user may °dONLNd    Nl+–((lwant to move the entirƒ °dONLNd    d–+ä)d,e publisher and its data to a new location. V†°dONLNd    êã+£)ªFigur)`°dONLNd    ï£+º)e 2-20Δ‡°dONLNd    õº+›) shows °dONLNd    £,l8ï(5l this state.
  4846. Z*k¯4[*k¯"[*]
  4847. ˇ·ˇ‚7^    °dONLNd    ∞Pl[ú*# Figure 2-20°dONLNd    ºPÆ[¥)BA0°dONLNd    ΩP¥[7)  publisher with contents removed
  4848. jj¶¯òÄ0ÒwHH\*ˇˇˇˇÒwng_fi%¸Ä @˝Ä˜˚    Ä`¿˝ġ" Ä˝Ä˜ ¯ @˝ġ1/ ∞‡8≈Œ8ë]√ãŃK1f]p"\8yá 8Cá‚√àà‡8∞‡1/ …Fë"`ÑL$L…ô"a" "`Dààô" "DDHÅ$Hâ…1/ âDë@ÑHHâA" "@Dààë  <DH$EQâ1/ âDë"@ểHâ"A" "@|ààë" DG«‚$EP‡â1- âDë"@Ñ$Hâ"A" "@@ààë" DDÄ$B âˇ1/ âDì"@ÑH$»â"A" &@Dààë" "DDHÅ$B!â1/ à‡D ç@cà√Hâ@ @8xá <Cá‚#Ç ‡ à‡¯Äˆ˙ԯĘ˙àÔ
  4849. χ˙pÔ————$aÄ Ä˚˙@įBIJ@ÄÇ ˙ ˙@ÙB˛˛@Ä1/q«qàé,8p‡p"\D@‚Á±ã≈Œ\‚ÃGá·\Xq¿1/àÇ" àë2Dâ" "`"D@Cà»åë&"a2BàÅ"`dàÄ1àÇ  àë"DÅ" "@"*ÄB˛àë$"@Ú"Bà@DxÄ1¯Ç  Ö"|p‡" "@>*ÄB˛àë$"A"Bá"@DàÄ1ÄÇ  Ö"@" "@ B˛àë$"A"BÄÅ"@DàÄ1àÇ" Ç"Dâ" &@"B˛àë$"A"BàÅ"@DàÄ1pÇÇ"8p‡ @2˛àèƒ@Ú"@AÄá·@Dx`
  4850. Á¯*Ò"¯TÒ˛¯"€¯D€¯"€¯D€"˚"˛ĸ ˝0˝Ä ¯˚D˛Ĉ˝Ä¯*&àé√áá"·«é"\‡8∞‡.qfbΔ,<·¿xq√ãa¬¯*&àë$Hë≈$D"a…0âô"#"2Dë DàÑLà""¯*U$H룉D"Aâ â˛" DDàÑHà!‚¯)U'œë≈$D"Aâ ˘˝" DÒ¿Dàá»à""¯)"$£$D"Aâ Å˝" Dë DàÑà""¯)"$Hë≈$D&Aâ â˝" Dë DàÑHà""¯+"#á«"·ÁÉ@‡ à‡ q˛"<·¿xpcàÜ!‚ ˘¯DÛ¸@Ú¯"ÛD¸@Ú
  4851. ¯DÒ8ϯ"€¯D€¯"€¯D€¯*€¯T€—————————————————————————————————————————————————————————————————————————————————————————————————————,    ˘‡‡¡Äƒ˝ 8p`  a ˛IJ@˙*Å"@¸ Dàê    ˝IJ@˙1/Å$  <âsÄÑ    P<#,8∏"&8∞X·≈éŒ,√àé1/Å$ DâÑ@    Pë"!2D¿""»"dB&D"3$Hë"1/Ò    Ò„‡D ÑDâ@¯àë"!"DÄBà"DB$D "$Hë"1/ÅÑ Dâ¿!àë"!"|ÄBà"DC‰D"$E"1/Å Dâ A¸ë"!"@ÄÇà"DBD"$E"1/Å@Dô@@Äêì"!"DÄÇà"DB$D""$B"1/˘‡‡·Ä<iĸ¯`<!"8ÄÇ àD1ƒC"#Ç
  4852. ˜˜Á
  4853. ˜D˜Á˜8‹——— ¯‹
  4854. GăÄ<Ä‹
  4855. D@ƒÄBÄ‹
  4856. Ñ#ħq¿@8pá‹
  4857. Ñ$@§àÄ@DààÑ‹
  4858. Ñ$@îàÄ<@xàÑ‹
  4859. Ñ$@îàÄ@àèÑ‹
  4860. Ñ$@åàÄ@àà‹DD@åàÄBD˛à‹
  4861. GÉÄÑp`<8xá‹ ¯‹—————————————————————
  4862. ¯ Çÿ
  4863. IJΔÿ ÄÛa≈Ä™8∞·„ãÄfi Å"&@íD…$L› Ò"$@Ç<àÚ$H› Å"$@ÇDâ'»› Å"$@ÇDâ$› Å"$@ÇDâ$H› ¯Ò!ƒ@Ç<àÒ„à›˜ ‹¯ ‹¯¿‹————)ƒ  ÇÄ˝0Ä@¸˙&ƒ˛ Δ˛˝˙˘.*§qa„Ä™8qã8q`8qsèá8√ã‚ÃYàñ0·«q`¸.*§â""$@íDàåàDâêâÑHëàëDLÅ2fHô"âê¸.*îà™ "$@Ç<ÄààDÅâ»ëàDHÅ"DHë‚â¸.*"'¿ÇDÄààDq˘HëàDHÅ"DHë"â¸.*åÄD"$ÇDÄààD    ÅHëàDHÅ"DHë"â¸.
  4864. åàD""$@ÇD˛àDââHëàëDHÅ    "DIë"â¸.*ÑpD!„ÄÇ<pàÜ8q qœá CàÄ‚"DFë··àq¸ Ò¸È Ò¸È—————Ä˝ÄflÄ˝Äfl(xá‚Ãxâ√ãÄa¿·(DààÅ2DàÑLí ·DDààÅ"DàÑH‡DDàèÅ"Dàệ˛Dàà"DàчÇDààÅ    "DòÑH ·Çxá‚"xhcଷ@ĸ@˛fi@ĸ@˛ fiˇI4@ˇ ˇˇˇˇ@
  4865. ˇ·ˇ‚7^
  4866. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äUsing the Edition Manager
  4867. , (‡2-55
  4868. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  4869. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  4870. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  4871. 4€4—?òÄ
  4872. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  4873. ˛ˇˇˇ
  4874. ˛ˇˇˇ
  4875. ˛ˇˇˇ
  4876. ˛ˇˇˇ˜˝˛ˇ˛
  4877. ˛ˇ˛ˇˇ
  4878. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  4879. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  4880. ˛ˇ˛ˇˇ
  4881. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  4882. ˛ˇˇˇˇ
  4883. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  4884. ˛ˇˇˇˇ
  4885. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  4886. ˛ˇˇˇˇ
  4887. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähê(eäY@Ä°dONLNd\êhã)9ou should leave the cursor inside the small publisher borL†°dONLNd:\ãh)˚der for further typing. If the °dONLNdYiäuı(räVuser inserts the cursor in a new location (instead of typing data inside the existing °dONLNdØväÇò*borB °dONLNd≤vôÇÍ)der), you need to r˜°dONLNd≈vÍÇt)Qemove the empty publisher bor∑°dONLNd‚vuÇç)ãder fr'‡°dONLNdËvéÇ)om the document to allow the °dONLNdÉäè(åäuser to move the publisher=‡°dONLNdÉè")v    . This ef≈@°dONLNd(É"èØ)""fectively deletes the publisher frh°dONLNdJÉ∞è )éom the document. If °dONLNd^êäú:(ôä*the user pastes the publisher that is curr°dONLNdàê;ú⁄)±%ently held in the scrap, you should rß°dONLNd≠ê⁄úÍ)üe-cr˘¿°dONLNd±êÍú )    eate its °dONLNd∫ùä©ò(¶äborB °dONLNdΩùô©ß)der\¿°dONLNd¿ùß©P)*. If the user cuts or copies other data frfl °dONLNdÍùP©∑)©om the document befor†°dONLNdˇù∏©Ú)he pasting the °dONLNd™ä∂Ω(≥ä publisher frE °dONLNd™æ∂j)4'om the scrap, the publisher should be rΩ°dONLNd@™j∂ó)¨    emoved frÙ†°dONLNdI™ó∂“)-om the scrap.
  4888. ‘H€4’H€ ÷ä÷
  4889. ˇ·ˇ‚7^ °dONLNdX«ä’˚(—äSpreadsheet Bordersˇˇˇˇˇˇ‘@(—2
  4890. °dONLNdm€äÁô(‰äBor÷@°dONLNdp€ôÁ∑)ders ar0@°dONLNdw€∏Á‡)ound spr °dONLNd€‡Á)(Beadsheet data or other data in arrays should look and behave very °dONLNd¡ËäÙ⁄(Òämuch like text bor`°dONLNd”Ë⁄ÙÚ)Pders. î`°dONLNdŸËÚÙ
  4891. )Figurg °dONLNdfiË
  4892. Ù#)e 2-21†°dONLNd‰Ë$Ù|) shows a typical borÛ@°dONLNd¯Ë{Ù¡)Wder within a spr\@°dONLNdˬÙÎ)G    eadsheet °dONLNdıäπ(˛ä    document.
  4893. #H44$H4"$H]
  4894. ˇ·ˇ‚7^    °dONLNdä$∫*# Figure 2-21°dONLNd(Ã$“)BA0°dONLNd)“$î)/ publisher border within a spreadsheet document
  4895. °dONLNdZ°ä≠’(™äNote that the borΔ°dONLNdk°’≠ )KGder goes below the column headers (A, B, C, D) and to the right of the °dONLNd≤Æä∫ç(∑ärE°dONLNd≥Æé∫–)Kow labels (1, 2, 3, 4)—it should not overlap these cell boundaries. The bor›`°dONLNd˛Æ–∫¸(∑– der at the °dONLNd    ªä«fl(ƒäbottom and the borX°dONLNdªfl« )UGder on the right side can be placed within the adjacent cells (outside °dONLNdb»ä‘=(—ä,of the cells that constitute the publisher).°dONLNdè⁄äÊπ*
  4896. Unlike borÑ@°dONLNdô⁄πÊ‚)/    ders in w™°dONLNd¢⁄‚ÊÎ))or‰Ä°dONLNd§⁄ÎÊ˛)    d-pr@°dONLNd®⁄ˇÊp)ocessing applications, bor√Ä°dONLNd¬⁄pÊü)q ders in sprñ`°dONLNdÕ⁄üÊ
  4897. )/eadsheet documents (or °dONLNd‰ÁäÛ—(äLother documents with array data) can overlap. That is, a user can select a r@°dONLNd0Á“Û(“ow of cells to °dONLNd?ÙäÍ(˝äObe a publisher and an overlapping column of those cells to be another publisherÛ‡°dONLNdéÙÈÓ(˝È. Δ@°dONLNdêÙÓÙ)YÜ¿°dONLNdëÙÙ)ou °dONLNdîä¸(
  4898. äshould never display morU‡°dONLNd¨¸g)re than one publisher borÄ°dONLNdƒh)l%der at a time. When a user selects a °dONLNdÈäò(äsprÑ °dONLNdÏò")!eadsheet cell that is part of mor‚†°dONLNd"|)äe than one publisherê¿°dONLNd!|ˇ)Z, you should display only the °dONLNd?ä'ò($äborB °dONLNdBô')Vder of the publisher that was last edited. (This can be accomplished by comparing the °dONLNdò(ä4ß(1ämodifi⁄`°dONLNdû(ß4.) cation dates of the publishers.)°dONLNdø:äFo(Cä8If it is absolutely necessary to display all section born@°dONLNd˜:oF)Â#ders within a document at the same °dONLNdGäS–(Pätime, you can crÀ°dONLNd*G–S2)Feate a Show/Hide BorLJ°dONLNd>G3S˙)c,ders command in the Edit menu to toggle all °dONLNdjTä`ò(]äborB °dONLNdmTô`ÿ)ders on and of¶‡°dONLNd{Tÿ`›)?f.°dONLNd~fär&(oä#When data is added to or deleted fr¿°dONLNd°f'r≈)ù%om a publisher that consists of a spr∑°dONLNdΔf≈r )ûeadsheet cell or °dONLNd◊säª(|ä other arrayû °dONLNd‚s∫˜)0, you should r˛°dONLNds˜!)= esize its b¶°dONLNd˚s"+)+or‡Ä°dONLNd˝s+5)    de≈‡°dONLNdˇs6?) r tz‡°dONLNds@˛)
  4899. *o accommodate the addition or deletion of °dONLNd,Ääå¢(âädata. ¿°dONLNd2Ä¢å©)A∫`°dONLNd3Ä©åì)4 publisher should behave like a named range in a spró °dONLNdgÄìå
  4900. )Íeadsheet. For example, if a °dONLNdÉçäôø(ñäuser cuts a rº °dONLNdêçøôÃ)5=ow within a publisher that consists of a named range in a sprflÄ°dONLNdÕçÃô (ñÃeadsheet, you °dONLNd€öä¶L(£ä,should shrink the publisher data and its borW¿°dONLNd    öL¶o)¬der corrM °dONLNd    öo¶¶)# espondingly] °dONLNd    ö•¶ß)6.
  4901. 3HâòÄ@SıHH\*4ˇˇˇˇˇˇSı6Iâ>œˇ¯ÙÄ¯Ä˘˘¯@˘ÙÄ¯Ä˘˘¯@˘Ù1Ä˝0˝Ä˛˝˛‡˛˝x˝@˛¿˛Ù1Ä˝0˝Ä˛IJ˛0˛˝l˝@˛˝Ù0Ä˝x˝Ä˛IJ˛˝˝f˝@˛˝Ù0Ä˝x˝Ä˛˝˛˝˝f˝@˛IJÙ0Ä˝Ã˝Ä˛IJ˛˝˝f˝@˛˝Ù0Ä˝¸˝Ä˛IJ˛˝˝f˝@˛˝Ù1Ä˝Ã˝Ä˛IJ˛0˛˝l˝@˛˝Ù1Ä˝Ã˝Ä˛˝˛‡˛˝x˝@˛¿˛ÙÄ¯Ä˘˘¯@˘ÙÄ¯Ä˘˘¯@˘Ùœˇ¯ÙÄ‹™‡˘ÙÄÊUW¯UP˘Ù!Ä¯Ä˘‡ ˚ Ä¸`˘Ù!Ä¯Ä˘ ˚1ĸP˘Ù)įÅ1ƒò≤@˛8≤LY *ò≥¸`˘Ù)įÅI$§¬@˛…$¬Ra $§ƒí¸P˘Ù)įÅ9$úÇ@˛$ÇNA  úѸ`˘Ù)įëI$§Ç@˛$ÇRA  §Ñ¸P˘Ù)įëI$§Ç@˛    $ÇRA  §Ñí¸`˘Ù)įé9#úÅ¿˛8ÅŒ@‡ úɸP˘Ù"Ä¯Ä˝@˛¸ ¯`˘Ù#Ä¯Ä˛IJ¸¿¯P˘Ù˛ˇ˛˙"DDƒ˘DT˘DF¯Dd˘DHÙÄ¯Ä˘˘¯P˘ÙÄ¯Ä˘˘¯`˘Ù+ÄÄÄ˙Ä˝@#á˝|p¬˛«¿é|P˘Ù+Ä ¿@˙Ä˝¿dHë˝à2"˛ Aë@`˘Ù+Ä¿ s˚Ä˝@§Hë˝àR"˝ Bë
  4902. @P˘Ù,ÄÄîĸĽA#àë˝pí"˝@Ñëx`˘Ù+Äì˚Ä˝B$Gë˝â‚˝Äàè"P˘Ù-ÄêĸĽCÙ@ë˝â¯"˛¡?`˘Ù-Ä RîĸĽ@$A˝àB˛ÇDP˘Ù,Ä¿ås˚Ä˝@#Ü˝pDz·å8`˘ÙÄ˚Ģ˘¯P˘ÙÄ`˚Ģ˘¯`˘Ù˛ˇ˝H¸àâë¯Q˘ÙÄ¯Ä˘˘ˇ˛¯`˘ÙÄ¯Ä˘˘ˇ˛¯P˘Ù0    Ä¿Ä ˛Ä˝@¿G˛ˇ˚„˚fi˛„Äé8`˘Ù/    ÄÄ@ ˛Ä˝¡»É˛ˇÛ›ÛÓÔû˝DAë"DP˘Ù/Ä,Δ$Œ`Ä˝BHÖ˛ˇ˚›ÎfiÔ^˝ÑBë"D`˘Ù0ÄÄâ1))$êÄ˝C¬Hⲡ˚„€èfi˛ƒDé"DP˘Ù/Ä¿I!(1‰`Ä˝B$G벡˚›ªˆÌfi˝$HëD`˘Ù/Ä¿I!(1Ä˝B'‡üü˛ˇ˚›ÅˆÏ˝$O—DP˘Ù0Ä ¿I!))$êÄ˝B A˛ˇ˚›˚vÔfi˛$@ëD`˘Ù0ÄÄé Δ$¬`Ä˝A¿F˛ˇ˚„˚èfi˛√Äé8P˘ÙÄ˙Ģ˘ˇ˛¯`˘ÙÄ˙Ģ˘ˇ˛¯P˘Ù˛ˇ˛˙"DDƒ˘DT˘DF¯Dd˘DHÙÄ¯Ä˘˘¯P˘ÙÄ¯Ä˘˘¯`˘Ù+Ä¿Ç˝Ä˝Á«¸|qÒ¬¸é8P˘Ù)Ä¿D˝Ä¸@Hë¸@à""˚ë"D`˘Ù*    Ä¿Iés9IJĸÄHë¸@àB"˚ë"DP˘Ù,    Ä¿®íîí@˛Ä˝¿á¸xp‚"¸"D`˘Ù+    Ä ¿®íóëIJĸ àë¸à‚¸"DP˘Ù+    Ä‡íî@˛Ä¸!ë¸à"¸"D`˘Ù,    Ä¿íîí@˛Ä˝!ë¸DâB¸"DP˘Ù,    Ä¿és    Ä˛Ä˝¡¸8p·Ç¸ 8`˘ÙIJ¸Ä˘˘¯P˘ÙIJ`¸Ä˘˘¯`˘Ù
  4903. ÿˇ—˘ÙÄ‹™‡˘ÙÄ‹U@˘ÙÄ¿¯Ä˘˘¯@˘ÙÄ ¯Ä˘˘¯@˘ÙÄ ¯Ä˘˘¯@˘ÙÄÄ¯Ä˘˘¯@˘ÙÄ¿¯Ä˘˘¯@˘ÙÄ¿¯Ä˘˘¯@˘ÙÄ ¿¯Ä˘˘¯@˘ÙÄÄ¯Ä˘˘¯@˘ÙÄ¯Ä˘˘¯@˘ÙÄ¯Ä˘˘¯@˘Ù˛ˇ¸¯Dƒ˘DT˘DFÔDHÙ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡9˛
  4904. Û¿¿Åà˝p‡@@@¬@@@˛B˙ĸ 7˛      C¸à¿@@@@@@˛˘ĸ @˛<AyÁ@†"xFXqpxqs«D«1`è8pÒ≈á8éD≥,p@˛<AâÄ@†"DB"dâÄDâÑHòDBê"HòDâ&Hëë"DÃë2 @˛<‚„«¿ÅâÄ @"DB DâDâHê®BêDyHëë Dàë" @˛< âÄ @@"DBD˘DâOê®B"àê|âƒOüë Dàü" @˛< â@Ä@¯"DBDÅDâHB"Hê@â$Hë Dàê" @˛<  â2ÄÄ@&DB"DâDâHêB"HêDâ$Hëë"Làë" @˛<Û¿¿¡x“¯@xBDqxq«Aëè8xÒƒG é4àé"Û˜ÌÛà˜ÌÛp–¡¡¡
  4905. ˝@¯ –˝
  4906. èàx–˝
  4907. àÄàÑ–˛ GH„ÄÄp·–˛ HÅIÄâ–˛ HÅ)xÄÒ–˛ HÅ)Å–˛ HÅÅ–˝
  4908. ààÅÑâ–˝
  4909. 臿xpҖ
  4910. ˝@¯ –¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡˛‡D ÄÃ˛@ Ã˛ Ãqᮂ√áé.—˛ D àôI$Hë0—˛ ƒD àëÚ#»ë —˛ D àë    $Hü —˛ D àë    $Hê —˛ D àë    $Hë —˛ „ƒáÚ#«é —ÛÄ–ÙÄ–Ùœ¡¡¡¡,˛ÄÄ @˝¬A¿¸@ Ó)˛˛Ä˛ @˝@@ ˙Ì1˛+ëƒDXqáé®·Δ,p·≈ÄX·≈Œ<xF8„,ã1f"X√áa≈Ä1˛+í$DdààëI"2!&@dB&"DB"DA2L…ô"dDHà"&@1˛+R"®DÄàëÚ"!@DB$"DB <A"Hâ"DDà"$@1˛+S‚®Dpàü    "!ƒ@DC‰"DB DA"Hâ"DDà"$@1˛+2Dàê    "!$@DB"DB DA"Hâ"DDà"$@1˛+2!Dààë    ""!$@DB$"DB"DA"$Hâ&DDHà"$@1˛+¡DpáéÒ¬"·ƒDD1ƒ<xB<1"√àâDCáÜ!ƒ@ ̸ @› ̸ @›¡¡¡¡¡˝@¿˛˛@”˝@ ˛˛@”˝°„¬ã1‚'.Eá‘˝°""L…"0FHÄ’˛""Hâ" DH‘˛">Hâ" DH‘˛˘" Hâ" DH‘˛    ""$Hâb DHÄ’˛    „¬√àâ·°é @DG’˝¸˝@“˝¸˝Ä“ˇ-‚@ˇ ˇˇˇˇ@
  4911. ˇ·ˇ‚7^
  4912. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  4913. (‡*2-56    )BUsing the Edition Manager4^*¿¯
  4914. °dONLNd\lh#(el*When a user cuts a publisher and its entirÔ`°dONLNd*\#há)∑e contents within a spr›‡°dONLNdA\áhÚ)deadsheet document, the °dONLNdXiluÄ(rlentir
  4915. ¿°dONLNd]iÅu)e section should be held in th    ‡°dONLNd{iu#)Åe scrap.uÄ°dONLNdÉi#u«)!$ Do not leave an empty publisher bor`°dONLNdßi»uÏ)•    der in a °dONLNd∞vlÇz(lsprÑ °dONLNd≥vzÇ∂)eadsheet (as r£`°dONLNd¡v∂Ç%)<ecommended for text bor °dONLNdÿv&ÇÌ)p0ders). If a user attempts to paste a copy of an °dONLNdÉlèª(ålexisting publisher¿°dONLNdɪèµ)O9, you should warn the user by displaying an alert box (se¯`°dONLNdSɵèº)˙e °dONLNdUêlúL(ôl1“Duplicating Publishers and Subscribers” on page Í°dONLNdÜêLú^)‡2-58=‡°dONLNdäê_úb))ë¿°dONLNdãêbúd).
  4916. ∫*¡¯4ª*¡¯ ºlº¯
  4917. ˇ·ˇ‚7^ °dONLNdé≠lª!(∑l Object-Oriented Graphics Bordersˇˇˇˇˇˇ‘@(∑Ò2
  4918. °dONLNd∞¡lÕt( l<In an object-oriented drawing application, the publisher borÈ`°dONLNdÏ¡tÕ¨( t der should fi]@°dONLNd˘¡≠ÕŒ)9    t just arA‡°dONLNd¡ŒÕÁ)!ound °dONLNdŒl⁄¬(◊lthe selected objects.°dONLNd‡lÏr*Y@Ä°dONLNd‡rÏõ)    ou can pr≈‡°dONLNd'‡õÏ∫))ovide rÙ`°dONLNd.‡∫ÏÂ)Eesize handles that appear with all drawing objects to allow the user °dONLNdsÌl˘w(ˆlto ∑‡°dONLNdvÌw˘z) r|‡°dONLNdwÌ{˘≤)esize the bor’°dONLNdÑÌ≤˘)7der of a publishere@°dONLNdñÌ˘)N. e@°dONLNdòÌ˘)Figur8°dONLNdùÌ˘6)e 2-22’Ä°dONLNd£Ì6˘ö) shows a publisher bor€¿°dONLNdπÌö˘Δ)d
  4919. der with rÀ‡°dONLNd√ÌΔ˘fi),esize °dONLNd…˙lë(lhandles.
  4920. (*9¯4)*9¯")*]
  4921. ˇ·ˇ‚7^    °dONLNd”l)ú*# Figure 2-22°dONLNdflÆ)¥)BA0°dONLNd‡¥)F)% publisher border with resize handles
  4922. °dONLNd!l-s(*lAG@°dONLNd!t-y)n†°dONLNd    !z-|) ò†°dONLNd
  4923. !|-‚)application can make p@°dONLNd !„-)g ublisher bor¨@°dONLNd,!--)5ders A@°dONLNd1!.-O)appear Å¿°dONLNd8!O-R)!tƒ °dONLNd9!R-])o ffi°dONLNd<!]-ü) loat over the arx†°dONLNdL!†-“)C ea the user °dONLNdX.l:í(7lpublisheπ†°dONLNd`.í:ò)&s.v†°dONLNdb.ô:Ω) The borÙÄ°dONLNdj.Ω:&)$der acts like a clipping r∏¿°dONLNdÑ.':æ)j ectangle—anything within the bor1°dONLNd§.ø:–)òder °dONLNd®;lGœ(Dlbecomes the publisher›‡°dONLNdΩ;ŒG”)b. ›‡°dONLNdø;”GÎ)Figur∞†°dONLNdƒ;ÎG)e 2-23N °dONLNd ;Gı)6 shows a publisher that contains clipped graphics and °dONLNdHlT(Ql&its subscriber in another application.°dONLNd'Zlfs*A∫†°dONLNd(Zsf•)  user can cr±‡°dONLNd4Z•fó)27eate publishers and subscribers that overlap each otherfi¿°dONLNdkZófΔ)Ú . Thus, bor◊ °dONLNdvZΔfÒ)/    ders may °dONLNdglsï(plDoverlap and it may no longer be possible to turn on a particular bor§ °dONLNd√gïsÁ(pïder when the user °dONLNd’tlÄÿ(}lclicks within a publisher˘ °dONLNdÓt◊Äi)k . Drawing applications should pr°dONLNdtjÄ⁄)ìovide a menu command, °dONLNd$Ålçá(älShow ›†°dONLNd)Åáçñ)Bor3‡°dONLNd,Åóç)ders, that toggles to Hide Borë`°dONLNdJÅçÎ)Å.ders. This command should allow users to turn °dONLNdxélö¯(ól all publisher and subscriber borƒ °dONLNdòé¯ö0)åders on or of£‡°dONLNd•é0ö5)8f.
  4924. 8j    ¯òÄ2îèHH\*ˇˇˇˇîè<=œÃ
  4925. ¸fiˇ¯˘
  4926. ¸fi ˘
  4927. ¸fi ˘
  4928. ¸fi ˘¸~ˇÔ˚ˇÛ˘ˇ˜Ï˘¸Ä ˙˛ÄˆA ˘"¸~Ä/˚ˇ  ÄÄà˛˘ˇAÏ˘ ¸Ä ˙ ÒÒèÅ≥««Δ8p¯A ˘!¸~Ä/˚ˇ˝ôÅѲfd»˘ˇAÏ˘¸Ä ˙˝ôÅπÉÊff`‡¯A ˘!¸~Ä/˚ˇ˝ôüÅôܲf`p˘ˇÏ˘¸Ä ˙˝ôòôܲf`8¯@ ˘!¸~Ä/˚ˇ    ˝ôòÅôܲfdò˘ˇ@Ï˘ ¸Ä ˙ôôÒèÒÉÁΔf8p¯@ ˘ ¸~ˇÔ˚ˇ˛Ä˝˝˘ˇ˜Ï˘¸ÙÄ˝Ú ˘
  4929. ¸fi ˘
  4930. ¸fi ˘
  4931. ¸fiˇ¸˘ ¸‡ ˘ ¸‡ ˘ ¸‡ ˘ ¸‡ ˘ ¸‡! ˘ ¸‡@å˘ ¸‡ÄL˘ ¸‡·Ï˘ ¸‡! ˘ ¸‡! ˘ ¸‡! ˘ ¸‡? ˘ ¸‡ ˘ ¸‡ ˘ ¸‡ˇ¸˘ ¸‡ ˘ ¸‡ ˘ ¸‡ ˘ ¸‡ ˘ ¸‡ ˘ ¸‡ ˘ ¸‡ ˘¸¸xͲ ˘¸¸}ÍU^˛ ˘¸¸zÍ™æ˛ ˘¸¸}ÍU^˛ ˘¸¸(Ͳ ˘¸¸¯Ù˛ ˘¸¸(¯>ı˛ ˘¸¸˚?ˇÛˇÄ¿˜˛ ˘¸¸(˚ˇÊ~Å¿˜˛ ˘¸¸˚ˇflˆ¡¿˜˛ ˘¸¸(˚˛˛˜Û¿˜˛ ˘"¸¸¸o¯„˜ùÄ˙˛ ˘!¸¸(¸|˘8˛ ˘"¸¸˝| ˘8˛ ˘"¸¸(˝¯¿?ˇ˘h˛ ˘"¸¸˝¿‡˙˘X˛ ˘"¸¸(˝˘˲ ˘"¸¸˝|(è˘‹˛ ˘$¸¸(˝x@˛å˚¨˛ ˘$¸¸˛‡˝¯˚V˛ ˘%¸¸(˛¿`˛ġ¿˚™˛ ˘&¸¸˛
  4932. @í¿¸W˛ ˘&¸¸(˛
  4933. ¿˛¸¸´˛ ˘&¸¸˛~˛W¸U˛ ˘'¸¸(˛x˛0Ä
  4934. ´Ä˝´Ä˛ ˘'¸¸˛p˛ U‡˝’¿˛ ˘&¸¸(‡˛`™∞¸ͯ˛ ˘&¸¸‡@‡˛UP¸’_ˇ˛ ˘&¸¸(Ä¿™∏¸™™´˛ ˘%¸¸˝¿U\¸’UV˛ ˘(¸¸(ć™Æˇ™™Æ˛ ˘(¸¸éˇˇUW◊’Ux˛ ˘(¸¸(@
  4935. ™´ÄÆ™´‡˛ ˘'¸¸˝UU‡TW˛˛ ˘'¸¸(˝@™™ø˙¨º˛ ˘&¸¸8˝˝UXp˛ ˘&¸¸(`˝ì˝™∑z‡˛ ˘'¸¸p2Ò€˝U_’@˛ ˘&¸¸(pˇˇ‡ˇ¸™™¿˛ ˘&¸¸– ˝˝UW’UIJ ˘$¸¸(‡ÓÄ˝˚™´Ä˛ ˘!¸¸¿~¸˙U˛˛ ˘#¸¸(¿¸˚™´˛˛ ˘#¸¸¿`8¸˚UV˛˛ ˘#¸¸(Å`_‡¸˚™Æ˛˛ ˘#¸¸@ü¿˚’¸UT˛˛ ˘ ¸¸(@:˙˚™¨˛˛ ˘"¸¸C€¸˙’¸UX˛˛ ˘!¸¸(¬Å˙˚™∞˛˛ ˘"¸¸
  4936. ÇÅÄ˚˚U`˛˛ ˘"¸¸(
  4937. ÇÄ¿˚˚™¿˛˛ ˘"¸¸ÇÄ@˚˚U¿˛˛ ˘$¸¸( À√¸˚´˝™´Ä˛˛ ˘#¸¸Ó√Ñ˙◊ı˛UV˝˛ ˘$¸¸(˚Ä˚™>˛™º˝˛ ˘$¸¸!¸Ä˚÷˛Up˝˛ ˘$¸¸(6√‡?Ä˚ÍÍ™™‡˝˛ ˘#¸¸gN˙VuU_¿˝˛ ˘"¸¸(OLÏ˙j™¯¸˛ ˘"¸¸Nx˙6ˇ¿¸˛ ˘¸¸(‹p˜:¯˛ ˘¸¸¯¿˜¯˛ ˘¸¸(pĘ¯˛ ˘¸¸`Ę ¯˛ ˘¸¸( ·ÄÌ˛ ˘¸¸«Ï˛ ˘¸¸(    ΔÏ˛ ˘¸¸åÏ˛ ˘¸¸(7ˆ¯˛ ˘¸¸/¯>¯˛ ˘¸¸(*8¯˜?¯˛ ˘¸¸hp¯Áü¯˛ ˘¸¸(˛`¯ˇŒ¯˛ ˘¸¸ò¿¯ˇÊ¯˛ ˘ ¸¸(∫¿˝Ä˝ˇ`¯˛ ˘"¸¸∏IJÁ˛?ˇ`¯˛ ˘"¸¸)±Ä˛ˇ‡˛~¿¯˛ ˘!¸¸k˝ˇ¿˛~ˇ‹¯˛ ˘!¸¸*c˝ˇ¿»ˇ‹¯˛ ˘"¸¸Êx˛?ˇ¿Ãˇ‹¯˛ ˘"¸¸*o˛˛ˇÃˇˇ‹¯˛ ˘!¸¸/˛ˇ‹ˇˇ˜˛ ˘!¸¸)Ø˚˛ˇ˛ˇˇ˜˛ ˘"¸¸ûÕ˛ˇ˛ˇ<¯˛ ˘"¸¸
  4938. (ç˝Äˇˇ¯˛ˇø¯˛ ˘ ¸¸
  4939. À¸Äˇˇ˛˝ˇ¯˛ ˘!¸¸    («›Äˇˇ¸˝ˇ˛¯˛ ˘!¸¸    ã˝ˇˇ¸˝ˇ˛¯˛ ˘!¸¸    (˚˘ˇˇ¸˝ˇ¸¯˛ ˘!¸¸    >cˇˇ˛¡˝ˇ¯˛ ˘¸¸    (?Œˇˇ˛ÿ˝ˇ˜˛ ˘!¸¸L˛ˇ˝˛ˇ¸˜˛ ˘!¸¸(¯˛ˇ˝˛ˇ¸˜˛ ˘!¸¸@˛ˇ˝˛ˇ¸˜˛ ˘¸¸(˝˙ˇ¸˜˛ ˘¸¸˝˙ˇ¯˜˛ ˘¸¸(˝˙ˇ¯˜˛ ˘¸¸˝˙ˇ¯˜˛ ˘¸¸(˝˙ˇ¯˜˛ ˘¸¸˝˙ˇ¯˜˛ ˘¸¸(˝˙ˇ¯˜˛ ˘¸¸˝˙ˇ¯˜˛ ˘¸¸(˝˙ˇ¯˜˛ ˘¸¸˝˙ˇ¯˜˛ ˘¸¸(˝˙ˇ¯˜˛ ˘¸¸¸˙ˇ¯˜˛ ˘¸¸(¸?˛ˇ¸ˇ¯˜˛ ˘¸¸¸ˇÒ¯ˇ¯ˇ¯˜˛ ˘¸¸(¸ˇˇ¯ˇ¯˜˛ ˘¸¸¸ˇ¯˜˛ ˘¸¸(¸ˇ¯¯˜˛ ˘¸¸¸?ˇ¯˜˛ ˘¸¸(¸?ˇ¯˜˛ ˘¸¸¸?ˇ˜˛ ˘¸¸(¸?ˇ˜˛ ˘¸¸¸?ˇ??˜˛ ˘¸¸(¸?ˇ?‡˜˛ ˘¸¸¸?ˇ˜˛ ˘¸¸(¸?ˇ¯˜˛ ˘¸¸¸?ˇ˛¯¸˜˛ ˘¸¸(¸ˇˇ¯ˇ˜˛ ˘¸¸¸ˇˇÄ¯ˇ˜˛ ˘ ¸¸(¸ˇˇÄˇ√ˇÄ¯˛ ˘¸¸¯ˇ@ˆ˛ ˘¸¸(Ͳ ˘¸¸Í˛ ˘¸¸zÍ™æ˛ ˘¸¸}ÍU^˛ ˘¸¸zÍ™æ˛ ˘¸¸xͲ ˘¸‡ˇ¸˙ ¸‡ ˘ ¸‡ ˘ ¸‡? ˘¸‡! ˙ ¸‡! ˘¸‡! ˙ ¸‡·Ï˘¸‡ÄL˙ ¸‡@å˘¸‡! ˙ ¸‡ ˘¸‡ ˙ ¸‡ ˘¸‡ ˙
  4940. ¸fiˇ¸˘ ¸‡ ˘ ¸‡ ˘¸‡˛ ˙ ¸‡Ç ˘ ¸‡ÉÏ˘ ¸‡Ç,˘ ¸‡Ç,˘ ¸‡Ç,˘ ¸‡˛,˘ ¸‡ ,˘ ¸‡ ,˘ ¸‡ ,˘ ¸‡?Ï˘ ¸‡ ˘
  4941. ¸fiˇ¸˘˚fiˇ¸˘œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ2    ˘‡‡¡¿ƒ˝8pp  a   ˛!˛ .Å" ¸Dàà      ˛˚ 31Å$  <âsÄÑ    P<#,8∏<8π„ãÇ"cãsᯇ,8∞Ò31Å  DâÑ@Pë"!2D¿"D¬$L"! ÅÑHà    2D…"31Ò    Ò„‡@@ÑDâ@¯àë"!"DÄ"DÇ$HT!ÅH"<â 31ÅÄÄDâ¿  àë"!"|Ä"DÇ'»T!Å«!"Dâ31ÅDâ @@¸ë"!"@Ä"DÇ$à!ÅàA"Dâ31ÅDô@@ÄÄì"!"DÄ"DÇ$Hà!ÅHàÅ"Dâ"31˘‡‡Á‡<iĸ˘¯<!"8Ä<8Å„àà »Åᯇ"<àÒ
  4942. ˜˜Â
  4943. ˜D˜Â˜8⁄œœœ ¯⁄
  4944. GăÄ<Ä⁄
  4945. D@ƒÄBÄ⁄
  4946. Ñ#ħq¿@8pá⁄
  4947. Ñ$@§àÄ@DààÑ⁄
  4948. Ñ$@îàÄ<@xàÑ⁄
  4949. Ñ$@îàÄ@àèÑ⁄
  4950. Ñ$@åàÄ@àà⁄DD@åàÄBD˛à⁄
  4951. GÉÄÑp`<8xá⁄ ¯⁄œœœœœœœœœœœœœœœœœœœœœœœ–œœœ >B Ä◊  ˛1Ä◊  <«q`*é,8x‚‡‹  DBâê$ë2D†<DBâ è"<† DBâ ë"DâÚ€  DBâ ë"D† DBâ ë"D†><Aàq è"<x‚€˜⁄˜à⁄˜p€–œœœ)1˛@ Ä @@˝  <¸ǯ&1˛@1Ä@@˝˛B˘Ä¯.*)D@Eáx‡*éb«XEé\„«Ña√é0‚¿@8≥b%å8qΔX˙.*)"D@FHàâ$ë"#""dFD"a$D"$D @DÃôí&DDàÇ"d˙.*%"*ÄDHâ è "" DDD"@Ú$D"ƒ @Dàë$D@xÇ"D˙.*%>*ÄDGâ ë ""DDD>A$D"D @Dàë$D@àÇ"D˙.*# D@àâ ë ""DDD A$D"D @Dàë$D@àÇ"D˙.
  4952. #"DHàâ ë˛""DDD"A$D"$D BDàëdDDàÇ"D˙.*!DGx‡ è"!éD@DC@Û«Ñ!√√‚ <8àë§D8xbD˙ @˝Á Ä˝Áœœœœœ`<˝ › B˝ ›
  4953. <!¿@8≥"p‚‡Xpfl
  4954. "" @DÃë"!dàfl"" @Dàë"!DÄfl"#‡@Dàë"!ÚDÄfl?ë""@Dàë"!DÄfl ë"" BDàë&!Dàfl û<!¿<8àû‚Dp@‡ ¸˛‹ ¸˛‹ˇM™@ˇ ˇˇˇˇ@
  4955. ˇ·ˇ‚7^
  4956. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äUsing the Edition Manager
  4957. , (‡2-57
  4958. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  4959. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  4960. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  4961. 4€4—?òÄ
  4962. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  4963. ˛ˇˇˇ
  4964. ˛ˇˇˇ
  4965. ˛ˇˇˇ
  4966. ˛ˇˇˇ˜˝˛ˇ˛
  4967. ˛ˇ˛ˇˇ
  4968. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  4969. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  4970. ˛ˇ˛ˇˇ
  4971. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  4972. ˛ˇˇˇˇ
  4973. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  4974. ˛ˇˇˇˇ
  4975. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  4976. ˛ˇˇˇˇ
  4977. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  4978. gHw4gHw"hH]
  4979. ˇ·ˇ‚7^    °dONLNd\äg∫(dä Figure 2-23°dONLNd\Ãg“)BA0°dONLNd\“gå)/ publisher and subscriber with clipped graphics
  4980. H4H ä
  4981. ˇ·ˇ‚7^ °dONLNd@ˇä$(    äBitmapped Graphics Bordersˇˇˇˇˇˇ‘@(    2
  4982. °dONLNd\äï(äCr\°dONLNd^ï…) eating a bors°dONLNdj…„)4der arê°dONLNdp„)Bound bitmapped graphics in applications is similar to doing so in °dONLNd≤ ä,T()ä-object-oriented drawing applications. The borW@°dONLNdfl T,ì) der appears arÒ¿°dONLNdÌ ì,Ï)?ound the selected arŒÄ°dONLNd Ï,)Yea. The °dONLNd    -ä9π(6ä user can cr˜@°dONLNd-π9Â)/Beate overlapping publishers and subscribers in bitmapped graphics °dONLNdV:äFƒ(Cäapplications. F@°dONLNdd:≈FÀ);Y¿°dONLNde:ÀF)ou need to pr¿°dONLNdr:Fo);ovide a Show/Hide BorŒÄ°dONLNdá:oF)i$ders command to allow users to turn °dONLNd´GäS¶(Päall bor퇰dONLNd≤G¶SÂ)ders on and of˜†°dONLNd¿GÂSÍ)?f.
  4983. wàÁòÄ8øHH\*4ˇˇˇˇˇˇøzà⁄
  4984. ÛÊˇ˛Ù
  4985. ÛÊÙ
  4986. ÛÊÙ
  4987. ÛÊÙÛ˚ˇøˇˇˇˇfl˝˚ÙÛIJ xÄ ¿˚DÙ"Û
  4988. ˙øˇˇƒ˛ ¿ ˛ˇˇ–E˚Ù!ÛIJ¿Ÿ˛„    8 Ãœå«˝DÙ!Û˙øˇˇ¿‚˛32d ˝Ã    ôôúˇˇ–E˚Ù!ÛIJ‹¡Û330påÃÃŒôò˝DÙ"Û˙øˇˇÃ√˛308 Ãëüòˇˇfl≈˚Ù!ÛIJÃ√˛3    0 ÃÃ√ôò˝Ù"Û˙øˇˇÃ√˛32L ÃÃ…ôòòˇˇ–˚Ù!ÛIJx¡Û„38 œå«è˝ÙÛ˚ˇøˇˇ˛Ùˇˇfl˝˚ÙÛ˘ÔÙ
  4989. ÛÊÙ
  4990. ÛÊÙÛÂˇÙ ÛËÙ ÛËÙ ÛËÙ ÛËÉÙ ÛËCÙ ÛË#ÙÛ*Ò™†˙ ÙÛUP˙x{ÙÛ*Ò™†˙CÙÛPÒP˙CÙÛ ¯<˚ ˙CÙÛP¯| ¸P˙√ÙÛ ˚ˇÁˇIJ ˙ÙÛP˚ˇÃ˝IJP˙ÙÛ ¸ˇ‡øÌÉIJ ˙ˇˇÙÛP¸¸˝ÔÁIJP˙ˇˇÙÛ ¸fl«Ô;˝ ˝¿ÄÙÛP¸¯>"˝P˛¿ÄÙ Û ˝¯@<"˝ ˛¿ÄÙ ÛP˝ ˇÄ˛˝P˛@ÄÙ Û ˝Ä¿Ù˝ ˛¿ÄÙ ÛP˝ ˝P˛@ÄÙ Û ˝¯P˝ ˛‡ÄÙ!ÛP˝IJ‡P˛`ÄÙ!Û ˛¿>˝?∞ ˛
  4991. ∞ÄÙ"ÛP˛Ä¿ˇÄÿP˛PÄÙ"Û ˛Ä$Æ ˛
  4992. ∏ÄÙ"ÛP˛Ä 3¸◊‡P˛XÄÙ"Û ˛¸˛<7‡j∏ ˛
  4993. ®ÄÙ"ÛP˛˛`?˛U\P˛\ÄÙ"Û ˛‡0˛@>˛jØ ˛ÆˇˇÙ"ÛP¿ ˛¿<˛uUÄP˛W¿Ù"Û  ¿Ä¡¸˛*™Ä ˛™ˇ¯DGÙ"Û PҲ5U¿P˛UUXÙ!Û ˝Ҳ*™‡ ˛™™∞DGÙ"Û P¿˛uUpP¯UUpÙ"Û $ˇ˛j™∏ ∏™´¿DGÙ"ÛP<Ä4UU\PupU_Ù!Û 0˝j™Ø Í†øDGÙ!ÛP0˝>Ä6uUUˇ’`u‡Ù!Û p˝8>*™™⁄™¿ÎÄDGÙ!ÛP¿˝ ?&5UU%U∏◊˛Ù"Û ‡d?„∂*™™⁄™¯™˛DGÙ"ÛP‡ˇˇ¡˛5UU%US˝V˛Ù Û     †‡¸*™™⁄™æ™¨˛DGÙÛP¿‹˚5UU%˛U\˛Ù۠ĸ>˚™™⁄˛™®˛DGÙÛPÄ<0˚UU%˛UX˛ÙÛ Ä¿˛p˚
  4994. ™™⁄˛™∞˛DGÙÛP¿æ¿˚UU%˛Up˛ÙÛ ġ?Ä˚™™⁄˛™†˛DGÙÛPÄt˛˙UU%˛U`˛ÙÛ á∑¯˙™™⁄˛™¿˛DGÙÛPÖ˘UU%˛UIJÙÛ  ˘
  4995. ™™⁄™™´˝DGÙÛP Ä˙UU%UUV˝ÙÛ Ä˙
  4996. ™™⁄™™Æ˝DGÙÛPóá¯˙]U%UU\˝ÙÛ ›á˙ø™⁄™™∞˝DGÙÛPˇˆ?˙Qı%UU‡˝ÙÛ C¯˙∞:˙™´Ä˝DGÙÛPmá¿˙P%UW¸ÙÛ Œú ˙∞Ú™˛¸DGÙÛPûòÿ˙P›W¿¸ÙÛ ú8˙∞/˛˚DGÙÛP∏‡˜–P˙ÙÛ ÒĈ∞ ˙DGÙÛP·ıP˙ÙÛ ¡ı` ˙DGÙÛP√ÛP˙ÙÛ éÛ ˙DGÙÛPåÛP˙ÙÛ 3Û ˙DGÙÛPnˆP˙ÙÛ ^0¯| ˙DGÙÛPTp¯Ó~P˙ÙÛ –‡¯œ> ˙DGÙÛQ¸¿¯ˇúP˙ÙÛ!1įˇÃ ˙DGÙÛQuIJ¸?˛¿P˙ÙÛ!q˝œ‡˛˛¿ ˙DGÙÛSc˝ˇ¿˛¸ˇÄP˙ÙÛ&÷˝?ˇÄ˛˝ˇ∏ ˙DGÙÛTΔ˝ ;ˇÄêˇˇ∏P˙ÙÛ%Ã˛ ˇÄòˇˇ∏ ˙DGÙÛTfl¸˛ ˇˇ‡ôˇˇ∏P˙ÙÛ&^˛ˇˇ‡πˇ˛˛ ˙DGÙÛS_ˆ˛ˇˇ‡˝ˇ˛˛P˙ÙÛ!=ö˛ ˇˇ‡ˇˇ˛x ˙DGÙÛ
  4997. Q˚ˇˇ˝ˇ~P˙ÙÛ
  4998. !󢡡¸˝ˇ˛ ˙DGÙÛ
  4999. Qèªˇˇ¯˝ˇ¸P˙ÙÛ
  5000. !˙ˇˇ¯˝ˇ¸ ˙DGÙÛ
  5001. Q˜Úˇˇ¯˝ˇ¯P˙ÙÛ
  5002.  |Δˇˇ˝É˝ˇ‡ ˙DGÙÛ
  5003. Púˇˇ˝±˛ˇ˛˛P˙ÙÛ 0ò˛ˇ˚˛ˇ¯˛ ˙DGÙÛP?˛ˇ˚˛ˇ¯˛P˙ÙÛ Ä˛ˇ˚˛ˇ¯˛ ˙DGÙÛP˝˙ˇ¯˛P˙ÙÛ ˝˙ˇ˛ ˙DGÙÛP˝˙ˇ˛P˙ÙÛ*Ò™†˙DGÙÛUP˙ÙÛ*Ò™†˙DGÙÛ¸˙ˇˆÙÛ¸˙ˇˆDGÙÛ¸˙ˇˆÙÛ¸˙ˇˆDGÙÛ¸˙ˇˆÙÛ¸˙ˇˆDGÙÛ˚ˇˇ˛ˇ˘ˇˆÙÛ˚ˇˇ„ÒˇÒˇˆDGÙÛ˚ˇˇ‡ˇÒˇˆÙÛ˚ˇˇ‡ˇ‡ˇˆDGÙÛ˚ˇˇ‡ˇˇˆÙÛ˚ˇ‡ˇ‡ˇˆDGÙÛ˚ˇ‡ˇ‡ˇˆÙÛ˚ˇ‡ˇ‡ˇ‡ˆDGÙÛ˚ˇ‡ˇ‡ˇ‡ˆÙÛ˚ˇ‡‡‡ˆDGÙÛ˚ˇ‡?‡¿ˆÙÛ˚ˇ‡?‡?‡ˆDGÙÛ˚ˇ‡‡ˆÙÛ˚ˇ¸¯ˆDGÙÛ˚?ˇ˛˛ˆÙÛ˚?ˇˇ˛ˆˇˇÙÛ˚ˇˇˇáˇˆÙÛ˜˛ÄıÙ ÛË√Ù ÛËCÙ ÛËCÙ ÛËCÙ ÛËx{Ù ÛË Ù ÛË#Ù ÛËCÙ ÛËÉÙ ÛËÙ ÛËÙ ÛËÙÛ¡ÙÛˇ˘DÄÙÛ DDEÄÅÙÛ     DÄ¡?ÉÙÛ( DDEÄ° ÉÙÛOå    Dèë ˚ÙÛÄå DDEà     ãÙÛå    Dà ãÙÛå DDEà ãÙÛÄå    Dà    ?ãÙÛOå DDEèë ÙÛ(     DÄ° ÙÛ DDEÄ¡ ÙÛ     DÄÅ˚ÙÛˇ¸DDEÄÙÛ¡ÙÛ¡Ù………………………Û‰ˇı
  5004. ÛÄÂı
  5005. ÛÄÂı
  5006. ÛÄÂıÛø˜ˇˇ˛Ò˛ˇ˛ˇÔÿı ÛÄ@˛¿pÄÄ˚Ç ı#Û
  5007. ø@ˇˇ˛ ˛»ÄIJˇ˛Ç/ÿı"ÛÄ@˛œ·¿¡ô·ΔŸÒ∞˝Ç ı#Ûø@ˇˇ˛˛ô
  5008. ì ·ôôì'ôô¡˛ˇ˛Ç/ÿı"ÛÄ@˛Ê˛ô
  5009. ÉÄqôô√ôôĽǠı#Ûø@ˇˇ˛f˛ô
  5010. Å¿9ôò„ô˘Å˛ˇ˛˛/ÿı"ÛÄ@˛f˛ô
  5011. ćôòsôÅĽĠı#Ûø@ˇˇ˛f˛ôí`˛ô3&ôâÅ˛ˇ˛Ä/ÿı"ÛÄ@˛Δüò·¿p˘·ΔÒĽĠıÛø˜ˇˇ˛˛ı˛ˇ˛ˇÔÿıÛĢÓı
  5012. ÛÄÂı
  5013. ÛÄÂıÛ‰ˇ¯ı ÛÄÁı ÛÄÁı ÛÄÁı ÛÄÁ$ı ÛÄÁBı ÛÄÁÅı ÛÄÁ    òı ÛÄÁ √ÿı ÛÄÁBı ÛÄÁBı ÛÄÁBı ÛÄÁ~ı ÛÄÁı ÛÄÁı ÛÄÁˇ¯ı ÛÄÁˇ¯ı ÛÄÁ 8ı ÛÄÁ 8ı ÛÄÁ 8ı ÛÄÁ 8ı ÛÄÁ 8ı ÛÄÁ 8ıÛÄ˝w˝ 8ıÛÄ˝›˝ 8ıÛÄ˝w˝ 8ıÛÄ˝Ò˝ 8ıÛÄ˝Ò˝ 8ıÛÄ˝¯‡¸˝ 8ıÛÄ˝¯‡`˝˝ 8ıÛÄ˝˙3ˇˇ?¯ ˛˝ 8ıÛÄ˝˙ˇ˛`7˲˝ˇ¯ıÛÄ˝˚ˇˇl˛˝àòıÛÄ˝˚‡?Ô<˛˝
  5014. "8ıÛÄ˝¸ˇÄ?yÿ˛˝àòıÛÄ˝¸¿0!Ò˛˝
  5015. "8ıÛÄ˝¸'¿@·˛˝àòıÛÄ˝¸ˇÄg¸ˇ˛˝
  5016. "8ıÛÄ˝¸¸~†p˛˝àòıÛÄ˝¸‡`p˛˝
  5017. "8ı ÛÄ˝˝¿ć8˛˝àòıÛÄ˝˝Ä˝8¿˝
  5018. "8ı ÛÄ˝˝>˛ˇÄÄ˝àòı ÛÄ˝˝|˛¸¿˝
  5019. "8ı ÛÄ˝˝p˛0     p˝àòı ÛÄ˝˝˛aü‡ø˝
  5020. "8ı!ÛÄ˝˛‡·øU¿˝àòı!ÛÄ˝˛Äį™‡˝
  5021. "8ı!ÛÄ˝˛ÄUx˝àòı!ÛÄ˝˛˛‡™¨˝
  5022. "8ı!ÛÄ˝˛>˛>‡UT˝àòı!ÛÄ˝˛¯ <˛™Æ˝
  5023. "8ı ÛÄ˝˛˝<˛UW˝àòı!ÛÄ˝˛ x˛™´á˝
  5024. "8ı!ÛÄ˝˛‡ ‡?ˇUU≈˝àòı!ÛÄ˝‡† ™™Á˝
  5025. "8ı ÛĽĽ0 UUu˝àòı!ÛÄ˝IJ    Ù∞™™ß˝
  5026. "8ı ÛÄ˝IJ¿˛U˝àòı ÛÄ˝˝    ˘0™™ß˝
  5027. "8ı ÛÄ˝Ä!ˇ∞˛U˝àòı!ÛĽġ˛™™ß˝
  5028. "8ıÛÄ˝¿?¸˛U˝àòıÛÄ˝‡x¸™™ß˝
  5029. "8ıÛÄ˝ Á‡˚’UU˝àòıÛÄ˝ ŇÄ˚͙߽
  5030. "8ıÛÄ˝Ä˚˛U˝àòıÛÄ˝˙j™ß˝
  5031. "8ıÛÄ˝4˘¸˙5UU˝àòıÛÄ˝4ß˙*™ß˝
  5032. "8ıÛÄ˝0t=ø¿˙5UU˝àòıÛÄ˝pl(˘j™ß˝
  5033. "8ıÛÄ˝`®(˘˛U˝àòıÛÄ˝`®( ˘j™ß˝
  5034. "8ıÛÄ˝‡h(˘˛U˝àòıÛÄ˝¿,º?¿˙jÍß˝
  5035. "8ıÛÄ˝Ä.Ï8@˙5˝U˝àòıÛÄ˝Ä7ˇ±¯˙*èß˝
  5036. "8ıÛÄ˝Ç¿ÿ˙5Å’˝àòıÛÄ˝l>s¯˙:Äw˝
  5037. "8ıÛÄ˝t‡0`˙Ä˝àòıÛÄ˝Ù¿¿˙Ä˝
  5038. "8ıÛÄ˝ÁÄ¿˙Ä˝àòıÛÄ˝«ˆÄ˝
  5039. "8ıÛÄ˝åˆÄ˝àòıÛÄ˝'ˆÄ˝
  5040. "8ıÛÄ˝&ˆ˝àòıÛÄ˝ŒÙ˝
  5041. "8ıÛÄ˝åpÙ˝àòıÛÄ˝ú`Ù˝
  5042. "8ıÛÄ˝ò¿Ù˝àòıÛÄ˝pĈ@˝
  5043. "8ıÛÄ˝Òį@s‡˝àòıÛÄ˝£Ä¯ˇs˝
  5044. "8ıÛÄ˝á˜˛y˝àòıÛÄ˝ʘˇ¸‡˝
  5045. "8ıÛÄ˝    å˜ˇ˛`˝àòıÛÄ˝ ¨˝˝ˇˆ˝
  5046. "8ı ÛÄ˝ à˝>˛ˇˆ˝àòı ÛÄ˝˝˛˛Á¸˝
  5047. "8ı!ÛÄ˝6∞˛ˇ¸˛Ô˝¿˝àòı!ÛÄ˝&0˛ fl¸᡽¿˝
  5048. "8ı!ÛÄ˝.gġ¸<«ˇ˝¿˝àòı!ÛÄ˝&ˇ‡ˇˇ¸œˇ˝¿˝
  5049. "8ı!ÛÄ˝2 ˇˇ˝œˇ˝àòı!ÛÄ˝ˇ∞ˇˇˇÔˇ˝
  5050. "8ı!ÛÄ˝
  5051.     Ï–ˇˇ˛ˇÛ¿˝àòı!ÛÄ˝
  5052. flÿˇˇÄ˛ˇ˚˝
  5053. "8ı ÛÄ˝
  5054.  ø»ˇˇ‡˝ˇ˝àòı ÛÄ˝
  5055.  }ÿˇˇ¿˝ˇ‡˝
  5056. "8ı ÛÄ˝
  5057. ø–?ˇˇ¿˝ˇ‡˝àòı ÛÄ˝
  5058. øêˇˇ¿˝ˇ¿˝
  5059. "8ı ÛÄ˝
  5060. Ê0?ˇˇÏ˝ˇ˝àòı!ÛÄ˝
  5061. ¸‡?ˇˇÌè˛ˇ˝
  5062. "8ı!ÛÄ˝Ñ¿˛ˇfl˛ˇ¿˝àòı!ÛÄ˝ˇÄ?˛ˇfl˛ˇ¿˝
  5063. "8ı!ÛÄ˝˛˛ˇfl˛ˇ¿˝àòıÛÄ˝¸˙ˇ¿˝
  5064. "8ıÛÄ˝¸˙ˇÄ˝àòıÛÄ˝¸?˙ˇÄ˝
  5065. "8ıÛÄ˝Ò˝àòıÛÄ˝w˝
  5066. "8ıÛÄ˝›˝àòıÛÄ˝w˝
  5067. "8ı ÛÄÁàòı ÛÄÁ
  5068. "8ı ÛÄÁàòı ÛÄÁˇ¯ı ÛÄÁı ÛÄÁı ÛÄÁ~ı ÛÄÁBı ÛÄÁBı ÛÄÁBı ÛÄÁ √ÿı ÛÄÁ    òı ÛÄÁÅı ÛÄÁBı ÛÄÁ$ı ÛÄÁı ÛÄÁı ÛÄÁıÛ‰ˇ¯ıÛġˇÏ"$ıÛÅÄÏàåıÛÉÄÏ"$    ¸ıÛÖÄÏàå    ıÛâÒÄÏ"$|âÿıÛêÄÏàå@IXıÛ†ÄÏ"$@)XıÛ†ÄÏàå@)XıÛêÄÏ"$@I¸XıÛâÒÄÏàå|à@XıÛÖÄÏ"$@XıÛÉÄÏàå@XıÛÅÄÏ"$ÿıÛġˇÏàåıÛ‰ˇ¯ı
  5069. Û¡¯ı…………………………………………………………………………………………………………………………………………………………………………Ù¿ÿ8    >xxq¯> ˛  è¿0Ä˝  ˛Ä0IJ5 DÑà ˝  @Ä˝ ˛ ˝Ä˛˛˛97 BÄ  a‰Kú A(àûá\,<<8qv<8∏"&8∞è<ó8Òc97 BÄ` "$L"@C(Hëàô"`2Dë"DâÇ"D¿""»àë"DòDâë"97<B|x¯<"$H"á¿ÄÄDHëà"@"D"@Å"DÄBààë"Dê<â 97 B  "$H>@DHëá>@"D"8Å"|ÄBààë>DêDâ97 B@ "$H @˛HëÄë @"Dë"Å"@ÄÇààë DêDâ97 DÑÅ "$»"‡ÄÇIëàë"@"Dì"Dâ"DÄÇààë"DêDâ"97>xx¯‡ !„H«ÇÜûá@"<<8q<8ÄÇ àè<ê<Ò˜ ˘Ë˛ÄIJ¯ ˘ËÄIJ ¯¿€˚…………… ¯‘
  5070. GăÄ<Ä‘
  5071. D@ƒÄBÄ‘
  5072. Ñ#ħq¿@8pá‘
  5073. Ñ$@§àÄ@DààÑ‘
  5074. Ñ$@îàÄ<@xàÑ‘
  5075. Ñ$@îàÄ@àèÑ‘
  5076. Ñ$@åàÄ@àà‘DD@åàÄBD˛à‘
  5077. GÉÄÑp`<8xá‘ ¯‘………………………………………………………………………
  5078. ¯ Ç–
  5079. Ä˛Δ– ÄÛa≈Ä™8∞·„ãÄ÷ Å"&@íD…$L’ Ò"$@Ç<àÚ$H’ Å"$@ÇDâ'»’ Å"$@ÇDâ$’ Å"$@ÇDâ$H’ ¯Ò!ƒ@Ç<àÒ„à’˜ ‘¯ ‘¯¿‘…………)ƒ  ÇÄ˝0Ä@¸Ú&ƒ˛ Δ˛˝˙Ò.*§qa„Ä™8qã8q`8qsèá8√ã‚ÃYàñ0·«q`Ù.*§â""$@íDàåàDâêâÑHëàëDLÅ2fHô"âêÙ.*îà™ "$@Ç<ÄààDÅâ»ëàDHÅ"DHë‚âÙ.*"'¿ÇDÄààDq˘HëàDHÅ"DHë"âÙ.*åÄD"$ÇDÄààD    ÅHëàDHÅ"DHë"âÙ.
  5080. åàD""$@ÇD˛àDââHëàëDHÅ    "DIë"âÙ.*ÑpD!„ÄÇ<pàÜ8q qœá CàÄ‚"DFë··àqÙ Ò¸· Ò¸·……………Ä˝Ä◊Ä˝Ä◊(xá‚Ãxâ√ãÄa¿Ÿ(DààÅ2DàÑLí ⁄DDààÅ"DàÑHÿDDàèÅ"Dàá»ÿ˛Dàà"DàÑÿÇDààÅ    "DòÑH ŸÇxá‚"xhcà¿Ÿ@ĸ@˛Ÿ@ĸ@˛ ÷ˇ3º@ˇ ˇˇˇˇ@
  5081. ˇ·ˇ‚7^
  5082. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  5083. (‡*2-58    )BUsing the Edition Manager4^*¿¯
  5084. j*p¯4j*p¯ klk¯
  5085. ˇ·ˇ‚7^ °dONLNd\lj<(fl&Duplicating Publishers and Subscribersˇˇˇˇˇˇ‘@(fÒ2
  5086. °dONLNd(pl|S(yl4Whenever a user clicks a publisher or subscriber borц°dONLNd\pS|a)Áderü@°dONLNd_pa|Ù)!, you should change the contents °dONLNdÄ}lâ˚(Ül$of the section to a selected state. uÄ°dONLNd§}˚â)èY6°dONLNd•}âÑ)ou should discourage users fr`°dONLNd¬}Ñâ·)Éom making multiple °dONLNd’älñfl(ìlScopies of a publisher and pasting them in the same or other documents, because the °dONLNd(ól£    *$contents of the edition would be difÕ`°dONLNdLó    £)ùfi⁄ °dONLNdNó£u)cult or impossible to pr3`°dONLNdfóv£Û)gedict. Multiple copies of the °dONLNdѧl∞)(≠l*same publisher also contain the same contrKÄ°dONLNdƧ*∞})æol block value. See @†°dONLNd¬§~∞é)T“Cr†°dONLNd≈§é∞Ù)eating and Registering °dONLNd‹±lΩ¿(∫la Section” on page °dONLNdÔ±¡Ω”)U2-74`‡°dONLNdÛ±”Ωg)" for detailed information on contr;Ä°dONLNd±gΩê)î
  5087. ol blocks.°dONLNd √lœ‚(ÃlWhen a user attempts to cr˝¿°dONLNd:√‚œt)v#eate a copy of a publisher that alr√Ä°dONLNd]√uœfl)ìeady exists, you should °dONLNdu–l‹6(Ÿl.display an alert box such as the one shown in /Ä°dONLNd£–7‹O)ÀFigur@°dONLNd®–O‹h)e 2-24ü¿°dONLNdÆ–h‹j).
  5088. ˛*¯4ˇ*¯"ˇ*]
  5089. ˇ·ˇ‚7^    °dONLNd±Ùlˇú(¸l Figure 2-24°dONLNdΩÙÆˇB)B&Creating multiple publishers alert box
  5090. °dONLNdÂílû›(õlRWhen a user attempts to save a document that contains multiple copies of the same °dONLNd7ül´ñ*    publisherÓ‡°dONLNd@üï´d))0, display an alert box such as the one shown in û`°dONLNdpüe´})–Figurq °dONLNduü}´ñ)e 2-25†°dONLNd{üó´ô).
  5091. Õ*fi¯4Œ*fi¯"Œ*]
  5092. ˇ·ˇ‚7^    °dONLNd~√lŒú(Àl Figure 2-25°dONLNdä√ÆŒ;)B$Saving multiple publishers alert box
  5093. °dONLNd∞flrÿ(olIf a user decides to ignorN`°dONLNd fŸr…)m9e your alert box, your application should still save the °dONLNdslZ(|l5document, but you should continue to display this err◊°dONLNd8sZç)Ó or message ØÄ°dONLNdCsé∑)4
  5094. every time†`°dONLNdMs∏‡)*
  5095.  the user °dONLNdWÄlå»(âlsaves this document.
  5096. jz¯òÄ2FÉHH\*4ˇˇˇˇˇˇFÉl‰h?”ˇ ” ”'”ˇê'”ˇê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê&˝Ä⁄ê+&˝¿˝˝Ä˛`˝c˛¯¿ÃÄ˚Δ¸ê'&˝¿˝1Ģc˛ÿ¿Ä˚Δ¸ê1&˝`˝1Ò≥¿cÄx¯xÛ·„`ÃïÃqÒ∞<|<|èÁ√¿˛ê/&˝`˝1ôôΔ`f@åÃÃc33Ä˝Ã…ôô¿˝fÄΔf`˛ê0&˝ 0˝1ôôÜ`g|ÃÃc33¯˛Ã·ôôÄ˝fÄΔf`˛ê1&˝ 0˝1ô˘á‡cIJÃc3Û¿˛Ãqô˘Äff~fÄΔg‡˛ê0&˝˝1ôÅÜa¿˛Ãc3¿˛Ã 9ôÅÄff`fÄΔf˝ê1&˝ò˝1ôâÜ d¿˛Ãc3¿˛ÃôôâÄffbfÄΔf ˛ê1&˝3Ã˝1òÒÉ¿cÄ|Ãx31„¿|¯ÃqòÒÄ<|<fèfc¿˛ê&˝3ÃÊ`ˆê&˝cΔÊ`ˆê&˝cΔ⁄ê&˝√√⁄ê&˝√√⁄ê&˛É¡Ä€ê$&˛É¡Ä˛| Δ0 ˚`ÿÚê$&˛¿¿˛` ˛$ ˚2`ÿÚê'&˛¿¿˛`|œ1„‡6 x¯Ãx€00<c√ÄHÚê'&˛¿`˛`ÃΔ3306 åÃÃå„08Fff@êÚê%&˛Ä`˛xÃΔ330 |ÃÃ|√0>fgê$&˛ Ä0˛`ÃΔ330¸Ã√0fg„ÄÒê$&˛ 0˛`ÃΔ330¸Ã√0ff¿Òê$&˛˛`ÃΔ330¸Ã√0&ff$ÃÒê&&˛Ä˛||√1„0x|Ã||¡>c√åÒê&˛0¿ Ò0Ïê&˛0¿ Ú0Ïê&˛`ÄÚ‡Ïê&˛`€ê&˛¿€ê&˛˝ˇ€ê&˛ˇˇ˛€ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê%&˜0p1IJ`¸å˚Ä ¿¸ê!&˜0¿1įå˚ ¿ ¸ê,&˜&1‡yÒ≥¿cġáçûœáèÄx¯x Ãœå«èÒê+&˜0¿1ôôΔ`f@ÃÃŒ3å»Ã¿˛Ã ˝Ã ôôúÅòê,&˜0¿1ôôÜ`g˛Ã3å«Ã¿˛ÃåÃÃŒôòĢòê,&˜0¿1ô˘á‡cIJÃ?åÃÿÃø ÃëüòÅôòê,&˜0¿1ôÅÜa¿˛Ã0åÃÿÃÿ ÃÃ√ôòÅôòê,&˜0¿1ôâÜ d¿˛Ã1åÃÿÃà ÃÃ…ôòòÅôòê,&˜&0¿òÒÉ¿cÄëåëÿxÃx œå«èè˘òê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê'&˜| Δ0å¯å`˝ 0¸Δ¸ê'&˜` ˛    å¿ ˝ 0¸Δ¸ê*&˜`|œ1„‡œáÄ¿˘ûc«¬8<|x‡6x¯O¸ê*&˜`ÃΔ330åÿ¡ôåffdd ôôåff1ê#8ÃÃܸê*&˜xÃΔ330åÿÒôåff`p ôåff1¿0Ãøê*&˜`ÃΔ330圿¡ôåff`8 ôå~f0‡30¸Ã¸ê*&˜`ÃΔ330åáôåff` ôå`f0p30¿Ã¸ê*&˜`ÃΔ˛3åÃ@¡ôåff`L ôôåbf1030ƒÃ¸ê*&˜||√1„3ëį˘ÜcΔ`8Ü<f‡0xøê&Ú‰ê&ډꠠ  &‘ê    &‘ê    &‘ê    &‘ê&ÙÄ¿¿Áê&Ù¿¿Áê&˜    |l˘é<x¯«ÄËê&˜fq˛ôåÃÿËê&˜    faôôò|ÃÿËê&˜    fa˘ôòÃÃœ¿Ëê&˜faÅôò˛ÃÁê&˜faâôô˛ÃLËê&˜    |`˘é |¯«åËê&˜`flê&˜`flê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê&›˚ˇ¯ê&›˚ˇ˛ê &›˘ˇê&fi˚Äê&fi«˚ˇ„Äê&fiÿ˚¿ê&fiê˚    ¿ê&fi†˚¿ê&fi†˚¿ê&fi†<c¿ê&fi†ff¿ê&fi†fl¿ê&fi†fx¿ê&fi†fp¿ê&fi†fx¿ê&fi†fl¿ê&fi†ff¿ê&fi†<c¿ê&fi†˚¿ê&fi†˚¿ê&fi†˚¿ê&fiê˚    ¿ê&fiÿ˚¿ê&fi«˚ˇ„Äê&fi˚Äê &›˘ˇê&›˚ˇ˛ê&›˚ˇ¯ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê    &‘ê'”ˇê'”ˇê ” ”?”ˇˇœœœœœœ—ˇœœ—ˇ—ˇœœœœœœœœœœœœœœœœœœœ——Ä—Ä—Ä—Ä—Ä—œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ——ú—ò—ò——ò—œœœœœœœ/    |‡à˝    p‡‡@˝    a¿˝ IJ.@à0¸à0¸    !@˝Ä¯31@ÑPyÁPÁ8≈áÅf"#åxCÄÒ¬0‚√ãúÑ8ªÄ‚,Ã31@ÑêâÄêëFHÅô"!DD@â"$L"DD¡â,Ã31xѯÒ!âÄ!èDHÅ"!DD@â"$H ƒDÅâ\Ã31@ÑBâÄ BëDHÅ"!DG¿â"‚'»D|ÅâÄÃ31@Ñɯâ@ɯDHÅ"!DDâ"$D@ÅâDÃ31@àâ2ÄÄëDHÅ&!DD@â2"$H"DDÅâ8Ã31|x“¯‚ DGÅ ƒxCÄ”¬‚#àƒ8Ä¿‚ ˜ÛÄ˝@ÄÒ˜àÙÄ˝@ÄÒ
  5097. ˜pÙËœœœœœœœœœœœœœœœœœœœœœœ
  5098. ¯ Ç÷
  5099. IJΔ÷ ÄÛa≈Ä™8∞·„ãÄfiˇ Å"&@íD…$L›ˇ Ò"$@Ç<àÚ$H›ˇ Å"$@ÇDâ'»€ Å"$@ÇDâ$›ˇ Å"$@ÇDâ$H€ ¯Ò!ƒ@Ç<àÒ„à€˜ ⁄¯ ⁄¯¿⁄œœœœ)ƒ  ÇÄ˝0Ä@¸¯&ƒ˛ Δ˛˝˙˜.*§qa„Ä™8qã8q`8qsèá8√ã‚ÃYàñ0·«q`˙.*§â""$@íDàåàDâêâÑHëàëDLÅ2fHô"âê˙.*îà™ "$@Ç<ÄààDÅâ»ëàDHÅ"DHë‚â˙.*"'¿ÇDÄààDq˘HëàDHÅ"DHë"â˙.*åÄD"$ÇDÄààD    ÅHëàDHÅ"DHë"â˙.
  5100. åàD""$@ÇD˛àDââHëàëDHÅ    "DIë"â˙.*ÑpD!„ÄÇ<pàÜ8q qœá CàÄ‚"DFë··àq˙Ò¸Èˇ Ò¸Á—ˇ—ˇ—ˇœœÄ˝Ä›Ä˝Ä›(xá‚Ãxâ√ãÄa¿fl(DààÅ2DàÑLí flDDààÅ"DàÑHfiDDàèÅ"Dàá»fi˛Dàà"DàчˇÇDààÅ    "DòÑH ·ˇÇxá‚"xhcà¿fl@ĸ@˛fl@ĸ@˛ fiˇ
  5101. ›hN¯òÄ2FÉHH\*4ˇˇˇˇˇˇFɇk¥g“ˇ¿Ä”@Ä”@    ü‘ˇ˛@    ü‘ˇ˛@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@#ò˝¸£0¸ ¸a@˛`ı@#ò˝¸£0¸ ¸a@˛`˛ı@*ò˝¸£1·„`x¯|û>6Ò@8x¯Ò„>ôò¯@+ò˝Ä˝323IJÃ˛38`dÃÃb332ôò¯@+ò˝Ä˝„1Û˛Ã ˛30``ÃÃaÛ38ôò¯@*ò˝0¿¸√Û3¸Ãà ?330``ÃÃc33ôò¯@*ò˝0¿¸√3¿Ãà 0330``ÃÃc33ôò¯@*ò˝``¸√3ƒÃà 1330`dÃÃc33&ëò¯@*ò˝f`¸¡·ÛxÃ| >008xÃ1Û3ü‡¯@ò˝œ0Û0È@ò˝œ0Û0È@ò˛è⁄@ò˛è⁄@ò˛ ⁄@ò˛ ⁄@ò˛⁄@/ò˛˛Åò˝ ¿1Ä1åÉ˚
  5102. `@/ò˛ ˛òÅÄ˝ ¿1ÄÄ    ˚
  5103. Ä`@3ò˛ ˛'ôôÒò„·„g„¿y3Ãx¯É>36à · @2ò˛Ä˝ô"ì33åÄΔ`1ôò31åÃÃÉ#33#8Ãôôí@@3ò˛ÄÒ˛ô"√33Δ`1ôò31åÃÃ330Ãôô¿@1ò˛¿Åôôò„3ÛΔ`1ô¯31åÃø3 0Ãôô¯‡@1ò˛¿Åôôòs3ÄΔ`1ôÄ31åÃø3 0ÃôôÄp@1ò˛``Å˛ô33    ÄΔ`1ôà31åÃø3 0à   ôôâ0@3ò˛-``ĢÒò„1„c¿ò0ÃxÃ30|ò‡@ò˛¿0„ ˙@ò˛¿0„å˙@òÄ„x˙@òÄ€@ò˛ €@ò˛ˇ¸€@ò˛ˇ¯€@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@%ò˜¡¿Δ˛ĸ0˚>03` ¸@ ò˜√Δ˜0˚300` ¸@,ò˜&«ÅÁ√Δœé˛6x>>„·‡33>3|<l<«¿@+ò˜√ΔfgÅô338Ã3#3330˝32ffp ff`@,ò˜√ΔffÅú330Ã33330>˛38ff` fÊ`@,ò˜√ΔgÊÅé330¸˛3330˛3f~` ff`@,ò˜√Δfá330¿˛3330˛3f`` ff`@,ò˜√Δf&Åì330ƒ˛3330˛3&fb` ff`@,ò˜&√fcΔé30x33„1‡0>3f<`<Ê`@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@)ò¯3¿0‡f1Ä˝0¿˝¸@)ò¯Ä0˛    0`0˝0¿˝¸@+ò¯ÅÛ<«èÄ>Êyè‡<|xÒÒ„ÄxŸ„·<¸@+ò¯É3Ãÿ33f1ôôëê2ff1ôòΔ@å„32¸@+ò¯„3Ãÿ33Δf1ôôÅ¿0ff1ôò«|√30¸@+ò¯É3Ãÿ3?f1ôôć0ff1˘ò√ÄÃ√Û0¸@+ò¯É3Ãÿ30f1ôôÄp0ff1Åò¡¿Ã√0¸@+ò¯É3˛Ã31f1ôôÅ02ff1âòƒ¿Ã√0¸@+ò¯ÒÛ «åÃ3„Êèć<fÒòcÄ|¡„0 ¸@òÚ‰@òÚ‰@    ò‘@    ò‘@    ò‘@    ò‘@òÙf`Ê@òÙ``Ê@ò¯    Ò≥√Ê8Ò„„Á@ò¯ôΔffdb˛3Á@ò¯    ôÜff`aÛ33Á@ò¯    ôáÊf`c33?Á@ò¯    ôÜf`c330Á@ò¯
  5104. ôÜ&fdc3310Ë@ò¯
  5105. ÒÉ√Ê81Û„0Ë@ò¯Äfl@ò¯Äfl@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@ò›˚ˇ‡@òfi˙ˇ¯@òfi˙ˇ¸@òfi¿˚@òfi˚ˇé@òfi`˚o@òfi@˚'@òfiÄ˚@òfiÄ˚@òfiÄÒå@òfiÄôò@òfiÄô∞@òfiÄô‡@òfiÄô¿@òfiÄô‡@òfiÄô∞@òfiÄôò@òfiÄÒå@òfiÄ˚@òfiÄ˚@òfiÄ˚@òfi@˚'@òfi`˚o@òfi˚ˇé@òfi¿˚>@òfi˙ˇ¸@òfi˙ˇ¯@ò›˚ˇ‡@    ò‘@    ò‘@    ò‘@    ò‘@    ò‘@ˇ    ò‘@    ò‘@    ò‘@ˇ    ü‘ˇ˛@ˇ    ü‘ˇ˛@Ä”@Ä”@“ˇ¿ˇœœœœœœœœœœœœœœ——ò—ò—ò—ò—ò–œœœœœœœœœ——#——3—3—3—œœœœœœœœœœœœœœœœœœœœœ————2—8———&—œœœœœœœœ–x–å–|–ÖÖÖ|œœœœœœœœœœ0
  5106. <<8¸¯Ä˛    ?@˝    a¿˝ IJ,    "BDÄĽĠ!˙    !@˝IJ31!@ÑÄÅáë.pÄ!  D≈áÅf"#åxCÄÒ¬0‚√ãúÑ8ªÄ‚ 31!@¯Äàë0àÄ> "DFHÅô"!DD@â"$L"DD¡â 31!><|àë àDDHÅ"!DD@â"$H ƒDÅâ@31!Äàë ¯"(DHÅ"!DG¿â"‚'»D|ÅâÄ31! Äàë Ä"(DHÅ"!DDâ"$D@Åâ@31"B@ÑÄàì à!!"DHÅ&!DD@â2"$H"DDÅâ 31<<¸xÄáç pÄ?DGÅ ƒxCÄ”¬‚#àƒ8Ä¿‚ ˆÄÙÄ˝@ÄÒ˜ÄıÄ˝@ÄÒ
  5107. ˜ÙËœœœœœœœ––––––––––––>B Äÿ ˛1Äÿ  <«q`*é,8x‚‡›  DBâê$ë2Dâ‹ <DBâ è"<â‹  DBâ ë"DâÚ‹  DBâ ë"Dâ‹  DBâ ë"Dâ‹ ><Aàq è"<x‚‹˜€˜à€˜p€––œœ)1˛@ Ä @@˝  <¸ǯ&1˛@1Ä@@˝˛B˘Ä¯.*)D@Eáx‡*éb«XEé\„«Ña√é0‚¿@8≥b%å8qΔX˙.*)"D@FHàâ$ë"#""dFD"a$D"$D @DÃôí&DDàÇ"d˙.*%"*ÄDHâ è "" DDD"@Ú$D"ƒ @Dàë$D@xÇ"D˙.*%>*ÄDGâ ë ""DDD>A$D"D @Dàë$D@àÇ"D˙.*# D@àâ ë ""DDD A$D"D @Dàë$D@àÇ"D˙1
  5108. #"DHàâ ë˛""DDD"A$D"$D BDàëdDDàÇ"D¸ˇ1*!DGx‡ è"!éD@DC@Û«Ñ!√√‚ <8àë§D8xbD¸ˇ @˝Á Ä˝Á—ˇœœœœ`<˝ › B˝ ›
  5109. <!¿@8≥"p‚‡Xpfl
  5110. "" @DÃë"!dàfl"" @Dàë"!DÄfl"#‡@Dàë"!ÚDÄfl?ë""@Dàë"!DÄfl ë"" BDàë&!Dàfl û<!¿<8àû‚Dpfl ¸˛˛@‡ ¸˛‹ˇ:†@ˇ ˇˇˇˇ@
  5111. ˇ·ˇ‚7^
  5112. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äUsing the Edition Manager
  5113. , (‡2-59
  5114. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  5115. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  5116. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  5117. 4€4—?òÄ
  5118. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  5119. ˛ˇˇˇ
  5120. ˛ˇˇˇ
  5121. ˛ˇˇˇ
  5122. ˛ˇˇˇ˜˝˛ˇ˛
  5123. ˛ˇ˛ˇˇ
  5124. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  5125. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  5126. ˛ˇ˛ˇˇ
  5127. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  5128. ˛ˇˇˇˇ
  5129. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  5130. ˛ˇˇˇˇ
  5131. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  5132. ˛ˇˇˇˇ
  5133. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähë(eäA∫†°dONLNd\ëhâ)8 user can modify the contents of any duplicate publisher©@°dONLNd9\âh)¯", but the contents of the edition °dONLNd[iäuc(rä2will be whichever publisher was the last to write..°dONLNdé{äáø*FWhen a user chooses to copy and paste or duplicate a section, use the ,
  5134. Courier°dONLNd‘{øá˚(Ñø
  5135. HandToHand°dONLNdfi{˚á˝)< .°dONLNdflàäîÂ(ëäfunction (described i• °dONLNdÙàÂîÌ)[n ˆÄ°dONLNdˆàÌîZ)Inside Macintosh: MemoryGÄ°dONLNdà[î^)n)õ`°dONLNdà^îÕ) to duplicate the section r– °dONLNd*àÕîfl)oecorDÄ°dONLNd.à‡î) d and alias .°dONLNd:ïä°é(ûärR`°dONLNd;ïé°†)ecor$¿°dONLNd?¶)d$¿°dONLNd@ﶰ∫). Set$¿°dONLNdEï∫°Œ) the $¿°dONLNdJÏ)alias$¿°dONLNdOïÏ°ı) fi$¿°dONLNdRïı°g)    eld of the cloned section r˜ °dONLNdmïf°x)qecor…Ä°dONLNdqïx°è)d to t…Ä°dONLNdwïè°π)he handl…Ä°dONLNdïπ°œ)*e of t…Ä°dONLNdÖ¸)
  5136. he cloned .°dONLNdè¢äƆ(´äalias ¿°dONLNdƧ)r“¿°dONLNdñ¢§Æ∂)ecorG °dONLNdö¢∑Æe)'d and generate a unique section identifi,@°dONLNd¬¢fÆ)Ø'cation number for it. In addition, you °dONLNdÈØäªH(∏ä-should also place the section data, section rü‡°dONLNdØHªZ)æecor@°dONLNdØ[ªî)d, and alias rÔ‡°dONLNd(Ø쪕)8ecord@°dONLNd,ضª‰)d in the scrap..°dONLNd<¡äÕØ( äUse the °dONLNdD¡ØÕ    )%RegisterSection°dONLNdS¡    ÕZ)Z function (describe°dONLNdf¡ZÕm)Qd in °dONLNdk¡mÕ) “Opening and Closing a Document .°dONLNdãŒä⁄(◊äContaining Sections” on page χ°dONLNd®Œ⁄!)Ö2-22@¿°dONLNd¨Œ"⁄%))dONLNd≠Œ%⁄6) to rÄ°dONLNd≤Œ7⁄’)&egister the cloned section’s section r
  5137. ¿°dONLNdÿŒ’⁄Á)ûecor °dONLNd‹ŒÁ⁄Ô)d.°dONLNdfl‡äÏë(ÈäA∫†°dONLNd‡‡ëÏÊ) user can select the ≈@°dONLNdı‡ÊÏ)Ucontents‘†°dONLNd˝‡Ï∏)") of a publisher without selecting the bor∞°dONLNd&‡∏Ï)∞der and copy just °dONLNd8Ì䢽(ˆäWthe data to a new location. In this case, the user has simply copied data (and not the °dONLNdè˙äÂ*publisher). Do not crÒ`°dONLNd§˙Â)[
  5138. eate a borâ °dONLNdÆ˙Ø)+&der for this data in the new location.
  5139. +H24,H2 -ä-
  5140. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd÷ä+('äModifying a Subscriberˇˇˇˇˇˇ€r('2
  5141. °dONLNdÓ2ä>W(;ä0When the user selects data or clicks the data ar6Ä°dONLNd2X>§)Œea of a subscriber$°dONLNd02§>)L, you should highlight °dONLNdG?äKØ(Hä    the entirh °dONLNdP?ØK<)%!e contents of the subscriber usin °dONLNdq?=KS)ég invq@°dONLNdv?SKÄ)
  5142. erse videoù†°dONLNdÄ?ÄKÖ)-. ?@°dONLNdÇ?ÖK)Although you shouldn’t allow a °dONLNd°LäXF(Uä,user to edit the information in a subscriberı`°dONLNdÕLEXU)ª, yo˙°dONLNd—LUXf)u caÒ`°dONLNd’LgXÎ)n allow a user to make global °dONLNdÛYäe—(bäadornments to s∏Ä°dONLNdY—e)G ubscribers. P`°dONLNdYe;)3 In other worW@°dONLNdY;e˙)7.ds, users can change the font, size, or other °dONLNdHfärÊ(oächaracteristics of the G@°dONLNd_fÁr˙)]entirã °dONLNddf˙r˝)en¿°dONLNdef˛r.)  subscriber…@°dONLNdpf-r7)/. FX`°dONLNdsf8r˙) -or example, a user might select a subscriber °dONLNd†sä=(|ä(within a document and change all text frÄ`°dONLNd»s=¥)≥om plain to bold. However3‡°dONLNd·s¥Ì)w, you should °dONLNdÓÄäå›(âädiscourage users frO†°dONLNdÄfiå‡)T8om modifying the individual elements contained within a °dONLNd9çäôj(ñä2subscriber—for example, by editing a sentence or r⁄`°dONLNdkçjôÁ)‡otating an individual graphi@°dONLNdáçËôÙ)~c oj°dONLNdäçÙô
  5143. ) bject.°dONLNdëüä´°(®ä>Remember that each time a new edition arrives for a subscriber@°dONLNdœü°´÷(®° , any modifiT °dONLNd€ü÷´ )5cations that °dONLNd˨ä∏—(µäthe user has intr≠@°dONLNd˘¨—∏˝)G    oduced ar‡@°dONLNd¨˝∏W),e overwritten. Globa⁄@°dONLNd¨X∏ì)[l changes to a£@°dONLNd$¨î∏¿)<
  5144.  subscribe»Ä°dONLNd.¨¿∏œ),r ar °dONLNd2¨–∏‡)e m¿°dONLNd5¨‡∏) uch easier °dONLNd@πä≈Ù(¬äfor your application to rn °dONLNdYπÙ≈)j    egenerate* °dONLNdbπ≈!)+.
  5145. ”H·4‘H·    °dONLNdd“ä›ù(⁄äNote
  5146. ˇ·ˇ‚7^
  5147. °dONLNdifläΫ*FAlthough adornments should be global and never partial, you may still °dONLNdØÎä˜ô* Aneed to give users the ability to select portions of a subscriber,Ä°dONLNdÎô˜≠(Ùô, for °dONLNdˆ˜äj(ä1instance, when performing spell checking and searÑ¿°dONLNd'˜jè)‡ch-and-r @°dONLNd/˜êÆ)&eplace °dONLNd6äª( ä operations.,Zapf Dingbats‚Ä°dONLNdB¿Δ)6u
  5148. °dONLNdEä q(ä7If you do allow a user to edit a subscriber section, pr|Ä°dONLNd|q ô)Á    ovide an °dONLNdÜ!ä-(*äQenable/disable editing option within the subscriber options dialog box using the .°dONLNd◊.ä:*SectionOptionsExpDialog°dONLNdÓ.:d)ä function, describe°dONLNd    .d:p)Pd i°dONLNd    .p:w) n °dONLNd    .w:˜)“Customizing Dialog Boxes”°dONLNd     .˜:˘)Ä .°dONLNd    !;äG(Däbeginning on the next page.9Ä°dONLNd    <;G){ WπÄ°dONLNd    >;G√) )hen you allow a user to edit a subscriberq¿°dONLNd    g;√G¸)≤, you should °dONLNd    tHäTÛ(Qächange the subscriber fr˘‡°dONLNd    åHÛTå)i$om a selected state to editable data °dONLNd    ∞HçTè)ö.°dONLNd    ≤Zäfê(cäBõ¿°dONLNd    ≥Zêf˚)Tecause a user can modify a publisher just like any other portion of a document, its °dONLNd
  5149. gäs¸(päSsubscriber may change in size as well as content. For example, a user may modify a °dONLNd
  5150. ZtäÄr*3publisher by adding two additional columns to a spr?¿°dONLNd
  5151. çtsÄú)È    eadsheet.ˇp@ˇ ˇˇˇˇ@
  5152. ˇ·ˇ‚7^
  5153. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  5154. (‡*2-60    )BUsing the Edition Manager4^*¿¯
  5155. k*r¯4l*r¯ mlm¯
  5156. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd\lkÌ(glRelocating an Editionˇˇˇˇˇˇ€r(g2
  5157. °dONLNdrl~•({lIn the Finder¿°dONLNd$r§~:)8", users cannot move an edition acrx`°dONLNdFr;~|)óoss volumes. TÄ°dONLNdTr|~á)Ao ræ°dONLNdWrá~Ÿ) elocate an edition, °dONLNdklã|(àlthe ›`°dONLNdo|ã∞) user must fiE°dONLNd{±ã})52rst select its publisher and cancel the section (rÊ°dONLNd≠}ã∏)à emember to r‚°dONLNdπ∏ãË);
  5158. emove the °dONLNd√ålòz(ïlborB °dONLNdΔå{òÊ)der). The user needs to rd`°dONLNdflåÊòŸ)k7epublish and then select a new volume location for the °dONLNdôl•ê(¢l    edition. a°dONLNdôê•)$As a convenience for the userw@°dONLNd<ô•N)Å, you should r◊ °dONLNdJôN•ı)=)etain the selection of all the publisher °dONLNds¶l≤f(Øl<data after the user cancels the section to make it easy to ró °dONLNdضf≤¿)˙epublish the section.
  5159. ◊*fi¯4ÿ*fi¯ ŸlŸ¯
  5160. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNdΔ»l◊ (”lCustomizing Dialog Boxesˇˇˇˇˇˇ€r(”2
  5161. °dONLNd‡filÍ”(ÁlPThe expandable dialog box functions allow you to add items to the bottom of the °dONLNd0Îl˜ä*dialog Ò °dONLNd7Îä˜Î)Pboxes, apply alternate mapping of events to item hits, apply alternate meanings °dONLNdá¯lw(lto ∑‡°dONLNdä¯wó) Dthe item hits, and choose the location of the dialog boxes. See the »‡°dONLNdŒ¯ó∫(óchapter °dONLNd÷lq(l“°dONLNd◊që)Dialog 톰dONLNdfië∏) Manager$†°dONLNdÂπæ)(”$†°dONLNdÊæÀ) in fi`°dONLNdÍÀI)Inside Macintosh: Macintosh T0‡°dONLNdIç)~oolbox Essentialsı‡°dONLNdçî)D au‡°dONLNdï≥)nd the @`°dONLNd!¥◊)chapter °dONLNd)lq(l“°dONLNd*qì)Standar¥@°dONLNd1ì“)"d File Package[@°dONLNd?”Â)@” in °dONLNdDÊC)Inside Macintosh: Files€‡°dONLNd[Cª)] for additional information.°dONLNdx$l0?(-l/The expandable versions of these dialog boxes rrÄ°dONLNdß$?0V)”equirâ¿°dONLNd¨$V0c)e fi‡ °dONLNd∞$c0Í)ve additional parameters. Use .°dONLNdŒ1l=~(:lthe ,
  5162. Courier°dONLNd“1~=¸)NewPublisherExpDialog°dONLNdÁ1¸=ƒ)~- function to expand the publisher dialog box.°dONLNdHlTÏ(Ql@err := NewPublisherExpDialog (reply, where, expansionDITLresID, °dONLNd`V bÏ+¥"dlgHook, filterProc, yourDataPtr);°dONLNdÉnlzë(wlUse the °dONLNdãnëz)%NewSubscriberExpDialog°dONLNd°nz›)Ñ. function to expand the subscriber dialog box.°dONLNd–ÖlëÏ(él@err := NewSubscriberExpDialog (reply, where, expansionDITLresID,°dONLNdì ü&+¥ °dONLNdì&üÚ)"dlgHook, filterProc, yourDataPtr);ˇˇË∫°dONLNd?´l∑ê(¥lUse the ˇˇ∫.Qt°dONLNdG´ë∑)%SectionOptionsExpDialogˇˇË∫Qt°dONLNd^´∑¯)ä2 function to expand the publisher options and the .°dONLNdê∏lƒ˘(¡l subscriber options dialog boxes..°dONLNd±œl€Ú*Aerr := SectionOptionsExpDialog (reply, where, expansionDITLresID,°dONLNd˝› È&+¥ °dONLNd˛›&È,) °dONLNdˇ›,ȯ)"dlgHook, filterProc, yourDataPtr);°dONLNd"ılÄ(˛lThe °dONLNd&ıÄû)reply°dONLNd+ıû) parameter is a pointer to a °dONLNdHıÄ)|NewPublisherReplyd@°dONLNdYıÑ)e, d@°dONLNd[ıÑ)NewSubscriberReplyHÄ°dONLNdmıÔÙ)k, °dONLNdolw( lor °dONLNdrwÈ) SectionOptionsReply°dONLNdÖÈÔ)r rR`°dONLNdáÔ)ecor$¿°dONLNdã)d, r˜ °dONLNdèD) espectively€`°dONLNdöCF)4.ˇˇ˙(°dONLNdúl s(lYï°dONLNdùr £)Fou can automatically center the dialog box by passing (–1, –1) in the ˇˇÓxI°dONLNd„§ ¬(§whereˇˇ˙(I°dONLNdˬ Û)
  5163.  parameterÖ–°dONLNdÚÛ ˜)1. °dONLNdı&l2Ä(/lThe °dONLNd˘&Ä2Ï)expansionDITLresID°dONLNd &Ï29)l parameter shoul°dONLNd&92i)M d contain 0°dONLNd&&i2í)0
  5164.  or a vali°dONLNd0&í2û))d i°dONLNd3&û2«)
  5165. tem list (°dONLNd=&«2Î))'DITL'°dONLNdC&Î2Ò)$) .°dONLNdE3l?o(<lrE°dONLNdF3p?à)esourç@°dONLNdK3à?ı)ce ID. This integer is the é@°dONLNdf3ı?¯)mrS@°dONLNdg3˘?)esourõÄ°dONLNdl3?)ce U`°dONLNdo3?5) ID of :Ä°dONLNdu36?F)an it@°dONLNdy3F?´)tem list whose items ar@°dONLNdê3¨?Ì)fe appended to °dONLNdû@lLÃ(Ilthe end of the standarÏ`°dONLNd¥@ÃL◊)`d ipÄ°dONLNd∑@ÿL|) 'tem list. The dialog items keep their rÙ¿°dONLNdfi@|L)§elative positions, but they °dONLNd˙MlYt(VlarE°dONLNd¸MuY∫)    e moved as a grt‡°dONLNd M∫YV)E#oup to the bottom of the dialog box뇰dONLNd.MVYÙ)ú#. See the chapter “Dialog Manager” °dONLNdQZlfw(clin π¿°dONLNdTZwfı) Inside Macintosh: Macintosh T @°dONLNdqZıf9)~oolbox Essentials—@°dONLNdÇZ9f>)D f• °dONLNdÑZ?f∑)or additional information o8°dONLNdüZ∏f√)yn iq¿°dONLNd¢Z√fÍ)
  5166. tem lists..°dONLNd≠llxÄ(ulThe °dONLNd±lÄxº)
  5167. filterProc°dONLNdªlºxfl)<> parameter should be a pointer to an expandable modal-dialog fi°dONLNd˙lflxÚ(ufllter ˇˇ§Ã°dONLNdˇylÖú(Çl function or ˇ˛Ód…ò°dONLNd     yúÖÆ)0NILˇˇ§Ã…ò°dONLNd    yÆÖ≤). °dONLNd    y≥Ö?)An expandable modal-dialog fi˛h°dONLNd    -y?Ö˜)å+lter function is similar to a modal-dialog .°dONLNd    XÜlír(èlfiå¿°dONLNd    ZÜrí◊)lter function or event fiD °dONLNd    sÜÿí )f6lter function except that an expandable modal-dialog fi °dONLNd    ™ÜÀí‹)Ûlter .°dONLNd    Øìlü/(úl+function accepts two extra parameters. The °dONLNd    ⁄ì/üq)√ ModalDialog°dONLNd    Âìqü})B prR`°dONLNd    Ëì}üö) ocedur$¿°dONLNd    ÓìöüÀ) e calls the .°dONLNd    ˙†l¨Â(©lexpandable modal-dialog fi:Ä°dONLNd
  5168. †Ê¨<)zlter function you prdž°dONLNd
  5169. (†<¨¢)Vovide in this parameter≤†°dONLNd
  5170. ?†¢¨ß)f. ˇ@:@ˇ ˇˇˇˇ@
  5171. ˇ·ˇ‚7^
  5172. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äUsing the Edition Manager
  5173. , (‡2-61
  5174. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  5175. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  5176. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  5177. 4€4—?òÄ
  5178. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  5179. ˛ˇˇˇ
  5180. ˛ˇˇˇ
  5181. ˛ˇˇˇ
  5182. ˛ˇˇˇ˜˝˛ˇ˛
  5183. ˛ˇ˛ˇˇ
  5184. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  5185. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  5186. ˛ˇ˛ˇˇ
  5187. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  5188. ˛ˇˇˇˇ
  5189. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  5190. ˛ˇˇˇˇ
  5191. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  5192. ˛ˇˇˇˇ
  5193. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähì(eäPrN†°dONLNd\îhΔ)
  5194. oviding a fiƒ °dONLNd\Δh[)2"lter function enables you to map r)¿°dONLNd0\\h)ñ(eal events (such as a mouse-down event) °dONLNdXiäuÒ(räSto an item hit (such as clicking the Cancel button). For instance, you may want to °dONLNd´vädž*map ÷ °dONLNdØv†Çß)a V °dONLNd±v®ÇÀ)keyboar °dONLNd∏vÃÇÍ)$Ad equivalent to an item hit. See the chapter “Dialog Manager” in °dONLNd˘Éäè§(åäInside qÄ°dONLNdÉ•è)Macintosh: Macintosh T“Ä°dONLNdÉèK)boolbox Essentials.óÄ°dONLNd'ÉLè≥)E for information on the ,
  5195. CourieróÄ°dONLNd?É≥èı)g ModalDialogóÄ°dONLNdJÉıè˜)B .°dONLNdKêäúì(ôäprG °dONLNdMêîú≤)
  5196. ocedurfi`°dONLNdSê≤úπ)e..°dONLNdV¢äÆû(´äThe °dONLNdZ¢ûÆ»)dlgHook°dONLNda¢»Æ))* parameter should be °dONLNdv¢)Æ©)aa pointer to an expandable d°dONLNdí¢©Æ‘)Ä    ialog hoo°dONLNdõ¢‘Æ)+ k function °dONLNd¶Øäªè(∏äo°dONLNdßØèªï)r °dONLNd©Øïªß)NIL°dONLNd¨Øߪ¨). !†°dONLNdÆبªÀ)?An expandable dialog hook function is similar to a dialog hook .°dONLNd̺仱(≈ä    function @°dONLNdˆº≤»–)(except ˛‡°dONLNd˝º–»Â)>that an expandable dialog hook function accepts an additional .°dONLNd;…ä’∫(“ä    parameter¬†°dONLNdD…π’“)/. The ¬†°dONLNdJ…“’V)NewSubscriberExpDialog¬†°dONLNd`…V’[)Ñ, ¬†°dONLNdb…[’Ÿ)NewPublisherExpDialog¬†°dONLNdw…Ÿ’Ò)~, and °dONLNd}÷ä‚(fläSectionOptionsExpDialog°dONLNdî÷‚)ä5 functions call your expandable dialog hook function ˇˇt:°dONLNd…„äÔÈ(Ïäafter each call to the ˇ˛\Æ≈"°dONLNd‡„ÈÔ+)_ ModalDialogˇˇt:≈"°dONLNd΄+Ô6)B pr º°dONLNdÓ„7ÔT) ocedurfi°dONLNdÙ„SÔb)e. TRV°dONLNd¯„cÔj)hRV°dONLNd˘„jÔp)e Δê°dONLNd˚„pÔ†)
  5197. dialog hoo: °dONLNd„°ÔÚ)1k function should tóx°dONLNd„ÚÔ˛)Qakóx°dONLNd„˛Ô) e t ≤°dONLNd„    Ô) he °dONLNd 丆(˘äapprR`°dONLNd$†¸)opriate action, such as fiR`°dONLNd>¸M)nlling in a checR`°dONLNdMM¸X)?kbR`°dONLNdOX¸{) ox. The R`°dONLNdW{¸∑)#
  5198. itemOffsetR`°dONLNda∑¸)< parameter to the .°dONLNds˝ä    ì(äprG °dONLNdu˝î    ≤)
  5199. ocedurfi`°dONLNd{˝≤    2)e is the number of items in th∑`°dONLNdô˝3    =)Åe iÈ`°dONLNdú˝=    w)
  5200. tem list befor˘ °dONLNd™˝w    ˘):e the expansion dialog items. õ°dONLNd»˝˙    )ÉY[Ä°dONLNd…˝    )ou °dONLNdÃ
  5201. ä(äneed to subtract the item of- °dONLNdË
  5202. )yfset frb‡°dONLNdÔ
  5203. ë)om the item hit to get the r√†°dONLNd 
  5204. ë)uelative item number in the °dONLNd&ä# ( äexpansion dialog item list. Th-¿°dONLNdD#Õ)É*e expandable dialog hook function should r±Ä°dONLNdnÕ#ˇ)¿eturn as its °dONLNd{$ä0µ(-ä
  5205. function r”@°dONLNdÖ$µ0œ)+esult tŒ °dONLNdå$–0>)he absolute item number °dONLNd£$>0C)n. °dONLNd¶6äB©(?ä?When the Edition Manager displays subsidiary dialog boxes in frà°dONLNdÂ6©B(?©ont of another dialog °dONLNd˚CäOÕ(Läbox on the user¿°dONLNd
  5206. CœOÂ)E’s scr˛@°dONLNdC‰O    )een, youn†°dONLNdC
  5207. O{)&r dialog hook and event fie°dONLNd2C|OΩ)rlter functions s‘@°dONLNdBCΩO)Ahould check the .°dONLNdRPä\Æ(YärefCon°dONLNdXPÆ\¥)$ fPÄ°dONLNdZP¥\Ê) ield in the PÄ°dONLNdfPÊ\.)2 WindowRecordPÄ°dONLNdrP.\k)H data type (fr"‡°dONLNdÄPk\å)=om the "‡°dONLNdáPå\∞)!window"‡°dONLNdçP∞\∂)$ fÛ`°dONLNdèPµ\Á) ield in the °dONLNdõ]äi“(fä DialogRecord°dONLNdß]“it)H#) to determine which window is currR`°dONLNd ]ti∏)¢ently in the for$¿°dONLNd⁄]∏iΔ)Degr˜ °dONLNd›]≈i )ound. The main °dONLNdÏjäv‹(sädialog box for the °dONLNdˇj‹vZ)RNewPublisherExpDialog°dONLNdjZvÅ)~     and the °dONLNdjÅv)'NewSubscriberExpDialog°dONLNd3jv)Ñ .°dONLNd4wäÉB(Ää*functions contains the following constant:.°dONLNd_éäö®*CONST°dONLNdgé¿ö,)6sfMainDialogRefCon°dONLNdÄé>öt)~    = 'stdf';°dONLNdçéÜö˛)H{new publisher and }°dONLNd∞úÜ®Ï*{ new subscriber}°dONLNd¬¥ä¿    (ΩäThe main dialog box for the °dONLNdfi¥    ¿ì)SectionOptionsExpDialog°dONLNdı¥ì¿Ù)ä function contains the .°dONLNd ¡äÕfi( äfollowing constant:.°dONLNd ÿ䉮*CONST°dONLNd(ÿ¿‰>)6emOptionsDialogRefCon°dONLNdEÿP‰Ü)ê    = 'optn';°dONLNdRÿò‰¯)H{options dialog}ˇˇÀî.°dONLNdcä¸î(˘äSeâ`°dONLNdeî¸õ)
  5208. e ûî°dONLNdgõ¸é)3“Summary of the Edition Manager” beginning on page ¿†°dONLNdö踶)Ù2-106Ä°dONLNdü߸¨) f≥Ù°dONLNd°¨¸)or additional constants. .°dONLNdªäû( äThe °dONLNdøû‡) yourDataPtr°dONLNd ‡")B parameter is rR`°dONLNdŸ"Ï)B0eserved for your use. It is passed back to your R`°dONLNd    Ï ) dialog ˇˇΔé°dONLNdä≠(ähook anFé°dONLNdÆ‘)$    d event f§*°dONLNd ‘Â)&ilte§*°dONLNd$Â) r function.j∏°dONLNd/”)-, This parameter does not have to be of type ˇˇS™,D°dONLNd[‘Ê)¬PtrˇˇΔé,D°dONLNd^Ê) —it can be ˇˇ¯¿°dONLNdiä(é(%ä;any 32-bit quantity that you want. In Pascal, you can pass ˇˇÍ@0@°dONLNd§è(—(%è yourDataPtrˇˇ¯¿0@°dONLNdØ—(“)B )°dONLNd∞”(·)in rÙ °dONLNd¥·()egister éÄ°dONLNdº(
  5209. )!AéÄ°dONLNdΩ
  5210. ()6 ,á@°dONLNd¿()
  5211.  .°dONLNd¡)ä5î(2äanQ`°dONLNd√)ï5∏) d declar °dONLNdÀ)∏5e)#%e your dialog hook and modal-dialog fiÅ@°dONLNdÒ)f5Ü)Æ    lter as l熰dONLNd˙)Ü5)  ocal functions without the last °dONLNd    6äB∑(?ä    parameterS†°dONLNd    #6∑B5)-. The stack frame is set up pr±°dONLNd    A65B˜)~.operly for these functions to access their par# °dONLNd    o6¯B)√ent °dONLNd    sCäO(Lä"local variables. See the chapter “! °dONLNd    ïCO;)èStandarU`°dONLNd    úC;Oz)"d File Package¸`°dONLNd    ™CzOå)?” in ∂ °dONLNd    ØCçOÌ)Inside Macintosh: Files ˝°dONLNd    «CÌO)`fP‡°dONLNd    »CÒO¸)or °dONLNd    ÀPä\Á(Yädetailed information..°dONLNd    ·bän≠*For the °dONLNd    Èb≠n+)#NewPublisherExpDialog°dONLNd    ˛b+n@)~ and °dONLNd
  5212. b@nƒ)NewSubscriberExpDialog°dONLNd
  5213. bƒn)Ñ functions, all the °dONLNd
  5214. -oä{(xäpseudo-items for the StandarR`°dONLNd
  5215. Io{})Ñd File Package—such as R`°dONLNd
  5216. `o}{◊)osfHookFirstCallR`°dONLNd
  5217. oo◊{Ó)Z(–1), °dONLNd
  5218. u|äà‰(ÖäsfHookNullEvent°dONLNd
  5219. Ñ|‰à)Z(100), °dONLNd
  5220. ã|àf)sfHookRebuildList°dONLNd
  5221. ú|fàï)f (101), and °dONLNd
  5222. ß|ïàÈ)/sfHookLastCall°dONLNd
  5223. µ|Èà)T    (–2)—can °dONLNd
  5224. æâäïfi(íäbe used, as well as °dONLNd
  5225. “âfiïP)TemHookRedrawPreview°dONLNd
  5226. ÂâPïj)r(150).ˇJÇ@ˇ ˇˇˇˇ@
  5227. ˇ·ˇ‚7^
  5228. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  5229. (‡*2-62    )B Subscribing to Non-Edition Files4^*¿¯
  5230. .°dONLNd\lhè(elFor the ,
  5231. Courier°dONLNd\èh)#SectionOptionsExpDialog°dONLNd\h–)ä) function, the only valid pseudo-items arR`°dONLNdH\–h◊)∑e °dONLNdJiluΔ(rlsfHookFirstCall°dONLNdYiΔu›)Z(–1), °dONLNd_i›u7)sfHookNullEvent°dONLNdni7uS)Z(100), °dONLNduiSuß)sfHookLastCall°dONLNdÉißuæ)T(–2), °dONLNdâvlÇfi(lemHookRedrawPreview°dONLNdúvfiÇ˙)r(150), °dONLNd£v˙Çl)emHookCancelSection°dONLNd∂vlÇà)r(160), °dONLNdΩÉlèfi(ålemHookGoToPublisher°dONLNd–Éfiè˙)r(161), °dONLNd◊É˙èl)emHookGetEditionNow°dONLNdÍÉlèà)r(162), °dONLNdÒêlú‰(ôlemHookSendEditionNow°dONLNdê‰ú)x(162), °dONLNd êúÑ)emHookManualUpdateMode°dONLNd"êÑú≥)Ñ (163), and °dONLNd-ùl©‰(¶lemHookAutoUpdateMode°dONLNdAù‰©t)x(164). See the chapter “StandarR`°dONLNd`ùt©…)êd File Package” in .°dONLNds™l∂Ü(≥lInside qÄ°dONLNdz™á∂Ã)Macintosh: Files Δ‡°dONLNdã™Ã∂^)E for information on pseudo-items.
  5232. Ω*ÿ¯4æ*ÿ¯
  5233. Ë*¯4È*¯ Í*Ͳ
  5234. ˇ·ˇ‚7^ˇˇ©ˇÆ°dONLNd≠’*Ëu(„*
  5235. SubscribinWT°dONLNd∑’vËë)Lg toǸ°dONLNdª’ëË) Non-Edition FilesˇˇˇˇˇˇV˛(„2
  5236. °dONLNdœ˘l„(lUsing the Edition ManagerꆰdONLNdˢ„5)w, a subscriber can rØ °dONLNd¸˘5j)R ead data dirª¿°dONLNd˘jà)5ectly frH`°dONLNd˘â)om another document, .°dONLNd%l±(lsuch as an entirR`°dONLNd5±∏)Ee R`°dONLNd7∏‹)'PICT'R`°dONLNd=‹Â)$ fiR`°dONLNd@ÂΔ)    5le, instead of subscribing to an edition. This featur$¿°dONLNduΔÊ)·    e is for .°dONLNd~lO(l3advanced applications that can set up bottleneck pr\@°dONLNd±Om)„ocedurÛÄ°dONLNd∑mã)es for r{ °dONLNdøåØ)eading. ©`°dONLNd«Ø«)#Figur| °dONLNdë‡)e 2-26†°dONLNd“·„) .°dONLNd” l, ()l(shows a document that is subscribing dirR`°dONLNd˚  ,L)¥ ectly to a R`°dONLNd L,p),'PICT'R`°dONLNd  p,y)$ fiR`°dONLNd y,Ö)    le.R`°dONLNd Ö,á)  
  5237. N*_¯4O*_¯"O*]
  5238. ˇ·ˇ‚7^    .°dONLNdDlOú(Ll Figure 2-26.°dONLNd!DÆO)BSubscribing directly to a °dONLNd;DO/)c'PICT'°dONLNdAD/O6) fi°dONLNdDD6O=)le
  5239. .°dONLNdHHlT€(QlTFor each application, the Edition Manager keeps a pointer to a bottleneck function. °dONLNdúUla*The ª¿°dONLNd†Uaî)>Edition Manager never opens or closes an edition container diro†°dONLNdfiUïa©(^ïectlyG†°dONLNd„U©a„). Instead, the .°dONLNdÚblnı(klEdition Manager calls the currR`°dONLNdbınF)âent edition openerï°dONLNd"bEn^)P. The ï°dONLNd(b^n∏)InitEditionPackï°dONLNd7b∏n‡)Z
  5240.  function .°dONLNdAol{™(xl(described on ı`°dONLNdOo™{¡)>page –@°dONLNdTo¬{‘)2-74$ °dONLNdXo’{)) sets up the curr†°dONLNdjo{ô)Jent system opener function.
  5241. _j0¯4^`_aòB@@_aübøø    ◊ˇ˛Ï÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏòB@Ä@Äüaflb÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏòBÄ¿Ä¿flab÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏòB¿¿a_b÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏ÷ˇÏøøøøøøøøøøøøøøøøøø ˛ÁÄ8 » ˛"@» ˛   » ˛Ñ  p» ˛Ñ  à» ˛FAàà» ˛(ÄBê» ˛fl¸<`»øøøø"˛Ê˛`Ä !Ä¿˛x„øê-fl"˛ ˛ê$ Ä@@˛$DTêSfl!˛˝@Ä@@DÄDàD Bfl#˛Üv¥ ‡4qÕ£qº8ËFÁë«@HêÓ‡#˛ç¢ò–     JRΔK–i±©DêàÑÄpêö4‡#˛    %‡C(â Ñä(êâ!–HPêàÄAî8‡#˛…aê% J¥ß    ¥¨`æBåa    ¿Åà&@‡#˛œ†·‡x¿.|GGH‡[¡ÃàAÅ√é<8‡˝ ˆ˝@˚fi˝ ˆ˝Ä˚fi˝¿ı‡˛˙fiø ˛‡ÿ00… ˛ @ `… ˛Ñ †…˛
  5242. Çû7<£^4qhÕ˛
  5243. ç4hî$äI¶∞Õ˛
  5244. $P®Hîâ' Õ˛
  5245. 7»ë,$I÷ú»@Õ˛
  5246. ÀxÓH5Δ§i«@ÕòB@@_aübˆ Ãˆ Ãˆ¿Ãø$˛0Ä 0¿˝å:˝„˛˝IJÄ˝D‹#˛ ( Ä@Ñ˚@„(˛"!dÇxÊQ(”‹„¨=ƒ”^yç„s¡Ì6õOçÊs¿Â(˛"¶§Ç)-¶ÖI$ôI¥ödâ%RFâA”iE2RLâ@Â(˛"«-Pä'í(ä$(úHëF"E
  5247. ÅíJä$"I
  5248. ÄÂ(˛"H6ZR¯    y¶“)H- â“K$Áâ¡)4ú´LÁì¿Â(˛" G$ìùgq¶<ëŒHáIܨ≤;é‰Ä·…$ó“sú‰Ä IJ Ä÷Ï Ä÷Ïq¿÷ø˛Ü8Ä`Ü ◊˛ID˚ ˛â˝◊˝ëd˛ @"0◊˛X<q˚údôD◊ÖBPx„˜8B<Ÿ˝éàã)$$∂ö"öBê%RHi≠Ÿ˝Ñà#
  5249. Q-(ú%"E¯F¢ âŒ"Ÿ˝àê%⁄H6K‡uØ    H J)¥êæ$Ÿ˛0`XÁíp$uúA©0 ±œ$‡YŒXŸ˚@˚@¸Ä¸@Ÿ˚@ıĸ@Ÿ˚‡ˆ¿¸‡Ÿøøøøøøøøøøøøø˝Ä@–¸Œ˛Ä¿ ¸Œ˛ ÄÄ Œ˛ è<Ñiº◊ @Δœ˛ Ñíö∂íR5ÄIœ˛ »£§¢¢9"êœ˛ I%†—I•,B"”œ˛ˆYIYÙ:tå@–˝@˝@Õ ˝@˝@  ˝8‡˝‡ ø˛
  5250. ¿ÄÄÕ˛     Ä@Ã˛    @¿!Ã˛ By„<@7C»œ˛ M(¶LÄ@IçHœ˛  éQD$¿@â(œ˛ @YiòÄFû0œ˛ Ñ>íNË8j œÚ œÚ@œÛÄœøòB@Ä@Äüaflb ˛§¸À ˛l¸$$À˛H ÄÀ˛I£˝Œ–0À˛H§¶$ë`À˛ëB$D°@À˛⁄YHO"Ä$À˛ìÓH5ÄÒxÀøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòBÄ¿Ä¿flabøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòB¿‡¿‡a?bøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòB@@_aübøø    ◊32Ï’Ï’Ï¡’Ï¡’Ï’Ï’Ï¡’ÏÚˇ—˛Å˛ˇÄ¯ÁÏ˛ÄÙ@ËÏ˛ÄÙÁÏ ÄÙ—˛ÄÙÁÏ ÄÙ—˛ÄÙÁÏ˛ÄÙËÏ˛Ä˘˝ÁÏĢ˝—˛Ä˘˛ÁÏĢ˛—˛Ä˘˛ÁÏ˛Ä˘˛ÈÏ˛Ä˘¿ÁÏĢ<‡—˛ÄÄ˝|‡ÁÏĸ|‡—˛Ä>˚|ġˇÈÏ˛ÄÄ<˚ÄÈÏ˛ÄÄ|˘ÄÈÏÄ Ä‹˘Ä”˛Ä Äò˘ÄÈÏÄÅ∏˘˛”˛ÄÉ8ıÈÏ˛ÄÇ8˚Ä˝ÈÏ˛ÄÜ0˚¿˝ÈÏÄ1åp˚@Ä”˛Ä!àp˚¿ÈÏÄ!ÿp˛     ¿”˛Ä!‡˚ÈÏ˛Äa‡˚ÙÈÏ˛ÄA‡‡p |ÈÏÄA¿‡ê     x”˛ Ä¡¡¿
  5251. @ ˛ÈÏ ġŇÅ $˛˛”˛ÉÒ¯¿8 ˛˛ÈÏ˛Ä˜˛ÈÏ˛Ä˜˛ÈÏĘh˛”˛Ä˜¯˛ÈÏĘ˛”˛Ä˜8˝ÈÏ˛Ä¯0x˝ı¯ˇÏ˛Ä¯0¸ı˘Ïįp¸ı˘È˛Ä˙¿¿¸ı˘ÏĢܸı˘È˛Ä¯¸ı˘Ï˛Ä˙¸¸ı˘ÏòB@Ä@Äüaflb˛Ä˚î ˛ı˘ÏÄ˚( `˛ı˘È˛Ä˚l˛ı˘ÏÄ˚» IJı˘ˇ¿Î˛Ä˜IJı˜¿Ï˛ÄÚı˜¿Ï˛ÄÚı˜¿ÏÄÚı˜¿Î˛Ä˘˙USı˜¿ÏĢL˚ÃÀ ˆ˜¿Î˛Ä˘˘38ˆ˚@˛¿Ï˛Ä˘P˛¿ˆ˚`˛¿Ï"˛Ä˘0˛‡3ˆ˛¿p˛¿Ï"Ģ@ ˆ˛¿8˛¿Î"˛Ä˘PXˆ˛¿<˛¿Ï"Ģ@ÄH ˆ˛Ä¿˛¿Î"˛Ä˘0‡j3ˆć˛¿Ï"˛Ä˘P 0*ˆ ÄÄ¿Ï"˛Ä˘0ò/3ˆ \Ä¿Ï!Ģ@˛å- ˆ˝ fÄ¿Î#˛Ä˚
  5252. PcÑ-ˆ˝£ ¿¿Ï#Ä˚
  5253. @ÒÜ! ˆ˝8·
  5254. @¿Î$˛Ä˚
  5255. $0 ¬#3ˆ˛¸aà¿¿Ï$˛Ä˚
  5256. uÑPB"ˆ˛0òÄ¿Ï(˛Ä˚&ö0?¸c¯3Ç˙ åêÄ¿Ï(Ä˚$ú@pÅF ˙ üˇê˛¿Î*˛Ä˚I Px·ÃKô∑çĸ º‡≥É¿Ï)Ä˚I@xπÄ?ã ~f_˚ >8¢¿¿Î'˛Ä˘0ÃÄ|3 v&Q˚ ˛†¿¿Ï&˛Ä˘PÜ<;ôÁè˚˝ì`¿Ï ˛Ä˘0ˇ√3ˆ¸¡Ä¿Ï"Ģ@`ãˆ˛ˇ‡¿Ä¿Î"˛Ä˘PpÄ”ˆ @‡¿Ï"Ģ@p?ÉÄÄ~Kˆ @ ¿Î"˛Ä˘0@3>É√sˆ ¡‡`?∞¿Ï"˛Ä˘P@`Çìˆ  œ8 ‡–¿Ï"˛Ä˘1¿ ¿ Ûˆ ò  Äx¿Ï$Ģ
  5257. A¿ Ä ˛ 0¯ pé8¿Î$˛Ä˘
  5258. P p¯ p¿ª¿Ï%Ģ
  5259. @ ò0ãfl˘ˇ˛˛Ç¿¿Î%˛Ä˘
  5260. 09¯–≥Ģf `¿Ï$˛Ä˘    P1˘ò[”¯å~4 ¿Ï#˛Ä˘    0ˇlÛ„˜" ˛d7‡¿Ï%Ģ
  5261. @ˇ»t Ģ ˇƒö0¿Î&˛Ä˙ PˇÃ‹fl˘ˇ˛ˇÊû¿Ï%Ä˙ @ˇƒ å p¯ ˇÚ∂¿Î%˛Ä˙ 0ˇÑ 30¯ ˇ‚‚¿Ï%˛Ä¸ <nñPˇˆ˛ˇ‚Ä¿Ï%˛Ä¸ ì0ˇ3ˆ˛ˇ¬˛¿Ï%ĸ #@?ˇÑ ˆ˛ˇ¬˛¿Î%˛Ä¸ %<*PˇˇÑˆ˛ˇ¬˛¿Ï%ĸ X‘$@ˇˇ‰ ˆ˛ˇˇ‚˛¿Î%˛Ä¸ @0ˇˇ¸3ˆˇˇ˙˛¿Ï%˛Ä¸ @Pˇˇ˛ˆ˛ˇ˛¿Ï%˛Ä¸‡0˛ˇ3ˆ˛ˇÑ˛¿Ï"Ģ@˛ˇ ˆ˛ˇƒ˛¿Î"˛Ä˘P?˛ˇˆ˛ˇƒ˛¿Ï!Ģ@˝ˇ ˆ˛ˇƒ˛¿Î"˛Ä˘0˛ˇ˛3ˆ˛ˇΔ˛¿Ï"˛Ä˘P˛ˇ˛ˆ˛ˇÇ˛¿Ï!˛Ä˘3˝ˇà3ˆ˛ˇÇ˛¿Ï ĢG˝ˇà ˆ˝ˇ‚˛¿Î ˛Ä˘_˝ˇƒˆ˝ˇ‚˛¿Ï ĢO˝ˇƒ ˆ˝ˇ‚˛¿ÎòBÄ¿Ä¿flab ˛Ä˘?˝ˇƒ3ˆ˝ˇ„˛¿Ï ˛Ä˘_˝ˇΔˆ˝ˇ·˛¿Ï ˛Ä˘0˝ˇÇ3ˆ˝ˇ·˛¿Ï"Ģ@s˛ˇ ˆ?˛ˇ·˛¿Î"˛Ä˘Pc¯áˆ9˛ˇ¡Ä¿Ï"Ģ@c¯áÄ ˆ 9¸cÄ¿¿Î"˛Ä˘0c¯Ä3ˆ 9¸AÄ`¿Ï"˛Ä˘Pg¯ˆ9¸AIJ¿Ï"˛Ä˘0g∏3ˆ9¸¡Ä˛¿Ï"Ģ@¯ ˆ9¸ÅIJ¿Î"˛Ä˘P∞0ˆ?¸ÅIJ¿ÏĢ@˚ ıÏÅIJ¿Î˛Ä˘˘3ı˜¿Ï˛Ä˘˙USı˜¿Ï˛Ä˘˘3ı˜¿ÏĈˇÄı˜¿Î˛ÄˆˇÄı˜¿ÏĈˇÄı˜¿Î˛ÄˆˇÄı˜¿Ï˛ÄÚı˜¿Ï˛ÄÚı˜¿ÏÄÚı˜¿Î˛ÄÚı˜¿ÏIJ D˝ı˜¿Î ˛Ä˛˚€˚ˇÌˇ¿˛ı¯¿Ï!˛Ä˛˚€ÒøÕˇ¿˛ı˘ˇ¿Ï˛Ä˚@¿˛ı˜ˇ¿ÏÄÚı˜ˇ¿Î˛Ä˝Ω@Ñ
  5262. ˝ÈÏÄ˝4∑oˇœfiP˝”#˛Ä˝5ßoˇœfi–˝Ù @˛Ï˛Ä˚¿˚ÙĆ˛Ï˛ÄÚÙ ºÊ0Cùh<Ã`Ï$Ćää†
  5263. ˛Ù    &ôy≤GT˛Í%˛Ä fløflº˛Îfiˇ?∏Ù :ôi"[T–Ï$Ä fløflº˛Îfiˇ?∏Ù    .ñ0”èTÓ`ͲÄÚ˚Ï˛ÄÚ˚Ï˛ ÄFÅ r˛˚ÏIJˇ{ÔfiÔüøÁ/ˇÄ”˛Ä˛ˇ{ÔfiÔóø«ˇÄÈÏĘ@˝”˛ÄÚÈÏ˛Ä˛#îCâ ˝ÈÏ˛Ä˛:˝Î€}Àœø¯˛ÈÏIJ;˝Ô⁄}flÀø¯˛”˛ÄÚÈÏ ÄÚ”˛Ä˝‡Ä`˝ÈÏ˛Ä˝vˇoΩˇüÔ˝ÈÏ˛Ä˝vˇoΩˇüÔ˝ÈÏĘ ˝”˛ÄÚÈÏÄ˚@˚”˛Ä˚π¿˚ÈÏ˛Ä˚ª¿˚ÈÏ˛Ä˚˘ÈÏ ÄÚ”˛ÄÚÈÏ ÄÚ”˛ÄÚÈÏ˛ÄÚÈÏ˛ÄÚÈÏˇ”òB¿¿a_b ˛ÒˇÈÏ¡’Ï’Ï’Ï¡’Ï¡’Ï’Ï’Ï¡÷UÏ÷ÃÏøøøøøøøøøøøøøøøøøø ˛ÁÄ8 » ˛"@» ˛   » ˛Ñ  p» ˛Ñ  à» ˛FAàà» ˛(ÄBê» ˛fl¸<`»øøøø"˛Ê˛`Ä !Ä¿˛x„øê-fl"˛ ˛ê$ Ä@@˛$DTêSfl!˛˝@Ä@@DÄDàD Bfl#˛Üv¥ ‡4qÕ£qº8ËFÁë«@HêÓ‡#˛ç¢ò–     JRΔK–i±©DêàÑÄpêö4‡#˛    %‡C(â Ñä(êâ!–HPêàÄAî8‡#˛…aê% J¥ß    ¥¨`æBåa    ¿Åà&@‡#˛œ†·‡x¿.|GGH‡[¡ÃàAÅ√é<8‡˝ ˆ˝@˚fi˝ ˆ˝Ä˚fi˝¿ı‡˛˙fiø ˛‡ÿ00… ˛ @ `… ˛Ñ †…˛
  5264. Çû7<£^4qhÕ˛
  5265. ç4hî$äI¶∞Õ˛
  5266. $P®Hîâ' Õ˛
  5267. 7»ë,$I÷ú»@Õ˛
  5268. ÀxÓH5Δ§i«@ÕòB@@_aübˆ Ãˆ Ãˆ¿Ãø$˛0Ä 0¿˝å:˝„˛˝IJÄ˝D‹#˛ ( Ä@Ñ˚@„(˛"!dÇxÊQ(”‹„¨=ƒ”^yç„s¡Ì6õOçÊs¿Â(˛"¶§Ç)-¶ÖI$ôI¥ödâ%RFâA”iE2RLâ@Â(˛"«-Pä'í(ä$(úHëF"E
  5269. ÅíJä$"I
  5270. ÄÂ(˛"H6ZR¯    y¶“)H- â“K$Áâ¡)4ú´LÁì¿Â(˛" G$ìùgq¶<ëŒHáIܨ≤;é‰Ä·…$ó“sú‰Ä IJ Ä÷Ï Ä÷Ïq¿÷ø˛Ü8Ä`Ü ◊˛ID˚ ˛â˝◊˝ëd˛ @"0◊˛X<q˚údôD◊ÖBPx„˜8B<Ÿ˝éàã)$$∂ö"öBê%RHi≠Ÿ˝Ñà#
  5271. Q-(ú%"E¯F¢ âŒ"Ÿ˝àê%⁄H6K‡uØ    H J)¥êæ$Ÿ˛0`XÁíp$uúA©0 ±œ$‡YŒXŸ˚@˚@¸Ä¸@Ÿ˚@ıĸ@Ÿ˚‡ˆ¿¸‡Ÿøøøøøøøøøøøøø˝Ä@–¸Œ˛Ä¿ ¸Œ˛ ÄÄ Œ˛ è<Ñiº◊ @Δœ˛ Ñíö∂íR5ÄIœ˛ »£§¢¢9"êœ˛ I%†—I•,B"”œ˛ˆYIYÙ:tå@–˝@˝@Õ ˝@˝@  ˝8‡˝‡ ø˛
  5272. ¿ÄÄÕ˛     Ä@Ã˛    @¿!Ã˛ By„<@7C»œ˛ M(¶LÄ@IçHœ˛  éQD$¿@â(œ˛ @YiòÄFû0œ˛ Ñ>íNË8j œÚ œÚ@œÛÄœøòB@Ä@Äüaflb ˛§¸À ˛l¸$$À˛H ÄÀ˛I£˝Œ–0À˛H§¶$ë`À˛ëB$D°@À˛⁄YHO"Ä$À˛ìÓH5ÄÒxÀøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòBÄ¿Ä¿flabøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòB¿‡¿‡a?bøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòB@@?abøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòB@Ä@ÄaøbøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòBÄ¿Ä¿øaˇbøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòB¿¿ˇa?bøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòB@@?abøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòB@Ä@ÄaøbøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòBÄ¿Ä¿øaˇbøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòB¿‡¿‡ˇabøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòB@@?abøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòB@Ä@ÄaøbøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòBÄ¿Ä¿øaˇbøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòB¿¿ˇa?bøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòB@@?abøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòB@Ä@ÄaøbøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòBÄ¿Ä¿øaˇbøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøòB¿‡¿‡ˇabøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøˇ6¶@ˇ ˇˇˇˇ@
  5273. ˇ·ˇ‚7^
  5274. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡ä Subscribing to Non-Edition Files
  5275. , (‡2-63
  5276. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  5277. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  5278. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  5279. 4€4—?òÄ
  5280. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  5281. ˛ˇˇˇ
  5282. ˛ˇˇˇ
  5283. ˛ˇˇˇ
  5284. ˛ˇˇˇ˜˝˛ˇ˛
  5285. ˛ˇ˛ˇˇ
  5286. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  5287. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  5288. ˛ˇ˛ˇˇ
  5289. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  5290. ˛ˇˇˇˇ
  5291. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  5292. ˛ˇˇˇˇ
  5293. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  5294. ˛ˇˇˇˇ
  5295. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähê(eäTµ¿°dONLNd\èh)o override the standarRÄ°dONLNd\ÒhM)bd opener function, crĆ°dONLNd,\Mh)\*eate an opener function that contains the °dONLNdViäuÎ(räfollowing parameters:,
  5296. Courier.°dONLNdlÄäå™*0FUNCTION MyOpener (selector: EditionOpenerVerb; °dONLNd£éˆö¸+l °dONLNd§é¸öÏ)(VAR PB: EditionOpenerParamBlock): OSErr;.°dONLNdÕ¶ä≤ê(ØäY@Ä°dONLNdŒ¶ê≤_),our opener needs to know which formats the fil¿°dONLNd˚¶_≤Í)œ le contains and how the data is °dONLNd≥äø”(ºäsupposed to be rÆ`°dONLNd+≥”ø)Iead or written. ˇˇ÷™.°dONLNd<≈ä—ê(Œä<The opener function is passed an edition opener verb in the ˇˇÉ˛πN°dONLNdx≈ê—¿(Œêselectorˇˇ÷™πN°dONLNdÄ≈¿—Ò)0
  5297.  parameter“ò°dONLNdä≈Ò—)1, which .°dONLNdí“äfi©(€äidentifiV†°dONLNdö“™fiå) 3es the action the opener function should perform. TU@°dONLNdÕ“çfi¯)„he opener can allocate a °dONLNdÊfläÎg(Ëä2handle or pointer to contain information such as fi~†°dONLNdflhÎv)file ru†°dONLNdflvÎÜ)efer!¿°dONLNd!fláÎ)ence numbers. This value is .°dONLNd=Ï䯣(ıäpasse°dONLNdBÏ£¯Ø)d t°dONLNdEÏد—) o the I/°dONLNdMÏ—¯fl)"O rR`°dONLNdPÏfl¯)outines in the R`°dONLNd_ϯN)?ioRefNumR`°dONLNdgÏN¯W)0 fiR`°dONLNdjÏW¯)    *eld of the edition opener parameter block.°dONLNdï˛ä
  5298. û(äThe °dONLNdô˛û
  5299. ¬)eoOpen°dONLNdü˛¬
  5300. ◊)$ and °dONLNd§˛◊
  5301. )    eoOpenNew°dONLNd≠˛
  5302. ï)6 edition opener verbs (describe°dONLNdÃ˛ï
  5303. ®)àd in °dONLNd—˛®
  5304. )“Calling an Edition .°dONLNd äÿ(äOpener” on page ◊°dONLNdı ÿÍ)N2-64*‡°dONLNd˘ ÎÓ))~¿°dONLNd˙ ÓÙ) r√¿°dONLNd¸ ÙΩ)0eturn a pointer to a function to do the actual r†°dONLNd, æ) eading and writing.°dONLNd@ä)(&äThe following sections describe,Zapf Dingbats°dONLNd`3ä:è*n
  5305. °dONLNdb0ñ<Í) how to get the curr}@°dONLNdu0Í<6)Tent edition openev@°dONLNdÜ07<=)Mr °dONLNdâEäLè(Kän
  5306. °dONLNdãBñN0) !how to set your own edition opene÷†°dONLNd¨B0N6)ör °dONLNdØWä^è(]än
  5307. °dONLNd±Tñ`) how to call an edition openeÉ¿°dONLNdÕT`)}r °dONLNd–iäpè(oän
  5308. °dONLNd“fñr) the edition opener parameters
  5309. ñHù4óHù òäò
  5310. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNdÒáäñ](íä"Getting the Current Edition Openerˇˇˇˇˇˇ€r(í2
  5311. .°dONLNdùä©(¶äWhen you want to get the currR`°dONLNd2ù©^)áent edition openeR`°dONLNdCù^©b)Mrï°dONLNdDùa©d),ï°dONLNdEùd©à)     use the ï°dONLNdNùà©)$GetEditionOpenerProcï°dONLNdbù©)x .°dONLNdc™ä∂±(≥ä    function..°dONLNdm¡äÕ&*err := GetEditionOpenerPro°dONLNdá¡&Õ2)úc(°dONLNdâ¡2Õb) opener);°dONLNdíŸäÂû(‚äThe °dONLNdñŸû¬)opener°dONLNdúŸ¬Â˙)$  parameter rR`°dONLNd®Ÿ˙Â)8eturnR`°dONLNd≠ŸÂ%)s a pR`°dONLNd≤Ÿ%Âp)ointer to the curr$¿°dONLNdƒŸpÂΩ)Kent edition opene$¿°dONLNd’ŸΩ¡)Mrg`°dONLNd÷Ÿ¿Â√).g`°dONLNd◊Ÿ√Â≈)     °dONLNdÿŸ≈ÂÕ)A|`°dONLNdŸŸÃ‹) difN¿°dONLNd›Ÿ‹ÂÈ)fer! °dONLNd‡ŸÈ¢)ent .°dONLNd‰ÊäÚú(ÔäcurrØ°dONLNdËÊúÚ
  5312. )Uent opener is kept for each application. One application’s opener is never called by °dONLNd=Û䡂(¸äanother application.
  5313. $H+4%H+ &ä&
  5314. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNdSä$&*$Setting an Edition Openerˇˇˇˇˇˇ€r( 2
  5315. .°dONLNdn+ä7ë(4äYï°dONLNdo+ê7∑)    ou can prg`°dONLNdx+∑7:)'ovide your own edition openeg`°dONLNdî+:7>)Ér™°dONLNdï+=7@).™°dONLNdñ+@7H) Tø°dONLNdò+G7ã)o do so, use the ø°dONLNd©+ã7)DSetEditionOpenerProcø°dONLNdΩ+7)x .°dONLNdæ8äD±(Aä    function..°dONLNd»Oä[t*'err := SetEditionOpenerProc(@MyOpener);°dONLNdgäsû*The  °dONLNdÙhûs•)@
  5316. °dONLNdıg•s’)MyOpener°dONLNd˝g’sò)0, parameter is a pointer to the edition opene°dONLNd)gòs»)√ r function t°dONLNd5g»s˜)0
  5317. hat you arR`°dONLNd?g˜s˛)/e .°dONLNdAtäÄì(}äprG °dONLNdCtîÄ    )
  5318. oviding. If you set the curr√`°dONLNd_t    Ä^)uent opener to be a rΩ¿°dONLNdst^ÄÍ)Uoutine in your own code, be sur˚†°dONLNdítÍÄ)å
  5319. e to call .°dONLNdúÅäçú(ääthe °dONLNd†Åúç)GetEditionOpenerProc°dONLNd¥ÅçC)x  function fi°dONLNd¿ÅCç…)/rst so that you can save the prR`°dONLNdflÅ…ç)Üevious openerï°dONLNdÏÅç)<. If .°dONLNdÒéäö¡(óäHyour opener is passed a selector that it does not understand, use the pr¿°dONLNd9é¬ö(ó¬evious opener °dONLNdGõäßì(§äprG °dONLNdIõîß
  5320. )
  5321. Yovided by the Edition Manager to handle it. See the next section for a list of selectors.ˇ⁄@ˇ ˇˇˇˇ@
  5322. ˇ·ˇ‚7^
  5323. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  5324. (‡*2-64    )B Subscribing to Non-Edition Files4^*¿¯
  5325. k*r¯4l*r¯ mlm¯
  5326. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd\lk(glCalling an Edition OpeneˆP°dONLNd\k)órˇˇˇˇˇˇ€r)Ì2
  5327. .°dONLNdrl~s({lYï°dONLNdrr~†) ou use the ,
  5328. Courierï°dONLNd'r†~).CallEditionOpenerProcï°dONLNd<r~≥)~# function to call an edition opener◊†°dONLNd_r≤~—)î. Since .°dONLNdglã|(àlthe ›`°dONLNdk|ãT)/Edition Manager is a package that may move, a r∏ °dONLNdöTãœ)ÿeal pointer cannot be safely °dONLNd∑ålòo(ïlrE°dONLNd∏åpòï)eturned ÅÄ°dONLNd¿åïò§)%for ΩÄ°dONLNdƒå§ò’) the standarL`°dONLNdœå÷ò+)2d opener and I/O r2¿°dONLNd·å+ò )U#outines. The system opener and the °dONLNdôl•(¢lI/O I†°dONLNd    ôÄ•É)r†°dONLNd
  5329. ôÑ•¶)outines °dONLNdôß•Ø)#ar”°dONLNdôØ•∂)e †°dONLNdô∑•∫)r·†°dONLNdô∫•q)+eturned as a value that is not a valid addrNÄ°dONLNdBôr•û)∏ ess to a prë °dONLNdMôû•º),ocedur(`°dONLNdSôΩ•⁄)e. The .°dONLNdZ¶l≤Í(ØlCallEditionOpenerProc°dONLNdo¶Í≤ˇ)~ and °dONLNdt¶ˇ≤_)CallFormatIOProc°dONLNdѶ_≤—)` functions check for these .°dONLNdü≥løã(ºlvalues ú`°dONLNd¶≥ãø)and call the system openers.°dONLNd√≈l—r(ŒlY@Ä°dONLNdƒ≈r—C)/ou should never assume that a value for a systeo °dONLNdÛ≈C—r)—
  5330. m opener i˙`°dONLNd˝≈r—Ü)/s a fiD °dONLNd≈á—¡)xed constant..°dONLNd‹lË™(Âl5err := CallEditionOpenerProc (selector, PB, routine);°dONLNdGÙlè*Set the °dONLNdOÙèø)#selector°dONLNdWÙø„)0B parameter to one of the edition opener verbs. The edition opener .°dONLNdôlß(
  5331. lverbs include,Zapf Dingbats°dONLNdßlq*n
  5332. .°dONLNd©x Ã) eoCanSubscribe.°dONLNd∏)l0q(/ln
  5333. .°dONLNd∫&x2ú) eoOpen.°dONLNd¡;lBq(Aln
  5334. .°dONLNd√8xD¢) eoClose.°dONLNdÀMlTq(Sln
  5335. .°dONLNdÕJxVÆ)     eoOpenNew.°dONLNd◊_lfq(eln
  5336. .°dONLNdŸ\xh¥)
  5337. eoCloseNew°dONLNd‰mlyÄ(vlThe °dONLNdËmÄyå)PB°dONLNdÍmåy›)  parameter of the °dONLNd¸m›y[)QCallEditionOpenerProc°dONLNdm[y›)~ function is an edition opener .°dONLNd0zlÜ∂(Élparameter block..°dONLNdAëlù&*TYPE EditionOpenerParamBlock = °dONLNdbü~´¢+RECORD°dONLNdk≠êπÆ+info:°dONLNdu≠ÍπV)ZEditionInfoRecord;°dONLNdé≠hπÚ)~{edition container to }°dONLNd¥ªh«⁄*{ be subscribed to}°dONLNd …ê’Δ(“ê    sectionH:°dONLNdÿ…Í’>)ZSectionHandle;°dONLNdÌ…h’¬)~{publisher or }°dONLNd ◊h„º*{ subscriber }°dONLNd(ÂhÒ‘*{ requesting open}°dONLNd=ÛêˇΔ(¸ê    document:°dONLNdKÛ͡&)Z
  5338. FSSpecPtr;°dONLNd\ÛhˇŒ)~{document passed}°dONLNdpêÃ(
  5339. ê
  5340. fdCreator:°dONLNdÍ)ZOSType;°dONLNdçhÊ)~{Finder creator type}°dONLNd•êΔ(ê    ioRefNum:°dONLNd≥Í)ZLongInt;°dONLNd¬h‘)~{reference number}°dONLNd◊ê)∫(&êioProc:°dONLNd„Í)J)ZFormatIOProcPtr;°dONLNd˙h)‘)~{routine to read }°dONLNd+h7§*
  5341. { formats}°dONLNd(9êE¿(Bêsuccess:°dONLNd59ÍE)ZBoolean;°dONLNdD9hEÊ)~{reading or writing }°dONLNdhGhSŒ*{ was successful}°dONLNd|Uêaÿ(^ê formatsMask:°dONLNdçUÍa,)Z SignedByte;°dONLNdüUhaÏ)~{formats required to }°dONLNdƒcho∞* { subscribe}°dONLNd“q~}ñ(z~END;ˇ7@ˇ ˇˇˇˇ@
  5342. ˇ·ˇ‚7^
  5343. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡ä Subscribing to Non-Edition Files
  5344. , (‡2-65
  5345. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  5346. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  5347. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  5348. 4€4—?òÄ
  5349. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  5350. ˛ˇˇˇ
  5351. ˛ˇˇˇ
  5352. ˛ˇˇˇ
  5353. ˛ˇˇˇ˜˝˛ˇ˛
  5354. ˛ˇ˛ˇˇ
  5355. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  5356. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  5357. ˛ˇ˛ˇˇ
  5358. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  5359. ˛ˇˇˇˇ
  5360. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  5361. ˛ˇˇˇˇ
  5362. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  5363. ˛ˇˇˇˇ
  5364. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿.°dONLNd\ähû(eäThe ,
  5365. Courier°dONLNd\ûh»)routine°dONLNd \»h)* parameter of the °dONLNd\hó)QCallEditionOpenerProc°dONLNd2\óh )~ function is a pointer to an .°dONLNdOiäuÙ(räedition opener function.°dONLNdh{äá* The following list shows which fi2`°dONLNdâ{á„)ì-elds of the edition opener parameter block ar≠°dONLNd∂{„á)Δ
  5366. e used by °dONLNd¿àäîı(ëäthe edition opener verbs¿°dONLNdÿàˆî¯)l:    °dONLNd⁄°H¨}(©H Opener verb^@°dONLNdÁ°Œ¨‚)ÜField°dONLNdÌ°%¨V)W Description°dONLNd˘°£¨Õ)~
  5367. Called by °dONLNdˇˇ)+ 
  5368. .°dONLNdØHªú(∏HeoCanSubscribe,    Symbol.°dONLNdØ∞∫π)hÆ.^@°dONLNd!ØŒªÊ)info.°dONLNd&Ø%ª)WEdition container to °dONLNd;∫%ΔY* subscribe to] °dONLNdG∫ZΔ\)5..°dONLNdIØ£ª(∏£NewSubscriberDialo°dONLNd[∫£Δ©* g°dONLNd\∫©Δ)function for a subscriber.°dONLNdx ∞’π(”∞Æ.^@°dONLNdz Œ÷) formatsMask.°dONLNdÜ %÷O)W    Formats r†°dONLNdè P÷g)+equir&‡°dONLNdî g÷)ed to °dONLNdö’%·Q(fi%
  5369. subscribe.°dONLNd®Â∞π(Ó∞¨^@°dONLNd™ÂŒÒ) Return value.°dONLNd∑Â%Ò-)WAÛ`°dONLNd∏Â,Ò.) Û`°dONLNdπÂ.ÒL)noErrÛ`°dONLNdæÂLÒd) code .°dONLNdƒ%¸p(˘%indicates that an °dONLNd÷˚%Ñ* edition container can °dONLNdÏ%q* be subscribed to. ο°dONLNd˛qx)LA&`°dONLNdˇy{) .°dONLNd%[(%    noTypeErr°dONLNd    [s)6 code .°dONLNd%(p(%%indicates that an °dONLNd!'%3r* edition container °dONLNd32%>Ñ* cannot be subscribed °dONLNdH=%I0* to..°dONLNdNMHYl(VHeoOpen.°dONLNdUM∞Xπ)hÆ.^@°dONLNdWMŒYÊ)info.°dONLNd\M%Y)WEdition container to °dONLNdqX%dP*
  5370. open for r†°dONLNd{XQdq),eading..°dONLNdÉM£YÂ(V£ OpenEdition°dONLNdéMÂY˙)B and °dONLNdìX£d(a£GetStandardFormats°dONLNd•Xd)l .°dONLNd¶c£o(l£functions for a subscriber°dONLNd√h∞sπ(q∞Æ.^@°dONLNd≈hŒt˛)sectionH.°dONLNdŒh%tw)WSubscriber section °dONLNd·s%(* rE°dONLNd‚s)z)equesting open or .°dONLNdÙ~%ä7(á%NIL°dONLNd˜~7ä:)..°dONLNdé∞ôπ(ó∞¨.^@°dONLNdéŒö˛)ioRefNum.°dONLNdé%ö<)WRefer⁄ °dONLNdé<öá)ence number for °dONLNd"ô%•<(¢%use bï`°dONLNd'ô<•G)y I°dONLNd*ôH•\) /O r3 °dONLNd.ô\•})outine. °dONLNd6§%∞m(≠%Not the same as .°dONLNdFØ%ªs* EditionRefNum°dONLNdSØsªv)N..°dONLNd^ø∞ π(»∞¨.^@°dONLNd`øŒÀÚ)ioProc.°dONLNdgø%À<)WI/O r†°dONLNdlø=ÀÉ)outine to call to °dONLNd~ %÷((”%rE°dONLNd )÷_) ead formats.°dONLNdè⁄∞Âπ(„∞¨^@°dONLNdë⁄ŒÊ) Return value.°dONLNdû⁄%Ê-)WAÛ`°dONLNdü⁄,Ê.) Û`°dONLNd†⁄.ÊL)noErrÛ`°dONLNd•⁄LÊo)     code or .°dONLNdÆÂ%Ò9(Ó%apprI@°dONLNd≤Â:Òh) opriate err© °dONLNdΩÂhÒã).or code..°dONLNd»ıHr(˛HeoClose.°dONLNd–ı∞π)hÆ.^@°dONLNd“ıŒÊ)info.°dONLNd◊ı%å)WEdition container to be °dONLNdÔ% V* closed for rÒÄ°dONLNd˚V v)1eading..°dONLNdı£Î(˛£ CloseEdition°dONLNdıÎ)H and °dONLNd£ (    £GetStandardFormats°dONLNd& )l .°dONLNd' £(£functions for a subscriber°dONLNdJ∞π(∞Æ.^@°dONLNdLŒ˛)sectionH.°dONLNdU%w)WSubscriber section .°dONLNdh%')* rR`°dONLNdi)'x)equesting close or R`°dONLNd|x'ä)ONILR`°dONLNdä'ç)..°dONLNdä+∞6π(4∞Æ.^@°dONLNdå+Œ7˛)ioRefNum.°dONLNdï+%7,)WVÕ °dONLNdñ++7D)alue rÀ@°dONLNdú+D7v) eturned by .°dONLNdß6%BI(?%eoOpen°dONLNd≠6IBL)$..°dONLNd≤F∞Qπ(O∞Æ.^@°dONLNd¥FŒRÚ)ioProc.°dONLNdªF%R,)WVÕ °dONLNdºF+RD)alue rÀ@°dONLNd¬FDRv) eturned by .°dONLNdÕQ%]I(Z%eoOpen°dONLNd”QI]L)$..°dONLNdÿa∞lπ(j∞Æ.^@°dONLNd⁄aŒm¯)success.°dONLNd‚a%mÑ)WSuccess value passed .°dONLNd˜l%xB* to the °dONLNd˛lBxä) CloseEdition°dONLNd
  5371. läxå)H .°dONLNd w%ÉL(Ä%    function.°dONLNdá∞íπ(ê∞¨^@°dONLNd áŒì) Return value.°dONLNd-á%ì-)WAÛ`°dONLNd.á,ì.) Û`°dONLNd/á.ìL)noErrÛ`°dONLNd4áLìo)     code or .°dONLNd=í%û9(õ%apprI@°dONLNdAí:ûh) opriate err© °dONLNdLíhûã).or code.X°dONLNd\°ı™+ç    continuedˇ@ˇ ˇˇˇˇ@
  5372. ˇ·ˇ‚7^
  5373. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  5374. (‡*2-66    )B Subscribing to Non-Edition Files4^*¿¯
  5375. °dONLNdà2l>z(;lAs @°dONLNdã2{>©) Listing 2-9§Ä°dONLNdñ2©>‚).  demonstrate¢¿°dONLNd¢2„>):s, you iS‡°dONLNd™2>≠) &nstall your own edition opener functio‹¿°dONLNd–2≠>»)™n by fi—†°dONLNd◊2…>ˆ) rst saving °dONLNd‚?lKé(Hlthe curr `°dONLNdÍ?èKb)#.ent opener and then installing your own opener’°dONLNd?aK◊)“. The listing also shows an .°dONLNd4LlX≠(Uledition opener¬†°dONLNdBL¨X√)@, the ,
  5376. Courier¬†°dONLNdHL√X)MyEditionOpener¬†°dONLNdWLXt)Z function. When it rï°dONLNdkLtX©)W eceives the °dONLNdwYle¿(bleoCanSubscribe°dONLNdÖY¿e)T opener verb, the °dONLNdóYeg)MMyEditionOpener°dONLNd¶YgeÕ)Z function calls another °dONLNdæflr∏(olapplication-defi°dONLNdŒf∏rŒ)Lned rR`°dONLNd”fŒrÔ)outine, R`°dONLNd€fÔrC)!MyCanSubscribeR`°dONLNdÈfCr⁄)T!. The Edition Manager sends your .°dONLNd
  5377. slM(|l7edition opener this verb to help it build the list of fiÄ°dONLNdBsN®)‚les displayed by the .°dONLNdWÄlå∫(âlNewSubscriber°dONLNddÄ∫å˘)N function. The °dONLNdsĢåM)?MyCanSubscribe°dONLNdÅÄMåy)T  function rR`°dONLNdåÄyåñ),eturns R`°dONLNdìÄñå¥)noErrR`°dONLNdòÄ¥å€)  if it can .°dONLNd£çlôπ(ñlsubscribe to the fiG@°dONLNd∂ç∫ôŒ)NCle; otherwise, it calls the original edition opener to handle the r†°dONLNd˘çŒôÌ(ñŒequest..°dONLNdv*Ç`(*    eoOpenNew,    Symbol.°dONLNd
  5378. víÅõ)hÆ.^@°dONLNd v∞Ç»)info.°dONLNdvÇa)WEdition container to °dONLNd&ÅçR* open for writing..°dONLNd8vÖÇŸ(ÖOpenNewEdition°dONLNdFvŸÇ€)T .°dONLNdGÅÖçÌ(äÖfunction for a publisher°dONLNdbëíúõ(öíÆ.^@°dONLNddë∞ù‡)sectionH.°dONLNdmëùU)WPublisher section °dONLNdú®
  5379. * rE°dONLNdÄú ®\)equesting open or .°dONLNdíß≥(∞NIL°dONLNdïß≥)..°dONLNd†∑í¬õ(¿íÆ.^@°dONLNd¢∑∞√‡)document.°dONLNd´∑√Z)WDocument pointer °dONLNdº¬ŒL* passed into the .°dONLNdÃÕŸ[* OpenNewEdition°dONLNd⁄Õ[Ÿ])T .°dONLNd€ÿ‰.(·    function.°dONLNdÓËíÛõ(ÒíÆ.^@°dONLNdË∞ÙÊ)    fdCreator°dONLNd˙ËÙ)WThe °dONLNd˛ËÙQ)    fdCreator°dONLNdËQÙS)6 .°dONLNdÛˇL(¸passed into the .°dONLNd˛
  5380. [* OpenNewEdition°dONLNd&˛[
  5381. ])T .°dONLNd'    .(    function.°dONLNd:í$õ("í¨.^@°dONLNd<∞%‡)ioRefNum.°dONLNdE%)WRefer⁄ °dONLNdJ%i)ence number for °dONLNdZ$0(-use bï`°dONLNd_$0))y I°dONLNdb$*0>) /O r3 °dONLNdf$>0_)outine. °dONLNdn/;O(8Not the same as .°dONLNd~:FU* EditionRefNum°dONLNdã:UFX)N..°dONLNdúJíUõ(Sí¨.^@°dONLNdûJ∞V‘)ioProc.°dONLNd•JV)WI/O r†°dONLNd™JVe)outine to call to °dONLNdºUaE(^write formats.°dONLNdŒeípõ(ní¨^@°dONLNd–e∞qÈ) Return value.°dONLNd›eq)WAÛ`°dONLNdfieq) Û`°dONLNdfleq.)noErrÛ`°dONLNd‰e.qQ)     code or .°dONLNdÌp|(yapprI@°dONLNdÒp|J) opriate err© °dONLNd¸pJ|m).or code..°dONLNdÄ*åf(â*
  5382. eoCloseNew.°dONLNdÄíãõ)hÆ.^@°dONLNdÄ∞å»)info.°dONLNdÄån)WEdition container to be °dONLNd1ãó_* closed after writing..°dONLNdGÄÖåÕ(âÖ CloseEdition°dONLNdSÄÕåœ)H .°dONLNdTãÖóÌ(îÖfunction for a publisher°dONLNduõí¶õ(§íÆ.^@°dONLNdwõ∞߇)sectionH.°dONLNdÄõßU)WPublisher section .°dONLNdí¶≤ * rR`°dONLNdì¶ ≤Z)equesting close or R`°dONLNd¶¶Z≤l)ONILR`°dONLNd©¶l≤o)..°dONLNd¥∂í¡õ(øíÆ.^@°dONLNd∂∂∞¬‡)ioRefNum.°dONLNdø∂¬)WVÕ °dONLNd¿∂¬&)alue rÀ@°dONLNdΔ∂&¬X) eturned by .°dONLNd—¡Õ=(     eoOpenNewï°dONLNd⁄¡<Õ?)5..°dONLNdfl—í‹õ(⁄íÆ.^@°dONLNd·—∞›‘)ioProc.°dONLNdË—›)WVÕ °dONLNdÈ—›&)alue rÀ@°dONLNdÔ—&›X) eturned by .°dONLNd˙‹Ë=(    eoOpenNewï°dONLNd‹<Ë?)5..°dONLNdÏí˜õ(ıíÆ.^@°dONLNd
  5383. Ï∞¯⁄)success.°dONLNdϯf)WSuccess value passed .°dONLNd'˜$* to the °dONLNd.˜$l) CloseEdition°dONLNd:˜ln)H .°dONLNd;.(     function.°dONLNdNíõ(í¨^@°dONLNdP∞È) Return value.°dONLNd])WAÛ`°dONLNd^) Û`°dONLNd_.)noErrÛ`°dONLNdd.Q)     code or .°dONLNdm)(&apprI@°dONLNdq)J) opriate err© °dONLNd|J)m).or code.    °dONLNdˇˇ(p* Opener verb^@°dONLNdˇˇ)ÜField°dONLNdˇˇ)W Description°dONLNdˇˇ)~
  5384. Called by °dONLNdˇˇ)+  (continued)ˇ*@ˇ ˇˇˇˇ@
  5385. ˇ·ˇ‚7^
  5386. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡ä Subscribing to Non-Edition Files
  5387. , (‡2-67
  5388. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  5389. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  5390. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  5391. 4€4—?òÄ
  5392. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  5393. ˛ˇˇˇ
  5394. ˛ˇˇˇ
  5395. ˛ˇˇˇ
  5396. ˛ˇˇˇ˜˝˛ˇ˛
  5397. ˛ˇ˛ˇˇ
  5398. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  5399. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  5400. ˛ˇ˛ˇˇ
  5401. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  5402. ˛ˇˇˇˇ
  5403. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  5404. ˛ˇˇˇˇ
  5405. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  5406. ˛ˇˇˇˇ
  5407. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  5408. gHn4gHn"hH_
  5409. ˇ·ˇ‚7^    °dONLNd\äg∂(dä Listing 2-9°dONLNd\Œgi)D&Using your own edition opener function,
  5410. Courier
  5411. .°dONLNd5väÇú(äVAR°dONLNd:ÑúêÄ+&gOriginalOpener: EditionOpenerProcPtr;°dONLNdaÑÄêÊ)‰{global variable}°dONLNdt†ä¨ê(©äP°dONLNdu†ê¨Δ)    ROCEDURE °dONLNd~†Δ¨“)6My°dONLNdĆ“¨2) InstallMyOpener;°dONLNdëÆä∫®(∑äBEGIN°dONLNdòºú»¬+1FailOSErr(GetEditionOpenerProc(gOriginalOpener));°dONLNdÀ ú÷»*2FailOSErr(SetEditionOpenerProc(@MyEditionOpener));°dONLNd˛ÿä‰Æ(·äEND; {°dONLNdÿƉ∫)$My°dONLNdÿ∫‰) InstallMyOpener°dONLNdÿ‰)Z}°dONLNdÙä‘(˝ä7FUNCTION MyEditionOpener (selector: EditionOpenerVerb; °dONLNdX‡+ê!  VAR PB: EditionOpenerParamBlock°dONLNdy‡Ï)Δ) °dONLNdÖ,8(,: °dONLNdá8b) OSErr; °dONLNdèä*®('äBEGIN°dONLNdñ,ú8ÿ+
  5412. WITH PB DO°dONLNd¢:úF∫*BEGIN°dONLNd™HÆT+CASE selector OF°dONLNdæV¿b+eoCanSubscribe:°dONLNd“d“p∂+&MyEditionOpener := MyCanSubscribe(PB);°dONLNd¸r¿~Í({¿eoOpen:°dONLNdÄ“å∞+%MyEditionOpener := MyEditionOpen(PB);°dONLNd1é¿ö(ó¿eoClose:°dONLNd>ú“®∂+&MyEditionOpener := MyEditionClose(PB);°dONLNdh™¿∂(≥¿OTHERWIS°dONLNdp™∂ˆ)0E°dONLNdv∏“ƒû(¡“"{call the original edition opener}°dONLNdùΔ““,*MyEditionOpener°dONLNd¨Δ,“2)Z °dONLNd≥‘‰‡Í(›‰:°dONLNd¥‘͇n)= CallEditionOpenerPro°dONLNd ‘n‡z)Ñc(°dONLNdÑz‡¬) selector, PB°dONLNdÿ‘¬‡»)H,°dONLNdÁ‚tÓz(Îtg°dONLNdË‚zÓ⁄)OriginalOpener);°dONLNd˚ƸÃ(˘ÆEND; °dONLNdø)    {of CASE}°dONLNd ˛ú
  5413. ∫(úEND; °dONLNd˛∫
  5414. )    {of WITH}°dONLNd ä(äEND; {MyEditionOpener°dONLNd/ )~}°dONLNd2(ä4(1äAFUNCTION MyCanSubscribe (VAR PB: EditionOpenerParamBlock): OSErr;°dONLNdt6äB®*BEGIN°dONLNd{DúP+?{check file type to see if it is a file you can emulate as an }°dONLNdºRú^ÿ*
  5415. { edition}°dONLNd»`úl§*,IF PB.info.fdType = {for example}'PICT' THEN°dONLNd˜nÆz8+MyCanSubscribe := noErr°dONLNd|úà⁄(Öú5ELSE {otherwise, let the saved edition opener decide}°dONLNdIä¿ñ
  5416. +$7MyCanSubscribe := CallEditionOpenerProc(eoCanSubscribe,°dONLNdâò§2+Z    °dONLNdîòò§)~PB, gOriginalOpener);°dONLNd™¶ä≤(ØäEND; {MyCanSubscribe}ˇÄ@ˇ ˇˇˇˇ@
  5417. ˇ·ˇ‚7^
  5418. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  5419. (‡*2-68    )B Subscribing to Non-Edition Files4^*¿¯
  5420. k*r¯4l*r¯ mlm¯
  5421. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd\lk (glOpening and Closing Editionsˇˇˇˇˇˇ€r(g2
  5422. °dONLNdrl~ï({lBEach time the Edition Manager opens or closes an edition container3°dONLNd`rï~€({ï, it calls the currh °dONLNdsr€~Î)Fent °dONLNdwlãπ(àledition opener prU`°dONLNdàπã◊)Mocedurφ°dONLNdé◊ã√)5e and passes it an opener verb and a parameter block.°dONLNdƒëlùr(ölY@Ä°dONLNd≈ërùÿ)our opener must be car_†°dONLNd€ëÿùÕ)f4eful when closing documents since a document may alrv °dONLNdëÕù‰)ıeady °dONLNdûl™C(ßl/have been opened by another application. Be surxÄ°dONLNdCûC™–)◊e to use the Open/Deny modes °dONLNd`´l∑d(¥l8whenever possible. Do not close a document if it was alrˆ@°dONLNdò´d∑«)¯eady open when your °dONLNd¨∏lƒÃ(¡lapplication opened it.
  5423. È*¯4Í*¯ Îlί
  5424. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNdƒ⁄lÈ∑*$Listing Files $°dONLNd“⁄∏ÈQ)LThat Can Be Subscribed ˙Ü°dONLNdÈ⁄PÈX)òT÷¥°dONLNdÍ⁄WÈ^)oˇˇˇˇˇˇ€r)ô2
  5425. .°dONLNdÌl¸Ä(˘lThe ,
  5426. Courier°dONLNdÒĸÚ)NewSubscriberDialog°dONLNdÚ¸D)r function calls the °dONLNdD¸Ò)R'edition opener function and passes the ˇˇeò°dONLNd?˝l    r(le°dONLNd@˝r    ¿)oCanSubscribeˇˇÃà°dONLNdM˝¿    ˜)N opener verb Âò°dONLNdZ˝˜    )7in the ˇˇeò~®°dONLNda˝    D)selectorˇˇÃà~®°dONLNdi˝D    w)0  parameter ∏°dONLNdt˝x    Œ)4to build the list of fʇ°dONLNdä˝Œ    ˜)V
  5427. iles that .°dONLNdî
  5428. lÁ(lcan be subscribed to. The pr†°dONLNd∞
  5429. ˘)|?eview in the subscriber dialog box is generated by calling the .°dONLNdÔl#ÿ( lGetStandardFormats°dONLNdÿ#5)l function (described i°dONLNd5#<)]n °dONLNd<#Ã)“Edition Container Formats” on °dONLNd8$l0Ñ(-lpage °dONLNd=$Ñ0ú)2-101°dONLNdB$ú0†))°dONLNdC$†0#), which calls the format I/O °dONLNd`$#0-)ÉprR`°dONLNdb$-0J)
  5430. ocedur$¿°dONLNdh$J0|) e with the $¿°dONLNds$|0ñ)2verbs $¿°dONLNdy$ñ0∫)eoOpen$¿°dONLNd$∫0ø)$, °dONLNdÅ1l=Æ(:l ioHasFormat°dONLNdå1Æ=≥)B, °dONLNdé1≥=◊)ioRead°dONLNdî1◊=)$ , and then °dONLNdü1=0)/eoClose°dONLNd¶10=@)*. Se°dONLNd™1@=G)e °dONLNd¨1G=⁄)“Calling a Format I/O Function”°dONLNdÀ1⁄=Ë)ì on .°dONLNdœ>lJô(Gl this page fg‡°dONLNd⁄>öJ`).,or detailed information on format I/O verbs.
  5431. o*v¯4p*v¯ qlq¯
  5432. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd`loÓ(klReading From and WΩ¸°dONLNd`Óo;)Çriting to Filesˇˇˇˇˇˇ€r(k2
  5433. °dONLNd+vlÇú(l
  5434. The I/O prLÄ°dONLNd5vùǪ)1ocedur„¿°dONLNd;vªÇ◊)e is a r¿°dONLNdCvÿÇ4)outine that actually r‡°dONLNdYv4Ç›)\(eads and writes the data. It too has an °dONLNdÅÉlè1(ål.interface of a selector and a parameter block.°dONLNd∞ïl°r*Tµ¿°dONLNd±ïq°“)o override the standarRÄ°dONLNd«ï”°fl)bd r≥@°dONLNd ïfl°m)  eading and writing functions, crå`°dONLNdÍïm°‰)éeate an I/O function. Note °dONLNd¢lÆ‘(´lthat you also need to pr¸ °dONLNd¢‘Æì)h*ovide your own opener function to call you„†°dONLNdG¢îÆó)¿r÷@°dONLNdH¢òÆ‚) I/O function. Se7Ä°dONLNdY¢„ÆÍ)Ke °dONLNd[Ølª(∏l$“Calling an Edition Opener” on page ÍÄ°dONLNdت$)¶2-64>`°dONLNdÉØ%ª')..°dONLNdÖ»l‘V(—l'FUNCTION MyIO (selector: FormatIOVerb; °dONLNd≤÷Δ‚b+ZVAR PB: FormatIOParamBlock°dONLNdÃ÷b‚n)ú):°dONLNdŒ÷n‚ò)  OSErr;
  5435. *¯4    *¯ 
  5436. l
  5437. ¯
  5438. ˇ·ˇ‚7^ˇˇ‹..ˇ◊°dONLNd◊˘l(lCalling a Format I/O Functionˇˇˇˇˇˇ€r(2
  5439. °dONLNdˆlr(lTµ¿°dONLNd˜qN)1o indicate to the Edition Manager which format I/∞†°dONLNd(OÑ)fi O function t› °dONLNd4Ñ¡)5o use, use the .°dONLNdCl(Ã(%lCallFormatIOProc°dONLNdSÃ(ı)`
  5440.  function.°dONLNd^3l?å(<l0err := CallFormatIOProc (selector, PB, routine);ˇ0˙@ˇ ˇˇˇˇ@
  5441. ˇ·ˇ‚7^
  5442. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡ä Subscribing to Non-Edition Files
  5443. , (‡2-69
  5444. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  5445. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  5446. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  5447. 4€4—?òÄ
  5448. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  5449. ˛ˇˇˇ
  5450. ˛ˇˇˇ
  5451. ˛ˇˇˇ
  5452. ˛ˇˇˇ˜˝˛ˇ˛
  5453. ˛ˇ˛ˇˇ
  5454. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  5455. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  5456. ˛ˇ˛ˇˇ
  5457. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  5458. ˛ˇˇˇˇ
  5459. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  5460. ˛ˇˇˇˇ
  5461. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  5462. ˛ˇˇˇˇ
  5463. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿.°dONLNd\äh≠(eäSet the ,
  5464. Courier°dONLNd\≠h›)#selector°dONLNd\›h˝)0@ parameter to one of the format I/O verbs. The format I/O verbs .°dONLNdPiäu≠(räinclude ,Zapf Dingbats°dONLNdYäÜè*n
  5465. .°dONLNd[|ñàÿ) ioHasFormat.°dONLNdgëäòè(óän
  5466. .°dONLNdiéñöfi) ioReadFormat.°dONLNdv£ä™è(©än
  5467. .°dONLNdx†ñ¨ÿ) ioNewFormat.°dONLNdѵäºè(ªän
  5468. .°dONLNdÜ≤ñæ‰) ioWriteFormatˇˇ’T°dONLNdî√äœù(ÃäThe ˇˇ¸UT°dONLNdò√ûœ™)PBˇˇ’TUT°dONLNdö√™œ˙)  parameter of the ˇˇ¸™§°dONLNd¨√˙œZ)PCallFormatIOProcˇˇ’T™§°dONLNdº√Zœ)`* function contains a format I/O parameter .°dONLNdʖ䋧(Ÿäblock..°dONLNdÌÁäÛ&*TYPE FormatIOParamBlock = °dONLNd    ıú¿+RECORD°dONLNdƉ+    ioRefNum:°dONLNd 8)ZLongInt;°dONLNd-bŒ)Z{reference number}°dONLNdBÆÿ(Æformat:°dONLNdNJ)Z FormatType;°dONLNd^b‡)Z{edition format type}°dONLNdvÆ+((Æ formatIndex°dONLNdÇ+ˆ)B:°dONLNdá+8)LongInt;°dONLNdîb+)Z{opener-specific enumeration }°dONLNdø-b9∞*{ of formats}°dONLNdœ;ÆGÿ(DÆoffset:°dONLNd€;G8)ZLongInt;°dONLNdË;bG⁄)Z{offset into format}°dONLNdˇIÆUfi(RÆbuffPtr:°dONLNd IU )ZPtr;°dONLNdIbUŒ)Z{data starts here}°dONLNd*WÆcfi(`ÆbuffLen:°dONLNd7Wc8)ZLongInt;°dONLNdDWbc¬)Z{length of data}°dONLNdVeúq¥(núEND;°dONLNd[}äâû(ÜäThe °dONLNd_}ûâ»)routine°dONLNdf}»â)* parameter of the °dONLNdx}ây)QCallFormatIOProc°dONLNdà}yâ)`" function is a pointer to a format.°dONLNd´ääñ≈(ìäI/O function..°dONLNdπúä®#* The following list shows which fi°dONLNd⁄ú#®C)ôelds of °dONLNd‚úC®Ø) FormatIOParamBlock°dONLNdÙúØ®ª)l arR`°dONLNd˜úª®˜) e used by the .°dONLNd©äµ™(≤äformat “`°dONLNd ©™µ—) I/O verbÜ °dONLNd©“µÿ)(s:    °dONLNd¬HÕ|( H Format I/O vˇ–°dONLNd#¬|Õä)4erbʆ°dONLNd(¬ÕÕ˘)Q    Parameter{ °dONLNd2¬$ÕU)W Description{ °dONLNd>¬•Õœ)Å
  5469. Called by ¸ °dONLNdˇˇ)* 
  5470. .°dONLNdU–H‹ä(ŸH ioHasFormat,    Symbol.{ °dONLNda–Ø€∏)gÆ.ʆ°dONLNdc–Õ‹˝)ioRefNum.{ °dONLNdl–$‹;)WI/O r    ¿°dONLNdq–<‹L)eferµ‡°dONLNdu–L‹á) ence number { °dONLNdÅ€$Á'(‰$r@ °dONLNdÇ€(Áy)eturned by opener$‡°dONLNdì€yÁ{)Q..{ °dONLNdï–•‹(Ÿ•EditionHasFormat{ °dONLNd•–‹
  5471. )`, { °dONLNd߀•Á(‰•GetStandardFormats{ °dONLNdπ€Á)l, { °dONLNdªÊ•Ú∏(Ô•and { °dONLNdøÊ∏Ú˙) ReadEdition{ °dONLNd Ê˙Ú¸)B .{ °dONLNdÀÒ•˝Œ(˙•    functions{ °dONLNd◊Î؈∏(ÙØÆ.ʆ°dONLNdŸÎÕ˜Ò)format.{ °dONLNd‡Î$˜Ñ)WCheck for this format.{ °dONLNd˙˚Ø∏(ب.ʆ°dONLNd¸˚Õ) formatIndex.{ °dONLNd˚$[)W An optional { °dONLNd$z* enumeration of the { °dONLNd'$m* supplied format.{ °dONLNd;!Ø,∏(*ب.ʆ°dONLNd=!Õ-˜)buffLen.{ °dONLNdE!$-P)W If found, r0 °dONLNdP!Q-{)-
  5472. eturn the { °dONLNdZ,$8ä(5$length size or –1 if size { °dONLNdt7$CZ* is unknown.{ °dONLNdÉGØR∏(Pبʆ°dONLNdÖGÕS) Return value.{ °dONLNdíG$S,)WAÓÄ°dONLNdìG+S-) ÓÄ°dONLNdîG-SK)noErrÓÄ°dONLNdôGKSX) or { °dONLNdùR$^Z([$    noTypeErr{ °dONLNd¶RZ^s)6 code..” °dONLNd¥a˝j+£    continuedˇÇ@ˇ ˇˇˇˇ@
  5473. ˇ·ˇ‚7^
  5474. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  5475. (‡*2-70    )B Subscribing to Non-Edition Files4^*¿¯
  5476. °dONLNd@lLÏ(IlThe marks for each format ar≠ °dONLNd1@ÏLq)Äe kept by the Edition ManagerÓ@°dONLNdN@qL≤)Ö. The format I/Í °dONLNd]@≥L‰)B O function °dONLNdhMlYq(VloıÄ°dONLNdiMqYŸ)nly needs to be able to rª`°dONLNdÇM⁄Yj)i!ead or write, beginning at any ofπ‡°dONLNd£MjY‚)êfset. If you know that your °dONLNdøZlf≈(clapplication always r`°dONLNd”ZΔf˛)Zeads an entirÖ‡°dONLNd‡Z˛f[)8e format sequentially“†°dONLNdıZZfõ)\, you can ignor£`°dONLNdZúfº)Be the ofÊ °dONLNd Zºf–) fset. ,
  5477. Courier.°dONLNdv*Çr(* ioReadFormat,    Symbol.{ °dONLNdvëÅö)gÆ.ʆ°dONLNdvØÇfl)ioRefNum.{ °dONLNdvÇ)WI/O r    ¿°dONLNdvÇ.)eferµ‡°dONLNd!v.Çi) ence number { °dONLNd-Åç    (är@ °dONLNd.Å
  5478. ç[)eturned by opener$‡°dONLNd?Å[ç])Q..{ °dONLNdAváÇ…(á ReadEdition{ °dONLNdLv…Çfi)B and { °dONLNdQÅáçÛ(äáGetStandardFormats{ °dONLNdcÅÛçı)l .{ °dONLNddåáò∞(ïá    functions{ °dONLNdpëëúö(öëÆ.ʆ°dONLNdrëØù”)format.{ °dONLNdyëùK)WGet this format.{ °dONLNdç°ë¨ö(™ëÆ.ʆ°dONLNdè°Ø≠Ò) formatIndex.{ °dONLNdõ°≠)WV»@°dONLNdú° ≠%)alue rΔ`°dONLNd¢°%≠W) eturned by .{ °dONLNd≠¨∏H(µ ioHasFormat{ °dONLNd∏¨H∏K)B..{ °dONLNdΩºë«ö(≈ëÆ.ʆ°dONLNdøºØ»”)offset.{ °dONLNdΔº»n)WRead format beginning { °dONLNd‹«”* frî°dONLNdfi«”9)
  5479. om this of≤`°dONLNdË«9”K),fset.{ °dONLNdÒ◊ë‚ö(‡ëÆ.ʆ°dONLNdÛ◊Ø„Ÿ)buffPtr.{ °dONLNd˚◊„k)WPut data beginning her¿¿°dONLNd◊k„r)ee.{ °dONLNdÁëÚõ(ë´.ʆ°dONLNdÁØÛŸ)buffLen.{ °dONLNd!ÁÛ7)W Specify buf˜@°dONLNd,Á7Ûo)1fer length to { °dONLNd:Ú˛    (˚r@ °dONLNd;Ú
  5480. ˛6)
  5481. ead, and rW†°dONLNdEÚ6˛m),eturn actual { °dONLNdR˝    .(amount r$Ä°dONLNdZ˝/    R))eceived.{ °dONLNdfëö(ë¨ʆ°dONLNdhØË) Return value.{ °dONLNdu)WAÓÄ°dONLNdv) ÓÄ°dONLNdw-)noErrÓÄ°dONLNd|-S)
  5482.  code, or .{ °dONLNdÜ$(!apprD`°dONLNdä$I) opriate err§@°dONLNdïI$l).or code..°dONLNd†(*4l(1* ioNewFormat.{ °dONLNd¨(ë3ö)gÆ.ʆ°dONLNdÆ(Ø4fl)ioRefNum.{ °dONLNd∑(4)WI/O r    ¿°dONLNdº(4.)eferµ‡°dONLNd¿(.4i) ence number { °dONLNdÃ3?    (<r@ °dONLNdÕ3
  5483. ?[)eturned by opener$‡°dONLNdfi3[?])Q..{ °dONLNd‡(á4ˇ(1áSetEditionFormatMark{ °dONLNdÙ3á?ç* a{ °dONLNdı3ç?ö)nd { °dONLNd¯3ö?‚) WriteEdition{ °dONLNd3‚?‰)H .{ °dONLNd>áJ∞(Gá    functions{ °dONLNdCëNö(LëÆ.ʆ°dONLNdCØO”)format.{ °dONLNdCO)WCrW °dONLNdCOX) eate this format.{ °dONLNd1Së^ö(\ë¨.ʆ°dONLNd3SØ_Ò) formatIndex.{ °dONLNd?S_=)W An optional { °dONLNdK^j\* enumeration of the { °dONLNd^iuO* supplied format.{ °dONLNdryëÑö(Çë¨ʆ°dONLNdtyØÖË) Return value.{ °dONLNdÅyÖ)WAÓÄ°dONLNdÇyÖ) ÓÄ°dONLNdÉyÖ-)noErrÓÄ°dONLNdày-ÖS)
  5484.  code, or .{ °dONLNdíÑê(çapprD`°dONLNdñÑêI) opriate err§@°dONLNd°ÑIêl).or code..°dONLNd¨î*†x(ù*ioWriteFormat.{ °dONLNd∫îëüö)gÆ.ʆ°dONLNdºî؆fl)ioRefNum.{ °dONLNd≈î†)WI/O r    ¿°dONLNd î†.)eferµ‡°dONLNdŒî.†i) ence number { °dONLNd⁄ü´    (®r@ °dONLNd€ü
  5485. ´[)eturned by opener$‡°dONLNdÏü[´])Q..{ °dONLNdÓîᆜ(ùá WriteEdition{ °dONLNd˙ı)H     function.{ °dONLNdØë∫ö(∏ëÆ.ʆ°dONLNdØت”)format.{ °dONLNdتK)WGet this format.{ °dONLNd#øë ö(»ëÆ.ʆ°dONLNd%øØÀÒ) formatIndex.{ °dONLNd1øÀ)WV»@°dONLNd2ø À%)alue rΔ`°dONLNd8ø%ÀW) eturned by .{ °dONLNdC ÷H(” ioNewFormat{ °dONLNdN H÷K)B..{ °dONLNdS⁄ëÂö(„ëÆ.ʆ°dONLNdU⁄ØÊ”)offset.{ °dONLNd\⁄Ê)WWΩ¿°dONLNd]⁄Êo)    rite format beginning { °dONLNdsÂÒ(Ófrî°dONLNduÂÒ9)
  5486. om this of≤`°dONLNdÂ9ÒK),fset.{ °dONLNdàıëö(˛ëÆ.ʆ°dONLNdäıØŸ)buffPtr.{ °dONLNdíık)WGet data beginning her¿°dONLNd®ıls)fe.{ °dONLNdÆëõ(ë´.ʆ°dONLNd∞ØŸ)buffLen.{ °dONLNd∏7)W Specify buf˜@°dONLNd√7o)1fer length to { °dONLNd—(write.{ °dONLNd€ ë+ö()ë¨ʆ°dONLNd› Ø,Ë) Return value.{ °dONLNdÍ ,)WAÓÄ°dONLNdΠ,) ÓÄ°dONLNdÏ ,-)noErrÓÄ°dONLNdÒ -,P)     code or .{ °dONLNd˙+7(4apprD`°dONLNd˛+7I) opriate err§@°dONLNd    +I7i).or codeWÄ°dONLNd+j7l)!.    °dONLNdˇˇ(p* Format I/O vˇ–°dONLNdˇˇ)4erbʆ°dONLNdˇˇ)Q    Parameter{ °dONLNdˇˇ)W Description{ °dONLNdˇˇ)Å
  5487. Called by ¸ °dONLNdˇˇ)*  (continued)ˇ8Ä@ˇ ˇˇˇˇ@
  5488. ˇ·ˇ‚7^
  5489. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äEdition Manager Reference
  5490. , (‡2-71
  5491. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  5492. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  5493. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  5494. 4€4—?òÄ
  5495. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  5496. ˛ˇˇˇ
  5497. ˛ˇˇˇ
  5498. ˛ˇˇˇ
  5499. ˛ˇˇˇ˜˝˛ˇ˛
  5500. ˛ˇ˛ˇˇ
  5501. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  5502. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  5503. ˛ˇ˛ˇˇ
  5504. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  5505. ˛ˇˇˇˇ
  5506. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  5507. ˛ˇˇˇˇ
  5508. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  5509. ˛ˇˇˇˇ
  5510. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  5511. ^Hx4^Hx
  5512. àHê4âHê äHä
  5513. ˇ·ˇ‚7^ˇˇ©ˇÆ°dONLNduHàÏ(ÉHEdition Manager Refer?z°dONLNduÏà )§enceˇˇˇˇˇˇV˛(É2
  5514. °dONLNdô䕸(¢äThis section describes the Y@°dONLNd6ô˝•)sdata strï`°dONLNd>ô•5)!uctur@°dONLNdCô6•T)es and °dONLNdJôU•X)r‘°dONLNdKôX•t)outine`°dONLNdQôu•ò)    s that arnÄ°dONLNdZôò•ª)#e specifi&@°dONLNdcôº•fi)$    c to the °dONLNdl¶ä≤≠(ØäEdition ëÄ°dONLNdt¶≠≤‘)#Managerf °dONLNd{¶‘≤)'. The “Data StrÇ@°dONLNdä¶≤,)Auctur °dONLNdè¶-≤Ë),es” section describes the edition container °dONLNdª≥äøç(ºärE°dONLNdº≥éø†)ecorπ`°dONLNd¿≥†ø®)d U °dONLNd¬≥©øÚ)    and the section rM °dONLNd”≥Úø)Iecor¡Ä°dONLNd◊≥ø)8d. The “Edition Manager Routines” section describes the °dONLNd¿äÃç(…ärE°dONLNd¿éÀ)Joutines your application can use to implement publish and subscribe featur— °dONLNdZ¿€ÃÒ(…€es in °dONLNd`Õ䟰(÷äyour ˛`°dONLNdeÕ°Ÿ’) application.
  5515. H4H H
  5516. ˇ·ˇ‚7^°dONLNdsıHz(HData Str∫ °dONLNd{ızõ)2uctur®¿°dONLNdÄıõß)!esˇˇˇˇˇˇ(2
  5517. °dONLNdÑäN(ä.This section describes the edition container rÕ °dONLNd≤N`)ƒecorAÄ°dONLNd∂a≤)d and the section r’@°dONLNd…≤ƒ)QecorI†°dONLNdÕ≈·)d. See ∏`°dONLNd‘·¯)page ì@°dONLNdŸ˘ )2-91Á °dONLNd› ) °dONLNdfiä&:(#ä)for a description of the new subscriber rì°dONLNd:&S)∞eply r@°dONLNdT&f)ecor膰dONLNdf&q)d, ´`°dONLNdq&à) page Ü@°dONLNdâ&õ)2-93⁄ °dONLNdõ&) for a description of the °dONLNd7'ä3–(0änew publisher rc@°dONLNdF'–3È)Feply rÎÄ°dONLNdL'È3˚)ecor_‡°dONLNdP'¸3)d, {†°dONLNdS'3) page VÄ°dONLNdX'31)2-95™`°dONLNd\'13„)+ for a description of the section options r¬@°dONLNdá'„3ı)≤ecor6†°dONLNdã'ˆ3)d, and °dONLNdí4ä@°(=äpage Z‡°dONLNdó4¢@¥)2-99Æ¿°dONLNdõ4¥@V)( for a description of the edition info rz`°dONLNd√4W@i)£ecorÓ¿°dONLNd«4i@¸)"d. For information on the edition °dONLNdÈAäMö(Jä;opener parameter block and format I/O parameter block, see °dONLNd$AõM≤(Jõpage Ó‡°dONLNd)A≤M…)2-103B¿°dONLNd.A Mfl) and /‡°dONLNd3A‡M˜)page 
  5518. ¿°dONLNd8A¯M)2-104^†°dONLNd=AM), °dONLNd?NäZç(WärE°dONLNd@NéZø) espectively~°dONLNdKNæZ¿)0.
  5519. ~HÜ4HÜ ÅHÅ
  5520. ˇ·ˇ‚7^ °dONLNdNqHfl({HThe Edition Container Recor∫@°dONLNdiqflÊ)ódˇˇˇˇˇˇ({2
  5521. °dONLNdlÜäíÎ(èäAn edition container r Ä°dONLNdÇÜÏí˛)becorć°dONLNdÜܲí&)    d identifiÛ@°dONLNdêÜ&íU)( es a specifih°dONLNdúÜVíÑ)0 c edition fi$`°dONLNd®ÜÖí˚)/le. Many Edition Manager °dONLNd¡ìäüç(úärE°dONLNd¬ìéü¥)    outines r    `°dONLNdÀìµüÃ)'equir †°dONLNd–ìÃü2)e an edition container r/Ä°dONLNdËì2üD)fecor£‡°dONLNdÏìDüç)d as a parameterP@°dONLNd¸ìçü•)I. The ,
  5522. Courier.°dONLNd†ä¨(©äEditionContainerSpec°dONLNd†¨B)x data type defPÄ°dONLNd$†B¨∂)@ines an edition container r"‡°dONLNd?†∂¨»)tecorı@°dONLNdC†«¨–)d.°dONLNdF∑ä√2(¿äTYPE EditionContainerSpec = °dONLNdd≈ú—¿+RECORD°dONLNdm”Æflfi+theFile:°dONLNd{”flD)lFSSpec;°dONLNdá”tfl)Z{file containing edition }°dONLNdØ·tÌû*{ data}°dONLNdπÔÆ˚(¯ÆtheFileScript:°dONLNdÕÔ˚\)l ScriptCode;°dONLNd›Ôt˚
  5523. )Z{script code of filename}°dONLNd˘˝Æ    fi(ÆthePart:°dONLNd˝    J)lLongInt;°dONLNd˝t    ¯)Z{which part of file, }°dONLNd8 t˛*{ always kPartsNotUsed}°dONLNdRÆ%ˆ("Æ thePartName:°dONLNdd%>)lStr31;°dONLNdot%∞)Z
  5524. {reserved}°dONLNd|'Æ3(0ÆthePartScript:°dONLNdê'3\)l ScriptCode;°dONLNd†'t3∞)Z
  5525. {reserved}°dONLNd¨5úA¥(>úEND;
  5526. NH]4OH]    .°dONLNd±NäY÷(VäField descriptions
  5527. ˇ·ˇ‚7^
  5528. .°dONLNdƒ[äg¥*theFile.°dONLNdÃ[ÊgÌ)\A∫†°dONLNdÕ[Ìgı) fiG`°dONLNd–[ˆg)        le specifiÁÄ°dONLNd⁄[g@)&    ciation rˆ¿°dONLNd„[@gR)$ecork °dONLNdÁ[Sgè)d that identifi≥†°dONLNdˆ[èg
  5529. )<es the name and location of °dONLNdgÊs(pÊthe edition fi©Ä°dONLNd gsc)8le. Specify the fiå¿°dONLNd2gds∫)Fle using the standarZ†°dONLNdFgªs
  5530. )Wd conventions for °dONLNdXsÊÏ(|Êfiå¿°dONLNdZsÏ)    le specifi,‡°dONLNdds4)'cation rS¿°dONLNdls4F)!ecor» °dONLNdpsF‡)$ds as described in the chapter “IntrI@°dONLNdîs·)õ oduction to °dONLNd†ÊãE(àÊFile Management” in 4°dONLNd¥Fã£)`Inside Macintosh: Files˙‡°dONLNdÀ£ã•)]..°dONLNdŒéäöÿ(óätheFileScript.°dONLNd‹éÊöÌ)\A∫†°dONLNd›éÌöU) script code that identifi@°dONLNd˜éVö˝)i'es the script in which the name of the °dONLNdöʶù(£Ê)document is to be displayed in the FinderÉ@°dONLNdGöù¶¢)∑. $‡°dONLNdIö¢¶©)A_Ä°dONLNdJö©¶È) script code of .°dONLNdZ¶Ê≤:(ØÊsmSystemScript°dONLNdh¶:≤@)T rR`°dONLNdj¶@≤O)epr$¿°dONLNdm¶O≤‡)!esents the default system script.ˇÄ@ˇ ˇˇˇˇ@
  5531. ˇ·ˇ‚7^
  5532. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  5533. (‡*2-72    )BEdition Manager Reference4^*¿¯,
  5534. Courier
  5535. .°dONLNd\lhñ(elthePart°dONLNd\»h–)\AÛ`°dONLNd    \œhe)" value that must always be set to Û`°dONLNd+\eh≥)ñkPartsNotUsedÛ`°dONLNd8\≥hÎ)N in System 7.°dONLNdFklwÆ(tl thePartName.°dONLNdRk»wÛ)\    Reserved..°dONLNd\zlÜ∫(ÉlthePartScript.°dONLNdjz»ÜÛ)\    Reserved.
  5536. ©*±¯4™*±¯ ¨*¨˛
  5537. ˇ·ˇ‚7^ °dONLNduú*™à(¶*The Section Recor @°dONLNdÜúâ™ê)_dˇˇˇˇˇˇ(¶Ú2
  5538. °dONLNdâ±lΩs(∫lA∫†°dONLNdä±sΩö)
  5539.  section rh °dONLNdî±õΩ≠)(ecor‹Ä°dONLNdò±≠Ω’)    d identifiN‡°dONLNd¢±÷Ω)) es a specifi√†°dONLNdƱΩ…)//c publisher or subscriber section. It contains °dONLNd›æl Ü(«lBinformation to identify the section as a publisher or a subscriber‡°dONLNdæÜ ’(«Ü, a time stamp to r¨†°dONLNd2æ’ Á)Oecor!°dONLNd6æË )d °dONLNd8Àl◊´(‘lthe last modifiÄ°dONLNdGÀ¨◊])@)cation of the section, and unique identifiˇ °dONLNdqÀ]◊‡)±cation for each section. Many °dONLNdèÿl‰Ω(·lEdition Manager rhÄ°dONLNd†ÿΩ‰„)Q    outines r,‡°dONLNd©ÿ‰‰˚)'equirD °dONLNdÆÿ˚‰b)e a handle to a section r„†°dONLNd«ÿb‰t)gecorX°dONLNdÀÿu‰æ)d as a parameter`°dONLNd€ÿæ‰÷)I. The .°dONLNd·ÂlÒ∫(ÓlSectionRecord°dONLNdÓÂ∫Ò˙)N data type defPÄ°dONLNd¸Â˙Ò;)@ines a section r"‡°dONLNd Â;ÒM)Aecorı@°dONLNdÂLÒU)d.°dONLNd¸lÍ(lTYPE SectionRecord = °dONLNd*
  5540. ~¢+RECORD°dONLNd3ê$¿+version:°dONLNd@Í$,)Z SignedByte;°dONLNdPD$™)Z{always 1 in 7.0}°dONLNdd&ê2Æ(/êkind:°dONLNdn&Í22)Z SectionType;°dONLNd&D2⁄)Z{publisher or subscriber}°dONLNdõ4ê@Æ(=êmode:°dONLNd•4Í@,)Z UpdateMode;°dONLNdµ4D@¬)Z{automatic or manual}°dONLNdÕBêN∫(KêmdDate:°dONLNdŸBÍN&)Z
  5541. TimeStamp;°dONLNdËBDN⁄)Z{last change in document}°dONLNdPê\Ã(Yê
  5542. sectionID:°dONLNdPÍ\)ZLongInt;°dONLNd PD\‘)Z{application-specific, }°dONLNdE^Dj»*{ unique per document}°dONLNd^lêx∫(uêrefCon:°dONLNdjlÍx)ZLongInt;°dONLNdwlDx»)Z{application-specific}°dONLNdêzêÜ¥(Éêalias:°dONLNdõzÍÜ2)Z AliasHandle;°dONLNd¨zDÜ‘)Z{handle to alias record}°dONLNd»ñê¢Ê(üê9{The following fields are private and are set up by the }°dONLNd§ê∞⁄*7{ RegisterSection function. Do not modify the private }°dONLNd>≤êæÃ*
  5543. { fields.}°dONLNdK¿êÿ*subPart:°dONLNdX¿ÍÃ)ZLongInt;°dONLNde¿DÃz)Z    {private}°dONLNdqŒê⁄ÿ(◊ê nextSection:°dONLNdÇŒÍ⁄>)ZSectionHandle;°dONLNdïŒD⁄Ê)Z{private, do not use as a }°dONLNdΩ‹DËò*{ linked list}°dONLNdŒÍêˆfi(ÛêcontrolBlock:°dONLNd‡Í͈)ZHandle;°dONLNdÏÍDˆÚ)Z{may be used for comparison }°dONLNd¯Dn*{ only}°dONLNd ê∫(êrefNum:°dONLNd,Í>)ZEditionRefNum;°dONLNd?Dz)Z    {private}°dONLNdIl Ñ(lEND;
  5544. -*<¯4.*<¯    .°dONLNdN-l8∏*Field descriptions
  5545. ˇ·ˇ‚7^
  5546. .°dONLNda:lFñ*version.°dONLNdi:»Fg)\&Indicates the version of the section rm†°dONLNdè:gFy)üecor‚°dONLNdì:yFñ)d, curr,¿°dONLNdö:óF¡)
  5547. ently $01..°dONLNd¶IlUÑ(Rlkind.°dONLNd´I»U⁄)\Defi†°dONLNdØI€UÎ)@nes the section type as either publisher or subscriber with the .°dONLNdÔU»a
  5548. (^» stPublisher°dONLNd˙U
  5549. a)B or °dONLNd˛Ua_) stSubscriber°dONLNd
  5550. U_aâ)H
  5551.  constant.°dONLNddlpÑ(mlmode.°dONLNdd»p*)\Indicates if editions arj‡°dONLNd2d*pŒ)b#e updated automatically or manuallyg‡°dONLNdUdÕpœ)£.ˇ6¿@ˇ ˇˇˇˇ@
  5552. ˇ·ˇ‚7^
  5553. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äEdition Manager Reference
  5554. , (‡2-73
  5555. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  5556. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  5557. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  5558. 4€4—?òÄ
  5559. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  5560. ˛ˇˇˇ
  5561. ˛ˇˇˇ
  5562. ˛ˇˇˇ
  5563. ˛ˇˇˇ˜˝˛ˇ˛
  5564. ˛ˇ˛ˇˇ
  5565. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  5566. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  5567. ˛ˇ˛ˇˇ
  5568. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  5569. ˛ˇˇˇˇ
  5570. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  5571. ˛ˇˇˇˇ
  5572. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  5573. ˛ˇˇˇˇ
  5574. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿,
  5575. Courier.°dONLNd\ähÆ(eämdDate.°dONLNd\Êhr)\Indicates which version (modifiº†°dONLNd&\rh)å'cation date) of the section’s contents ˇˇ‚™.°dONLNdMhÊt∂(qÊ/is contained within the publisher or subscriberú°dONLNd|h∂tŒ)–. The ˇˇß˛◊°dONLNdÇhŒtÚ)mdDateˇˇ‚™◊°dONLNdàhÚt˙)$ fi∫ö°dONLNdãh˚t)    eld is .°dONLNdítÊÄ>(}Êset to 0 when you cr@°dONLNd¶t?Ä)Y-eate a new subscriber section and to the curr˛†°dONLNd”tÄ)√ent °dONLNd◊ÄÊå3(âÊtime when you crÿ°dONLNdÁÄ3åé)Meate a new publisherÉ@°dONLNd˚ÄéåÆ)[. Be surÒ¿°dONLNdÄÆå˙) e to update this fiÍ °dONLNdÄ˚å )Meld °dONLNdåÊò|(ïÊ!each time publisher data is modifi›¿°dONLNd<å|ò‰)ñed. The section’s modifiΔ°dONLNdTåÂò)ication °dONLNd[òʧ&(°Êdate is comparN°dONLNdiò'§ñ)Aed to the edition’s modifif†°dONLNdÉòñ§)ocation date to determine °dONLNdú§Ê∞˝(≠Ê?whether the section and the edition contain the same data. The °dONLNd€∞ʺ$* section modifiB‡°dONLNdÈ∞%ºÎ)?.cation date is displayed in the publisher and °dONLNdºÊ»á(≈Ê%subscriber options dialog boxes. See .†°dONLNd<ºà»Ù)¢“Closing an Edition” on °dONLNdT»Ê‘˝(—Êpage Z‡°dONLNdY»˛‘)2-28Æ¿°dONLNd]»‘) for detailed information..°dONLNdx◊ä„¿(‡ä    sectionID.°dONLNdÇ◊Ê„Ô)\PrN†°dONLNdÑ◊„˛)
  5576. ;ovides a unique number for each section within a document. °dONLNdø„ÊÔÌ(ÏÊA∫†°dONLNd¿„ÌÔÔ) :†°dONLNd¡„Ôì)%simple way to implement this is to crs†°dONLNdÊ„ìÔ¯)£eate a counter for each °dONLNd˛ÔÊ˚ˇ(¯Ê>document that is saved to disk with the document. The counter °dONLNd<˚Êê* )should start at 1. The section ID is currö@°dONLNde˚êÍ)™ently used as a tie br†°dONLNd{˚Î)[    eaker in .°dONLNdÑʯ(Êthe °dONLNdà¯p)GoToPublisherSection°dONLNdúp«)x function when therR`°dONLNdØ«ÿ)We ar$¿°dONLNd≥ÿ    ) e multiple .°dONLNdæÊ(ÊDpublishers to the same edition in a single document. The section ID °dONLNdÊ+X* should not be 0 or –1. See $¿°dONLNdY+)s)“Duplicating Publishers and Subscribers” °dONLNdF+Ê7 (4Êon page !¿°dONLNdN+ 7)&2-58u†°dONLNdR+7Õ)( for information on multiple publishers..°dONLNd{:äFÆ(CärefCon.°dONLNdÇ:ÊF˝)\Refer⁄ °dONLNdá:˝FΔ).ence constant available for application-specififi¿°dONLNd∂:ΔFfi)…c use..°dONLNdΩIäU®(Räalias.°dONLNd√IÊUn)\ Contains a handle to the alias rÔÄ°dONLNd„InUÄ)àecorc‡°dONLNdÁIÅU)"d for a particular section within °dONLNd    UÊa(^Ê a document..°dONLNdfärÍ(oäWhenever the user crR`°dONLNd)fÍrq)`eates a publisher or subscriberï°dONLNdHfprõ)Ü , call the ï°dONLNdSfõr◊)+
  5577. NewSectionï°dONLNd]f◊rˇ)<
  5578.  function .°dONLNdgsä»(|ä(described on ı`°dONLNdus»fl)>page –@°dONLNdzs‡Ú)2-75$ °dONLNd~sÛ )) to cre °dONLNdÖs M)eate a section rh@°dONLNdïsM_)Aecor‹†°dONLNdôs_ï)d and alias r8@°dONLNd¶sñ®)7ecor¨†°dONLNd™s®∞)d.
  5579. ´H≥4¨H≥ ÆHÆ
  5580. ˇ·ˇ‚7^°dONLNdÆõH´≥(ßHEdition Manager ~Ä°dONLNdæõ¥´Í)lRoutinesˇˇˇˇˇˇ(ß2
  5581. °dONLNd»≥äø(ºäThis section describes the r@°dONLNd‰≥øQ)woutines you use to,Zapf Dingbats°dONLNd˜…ä–è(œän
  5582. °dONLNd˘Δñ“) initialize the Edition Manager°dONLNd€ä‚è(·än
  5583. °dONLNdÿñ‰û) crµ@°dONLNdÿû‰…)
  5584. eate and r=°dONLNd&ÿ ‰),egister a section°dONLNd8ÌäÙè(Ûän
  5585. °dONLNd:Íñˆû) crµ@°dONLNd<Íûˆ;)$eate and delete an edition container°dONLNdaˇäè(än
  5586. °dONLNdc¸ñ) set and locate a format mark°dONLNdÄäè(än
  5587. °dONLNdÇñô) rE°dONLNdÉöÏ)ead in edition data°dONLNdó#ä*è()än
  5588. °dONLNdô ñ,ˆ) write out edition data°dONLNd∞5ä<è(;än
  5589. °dONLNd≤2ñ>¯) close an edition after r}°dONLNd 2¯>E)beading or writing°dONLNd‹GäNè(Män
  5590. °dONLNdfiDñP) display dialog boxes°dONLNdÛYä`è(_än
  5591. °dONLNdıVñb") !locate a publisher and edition frK¿°dONLNdV#bh)çom a subscriber°dONLNd&kärè(qän
  5592. °dONLNd(hñtô) rE°dONLNd)höt)ead and write non-edition fi¿°dONLNdEht)|leø¿°dONLNdGht!)s°dONLNdIyäÖs(Çä4Result codes appear at the end of each function wherÄ°dONLNd}ytÖ˝)Í!e applicable. In addition to the °dONLNdûÜäí¶(èäspecifiÓ °dONLNd•ܶí∞)c r£`°dONLNd®ܱí.) esult codes listed, you may rM`°dONLNd≈Ü/íY)~
  5593. eceive err™`°dONLNdœÜYíµ)*ors generated by the Û`°dONLNd‰Üµíı)\Alias Manager°dONLNdÒ܈í˚)A, °dONLNdÛìäüú(úäFile )Ä°dONLNd¯ìùüƒ)Manager˛ °dONLNdˇì√ü+)&, and Memory Manager °dONLNdì+ü-)h.ˇh@ˇ ˇˇˇˇ@
  5594. ˇ·ˇ‚7^
  5595. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  5596. (‡*2-74    )BEdition Manager Reference4^*¿¯
  5597. j*q¯4j*q¯ l*l˛
  5598. ˇ·ˇ‚7^ °dONLNd\*j‘(f* Initializing the Edition Managerˇˇˇˇˇˇ(fÚ2
  5599. .°dONLNd"ql}s(zlYï°dONLNd#qr}†) ou use the ,
  5600. Courierï°dONLNd.q†}˙).InitEditionPackï°dONLNd=q˙}∫)Z+ function to initialize the Edition Manager◊†°dONLNdhqπ}◊)ø. Note .°dONLNdo~lä(álthat V °dONLNdt~Ää´)    you shoulU@°dONLNd}~¨äπ),d ca@°dONLNdÄ~πä)all this function ˘`°dONLNdí~ä)Gonly 7¿°dONLNdó~ä.)once.
  5601. ∫*√¯4ª*¬¯ º*º˛
  5602. ˇ·ˇ‚7^ °dONLNdû≠*ªÄ(∑*InitEditionPackˇˇˇˇˇˇ(∑Ú2
  5603. .°dONLNdØÃlÿÖ(’lBeforR`°dONLNd¥ÃÖÿ¿)e calling the R`°dONLNd¬Ã¿ÿ);InitEditionPackR`°dONLNd—Ãÿ^)Z function, be sur$¿°dONLNd‚Ã^ÿ‹)De to determine whether the °dONLNd˝ŸlÂo(‚l9Edition Manager is available on your system by using the °dONLNd6ŸoÂô(‚oGestalt°dONLNd=ŸôÂÏ)* function with the °dONLNdPÊlÚÍ(ÔlgestaltEditionMgrAttr°dONLNdeÊÍÚ)~ (°dONLNdgÊÚ)'edtn'°dONLNdmÊÚ=)$
  5604. ) selector¬†°dONLNdwÊ<Ú?)(.°dONLNdyˇl ˆ(lFUNCTION InitEditionPac°dONLNdêˇˆ )äk:°dONLNdíˇ ,)  OSErr;.°dONLNdö'*0c(.* DESCRIPTION
  5605. .°dONLNd¶4l@Ä+BThe °dONLNd™4Ä@⁄)InitEditionPack°dONLNdπ4⁄@)Z  function rR`°dONLNdƒ4@=),eturns an err$¿°dONLNd—4=@‰)7&or if the package could not be loaded .°dONLNd˜AlMÁ(Jlinto the system heap and prâÄ°dONLNdAÁM2){operly initialized7‡°dONLNd$A3M8)L. °dONLNd'h*qD(o*RESULëÄ°dONLNd,hDqh)T CODES
  5606. ∞*∏¯4∞*∑¯ ≤*≤˛
  5607. ˇ·ˇ‚7^ °dONLNdo¢*∞7(¨*Crà°dONLNdq¢7∞‡) eating and Registering a Sectionˇˇˇˇˇˇ(¨Ú2
  5608. .°dONLNdì∑l√s(¿lYï°dONLNdî∑r√†) ou use the ï°dONLNdü∑†√‹).
  5609. NewSectionï°dONLNd©∑‹√)< function to crg`°dONLNd∏∑√Δ);(eate a new section (either publisher or .°dONLNd‡ƒl–Õ(Õlsubscriber) and alias r´†°dONLNd˜ƒÕ–fl)aecor °dONLNd˚ƒ‡–)d (which is a rÃ`°dONLNd
  5610. ƒ–.)>eferxÄ°dONLNdƒ/–µ) ence to the edition container fr*`°dONLNd.ƒ∂–◊)áom the °dONLNd5—l›j(⁄l9document containing the publisher or subscriber section)..°dONLNdo„lÔÄ*The °dONLNds„ÄÔº)
  5611. NewSection°dONLNd}„ºÔË)<  function rR`°dONLNdà„ËÔ/),egisters a sectioR`°dONLNdô„/Ô`)G n much as tR`°dONLNd§„`Ôn)1he R`°dONLNdß„nÔ»)RegisterSectionR`°dONLNd∂„»Ô)Z
  5612.  function ˇˇÿú°dONLNd¿l¸~(˘l=informs the Edition Manager about a section (except that the ˇˇâ‘ˆ°dONLNd˝~¸∫(˘~
  5613. NewSectionˇˇÿúˆ°dONLNd∫¸˜)< function does .°dONLNd˝l    Ä(lnot rN@°dONLNd˝Å    ‘)esolve an alias to fiΔ`°dONLNd0˝‘    C)Snd the edition container).°dONLNdKlÌ(lVWhen a section needs to be disposed of because the document containing the section is °dONLNd°l(á*being ö °dONLNdßá(ì)cloh@°dONLNd™î(´)sed oÄ °dONLNdØ´(±)r Ú¿°dONLNd±±(÷)because B°dONLNdπ◊(ƒ)&8the user has canceled the section, you need to call the .°dONLNdÒ)l5“(2lUnRegisterSection°dONLNd)“5)f function beforR`°dONLNd)5Ñ)?e disposing of the section.°dONLNd-;lGö(Dl
  5614. Using the °dONLNd7;öG ).IsRegisteredSection°dONLNdJ; GÍ)r2 function, your application must verify that each .°dONLNd|HlTä(Qlevent r@°dONLNdÉHãT”)eceived is for a r0 °dONLNdïH”T)Hegister@°dONLNdúHTÙ);ed section. This is necessary because your application may .°dONLNd◊Ula∂(^lhave just called °dONLNdËU∂a)JUnRegisterSection°dONLNd˘Uaã)f while the event was alrR`°dONLNdUãaÛ)oeady being held in the .°dONLNd(bln§(kl event queue.°dONLNd5tlÄ÷*QIf a user saves a document that contains sections under another name (using Save ´°dONLNdÜt÷ÄÛ(}÷As) or °dONLNdçÅlçÁ(älVpastes a portion of a document that contains a section into another document, use the .°dONLNd„élöÃ*AssociateSection°dONLNdÛéÃöy)`) function to update the section’s alias rR`°dONLNdéyöã)≠ecor$¿°dONLNd éãöñ)d. °dONLNd3ulÅä(~lnoErr.°dONLNd9uÀÅ–)_0°dONLNd;u‰Å)No errE†°dONLNdAuÅ
  5615. )or.°dONLNdEÄlå®(âl
  5616. memFullErr.°dONLNdPĺå–)P–108°dONLNdUĉåM)(Could not load packageˇ=∏@ˇ ˇˇˇˇ@
  5617. ˇ·ˇ‚7^
  5618. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äEdition Manager Reference
  5619. , (‡2-75
  5620. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  5621. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  5622. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  5623. 4€4—?òÄ
  5624. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  5625. ˛ˇˇˇ
  5626. ˛ˇˇˇ
  5627. ˛ˇˇˇ
  5628. ˛ˇˇˇ˜˝˛ˇ˛
  5629. ˛ˇ˛ˇˇ
  5630. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  5631. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  5632. ˛ˇ˛ˇˇ
  5633. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  5634. ˛ˇˇˇˇ
  5635. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  5636. ˛ˇˇˇˇ
  5637. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  5638. ˛ˇˇˇˇ
  5639. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  5640. jHr4jHr lHl
  5641. ˇ·ˇ‚7^ °dONLNd\Hjä(fH
  5642. NewSectionˇˇˇˇˇˇ(f2
  5643. .°dONLNd {äáØ(ÑäUse the ,
  5644. Courier°dONLNd{ØáÎ)%
  5645. NewSection°dONLNd{Îá&)< function to crR`°dONLNd-{&á});eate a new section r$¿°dONLNdA{}áè)Wecor˜ °dONLNdE{éá«)d and alias r…Ä°dONLNdR{«áŸ)9ecorõ‡°dONLNdV{Ÿá ) d for a new .°dONLNdbàäî(ëäpublisher or subscriberÓ‡°dONLNdyàÔîÒ)e..°dONLNd{°ä≠»(™ä5FUNCTION NewSection (container: EditionContainerSpec;°dONLNd∏ت∞+~sectionDocument: FSSpecPtr; °dONLNd‹Ω…Ï*&kind: SectionType; sectionID: LongInt;°dONLNd
  5646. À◊û*initialMode: UpdateMode; °dONLNd+ŸÂ™*VAR sectionH: SectionHandle°dONLNdFŸ™Â∂)¢):°dONLNdHŸ∂‡)  OSErr;°dONLNdPÒä˝¿(˙ä    container.°dONLNdZÒÃ˝◊)BThr °dONLNd\Òÿ˝‰) e eÖ`°dONLNd_Ò‰˝¢) ,dition you want to publish or subscribe to. .°dONLNdåä‰(
  5647. äsectionDocument.°dONLNdúÃ◊+B Thr °dONLNdûÿ‰) e vb°dONLNd°Â)olume r©†°dONLNd®)"eferU¿°dONLNd¨Q) ence number›†°dONLNd∑Pa)8, dir¶¿°dONLNdºb©)ectory ID, and fi/‡°dONLNdÕ™Ë)Hlename of the .°dONLNd€Ã%v("Ã&document that contains a section. The °dONLNdv%–)™sectionDocument°dONLNd–%)Z  parameter °dONLNd%Ã1›(.Ãcan °dONLNd%›1È)be °dONLNd"%È1˚) NIL!†°dONLNd%%˚1.) if your currÙ°dONLNd2%-1Â)2*ent document has never been saved. If so, .°dONLNd\1Ã=Á(:Ãwhen √`°dONLNda1Á=˜)the  ¿°dONLNde1¯=)user fi≠‡°dONLNdl1=å)nally saves the document, r•`°dONLNdá1å=Â)yemember to call the .°dONLNdõ=ÃI,(FÃAssociateSection°dONLNd´=,IM)` functio°dONLNd≥=MIh)!n for e°dONLNd∫=hIı)!ach section to update its alias rR`°dONLNd€=ıI)çecor$¿°dONLNdfl=I)d.°dONLNd‚MäY¢(Väkind.°dONLNdÁMÃY◊)BThr °dONLNdÈMÿY‚) e t˛ °dONLNdÏM‚Y¥)
  5648. 1ype of section (publisher or subscriber) being cr.@°dONLNdMµY—)”eated. .°dONLNd%]äi¿(fä    sectionID°dONLNd/]Ãi‘)BAÛ`°dONLNd0]”iª)4 unique number for a section within a document. The Û`°dONLNdd]ªi˜)Ë
  5649. NewSectionÛ`°dONLNdn]˜i˘)< °dONLNdoiÃu7(rÃfunction initializes the °dONLNdài7um)k    sectionID°dONLNdëimuv)6 fi°dONLNdîivu›)    eld of the new section rR`°dONLNd¨i›uÔ)gecor$¿°dONLNd∞iÔu)d with .°dONLNd∑uÃů(~Ã
  5650. the specifiKÄ°dONLNd¬u˘Å )-=ed value. Do not use 0 or –1 for an ID number; these numbers °dONLNdˇÅÃç‘(äÃarE°dONLNdÅ’ç‡)    e rS†°dONLNdŇç) Eeserved. If your application copies a section, you need to specify a °dONLNdIçÃôv(ñÃ&unique number for the copied section. .°dONLNdpùä©Ã(¶ä initialMode.°dONLNd|©Ãµ◊+B Thr °dONLNd~©ÿµÂ) e u¬‡°dONLNdũµÍ)>pdate mode for the section. For publishers this is either the .°dONLNdøµÃ¡(æà   pumOnSave°dONLNd»µ¡)6 or °dONLNdõ¡E)    pumManual°dONLNd’µE¡Ÿ)6% constant, and for subscribers it is °dONLNd˙¡ÃÕÎ( Ãeither °dONLNd¡ÎÕ3) sumAutomatic°dONLNd¡3Õ@)H or °dONLNd¡@Õv)    sumManual°dONLNd¡vÕ{)6. !†°dONLNd¡{ÕÉ)Aï°dONLNd¡ÇÕ∫) subscriber crg`°dONLNd+¡∫ÕÔ)8 eated with °dONLNd6Õß(÷à sumAutomatic°dONLNdBÕŸx)H mode automatically rR`°dONLNdWÕxŸ)deceives a Section Read event. Tg`°dONLNdvÕŸ
  5651. )ão ˇˇß°dONLNdxŸÃÂ÷(‚ÃprR`°dONLNdzŸ÷“)
  5652. :event this initial Section Read event, you should set the ˇ˛ı*ÿÏ°dONLNd¥Ÿ“Â)¸ initialModeˇˇßÿÏ°dONLNdøŸÂ)B °dONLNd¿ÂÃÒ    (ÓÃparameter to °dONLNdÕ    Ò?)=    sumManual°dONLNd÷Â?Òâ)6 and then, when °dONLNdÊÂâÒ≈)J
  5653. NewSection°dONLNdÂ≈ÒÀ)< rR`°dONLNdÚÂÀÒ )eturns, set the °dONLNdÒÃ˝‰(˙Ãmode°dONLNdÒ‰˝Í) fPÄ°dONLNdÒÍ˝A)ield of the section r"‡°dONLNdÒA˝S)Wecorı@°dONLNd!ÒR˝e)d to ı@°dONLNd&Òe˝≠) sumAutomaticı@°dONLNd2Ò≠˝∞)H.°dONLNd4ä∫(
  5654. äsectionH°dONLNd=Ç)BThe °dONLNdA‡)
  5655. NewSection°dONLNdKH)<  function rR`°dONLNdVHt),
  5656. eturns a hR`°dONLNd`t¸),andle to the allocated section °dONLNdÖ(ÃrR`°dONLNdÄ–‚)ecor$¿°dONLNdÑ‚Ë)d$¿°dONLNdÖË:) in this parameterg`°dONLNdó9<)Q.g`°dONLNdò<b)
  5657.  If an err9¿°dONLNd¢bå)& or occurs, 9¿°dONLNd≠å»)*
  5658. NewSection9¿°dONLNd∑»Œ)< r  °dONLNdπŒÎ)eturns   °dONLNd¿Î˝)NIL≠¿°dONLNd√¸    ) in .°dONLNd«Ã% ("Ãthis parameter ¿°dONLNd’ %)@.°dONLNd◊?HHÅ(FH DESCRIPTION
  5659. .°dONLNd„LäXû+BThe °dONLNdÁLûX⁄)
  5660. NewSection°dONLNdÒL⁄Xñ)<+ function allocates two handles in the currR`°dONLNdLñX)ºent zone: one handle for the .°dONLNd9YäeØ(bä    section r≠Ä°dONLNdBYØe¡)%ecor!‡°dONLNdFY¬e])$d and another handle for the alias rû@°dONLNdjY]eo)õecor†°dONLNdnYpe√)d. Note that you ar•†°dONLNdÅY√eŒ)Se r¥@°dONLNdÑYŒe) esponsible for °dONLNdìfärô(oäunrÄ°dONLNdñförı)egistering handles cr≈‡°dONLNd´fırx)[eated by the Edition ManagerÄ°dONLNd«fxrz)É..°dONLNd…xäÑë(ÅäYï°dONLNd xêÑ‹)our application rg`°dONLNd€x‹Ñ)L eceives the g`°dONLNdÁxÑâ)5multiplePublisherWrng`°dONLNd˚xâÑè)x r9¿°dONLNd˝xèÑ€)esult code if ther  °dONLNdx€ÑÏ)Le is .°dONLNdÖäëÆ(éäanother ‡°dONLNdÖØë≤)%r€‡°dONLNdÖ≤ëœ)egister+°dONLNd$Ö–ëc)"ed publisher to the same edition. >@°dONLNdFÖcëi)ìY˛¿°dONLNdGÖhë≤)our application rȇ°dONLNdXÖ≤ë‰)J eceives the .°dONLNddíäûˆ(õänotThePublisherWrn°dONLNdvíˆû¸)l rR`°dONLNdxí¸û)>esult code if another publisher (to the same edition) was the °dONLNd∂üä´<(®ä*last section to write to the edition. The °dONLNd‡ü<´¥)≤multiplePublisherWrn°dONLNdÙü¥´∫)x rR`°dONLNdˆü∫´)esult code takes °dONLNd    ¨ä∏Ÿ(µäpriority over the °dONLNd    ¨Ÿ∏E)OnotThePublisherWrn°dONLNd    +¨E∏K)l rR`°dONLNd    -¨K∏w)
  5661. esult codeR`°dONLNd    7¨w∏z),.ˇT@ˇ ˇˇˇˇ@
  5662. ˇ·ˇ‚7^
  5663. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  5664. (‡*2-76    )BEdition Manager Reference4^*¿¯°dONLNd\*eD(c*RESULëÄ°dONLNd\Deh)T CODES°dONLNdΔ*œQ(Õ*SEE ALSO
  5665. °dONLNd‘l‡$+B*For information on the edition container r ¿°dONLNd;‘$‡6)∏ecor? °dONLNd?‘7‡R)d, see ´ °dONLNdF‘R‡i)page Ü°dONLNdK‘j‡|)2-71Ÿ‡°dONLNdO‘|‡Á). For information on the °dONLNdh·lÌë(Íl    section r≠Ä°dONLNdq·ëÌ£)%ecor!‡°dONLNdu·§Ìø)d, see 燰dONLNd|·øÌ)“The Section RecorW@°dONLNdé·Ìu)Td” beginning on page … °dONLNd£·uÌá)b2-72°dONLNdß·àÌÈ). For information on fi£@°dONLNdæ·ÈÌÛ)ale °dONLNd¡Ól˙à(˜lspecifiÓ °dONLNd»Óà˙©)cation r°dONLNd–Ó™˙º)"ecorâ`°dONLNd‘Óº˙€)ds, see 2`°dONLNd‹Ó‹˙9) Inside Macintosh: Files˘@°dONLNdÛÓ9˙O)]. See L@°dONLNd˘ÓP˙¶)Listing 2-4 on page @°dONLNdÓß˙Ø)W2-b °dONLNdÓØ˙π)33b °dONLNdÓπ˙ÿ)
  5666.  for an .°dONLNd˚l¿(lexample that uses ,
  5667. Courier°dONLNd+˚¿¸)T
  5668. NewSection°dONLNd5˚¸)< to crR`°dONLNd;˚p)eate a publisher and R`°dONLNdP˚pΔ)_Listing 2-6 on page R`°dONLNdd˚Δœ)V2-R`°dONLNdf˚œŸ)    40R`°dONLNdh˚ŸÍ)
  5669.  for °dONLNdmly(lan °dONLNdpy¡)example that crR`°dONLNd¡*)Heates a subscriber using R`°dONLNdò*f)i
  5670. NewSectionR`°dONLNd¢fi)<.
  5671. D*M¯4E*L¯ F*F˛
  5672. ˇ·ˇ‚7^ .°dONLNd•7*E2(A*R)¿°dONLNd¶73EÄ)    egisterSectionˇˇˇˇˇˇ(AÚ2
  5673. °dONLNd∂VlbM(_l1When opening a document that contains sections, r2¿°dONLNdÁVNb—)‚egister each section using the .°dONLNdcloΔ(llRegisterSection°dONLNdcΔoÒ)Z  function. °dONLNd!|làò(Öl2FUNCTION RegisterSection (sectionDocument: FSSpec;°dONLNd\ä¸ñ+ê °dONLNd]äñ) °dONLNd^äñû)sectionH: SectionHandle; °dONLNdÄò¸§(°¸ °dONLNdÅò§) °dONLNdÇò§∞)VAR aliasWasUpdated: Boolean°dONLNdûò∞§º)®):°dONLNd†òº§Ê)  OSErr;°dONLNd®∞lºΔ(πlsectionDocument.°dONLNd∏ºÆ»π+B Thr °dONLNd∫º∫»Δ) e vb°dONLNdΩº«»È)olume r©†°dONLNdƒºÈ»˘)"eferU¿°dONLNd»º˙»3) ence number›†°dONLNd”º2»C)8, dir¶¿°dONLNdÿºD»ã)ectory ID, and fi/‡°dONLNdȺ廠)Hlename of the °dONLNd˜»Æ‘C(—Æ"document that contains a section. .°dONLNdÿl‰ñ(·lsection°dONLNd!ÿñ‰ú)*H.°dONLNd#ÿƉµ)A∫†°dONLNd$ÿµ‰Ω) h °dONLNd&ÿæ‰)    andle to the section ṙ°dONLNd<ÿ‰+)[ecorb@°dONLNd@ÿ,‰á)d for a given section..°dONLNdWËlÙΔ(ÒlaliasWasUpdated°dONLNdgÙÆ∂+B AÛ`°dONLNdhÙµ) Boolean value that r≈¿°dONLNd}Ù2)`eturns ≈¿°dONLNdÑÙ2J)TRUE≈¿°dONLNdàÙJÚ)( if the alias for the edition container .°dONLNd∞Æ ‚(    ÆEsubscribed to was out of date and was updated. This may occur if the °dONLNdı Æ’*     edition fiL °dONLNdˇ ÷á)('le was moved to a new location or was rí°dONLNd& á¨)±enamed.°dONLNd.2*;c(9* DESCRIPTION
  5674. ˇˇ—.°dONLNd:?lK+BThe ˇˇs0Q°dONLNd>?ÄK⁄)RegisterSectionˇˇ—Q°dONLNdM?⁄KP)Z function adds the section r8¿°dONLNdi?PKb)vecor  °dONLNdm?bK“)d to the Edition Manager ¿°dONLNdÖ?”K¯)q ’s list of .°dONLNdêLlXo(UlrE°dONLNdëLpXç)egisterî °dONLNdòLçX7))ed sections and tries to allocate a contri°dONLNd¡L7X^)™
  5675. ol block. Õ`°dONLNdÀL^X®)'After calling the .°dONLNd›YleΔ(blRegisterSection°dONLNdÏYΔe)Z function, the °dONLNd˚YeK)= controlBlock°dONLNdYKeQ)H fPÄ°dONLNd    YQe®)ield of the section r"‡°dONLNdY®e∫)Wecorı@°dONLNd"YπeË) d contains °dONLNd-flrã(oleither °dONLNd4fãrù)NIL!†°dONLNd7fùr‰) or a valid contrÙ°dONLNdHf„r    )F    ol block.°dONLNdRxlѱ(ÅlFor a subscriber¬†°dONLNdbx∞Ñ«)D, the ¬†°dONLNdhx«Ñ) controlBlock¬†°dONLNdtxÑ)H fi¬†°dONLNdwxÑP)    eld contains ¬†°dONLNdÑxPÑb)8NILd@°dONLNdáxbÑÄ) if the d@°dONLNdèxÄÑ⁄)RegisterSectiond@°dONLNdûx⁄Ñ‹)Z .°dONLNdüÖlë®(élIfunction could not locate the edition container being subscribed to. The .°dONLNdËílûΔ*RegisterSection°dONLNd˜íΔû    )Z function then rR`°dONLNdí    ûW)Ceturns either the R`°dONLNdíWûœ)NcontainerNotFoundWrnR`°dONLNd-íœûÓ)x or the °dONLNd5ül´Δ(®luserCanceledErr°dONLNdDüΔ´Ã)Z rR`°dONLNdFüôB)esult code. For a publisherï°dONLNdaüA´b)u    , if the ï°dONLNdjüb´º)!RegisterSectionï°dONLNdyüº´‰)Z
  5676.  function .°dONLNdɨl∏”(µlcould not locate its corrŸÄ°dONLNdú¨”∏O)gesponding edition container@°dONLNd∑¨O∏π)|, the Edition Manager cr5`°dONLNdœ¨∫∏fl)k    eates an .°dONLNd jlvä(slnoErr.xÄ°dONLNdj v)ü0xÄ°dONLNdj$v@)No err> °dONLNdjAvJ)or.°dONLNdulÅ“(~leditionMgrInitErr.xÄ°dONLNd0u¸Å)ê–450xÄ°dONLNd5u$Åã)(Manager not initialized.°dONLNdNÄlå∫(âlbadSectionErr.xÄ°dONLNd\ĸå)ê–451xÄ°dONLNdaÄ$åç)(Not a valid section type.°dONLNd{ãló∫(îlbadSubPartErr.xÄ°dONLNdâã¸ó)ê–454xÄ°dONLNdéã$óò)(Bad edition container spec.°dONLNd™ñl¢‰(ülmultiplePublisherWrn.xÄ°dONLNdøñ¸¢)ê–460xÄ°dONLNdƒñ$¢2)(AlrÌ °dONLNd«ñ2¢Ö)eady is a publisher.°dONLNd‹°l≠ÿ(™lnotThePublisherWrn.xÄ°dONLNdÔ°¸≠)ê–463xÄ°dONLNdÙ°$≠r)(Not the publisherˇ;f@ˇ ˇˇˇˇ@
  5677. ˇ·ˇ‚7^
  5678. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äEdition Manager Reference
  5679. , (‡2-77
  5680. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  5681. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  5682. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  5683. 4€4—?òÄ
  5684. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  5685. ˛ˇˇˇ
  5686. ˛ˇˇˇ
  5687. ˛ˇˇˇ
  5688. ˛ˇˇˇ˜˝˛ˇ˛
  5689. ˛ˇ˛ˇˇ
  5690. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  5691. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  5692. ˛ˇ˛ˇˇ
  5693. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  5694. ˛ˇˇˇˇ
  5695. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  5696. ˛ˇˇˇˇ
  5697. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  5698. ˛ˇˇˇˇ
  5699. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\äh£(eäBedition container in the last place the edition was located and crõ °dONLNdB\£hŸ(e£eates a contrl@°dONLNdO\⁄h)7ol block for .°dONLNd\iäu≥(rä it. If the ,
  5700. Courier°dONLNdgi≥u))RegisterSection°dONLNdviu±)Z& function could not locate a publisher=`°dONLNdúi≤uÃ)•’s corr¿°dONLNd£iÃu˚)
  5701. esponding °dONLNd≠väÇ*(ä%edition container or its volume, the °dONLNd“v*Çr)† controlBlock°dONLNdfivrÇ{)H fi°dONLNd·v{Ç≥)    eld contains °dONLNdÓv≥Ç≈)8NIL°dONLNdÒv≈Ç ). R`°dONLNdÛv Ç—)Yg`°dONLNdÙv–Ç˝)
  5702. ou should .°dONLNd˛Éäè©(åänever r¬Ä°dONLNdÉ©èµ)e-r•°dONLNdɵè') egister a section that is alr≥ °dONLNd%É'èB)ready rl†°dONLNd+ÉCè`)egisterª¿°dONLNd2É`èm)ed.°dONLNd6ïä°˝(ûäNote that you can compart¿°dONLNdNï˝°)se contr|‡°dONLNdUï°);ol blocks for individual sections. If two sections contain °dONLNdê¢äÆ (´äthe same contrˆÄ°dONLNdû¢ Æ˛)@Hol block value, these sections publish or subscribe to the same edition .°dONLNdÊØ䪔(∏ä(unless the contrR`°dONLNd˜Ø”ª)I ol block is R`°dONLNdت)/NILR`°dONLNdت)8). The Edition Manager keeps track of how many sections .°dONLNd>ºä»í(≈äarE°dONLNd@ºì»û)    e rS†°dONLNdCºû»Æ) eferˇ¿°dONLNdGºÆ»Ï)encing a contr`°dONLNdUºÌ»›)?6ol block to know when it can be deallocated. The contrx‡°dONLNd㺛»)    ol block °dONLNdî…ä’F(“ä)maintains a count of how many sections arM¿°dONLNdΩ…G’R)Ωe r\`°dONLNd¿…R’b) eferÄ°dONLNdƒ…c’Ò)!encing it. Each time you use the .°dONLNdÂ÷ä‚(fläUnRegisterSection°dONLNdˆ÷‚C)f function, the contrR`°dONLNd
  5703. ÷C‚å)Sol block subtractR`°dONLNd÷å‚ù)Is 1 fR`°dONLNd ÷ù‚°)r$¿°dONLNd!÷°‚Ô)om the number of .°dONLNd2„äÔ9(Ïä'sections. When the number of sections rÄ°dONLNdY„:Ôä)∞eaches 0, the contr¡@°dONLNdl„äÔÓ)Pol block is deallocated..°dONLNdÖıäë(˛äYï°dONLNdÜıê‹)our application rg`°dONLNdóı‹)L eceives the g`°dONLNd£ıâ)5multiplePublisherWrng`°dONLNd∑ıâè)x r9¿°dONLNdπıè€)esult code if ther  °dONLNdÀı€Ï)Le is .°dONLNd–äÆ( äanother ‡°dONLNdÿØ≤)%r€‡°dONLNdŸ≤œ)egister+°dONLNd‡–c)"ed publisher to the same edition. >@°dONLNdci)ìY˛¿°dONLNdh≤)our application rȇ°dONLNd≤‰)J eceives the .°dONLNd äˆ(änotThePublisherWrn°dONLNd2ˆ¸)l rR`°dONLNd4¸˝):esult code if another publisher (to the same edition) was °dONLNdnä(ú(%äthe °dONLNdrú(N)*last section to write to the edition. The °dONLNdúN(Δ)≤multiplePublisherWrn°dONLNd∞Δ(Ã)x rR`°dONLNd≤Ã(˙) esult code °dONLNdΩ)ä5•(2ätakes °dONLNd√)•5Ù)priority over the °dONLNd’)Ù5`)OnotThePublisherWrn°dONLNdÁ)`5f)l rR`°dONLNdÈ)f5í)
  5704. esult codeR`°dONLNdÛ)í5ï),..°dONLNdıOHXb(VHRESULëÄ°dONLNd˙ObXÅ)T CODEÂÄ°dONLNdOÅXÖ)S°dONLNd6ƒHÕo(ÀHSEE ALSO
  5705. °dONLNd?“äfi+B For information on the section rÑ`°dONLNd_“fi()åecor¯¿°dONLNdc“(fiC)d, see d¿°dONLNdj“Dfió)“The Section Recor. °dONLNd|“òfi‚)Td” beginning on °dONLNdåfläΰ(Ëäpage Z‡°dONLNdëfl¢Î¥)2-72Æ¿°dONLNdïfl¥Îπ). Æ¿°dONLNdóflπÎ)For information on fi5°dONLNd¨flÎ<)]    le specifi’ °dONLNd∂fl<Î])&cation r¸°dONLNdæfl]Îo)!ecorp`°dONLNd¬flpÎè)ds, see `°dONLNd flêÎÌ) Inside Macintosh: Files‡@°dONLNd·flÌÎÚ)]. .°dONLNd„Ïä¯õ(ıäFor °dONLNdÁÏõ¯à)4additional information and an example of the use of °dONLNdÏூ)ÌRegisterSection°dONLNd*Ï‚¯˜)Z, see .°dONLNd0˘ä›(äG“Opening and Closing a Document Containing Sections” beginning on page ¶Ä°dONLNdw˘›Ô(›2-22˙`°dONLNd{˘ÔÒ).
  5706. 5H>46H= 7H7
  5707. ˇ·ˇ‚7^ °dONLNd~(H6Q(2HU’Ä°dONLNd(Q6Æ)    nRegisterSectionˇˇˇˇˇˇ(22
  5708. °dONLNdëGäS (PäVWhen a section needs to be disposed of because the document containing the section is °dONLNdÁTä`•*being ö °dONLNdÌT•`±)cloh@°dONLNdT≤`…)sed oÄ °dONLNdıT…`œ)r Ú¿°dONLNd˜Tœ`Ù)because B°dONLNdˇTı`‚)&8the user has canceled the section, you need to call the .°dONLNd7aäm(jäUnRegisterSection°dONLNdHam/)f function beforR`°dONLNdWa/m¢)?e disposing of the section.°dONLNdszäܺ(Éä3FUNCTION UnRegisterSection (sectionH: SectionHandle°dONLNd¶zºÜ»(ɺ):°dONLNd®z»ÜÚ)  OSErr;°dONLNd∞íäû¥(õäsection°dONLNd∑í¥û∫)*H.°dONLNdπíÃû”)A∫†°dONLNd∫í”û€) h °dONLNdºí‹û8)    andle to the section ṙ°dONLNd“í7ûI)[ecorb@°dONLNd÷íJû•)d for a given section..°dONLNd]äi®(fänoErr.°dONLNd]%i*)õ0°dONLNd    ]>iZ)No errE†°dONLNd][id)or.°dONLNdhät‰(qäuserCanceledErr.°dONLNd#ht*)å–128°dONLNd(h>tU)(User ¿Ä°dONLNd-hUt})    clicked C}@°dONLNd6h~tí))anceàÄ°dONLNd:hít®)l in dF`°dONLNd@h©t—)    ialog box.°dONLNdKsä(|äeditionMgrInitErr.°dONLNd]s*)å–450°dONLNdbs>•)(Manager not initialized.°dONLNd{~ääÿ(áäbadSectionErr.°dONLNdâ~ä*)å–451°dONLNdé~>äü)(Not valid section type.°dONLNd¶âäï(íämultiplePublisherWrn.°dONLNdªâï*)å–460°dONLNd¿â>ïL)(AlrÙ†°dONLNd√âLïü)eady is a publisher.°dONLNdÿîä†(ùäcontainerNotFoundWrn.°dONLNdÌî†*)å–461°dONLNdÚî>†Ä)(Alias was not r∑@°dONLNdîĆ°)Besolved.°dONLNd
  5709. üä´ˆ(®änotThePublisherWrn.°dONLNdü´*)å–463°dONLNd"ü>´å)(Not the publisherˇÚ@ˇ ˇˇˇˇ@
  5710. ˇ·ˇ‚7^
  5711. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  5712. (‡*2-78    )BEdition Manager Reference4^*¿¯°dONLNd\*ec(c* DESCRIPTION
  5713. ˇˇ˜.°dONLNd jlv+BThe ,
  5714. CourierˇˇÂ<w°dONLNdjÄvÊ)UnRegisterSectionˇˇ˜w°dONLNd!jÊv)f  function r7ú°dONLNd,jvo),emoves the section frÔ8°dONLNdAjov€)]om the Edition Managerë‘°dONLNdWj›v˜)n’s list .°dONLNd_wlÉ{(Älof ré`°dONLNdcw{Éò)egister›Ä°dONLNdjwòÉÕ)ed sections. :¿°dONLNdwwŒÉ‘)6Y˚@°dONLNdxw”Én)$ou can then dispose of the section r˚‡°dONLNdúwnÉÄ)õecorp@°dONLNd†wÅÉ∑)d and alias rÀ‡°dONLNd≠w∑É…)6ecor@@°dONLNd±w ÉÈ)d with °dONLNd∏Ñlêç(çlstandar±Ä°dONLNdøÑçê)!d Memory Manager and ResourL¿°dONLNd⁄Ñêí)éce Manager calls. Once unrõ@°dONLNdÙÑíêØ)wegisterÍ`°dONLNd˚ÑØêÁ)ed, a section °dONLNd    ëlùò(öl
  5715. does not rf °dONLNdëòù),eceive any events and cannot r©†°dONLNd1ëù€)á)ead or write any data. Depending on your °dONLNdZûl™í(ßlClipboar,°dONLNdbûì™ø)'
  5716. d strategyH@°dONLNdlûæ™ )+, you may want to unrw@°dONLNdÅû ™Ã)b)egister sections that have been cut into °dONLNd™´l∑|(¥lthe ›`°dONLNdÆ´|∑¢)Clipboarâ`°dONLNd∂´£∑´)'d.°dONLNdπ—*⁄D(ÿ*RESULëÄ°dONLNdæ—D⁄h)T CODES
  5717. ;*D¯4<*C¯ =*=˛
  5718. ˇ·ˇ‚7^ °dONLNdU.*<ó(8*IsRegisteredSectionˇˇˇˇˇˇ(8Ú2
  5719. .°dONLNdjMlYä(VlUpon rR`°dONLNdpMäYv)6eceiving a section event, your application must call tR`°dONLNd¶MvYÑ)Ïhe R`°dONLNd©MÑYˆ)IsRegisteredSectionR`°dONLNdºMˆY¯)r .°dONLNdΩZlfã(clfunctioº‡°dONLNdƒZãf§)n to vÏ`°dONLNd Z§f…)    erify tha¿°dONLNd”Z f‰)&t the eÒ °dONLNd⁄Z‰f˝)vent rπ¿°dONLNd‡Z˛fF)eceived is for a r◊†°dONLNdÚZFfc)Hegister&¿°dONLNd˘Zdfê)
  5720. ed sectiont†°dONLNdZêfï),. G°dONLNdZïfõ)YÄ°dONLNdZõf”)ou must call .°dONLNdglsfi(plIsRegisteredSection°dONLNd&gfis˜)r beforR`°dONLNd,g˜ss)e handling a section event bR`°dONLNdHgssˆ)|ecause your application may °dONLNddtlÄ∂(}lhave just called °dONLNdut∂Ä)JUnRegisterSection°dONLNdÜtÄã)f while the event was alrR`°dONLNdûtãÄÛ)oeady being held in the .°dONLNdµÅlç§(äl event queue..°dONLNd¬öl¶™*5FUNCTION IsRegisteredSection (sectionH: SectionHandle°dONLNd˜ö™¶∂(£™):°dONLNd˘ö∂¶‡)  OSErr;°dONLNd≤læñ(ªlsection°dONLNd≤ñæú)*H.°dONLNd
  5721. ≤Ææµ)A∫†°dONLNd ≤µæΩ) h °dONLNd≤ææ)    andle to the section ṙ°dONLNd#≤æ+)[ecorb@°dONLNd'≤,æä)d for a given section. °dONLNd?ÿ*·c(fl* DESCRIPTION
  5722. .°dONLNdKÂlÒy+BTh°dONLNdMÂyÒÄ)e °dONLNdOÂÄÒÚ)IsRegisteredSection°dONLNdbÂÚÒ)r
  5723.  function °dONLNdlÂÒ)(rR`°dONLNdmÂÒG)
  5724. eturns a r$¿°dONLNdwÂGÒè))esult code (not a$¿°dONLNdàÂèÒ∂)H Boolean$¿°dONLNdêÂ∂Òÿ)' value) ˇˇöê°dONLNdòÚl˛(˚l#indicating whether the section is rW0°dONLNdªÚ˛%)öegister)ê°dONLNd¬Ú%˛4)ed. e¿°dONLNdΔÚ4˛<)AŸ °dONLNd«Ú;˛<) ˇ˛œ∞s∞°dONLNd»Ú=˛C)ns∞°dONLNd…ÚC˛[)oErrˇˇöês∞°dONLNdÕÚ[˛`) r‡†°dONLNdœÚ`˛˜)$esult code indicates that a section .°dONLNdÛˇl y(lis rÍ`°dONLNd˜ˇy ñ)egister9Ä°dONLNd˛ˇó §)ed.°dONLNd&*/D(-*RESULëÄ°dONLNd&D/h)T CODES°dONLNdNd*mQ(k*SEE ALSO
  5725. .°dONLNdWql}Î+BFor an example of the use of °dONLNdtqÎ}])IsRegisteredSection°dONLNdáq]}r)r, see °dONLNdçqr}»)Listing 2-1 on page °dONLNd°q»}—)V2-°dONLNd£q—}€)    14°dONLNd•q€}fi)
  5726. .°dONLNd≈fllÎä(ËlnoErr.°dONLNdÀflÎ)≠0°dONLNdÕfl2ÎN)No errE†°dONLNd”flOÎX)or.°dONLNd◊Ílˆñ(ÛlfBsyErr.°dONLNdfl͈)£–47°dONLNd„Í2ˆÇ)#Section doing I/O.°dONLNdˆıl“(˛leditionMgrInitErr.°dONLNdı
  5727. )û–450°dONLNdı2ô)(Manager not initialized.°dONLNd&l ˆ(    lnotRegisteredSectionErr.°dONLNd>
  5728.  )û–452°dONLNdC2 I)(Not rÀ¿°dONLNdHI f)egister‡°dONLNdOg q)ed.°dONLNd3l?ä(<lnoErr.w`°dONLNd3"?')∂0w`°dONLNd3;?W)No err=°dONLNd3X?a)or.°dONLNd >lJˆ(GlnotRegisteredSectionErr.w`°dONLNd8>J')ß–452w`°dONLNd=>;JR)(Not r√ °dONLNdB>RJo)egister@°dONLNdI>pJz)edˇ0*@ˇ ˇˇˇˇ@
  5729. ˇ·ˇ‚7^
  5730. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äEdition Manager Reference
  5731. , (‡2-79
  5732. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  5733. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  5734. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  5735. 4€4—?òÄ
  5736. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  5737. ˛ˇˇˇ
  5738. ˛ˇˇˇ
  5739. ˛ˇˇˇ
  5740. ˛ˇˇˇ˜˝˛ˇ˛
  5741. ˛ˇ˛ˇˇ
  5742. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  5743. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  5744. ˛ˇ˛ˇˇ
  5745. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  5746. ˛ˇˇˇˇ
  5747. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  5748. ˛ˇˇˇˇ
  5749. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  5750. ˛ˇˇˇˇ
  5751. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  5752. jHr4jHr lHl
  5753. ˇ·ˇ‚7^ °dONLNd\HjQ(fHA’Ä°dONLNd\Qj§)    ssociateSectionˇˇˇˇˇˇ(f2
  5754. °dONLNd{äáÙ(ÑäQIf a user saves a document that contains sections under another name (using Save ´°dONLNdc{Ùá(ÑÙAs) or °dONLNdjàäî(ëäVpastes a portion of a document that contains a section into another document, use the ,
  5755. Courier.°dONLNd¿ïä°Í*AssociateSection°dONLNd–ïÍ°ó)`) function to update the section’s alias rR`°dONLNd˘ïó°©)≠ecor$¿°dONLNd˝ï©°≤)d.°dONLNdÆä∫º(∑ä3FUNCTION AssociateSection (sectionH: SectionHandle;°dONLNd=º,»⁄+¢newSectionDocument: FSSpecPtr°dONLNdZº⁄»Ê)Æ):°dONLNd\ºÊ»)  OSErr;°dONLNdd‘䇥(›äsection°dONLNdk‘¥‡∫)*H.°dONLNdm‘Ç”)A∫†°dONLNdn‘”‡€) h °dONLNdp‘‹‡8)    andle to the section ṙ°dONLNdÜ‘7‡I)[ecorb@°dONLNdä‘J‡®)d for a given section. .°dONLNd¢‰äˆ(ÌänewSectionDocument.°dONLNdµø◊+B Thr °dONLNd∑ÿ¸‰) e vb°dONLNd∫¸)olume r©†°dONLNd¡¸)"eferU¿°dONLNd≈¸Q) ence number›†°dONLNd–P¸a)8, dir¶¿°dONLNd’b¸©)ectory ID, and fi/‡°dONLNdÊ™¸˝)Hlename of the new °dONLNd¯¸Ã˝(Ã
  5756. document. °dONLNd"H+Å()H DESCRIPTION
  5757. .°dONLNd/ä;û+BThe °dONLNd/û;˛)AssociateSection°dONLNd#/˛;>)` function calls °dONLNd3/>;Ä)@ UpdateAlias°dONLNd>/Ä;Ê)B on the section’s alias rR`°dONLNdW/Ê;¯)fecor$¿°dONLNd[/¯;˛)d$¿°dONLNd\/˛;). .°dONLNd_VH_b(]HRESULëÄ°dONLNddVb_Å)T CODEÂÄ°dONLNdjVÅ_Ö)S°dONLNdûîHùo(õHSEE ALSO
  5758. .°dONLNdß°ä≠Ò+BFor information on the °dONLNdæ°Ò≠3)g UpdateAlias°dONLNd…°3≠)B. function, see the chapter “Alias Manager” in .°dONLNd˜Æä∫Á(∑äInside Macintosh: FilesF‡°dONLNdÆË∫Í)^.
  5759. flHÁ4flHÊ ·H·
  5760. ˇ·ˇ‚7^ °dONLNd—HflP(€HC°dONLNd—QflU)    rà°dONLNd—Ufl/)(eating and Deleting an Edition Containerˇˇˇˇˇˇ(€2
  5761. °dONLNd=ÊäÚ›(ÔäEach time a user cr€`°dONLNdPÊ›Ú)SCeates a new publisher section within a document to an edition that .°dONLNdìÛäˇæ(¸ä does not alrR`°dONLNdüÛæˇ&)4eady exist, you use the R`°dONLNd∑Û&ˇ¬)hCreateEditionContainerFileR`°dONLNd—Û¬ˇ˝)ú function to cr$¿°dONLNd‡Û˝ˇ);eate .°dONLNdÂä (    äan empty edition container4 °dONLNdˇ )w..°dONLNdäê(äTï°dONLNdèö)o rg`°dONLNdö) emove the edition container™°dONLNd >)}
  5762. , use the ™°dONLNd*>⁄)'DeleteEditionContainerFile™°dONLNdD⁄)ú
  5763.  function.
  5764. OHW4OHW QHQ
  5765. ˇ·ˇ‚7^ .°dONLNdPAHOfl(KHCreateEditionContainerFileˇˇˇˇˇˇ(K2
  5766. .°dONLNdlaämë(jäYï°dONLNdmaêmæ) ou use the ï°dONLNdxaæmZ).CreateEditionContainerFileï°dONLNdíaZmï)ú function to crg`°dONLNd°aïm˙);eate an empty edition .°dONLNd∑näz≥(wä    container2 °dONLNd¿n≥zµ))..°dONLNd¬áäìb(êä$FUNCTION CreateEditionContainerFile °dONLNdÓï°˛+~)(editionFile: FSSpec; fdCreator: OSType; °dONLNd£Ø* °dONLNd £Ø‘)!editionFileNameScript: ScriptCode°dONLNdA£‘؇)Δ):°dONLNdC£‡Ø
  5767. )  OSErr;°dONLNdkcäo®(länoErr.}°dONLNdqc·oÊ)W0}°dONLNdsc˙o)No errB†°dONLNdyco )or.°dONLNd}näz∫(wäparamErr.}°dONLNdÜn◊zÊ)M–50}°dONLNdän˙zI)#Invalid parameterˇà@ˇ ˇˇˇˇ@
  5768. ˇ·ˇ‚7^
  5769. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  5770. (‡*2-80    )BEdition Manager Reference4^*¿¯,
  5771. Courier
  5772. .°dONLNd\lhÆ(el editionFile.°dONLNd hÆtπ+B Thr °dONLNdh∫tΔ) e vb°dONLNdh«tÈ)olume r©†°dONLNdhÈt˘)"eferU¿°dONLNdh˙t3) ence number›†°dONLNd'h2tC)8, dir¶¿°dONLNd,hDtã)ectory ID, and fi/‡°dONLNd=håtÔ)Hlename for the edition °dONLNdTtÆÄ˝(}Æcontainer being cr懰dONLNdft˝Ä)Oeated. .°dONLNdnÑlê¢(çl    fdCreator.°dONLNdxÑÆêπ)BThr °dONLNdzÑ∫ê≈) e c,°dONLNd}ÑΔê…) rÒ°dONLNd~Ñ…ê9)eator type for the edition..°dONLNdöîl†Í(ùleditionFileNameScript.°dONLNd∞†Æ¨π+B Thr °dONLNd≤†∫¨≈) e s¯¿°dONLNdµ†≈¨˝) cript of the fiº°dONLNdƒ†˛¨#)9lename. ›°dONLNdÆ#¨,)%(YÒ`°dONLNdŒ†,¨ê)    ou can get this value fr| °dONLNdʆ먕)eom tà°dONLNd͆•¨≤)he .°dONLNd̨Æ∏¸(µÆtheFileScript°dONLNd˙¨¸∏)N fPÄ°dONLNd¸¨∏)ield oPÄ°dONLNd¨∏4)f an ePÄ°dONLNd¨4∏ô)dition container specif!°dONLNd¨ô∏ø)e    ication rÛ`°dONLNd(¨æ∏–)%ecor≈¿°dONLNd,¨–∏›)d.).°dONLNd0—*⁄c(ÿ* DESCRIPTION
  5773. .°dONLNd<fllÎÄ+BThe °dONLNd@flÄÎ)CreateEditionContainerFile°dONLNdZflÎL)ú  function crR`°dONLNdfflLÎË)0"eates an empty edition container fiR`°dONLNdâflËÎÛ)úle .°dONLNdåÏl¯g(ıl;(it does not contain any formats). This function sets the fi¨†°dONLNd»Ïg¯œ)˚le type of the edition to ˇˇÅ≤.°dONLNd‚˘lê(l'edtu'ˇˇ’Ê°dONLNdˢêî)$. ˜Ü°dONLNd͢î˜)OAs soon as you write data to the edition, the Edition Manager updates the type °dONLNd9l{(l(to °dONLNd={ü)'edtp'°dONLNdCü›)$ for graphics, °dONLNdR›)>'edtt'°dONLNdX4)$ for text, or °dONLNdf4X)3'edts'°dONLNdlX„)$! for sound). If your application ˇˇwv°dONLNdçl†(l writes both ˇ˛fbnÏ°dONLNdô°≈)5'TEXT'ˇˇwvnÏ°dONLNdü≈ÿ)$ and ˇ˛fb]ÿ°dONLNd§Ÿ˝)'PICT'ˇˇwv]ÿ°dONLNd™˝Ì)$7 formats to the edition, the Edition Manager sets the fit°dONLNd‚Ó¯)Òle .°dONLNd l,()l#type to the type that was written fi`°dONLNd     ,‹)ô2rst. If your application has a bundle, you should °dONLNd;-l9Ô(6ldesignate an icon for the apprJ¿°dONLNdY-9†)Ñ)opriate edition types that you can write.$Ä°dONLNdÇ-°9£)± °dONLNdÑS*\D(Z*RESULëÄ°dONLNdâSD\h)T CODES°dONLNdx”*‹Q(⁄*SEE ALSO
  5774. °dONLNdÅ·lÌ»+BFor information on fi@°dONLNdñ·…ÌÔ)]    le specifi¶`°dONLNd†·ÔÌ)&cation rÕ@°dONLNd®·Ì")!ecorA†°dONLNd¨·#ÌB)ds, see ͆°dONLNd¥·BÌü)Inside Macintosh: Files±Ä°dONLNdÀ·†Ì˜)^. For an example of .°dONLNdflÓl˙ô(˜l the use of °dONLNdÍÓô˙5)-CreateEditionContainerFile°dONLNdÓ5˙J)ú, see °dONLNd
  5775. ÓJ˙†)Listing 2-4 on page °dONLNdÓ†˙©)V2-°dONLNd Ó©˙≥)    33°dONLNd"Ó≥˙∂)
  5776. .
  5777. **3¯4+*2¯ ,*,˛
  5778. ˇ·ˇ‚7^ .°dONLNd%*+3('*D~@°dONLNd&4+¡)
  5779. eleteEditionContainerFileˇˇˇˇˇˇ('Ú2
  5780. °dONLNdA<lH(ElXIf a user cancels a publisher section within a document or closes a document containing °dONLNdôIlUô*
  5781. a newly cr¿°dONLNd£IöUc).-eated publisher without saving, you need to rɆ°dONLNd–IcUfi)…emove the edition containerUÄ°dONLNdÎIfiU„){. .°dONLNdÓ[lgr(dlTï°dONLNdÔ[qgæ)o locate the apprg`°dONLNd[ægí)M1opriate edition container to be deleted, use the g`°dONLNd1[ígÊ)‘GetEditionInfog`°dONLNd?[ÊgË)T °dONLNd@hltï(ql
  5782. function. R`°dONLNdJhïtú))Yg`°dONLNdKhõt…) ou use the g`°dONLNdVh…t/).UnRegisterSectiong`°dONLNdgh/tµ)f  function (only after using the °dONLNdáulÅ¿(~lGetEditionInfo°dONLNdïu¿Å)T function) to unrR`°dONLNd¶uÅ])Eegister the section r$¿°dONLNdªu]Åo)Xecor˜ °dONLNdøunÅß)d and alias r…Ä°dONLNdÃußÅπ)9ecorõ‡°dONLNd–uπÅfi)    d of the .°dONLNdŸÇlé⁄(ãlpublisher being canceled膰dONLNdÒÇ⁄éfl)n. .°dONLNdêalmä(jlnoErr.°dONLNdñaım˙)â0°dONLNdòam*)No errE†°dONLNdûa+m4)or.°dONLNd¢llx¢(ul    dskFulErr.°dONLNd¨lÎx˙)–34°dONLNd∞lx=)# Disk is full.°dONLNdæwlÉê(ÄlnsvErr.°dONLNd≈wÎÉ˙)–35°dONLNd…wÉV)#No such volume.°dONLNdŸÇléä(ãlioErr.°dONLNdflÇÎé˙)–36°dONLNd„Çé.)#I/O err ‡°dONLNdÍÇ.é7) or.°dONLNdÓçlôú(ñlbdNamErr.°dONLNd˜çÎô˙)–37°dONLNd˚çô')#Bad fiD@°dONLNdç(ôH)lename.°dONLNd    òl§ê(°lfnfErr.°dONLNdòΧ˙)–43°dONLNdò§L)#File not found.°dONLNd$£lØú(¨ldirNFErr.°dONLNd-£ÊØ˙)z–120°dONLNd2£Ø)(Dir͆°dONLNd5£Øe)ectory not found.°dONLNdGÆl∫“(∑leditionMgrInitErr.°dONLNdYÆÊ∫˙)z–450°dONLNd^Æ∫u)(Manager not initializedˇ4º@ˇ ˇˇˇˇ@
  5783. ˇ·ˇ‚7^
  5784. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äEdition Manager Reference
  5785. , (‡2-81
  5786. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  5787. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  5788. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  5789. 4€4—?òÄ
  5790. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  5791. ˛ˇˇˇ
  5792. ˛ˇˇˇ
  5793. ˛ˇˇˇ
  5794. ˛ˇˇˇ˜˝˛ˇ˛
  5795. ˛ˇ˛ˇˇ
  5796. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  5797. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  5798. ˛ˇ˛ˇˇ
  5799. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  5800. ˛ˇˇˇˇ
  5801. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  5802. ˛ˇˇˇˇ
  5803. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  5804. ˛ˇˇˇˇ
  5805. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿.°dONLNd\ähê(eäTï°dONLNd\èhö)o rg`°dONLNd\öh) emove the edition container™°dONLNd\h>)}
  5806. , use the ,
  5807. Courier™°dONLNd)\>h⁄)'DeleteEditionContainerFile™°dONLNdC\⁄h)ú  function. °dONLNdOuäÅ(~äAFUNCTION DeleteEditionContainerFile (editionFile: FSSpec): OSErr;°dONLNdëçäôÃ* editionFile.°dONLNdùôÕ◊+B Thr °dONLNdüôÿ•‰) e vb°dONLNd¢ô•)olume r©†°dONLNd©ô•)"eferU¿°dONLNd≠ô•Q) ence number›†°dONLNd∏ôP•a)8, dir¶¿°dONLNdΩôb•©)ectory ID, and fi/‡°dONLNdŒô™•)Hlename for the edition °dONLNd•ñ6(ÆÃcontainer being deleted.°dONLNd˛ H”Å(—H DESCRIPTION
  5808. .°dONLNd
  5809. ÿä‰+BIf the user cancels a publisher¬†°dONLNd)ÿ‰W)Ö, do not call the ¬†°dONLNd;ÿW‰Û)HDeleteEditionContainerFile¬†°dONLNdUÿÛ‰ı)ú .°dONLNdVÂäÒ(ÓäUfunction until the user saves the document. This allows the user to undo changes and °dONLNd´Úä˛ç*rE°dONLNd¨Úé˛^)0evert to the last saved version of the document..°dONLNd›äû(äThe °dONLNd·û:)DeleteEditionContainerFile°dONLNd˚:[)ú functio°dONLNd[h)!n d°dONLNdhÊ)eletes the edition container °dONLNd#ʸ)~only °dONLNd(¸)if .°dONLNd+äõ(äther"`°dONLNd/úæ)    e is no rù@°dONLNd8æ€)"egisterÏ`°dONLNd?€) ed publisher¿†°dONLNdK)7. ì°dONLNdM)YSÄ°dONLNdN^)ou need to unr%‡°dONLNd\^…)Aegister a publisher befor.Ä°dONLNdu…)ke you can delete °dONLNdÜä*®('äits corr °dONLNdé©*%)esponding edition container™‡°dONLNd©$*&){..°dONLNd´0ä<ë(9äYï°dONLNd¨0ê<fl)ou should use the ï°dONLNdæ0fl<{)ODeleteEditionContainerFileï°dONLNdÿ0{<ÿ)ú function even if therg`°dONLNdÓ0ÿ<È)]e ar9¿°dONLNdÚ0È<)e .°dONLNdÙ=äIò(Fä@subscribers to the edition. When a subscriber section tries to r7 °dONLNd4=ôI€(Fôead in data, it r§ °dONLNdE=€I˝)Beceives °dONLNdMJäVó(Säan —`°dONLNdPJóV£)errR†°dONLNdSJ§Ve).or if the edition container has been deleted. °dONLNdÇpHyb(wHRESULëÄ°dONLNdápbyÜ)T CODES°dONLNd[ÂHÓo(ÏHSEE ALSO
  5810. .°dONLNddÛäˇú+BSee °dONLNdhÛúˇ¥)page °dONLNdmÛ¥ˇ«)2-98°dONLNdqÛ«ˇX)! for detailed information on the °dONLNdíÛXˇ¨)ëGetEditionInfo°dONLNd†Û¨ˇÈ)T function. See °dONLNdØÛÈˇ)=page °dONLNd¥Ûˇ)2-77°dONLNd∏Ûˇ) °dONLNdπä Ô(    äfor information on the °dONLNd–Ô U)eUnRegisterSection°dONLNd·U ‹)f function. For information on fi°dONLNd‹ Á)ále .°dONLNdä¶(äspecifiÓ °dONLNd ¶«)cation r°dONLNd»⁄)"ecorâ`°dONLNd⁄˘)ds, see 2`°dONLNd˙W) Inside Macintosh: Files˘@°dONLNd6W\)]. 
  5811. =HE4>HE @H@
  5812. ˇ·ˇ‚7^ °dONLNd:0H>|(:H
  5813. Setting an}@°dONLNdD0}>°)5d Getti°dONLNdK0¢>)%ng a Format Markˇˇˇˇˇˇ(:2
  5814. .°dONLNd]EäQØ(NäUse the °dONLNdeEØQ')%SetEditionFormatMark°dONLNdyE'Qå)x function to set the currR`°dONLNdíEåQÓ)eent mark for a section °dONLNd©Rä^´([äformat °dONLNd∞R´^∂)!an°dONLNd≤R∂^¬) d t°dONLNdµR¬^–) he °dONLNd∏R–^*)GetEditionForma°dONLNd«R*^6)ZtM°dONLNd…R6^H) ark°dONLNdÃRH^t)  function t°dONLNd◊Rt^è),o get t°dONLNdfiRè^Æ)he currR`°dONLNdÂRÆ^–)ent marR`°dONLNdÏR–^‹)"k fR`°dONLNdÔR‹^Ô) or a .°dONLNdÙ_äk⁄(häparticular format. .°dONLNdé~ää®(áänoErr.°dONLNdî~ä)â0°dONLNdñ~,äH)No errE†°dONLNdú~IäR)or.°dONLNd†âäïÆ(íänsvErr.°dONLNdßâ    ï)–35°dONLNd´â,ït)#No such volume.°dONLNdªî䆮(ùäioErr.°dONLNd¡î    †)–36°dONLNd≈î,†L)#I/O err ‡°dONLNdÃîL†U) or.°dONLNd–üä´∫(®äbdNamErr.°dONLNdŸü    ´)–37°dONLNd›ü,´E)#Bad fiD@°dONLNd„üF´f)lename.°dONLNdΙä∂Æ(≥äfnfErr.°dONLNdÚ™    ∂)–43°dONLNd˜™,∂j)#File not found.°dONLNdµä¡∫(æädirNFErr.°dONLNdµ¡)z–120°dONLNdµ,¡:)(Dir͆°dONLNdµ:¡É)ectory not found.°dONLNd*¿äÃ(…äeditionMgrInitErr.°dONLNd<¿Ã)z–450°dONLNdA¿,Ãì)(Manager not initializedˇä@ˇ ˇˇˇˇ@
  5815. ˇ·ˇ‚7^
  5816. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  5817. (‡*2-82    )BEdition Manager Reference4^*¿¯
  5818. j*r¯4j*r¯ l*l˛
  5819. ˇ·ˇ‚7^ °dONLNd\*j®(f*SetEditionFormatMarkˇˇˇˇˇˇ(fÚ2
  5820. °dONLNd{lás(ÑlA∫†°dONLNd{sá<)/ format mark indicates the next position of a rZ@°dONLNdF{=á«) !ead or write operation. Initiallyí`°dONLNdg{ΔáÏ)â    , a mark °dONLNdpàlîß(ëldefaults to 0. ņ°dONLNdàßîƒ);After r‡`°dONLNdÜàƒîÏ)Feading or writing data, the format mark is set past the last position °dONLNdÃïl°©(ûlwritten to or r6¿°dONLNd€ï™°√)>ead frµ°dONLNd·ï√°”)om.~Ä°dONLNd‰ï‘°‹) T4@°dONLNdÊï‹°)o set the curr °dONLNdÙï°µ)9%ent mark for a given format, use the ,
  5821. Courier.°dONLNd¢lƉ(´lSetEditionFormatMark°dONLNd-¢‰Æ)x
  5822.  function.°dONLNd8ªl«Œ(ƒl;FUNCTION SetEditionFormatMark (whichEdition: EditionRefNum;°dONLNd~… ’&+¥ °dONLNd…&’∂)whichFormat: FormatType;°dONLNd¢◊ „&(‡  °dONLNd£◊&„í)setMarkTo: LongInt°dONLNdµ◊í„û)l):°dONLNd∑◊û„»)  OSErr;°dONLNdøÔl˚¥(¯l whichEdition.°dONLNdÃ˚Æπ+B Thr °dONLNdŒ˚∫≈) e rÄ¿°dONLNd—˚≈’) efer,‡°dONLNd’˚÷U)ence number for the edition. .°dONLNdÛ lÆ(l whichFormat.°dONLNdˇÆ#π+B Thr °dONLNd∫#ƒ) e f†°dONLNd≈#9) ormat type for the edition..°dONLNd 'l3¢(0l    setMarkTo.°dONLNd*'Æ3π)BThr °dONLNd,'∫3Δ) e o1@°dONLNd/'«3 )fWÄ°dONLNd0' 3)fset for the next rX¿°dONLNdC'3å)Kead or write for this format+¿°dONLNd_'ç3è)x.°dONLNdaM*Vc(T* DESCRIPTION
  5823. .°dONLNdmZlfÄ+BThe °dONLNdqZÄf¯)SetEditionFormatMark°dONLNdÖZ¯fV)x function sets the currR`°dONLNdúZVfø)^ent mark for the specifiR`°dONLNd¥ZøfÌ)i
  5824. ed format °dONLNdæglsö(pl
  5825. type accorR`°dONLNd»gös).ding to the value of the R`°dONLNd·gs<)l    setMarkToR`°dONLNdÍg<sn)6
  5826.  parameterï°dONLNdÙgmsp)1..°dONLNdˆé*óD(ï*RESULëÄ°dONLNd˚éDóh)T CODES
  5827. ¯*¯4¯*¯ ˙*˙˛
  5828. ˇ·ˇ‚7^ °dONLNd¢Í*¯´(Ù*GetEditionFormatMarkˇˇˇˇˇˇ(ÙÚ2
  5829. .°dONLNd∏
  5830. lë(lUse the °dONLNd¿
  5831. ëÎ)%GetEditionForma°dONLNdœ
  5832. Θ)ZtM°dONLNd—
  5833. ˜    ) ark°dONLNd‘
  5834.     5)  function t°dONLNdfl
  5835. 5P),o get t°dONLNdÊ
  5836. Po)he currR`°dONLNdÌ
  5837. oë)ent marR`°dONLNdÙ
  5838. ëù)"k fR`°dONLNd˜
  5839. ù·) or a particular .°dONLNdl#å( lformat..°dONLNd0l<Œ*;FUNCTION GetEditionFormatMark (whichEdition: EditionRefNum;°dONLNdU> J&+¥ °dONLNdV>&Jº)whichFormat: FormatType; °dONLNdzL X&(U  °dONLNd{L&X∂)VAR currentMark: LongInt°dONLNdìL∂X¬)ê):°dONLNdïL¬XÏ)  OSErr;°dONLNdùdlp¥(ml whichEdition.°dONLNd™pÆ|π+B Thr °dONLNd¨p∫|≈) e rÄ¿°dONLNdØp≈|’) efer,‡°dONLNd≥p÷|U)ence number for the edition. .°dONLNd—ÄlåÆ(âl whichFormat.°dONLNd›åÆòπ+B Thr °dONLNdflå∫òƒ) e f†°dONLNd‚å≈ò)     ormat typ·¿°dONLNdÎåòx)+e whose mark you want to get..°dONLNd    úl®Æ(•l currentMark°dONLNd®Æ¥ª+B Th°dONLNd®ª¥¬)e °dONLNd®¬¥:)GetEditionFormatMark°dONLNd-®:¥f)x  function rR`°dONLNd8®f¥ù), eturns the mR`°dONLNdD®ù¥–)7 ark for the .°dONLNdP¥Æ¿ (ΩÆspecifiÓ °dONLNdW¥ ¿⁄)ed fß`°dONLNd[¥€¿ı)ormat%‡°dONLNd`¥ˆ¿D) in this parameterl`°dONLNdr¥C¿H)M. .°dONLNdõlßä(§lnoErr.°dONLNdõıß˙)â0°dONLNd
  5840. õß*)No errE†°dONLNdõ+ß4)or.°dONLNd¶l≤ú(ØlrfNumErr.°dONLNd¶Î≤˙)–51°dONLNd!¶≤G)#Bad edition rª‡°dONLNd.¶G≤W)9eferh°dONLNd2¶X≤ë) ence number.°dONLNd?±lΩ¢(∫l    noTypeErr.°dONLNdI±ÊΩ˙)z–102°dONLNdN±Ωß)( Unknown format (subscriber only).°dONLNdpºl»“(≈leditionMgrInitErr.°dONLNdǺʻ˙)z–450°dONLNdẻu)(Manager not initializedˇ40@ˇ ˇˇˇˇ@
  5841. ˇ·ˇ‚7^
  5842. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äEdition Manager Reference
  5843. , (‡2-83
  5844. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  5845. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  5846. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  5847. 4€4—?òÄ
  5848. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  5849. ˛ˇˇˇ
  5850. ˛ˇˇˇ
  5851. ˛ˇˇˇ
  5852. ˛ˇˇˇ˜˝˛ˇ˛
  5853. ˛ˇ˛ˇˇ
  5854. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  5855. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  5856. ˛ˇ˛ˇˇ
  5857. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  5858. ˛ˇˇˇˇ
  5859. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  5860. ˛ˇˇˇˇ
  5861. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  5862. ˛ˇˇˇˇ
  5863. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\HeÅ(cH DESCRIPTION
  5864. ˇˇ÷™.°dONLNd jävb+B1If the edition does not support the format specifi5P°dONLNd>jcvå)Ÿ
  5865. ed in the ,
  5866. CourierˇˇÉ˛πN°dONLNdHjåvŒ)) whichFormatˇˇ÷™πN°dONLNdSjŒvˇ)B
  5867.  parameter“ò°dONLNd]jˇv)1, you °dONLNdcwäÉé(ÄärR`°dONLNddwéɵ)    eceive a R`°dONLNdmwµÉÎ)'    noTypeErrR`°dONLNdvwÎÉÒ)6 r$¿°dONLNdxwÒÉ ) esult code..°dONLNdÑùH¶b(§HRESULëÄ°dONLNdâùb¶Ü)T CODES
  5868. ˚H4¸H ˛H˛
  5869. ˇ·ˇ‚7^ °dONLNdÓH¸«(¯HReading in Edition Dataˇˇˇˇˇˇ(¯2
  5870. .°dONLNd7äê( äTï°dONLNd8è“)o initiate the rg`°dONLNdH“)Ceading of data fr9¿°dONLNdYœ)L*om an edition (for a subscriber), use the 9¿°dONLNdÉœ)± OpenEdition9¿°dONLNdé)B .°dONLNdèä±(ä    function..°dONLNdô"ä.Ø*Use the °dONLNd°"Ø.)%EditionHasFormat°dONLNd±".)`8 function to learn in which formats the edition data is .°dONLNdÈ/ä;¥(8ä
  5871. available..°dONLNdÙAäMØ*Use the °dONLNd¸AØMÒ)% ReadEdition°dONLNdAÒM()B function to rR`°dONLNdA(M[)7 ead data fr$¿°dONLNd A[Mfi)3om an edition. This function r˜ °dONLNd>A›M¸)Çeads fr…Ä°dONLNdEA¸M )om .°dONLNdHNäZ¨(Wäthe curr `°dONLNdPN≠Z)#ent mark for the specifiG°dONLNdhNZ@)f
  5872. ed format.
  5873. äHì4ãHí åHå
  5874. ˇ·ˇ‚7^ °dONLNdt}Hãè(áH OpenEditionˇˇˇˇˇˇ(á2
  5875. .°dONLNdÅúä®ê(•äTï°dONLNdÇú讓)o initiate the rg`°dONLNdíú“®)Ceading of data fr9¿°dONLNd£ú®œ)L*om an edition (for a subscriber), use the 9¿°dONLNdÕúœ®)± OpenEdition9¿°dONLNdÿú®)B .°dONLNdŸ©äµ±(≤ä    function..°dONLNd„¬äŒ‘*7FUNCTION OpenEdition (subscriberSectionH: SectionHandle°dONLNd¬‘Œ‡(À‘; °dONLNd$–‹(Ÿ °dONLNd%–‹&)VAR °dONLNd)–&‹§)refNum: EditionRefNum°dONLNd>–§‹∞)~):°dONLNd@–∞‹⁄)  OSErr;°dONLNdHËäÙˆ(ÒäsubscriberSectionH.°dONLNd[ÙÔ+B A∫†°dONLNd\Ù”€) h °dONLNd^Ù‹8)    andle to the section ṙ°dONLNdtÙ7I)[ecorb@°dONLNdxÙJ®)d for a given section. .°dONLNdêäÆ(ärefNum°dONLNdóÇ)BThe °dONLNdõ‡") OpenEdition°dONLNd¶"N)B  function rR`°dONLNd±No),eturns tR`°dONLNdπoÅ)!he r$¿°dONLNdΩÅì)efer˜ °dONLNd¡í )ence number for the edition˜ °dONLNd‹ )y .°dONLNd›Ã(Ãin this parameterFÄ°dONLNdÓ)K.°dONLNd6H?Å(=H DESCRIPTION
  5876. .°dONLNd¸CäOû+BThe °dONLNdCûO‡) OpenEdition°dONLNd C‡Of)B  function opens an edition for rR`°dONLNd+CfOû)Ü eading and r$¿°dONLNd7CûO«)8
  5877. eturns a r˜ °dONLNdACΔOÿ)(efer…Ä°dONLNdECÿOÌ)ence .°dONLNdJPä\A(Yä)number that your application can use to r»°dONLNdsPA\)∑.efer to this edition in other Edition Manager .°dONLNd°]äié(färR`°dONLNd¢]éi≥)    outines. R`°dONLNd´]≥i_)%'Multiple subscribers can each call the R`°dONLNd“]_i°)¨ OpenEditionR`°dONLNd›]°i)B function simultaneously .°dONLNdˆjävπ(sä (each call r °dONLNdjπvÎ)/ eturns a dif#†°dONLNdjÏv¯)3fer °dONLNdj¯v ) ent r(Ä°dONLNdj v)efer‘†°dONLNdjvr)ence number) and r‡°dONLNd,jsv¢)W ead data fr|@°dONLNd7j¢v )/om a single edition. If a °dONLNdQwäɲ(Ääpublisher (located on a difg@°dONLNdlw˛É
  5878. )tferI¿°dONLNdow
  5879. É˝) 7ent machine) is writing to an edition when you use the .°dONLNd¶ÑäêÃ(çä OpenEdition°dONLNd±ÑÃê)B function, you rR`°dONLNd¡Ñê9)A
  5880. eceive an R`°dONLNdÀÑ9êu),
  5881. flLckedErrR`°dONLNd’Ñuê{)< r$¿°dONLNd◊Ñ{êß)
  5882. esult code$¿°dONLNd·Ñßê™),.°dONLNdê´ä∑®(¥änoErr.°dONLNdñ´∑)â0°dONLNdò´,∑H)No errE†°dONLNdû´I∑R)or.°dONLNd¢∂ä¬∫(øärfNumErr.°dONLNd´∂    ¬)–51°dONLNdØ∂,¬e)#Bad edition rª‡°dONLNdº∂e¬u)9eferh°dONLNd¿∂v¬Ø) ence number.°dONLNdÕ¡äÕ¿( ä    noTypeErr.°dONLNd◊¡Õ)z–102°dONLNd‹¡,Õx)(Unknown format.°dONLNdÏÃäÿ(’äeditionMgrInitErr.°dONLNd˛Ãÿ)z–450°dONLNdÃ,ÿì)(Manager not initializedˇ@ˇ ˇˇˇˇ@
  5883. ˇ·ˇ‚7^
  5884. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  5885. (‡*2-84    )BEdition Manager Reference4^*¿¯°dONLNd\*eD(c*RESULëÄ°dONLNd\Deh)T CODES°dONLNd∏ª*ƒQ(¬*SEE ALSO
  5886. .°dONLNd¡…l’Î+BFor an example of the use of ,
  5887. Courier°dONLNdfi…Î’-) OpenEdition°dONLNdÈ…-’B)B, see °dONLNdÔ…B’r) Listing 2-7°dONLNd˙…r’Ä)0 on °dONLNd˛…Ä’ò)page °dONLNd…ò’´)2-42°dONLNd…´’Æ).
  5888. *¯4*¯ *˛
  5889. ˇ·ˇ‚7^ .°dONLNd
  5890. ¯*1(*E‘Ä°dONLNd ¯1é)ditionHasFormatˇˇˇˇˇˇ(Ú2
  5891. .°dONLNdl#ë( lUse the °dONLNd$ë#Ò)%EditionHasFormat°dONLNd4Ò#Â)`8 function to learn in which formats the edition data is .°dONLNdl$l0ñ(-l
  5892. available..°dONLNdw=lI∂*7FUNCTION EditionHasFormat (whichEdition: EditionRefNum;°dONLNd∏KWV+¢ whichFormat:°dONLNdƒKVW\)H °dONLNd≈K\W§) FormatType; °dONLNd€YeÜ(bVAR formatSize: Size°dONLNdÔYÜeí)x):°dONLNdÒYíeº)  OSErr;°dONLNd˘ql}¥(zl whichEdition.°dONLNd}Æâπ+B Thr °dONLNd}∫â≈) e rÄ¿°dONLNd }≈â’) efer,‡°dONLNd}÷âU)ence number for the edition. .°dONLNd-çlôÆ(ñl whichFormat°dONLNd9ôÆ•ª+B Th°dONLNd;ôª•Δ)e f°dONLNd>ôΔ•-) ormat type that you arR`°dONLNdTô-•8)ge r$¿°dONLNdWô8•ä) equesting. For the $¿°dONLNdjôä•Ã)R whichFormat$¿°dONLNduôÕŒ)B .°dONLNdv•Æ±€(ÆÆ    parameterS†°dONLNd•€±Ö)-&, you should decide which formats to rÄ°dONLNd••Ö±ı)™ead in the same way that °dONLNdæ±ÆΩ‚(∫Æ
  5893. you do whe°dONLNd»±„ΩÔ)5n r%`°dONLNdÀ±ÔΩ,) eading data fr †°dONLNdŸ±,Ωg)=om the scrap.Ä°dONLNdʱhΩj)< e‡°dONLNdÁ±jΩp)Y&`°dONLNd˱pΩÙ)"ou can also get a list of all the °dONLNd
  5894. ΩÆ…+(ΔÆavailable formats and their r™Ä°dONLNd'Ω+…ä)}espective lengths by rF¿°dONLNd=Ωã…º)` eading the .°dONLNdH…Æ’(“ÆkFormatListFormat°dONLNdY…’)f (°dONLNd[…’>)'fmts'°dONLNda…>’h)$
  5895. ) format. °dONLNdlŸl®(‚l
  5896. formatSize°dONLNdwÂÆÒª+B Th°dONLNdyªÒ¬)e °dONLNd{¬Ò")EditionHasFormat°dONLNdãÂ"ÒN)`  function rR`°dONLNdñÂNÒÅ), eturns the fR`°dONLNd¢ÂÅÒº)3 ormat lengthR`°dONLNdƺÒfi);     in this .°dONLNd∑ÒÆ˝€(˙Æ    parameterS†°dONLNd¿Ò€˝›)-.°dONLNd¬* c(* DESCRIPTION
  5897. .°dONLNdŒ$l0å+BIf the rR`°dONLNd÷$å0) equested format is availableR`°dONLNdÚ$0#)Ç, theR`°dONLNd˜$#0%) R`°dONLNd¯$%0Ö)EditionHasFormatR`°dONLNd$Ö0ã)` fR`°dONLNd
  5898. $ã0±)    unction r$¿°dONLNd$±0Œ)&eturns $¿°dONLNd$Œ0Ï)noErrg`°dONLNd$Î0), °dONLNd!1l=ë(:land the °dONLNd)1ë=Õ)%
  5899. formatSize°dONLNd31Õ=)<  parameter rR`°dONLNd?1=∏)8)eturns the size of the data in the specifiR`°dONLNdi1∏=Ò)≥ed format or °dONLNdv>lJ‰(GlkFormatLengthUnknown°dONLNdä>‰J7)x (–1), which signifPÄ°dONLNdù>7Jπ)Sies that the size is unknown. "‡°dONLNdª>πJ¿)ÇY7‡°dONLNdº>øJÏ)
  5900. ou should .°dONLNdΔKlW}(Tlther"`°dONLNd K~Wè)eforz`°dONLNdŒKèWŒ)e continue to rƒ‡°dONLNd›KŒW:)?ead the format until therË°dONLNdˆK:Wj)l e is no mor¨`°dONLNdKkWÖ)1e dataT °dONLNdKÜWà)..°dONLNd jlvä(slnoErr.y†°dONLNdjv)î0y†°dONLNdjv5)No err?@°dONLNdj6v?)or.°dONLNdulÅê(~lfnfErr.y†°dONLNd%uˆÅ)ä–43y†°dONLNd)uÅW)#File not found.°dONLNd9Älå®(âl
  5901. flLckedErr.y†°dONLNdDĈå)ä–45y†°dONLNdHÄå†)#Publisher writing to an edition.°dONLNdiãlóñ(îlpermErr.y†°dONLNdqãˆó)ä–54y†°dONLNduãóa)#Not a subscriber.°dONLNdáñl¢“(üleditionMgrInitErr.y†°dONLNdôñÒ¢)Ö–450y†°dONLNdûñ¢Ä)(Manager not initializedˇ3B@ˇ ˇˇˇˇ@
  5902. ˇ·ˇ‚7^
  5903. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äEdition Manager Reference
  5904. , (‡2-85
  5905. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  5906. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  5907. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  5908. 4€4—?òÄ
  5909. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  5910. ˛ˇˇˇ
  5911. ˛ˇˇˇ
  5912. ˛ˇˇˇ
  5913. ˛ˇˇˇ˜˝˛ˇ˛
  5914. ˛ˇ˛ˇˇ
  5915. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  5916. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  5917. ˛ˇ˛ˇˇ
  5918. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  5919. ˛ˇˇˇˇ
  5920. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  5921. ˛ˇˇˇˇ
  5922. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  5923. ˛ˇˇˇˇ
  5924. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  5925. ^Hk4^Hk    °dONLNd]ähù(eäNote
  5926. ˇ·ˇ‚7^
  5927. °dONLNd
  5928. iäu£*The TˆÄ°dONLNdi¢uî):ranslation Manager (if it is available) attempts implicit °dONLNdIuäź(~ä translation ù`°dONLNdUuºÅ)2under certain cirî °dONLNdfuÅø)I*cumstances. For instance, it does so when °dONLNdêÅäç(ääyour application attempts to rV°dONLNdÆÅç')Ñead fr‘@°dONLNd¥Å'ç¬)$om an edition a format type that is °dONLNdÿçäô'(ñä'not in the edition. In this case, the T◊¿°dONLNdˇç&ô≥)úranslation Manager attempts to °dONLNdôä•(¢ätranslate the data into the rá@°dONLNd;ô•q)wequested format. For mor˜†°dONLNdSôq•≤)pe information, °dONLNdb•ä±ö(Æäsee –@°dONLNdf•ö±Ÿ)the chapter “T*¿°dONLNdt•Ÿ±B)?ranslation Manager” in QÄ°dONLNdã•B±å)iInside Macintosh: °dONLNdù±äΩõ(∫äMorÄ°dONLNd†±úΩ¢)e z °dONLNd¢±¢Ωœ)
  5929. Macintosh ͆°dONLNd¨±œΩ’)-T͆°dONLNd≠±‘ΩÌ)oolbox£†°dONLNd≥±ÓΩ).,Zapf Dingbats#†°dONLNdµ¥ˆº¸)u°dONLNd∏÷HflM(›HRG°dONLNdπ÷Nflb)ESULëÄ°dONLNdΩ÷bflÜ)T CODES°dONLNdW*H3o(1HSEE ALSO
  5930. .°dONLNd`8äD    +BFor an example of the use of ,
  5931. Courier°dONLNd}8    Di)EditionHasFormat°dONLNdç8iD~)`, see °dONLNdì8~DÆ) Listing 2-7°dONLNdû8ÆDÈ)0 beginning on .°dONLNd¨EäQ°(Näpage Z‡°dONLNd±E¢Q¥)2-42Æ¿°dONLNdµE¥Q3). For information about the T¿ °dONLNd“E3Q‚)$ranslation Manager and Scrap Manager†°dONLNdˆE‚Q˜)Ø, see °dONLNd¸Rä^§([äInside qÄ°dONLNdR•^Ê)Macintosh: Mor¯Ä°dONLNdRÊ^)Ae Macintosh TÆ°dONLNdR^8)9oolboxÖ†°dONLNd$R9^;).
  5932. éHó4èHñ êHê
  5933. ˇ·ˇ‚7^ °dONLNd'ÅHèP(ãHR)¿°dONLNd(ÅQèå)    
  5934. eadEditionˇˇˇˇˇˇ(ã2
  5935. .°dONLNd4†ä¨Ø(©äUse the °dONLNd<†Ø¨Ò)% ReadEdition°dONLNdG†Ò¨()B function to rR`°dONLNdU†(¨[)7 ead data fr$¿°dONLNd`†[¨fi)3om an edition. This function r˜ °dONLNd~†›¨¸)Çeads fr…Ä°dONLNdÖ†¸¨ )om .°dONLNdà≠äπ¨(∂äthe curr `°dONLNdê≠≠π)#ent mark for the specifiG°dONLNd®≠π@)f
  5936. ed format..°dONLNd≥Δ䓺(œä3FUNCTION ReadEdition (whichEdition: EditionRefNum; °dONLNdÓ‘‡+~ °dONLNdÔ‘‡)+whichFormat: FormatType; buffPtr: UNIV Ptr;°dONLNd"‚Ó(Π°dONLNd#‚Ót)VAR buffLen: Size°dONLNd4‚tÓÄ)f):°dONLNd6‚ÄÓ™)  OSErr;°dONLNd>˙ä“(ä whichEdition.°dONLNdKÃ◊+B Thr °dONLNdMÿ„) e rÄ¿°dONLNdP„Û) efer,‡°dONLNdTÙs)ence number for the edition. .°dONLNdrä"Ã(ä whichFormat.°dONLNd~"Ã.◊+B Thr °dONLNdÄ"ÿ.‚) e f†°dONLNdÉ"„.e) ormat type that you want to rt‡°dONLNd†"e.y)Çead. .°dONLNd¶2ä>Æ(;äbuffPt°dONLNd¨2Æ>¥)$r.°dONLNdÆ2Ã>”)A∫†°dONLNdØ2”>€) p<¿°dONLNd±2‹>#)    ointer to the buf4‡°dONLNd¬2#>û)Gfer into which you want to r¸`°dONLNdfi2û>÷){ead the data..°dONLNdÏBäNÆ(KäbuffLe°dONLNdÚBÆN¥)$n.°dONLNdÙBÃNy)&The number of bytes that you want to rû¿°dONLNdByNæ)≠ead into the buf °dONLNd*BøNÀ)FferZ‡°dONLNd-B N’) . T{†°dONLNd0B’N‚) he .°dONLNd3NÃZ(Wà ReadEdition°dONLNd>NZ:)B  function rR`°dONLNdIN:Z[),eturns tR`°dONLNdQN[Zi)!he R`°dONLNdTNiZà)actual R`°dONLNd[NàZ…)number of byteR`°dONLNdiN…Z”)As r$¿°dONLNdlN”Z)
  5937. ead in the °dONLNdwZÃfˆ(cÃbuffLen°dONLNd~Zˆf()*
  5938.  parameter¬†°dONLNdàZ'f*)1.¬†°dONLNdâZ*f,) °dONLNdƒ‰ä®(ÌänoErr.°dONLNd ‰)â0°dONLNdÉ,H)No errE†°dONLNd“‰IR)or.°dONLNd÷Ôä˚∫(¯ärfNumErr.°dONLNdflÔ    ˚)–51°dONLNd„Ô,˚e)#Bad edition rª‡°dONLNdÔe˚u)9eferh°dONLNdÙÔv˚Ø) ence number.°dONLNd˙ä¿(ä    noTypeErr.°dONLNd ˙)z–102°dONLNd˙,á)(Format not available.°dONLNd&ä(äeditionMgrInitErr.°dONLNd8)z–450°dONLNd=,ì)(Manager not initializedˇd@ˇ ˇˇˇˇ@
  5939. ˇ·ˇ‚7^
  5940. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  5941. (‡*2-86    )BEdition Manager Reference4^*¿¯°dONLNd\*ec(c* DESCRIPTION
  5942. .°dONLNd jlvÄ+BThe ,
  5943. Courier°dONLNdjÄv¬) ReadEdition°dONLNdj¬vÓ)B  function rR`°dONLNd&jÓv%), eads data fr$¿°dONLNd2j%v≠)7om the edition into the specifi$¿°dONLNdQj≠v»)àed buf˜ °dONLNdWj«v‘)fer9¿°dONLNdZj‘vŸ). ˇˇn¯°dONLNd\wlÉÆ(Äl ReadEditionˇˇœ®°dONLNdgwÆÉ≥)B r"°dONLNdiw¥ÉÌ)eturns in the ˇˇn¯ë°dONLNdwwÌÉ)9buffLenˇˇœ®ë°dONLNd~wÉø)*& parameter the total number of bytes r¯°dONLNd§w¿É¯)©ead into the °dONLNd±Ñlêz(çlbufR`°dONLNd¥Ñzêá)ferï°dONLNd∑ÑÜêß)     . If the ï°dONLNd¿Ñßê—)!buffLenï°dONLNd«Ñ—ê    )*  parameter rg`°dONLNd”Ñ    ê·)8/eturns a value smaller than the value you have °dONLNdëlùä(ölspecifi°dONLNd    ëäùÆ)ed, therR`°dONLNdëÆù&)$e is no additional data to r$¿°dONLNd-ë&ùa)xead, and the $¿°dONLNd:ëaù£); ReadEdition$¿°dONLNdEë£ùœ)B  function r˜ °dONLNdPëŒùÛ)+    eturns a °dONLNdYûl™ä(ßlnoErr°dONLNd^ûä™ê) rR`°dONLNd`ûê™ˇ)esult code. If you use the R`°dONLNd{ûˇ™A)o ReadEditionR`°dONLNdÜûA™∏)B function after all data is r$¿°dONLNd£û∏™Î)w ead in, the °dONLNdØ´l∑Æ(¥l ReadEdition°dONLNd∫´Æ∑⁄)B  function rR`°dONLNd≈´⁄∑),
  5944. eturns an R`°dONLNdœ´∑()*eofErrR`°dONLNd’´(∑.)$ r$¿°dONLNd◊´.∑]) esult code..°dONLNd„Ωl…r(ΔlY@Ä°dONLNd‰Ωr…ï)ou can r√¿°dONLNdÏΩï…ƒ)# ead data fr  °dONLNd˜Ω≈…ˆ)0Dom an edition while a publisher on the same machine is writing data °dONLNd; l÷(”l)to the same edition. The data that you ar°dONLNdd ÷))≤e r˛†°dONLNdg )÷ı) 1eading is the old edition (not the data that the °dONLNdò◊l„(‡l)publisher is writing). If the publisher fi+Ä°dONLNd¬◊„Ü)¨nishes writing data beforu@°dONLNd€◊Ü„©)ne you ar†°dONLNd„◊™„æ)$e thr2°dONLNdË◊æ„◊)ough .°dONLNd̉lp(ÌlrR`°dONLNdÓ‰p)!eading the old edition data, the R`°dONLNd‰F)î ReadEditionR`°dONLNd‰Fr)B  function r$¿°dONLNd%‰rú),
  5945. eturns an $¿°dONLNd/‰úÃ)*abortErr$¿°dONLNd7‰Ã“)0 r˜ °dONLNd9‰—È)esult °dONLNd?Òl˝°(˙lcode. If the °dONLNdLÒ°˝„)5 ReadEdition°dONLNdWÒ„˝)B  function rR`°dONLNdbÒ˝9),
  5946. eturns an R`°dONLNdlÒ9˝i)*abortErrR`°dONLNdtÒi˝o)0 r$¿°dONLNdvÒo˝Ë)esult code, you should stop °dONLNdí˛l
  5947. ô(l trying to rR`°dONLNdù˛ô
  5948. ˘)-ead data and use the R`°dONLNd≤˛˘
  5949. A)` CloseEditionR`°dONLNdæ˛A
  5950. î)H function with the R`°dONLNd—˛î
  5951. –)S
  5952. successfulR`°dONLNd€˛–
  5953. “)< °dONLNd‹ l∏(lparameter set to °dONLNdÌ ∏÷)LFALSE°dONLNdÚ ÷Ÿ).°dONLNdÛ Ÿ€) 
  5954. %*3¯4&*3¯    .°dONLNdı$l/(,lNote
  5955. ˇ·ˇ‚7^
  5956. °dONLNd˙1l=Ö*The TˆÄ°dONLNdˇ1Ñ=v):ranslation Manager (if it is available) attempts implicit °dONLNd9=lIû(Fl translation ù`°dONLNdE=ûIÁ)2under certain cirî °dONLNdV=ÁI°)I*cumstances. For instance, it does so when °dONLNdÄIlU(Rlyour application attempts to rV°dONLNdûIU    )Ñead fr‘@°dONLNd§I    U§)$om an edition a format type that is °dONLNd»Ula    (^l'not in the edition. In this case, the T◊¿°dONLNdÔUaï)úranslation Manager attempts to °dONLNdalm„(jltranslate the data into the rá@°dONLNd+a„mS)wequested format. For mor˜†°dONLNdCaSmî)pe information, °dONLNdRmly|(vlsee –@°dONLNdVm|yª)the chapter “T*¿°dONLNddmªy$)?ranslation Manager” in QÄ°dONLNd{m$yn)iInside Macintosh: °dONLNdçylÖ}(ÇlMorÄ°dONLNdêy~ÖÑ)e z °dONLNdíyÑÖ±)
  5957. Macintosh ͆°dONLNdúy±Ö∑)-T͆°dONLNdùy∂Öœ)oolbox£†°dONLNd£y–Ö“).,Zapf Dingbats#†°dONLNd•|ÿÑfi)u
  5958. q†°dONLNd¶yfiÖ‡) °dONLNd©û*ßD(•*RESULëÄ°dONLNdÆûDßh)T CODES°dONLNd”*'Q(%*SEE ALSO
  5959. .°dONLNd‹,l8Î+BFor an example of the use of °dONLNd˘,Î8-) ReadEdition°dONLNd,-8B)B, see °dONLNd
  5960. ,B8r) Listing 2-7°dONLNd,r8≠)0 beginning on °dONLNd#,≠8≈);page °dONLNd(,≈8ÿ)2-42°dONLNd,,ÿ8›). 
  5961. \*d¯4]*d¯ _*_˛
  5962. ˇ·ˇ‚7^ .°dONLNd0O*]6(Y*Wú¿°dONLNd1O5]≠) riting out Edition Dataˇˇˇˇˇˇ(YÚ2
  5963. °dONLNdJdlpr(mlTµ¿°dONLNdKdqpˆ)!o initiate the writing of data frfl °dONLNdldˆpû)Ö'om a publisher to its edition containerf°dONLNdìdûpƒ)®
  5964. , use the .°dONLNdùql}¿(zlOpenNewEdition°dONLNd´q¿}ı)T function. (Tï°dONLNd∏qÙ})4o crg`°dONLNdºq}s)eate an edition container™°dONLNd’qr}ô)o
  5965. , use the °dONLNdfl~lä(álCreateEditionContainerFile°dONLNd˘~äx)ú function, as described on °dONLNd~xäê)ppage °dONLNd~êä£)2-79°dONLNd~£ä™).)°dONLNd êlúë(ôlUse the °dONLNd(êëúŸ)% WriteEdition°dONLNd4êŸú{)H& function to write data to an edition.°dONLNdµ¨l∏ä(µlnoErr.°dONLNdª¨ı∏˙)â0°dONLNdΩ¨∏*)No errE†°dONLNd√¨+∏4)or.°dONLNd«∑l√ú(¿labortErr.°dONLNd–∑Î√˙)–27°dONLNd‘∑√´)##Publisher has written a new edition.°dONLNd˘¬lŒä(ÀlioErr.°dONLNdˇ¬ÎŒ˙)–36°dONLNd¬Œ.)#I/O err ‡°dONLNd
  5966. ¬.Œ7) or.°dONLNdÕlŸú(÷lfnOpnErr.°dONLNdÕΟ˙)–38°dONLNdÕŸG)#File not open.°dONLNd*ÿl‰ê(·leofErr.°dONLNd1ÿΉ˙)–39°dONLNd5ÿ‰0)#No mor“‡°dONLNd;ÿ0‰ä)"e data of that format.°dONLNdR„lÔú(ÏlrfNumErr.°dONLNd[„ÎÔ˙)–51°dONLNd_„ÔG)#Bad edition rª‡°dONLNdl„GÔW)9eferh°dONLNdp„XÔë) ence number.°dONLNd}Ól˙¢(˜l    noTypeErr.°dONLNdáÓÊ˙˙)z–102°dONLNdåÓ˙i)(Format not available.°dONLNd¢˘l“(leditionMgrInitErr.°dONLNd¥˘Ê˙)z–450°dONLNdπ˘u)(Manager not initializedˇ7Ê@ˇ ˇˇˇˇ@
  5967. ˇ·ˇ‚7^
  5968. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äEdition Manager Reference
  5969. , (‡2-87
  5970. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  5971. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  5972. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  5973. 4€4—?òÄ
  5974. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  5975. ˛ˇˇˇ
  5976. ˛ˇˇˇ
  5977. ˛ˇˇˇ
  5978. ˛ˇˇˇ˜˝˛ˇ˛
  5979. ˛ˇ˛ˇˇ
  5980. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  5981. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  5982. ˛ˇ˛ˇˇ
  5983. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  5984. ˛ˇˇˇˇ
  5985. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  5986. ˛ˇˇˇˇ
  5987. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  5988. ˛ˇˇˇˇ
  5989. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  5990. jHr4jHr lHl
  5991. ˇ·ˇ‚7^ °dONLNd\Hj©(fHOpenNewEditionˇˇˇˇˇˇ(f2
  5992. °dONLNd{äáê(ÑäTµ¿°dONLNd{èá)!o initiate the writing of data frfl °dONLNd2{áº)Ö'om a publisher to its edition containerf°dONLNdY{ºá‚)®
  5993. , use the ,
  5994. Courier.°dONLNdcàäîfi(ëäOpenNewEdition°dONLNdqàfiî)T
  5995.  function.°dONLNd|°ä≠Ê(™ä:FUNCTION OpenNewEdition (publisherSectionH: SectionHandle;°dONLNdøت\+ê  fdCreator:°dONLNd Ø\ªb)B °dONLNdÀØbªå)OSType;°dONLNd€Ω…˛(Δ& publisherSectionDocument: FSSpecPtr; °dONLNd
  5996. À◊∂* VAR refNum: EditionRefNum°dONLNd$À∂◊¬)ú):°dONLNd&À¬◊Ï)  OSErr;°dONLNd.„äÔ(ÏäpublisherSectionH.°dONLNd@ÔÃ˚◊+B Thr °dONLNdBÔÿ˚Â) e pΩ‡°dONLNdEÔÂ˚≠)1ublisher section that is writing to the edition. .°dONLNdwˇä ¿(ä    fdCreator.°dONLNdÅˇÃ ◊)BThr °dONLNdɡÿ ‰) e FJ‡°dONLNdܡ )inder cr뇰dONLNdéˇ û)"#eator type of the new edition icon..°dONLNd≤ä(äpublisherSectionDocument.°dONLNdÀÃ'◊+B Thr °dONLNdÕÿ'Â) e d◊Ä°dONLNd–Â'É)#ocument that contains the publisher`°dONLNdÛÑ'˚)ü. This parameter is used to °dONLNd'Ã3‘(0Ãcrµ@°dONLNd'‘3)eate an alias fr‡°dONLNd!'3ú)@om the edition to the publisherh°dONLNd@'ù3
  5997. )â’s document. If you pass .°dONLNdY3Ã?fi(<ÃNIL!†°dONLNd\3fi?Ô) for !†°dONLNda3Ô?)publisherSectionDocument!†°dONLNdy3?˝)ê, an alias is not made in the .°dONLNdó?ÃKÛ(Hà   edition fiL °dONLNd°?ÙK˛)(le..°dONLNd•Oä[Æ(XärefNum°dONLNd¨OÃ[‡)BThe °dONLNd∞O‡[4)OpenNewEdition°dONLNdæO4[`)T  function rR`°dONLNd…O`[ì), eturns the r$¿°dONLNd’Oì[•)3efer˜ °dONLNdŸO§[€) ence number .°dONLNdÂ[Ãg€(dÃfor º°dONLNdÈ[€gÎ)the `°dONLNdÌ[ÏgY)edition in this parameterü@°dONLNd[Xg])l. q†°dONLNd[]gc)Y2 °dONLNd    [cg©)ou specify this rq@°dONLNd[©gπ)Fefer`°dONLNd[∫g–)ence .°dONLNd#gÃsÓ(pÃnumber °dONLNd*gÓs˙)"as °dONLNd-g˙s) a °dONLNd/gsó)"parameter for subsequent calls to °dONLNdQgósfl)ï WriteEdition°dONLNd]gfls‰)H, °dONLNd_sÃD(|ÃSetEditionFormatMark°dONLNdssD\)x, and °dONLNdys\§) CloseEdition°dONLNdÖs§Ù)H to specify which .°dONLNdóÃã(àÃMpublisher is writing its data to an edition. If the edition cannot be opened °dONLNd‰ãÃó5* for writing because ther͇°dONLNd¸ã5ó)i5e is another publisher writing to it, or because the °dONLNd1óã“(†Ãfiå¿°dONLNd3ó“£Ä)(le system does not allow writing, an errˆ °dONLNd[óÄ£ô)Æor is rH†°dONLNdbóö£“) eturned and .°dONLNdn£ÃØ (¨ÃOpenNewEdition°dONLNd|£ Ø5)T sets °dONLNdÇ£5ØY)refNum°dONLNdà£YØf)$ to °dONLNdå£fØx)NIL°dONLNdè£xØ}). .°dONLNdí…H“Å(–H DESCRIPTION
  5998. .°dONLNdû÷ä‚û+BThe °dONLNd¢÷û‚Ú)OpenNewEdition°dONLNd∞÷Ú‚)T
  5999.  function °dONLNd∫÷‚’)(+opens an edition for writing. The function °dONLNdÂ÷’‚Ÿ)ªrR`°dONLNdÊ÷Ÿ‚)
  6000. eturns an ˇˇW≤°dONLNd„äÔ¿(Ïä    flLckdErrˇˇ«Ê°dONLNd˘„¿Ô≈)6 rF°dONLNd˚„ΔÔ)esult code if therDX°dONLNd„Ôµ)K&e is a subscriber on another machine ré°dONLNd3„µÔı)§eading data fr.°dONLNdA„ıÔ)@om the ˇˇ˜|°dONLNdH下(˘äsame edition. The ˇˇÊtft°dONLNdZ›¸1)SOpenNewEditionˇˇ˜|ft°dONLNdh1¸\)T  function r'ðdONLNds]¸Å),    eturns a ˇˇÊtƒ°dONLNd|Ǹ¨)%permErrˇˇ˜|ƒ°dONLNdÉ¨¸±)* r‡†°dONLNdÖ±¸¸)esult code if therôt°dONLNdó˝¸)Le is a .°dONLNdû˝ä    ç(ärE°dONLNdü˝é    ´)egisterî °dONLNd¶˝´    Ä)0ed publisher to that edition on another machine.°dONLNd◊ä!(ä The Edition Manager allows two rç`°dONLNd˜!>)óegister‹Ä°dONLNd˛>ô)ed publishers that arΔ@°dONLNdô‡)[e located on the ™°dONLNd$·Ù)Hsame®¿°dONLNd(ı˜) °dONLNd)ä( (%äXmachine to write to the same edition. Note that multiple publishers cannot write to the °dONLNdÅ)ä5*Vsame edition simultaneously—only one publisher can write to an edition at a given time@°dONLNd◊)5(2.°dONLNdŸPHYb(WHRESULëÄ°dONLNdfiPbYÜ)T CODES
  6001. .°dONLNdÂ]äi®+(noErr.°dONLNdÎ]i)â0°dONLNdÌ],iH)No errE†°dONLNdÛ]IiR)or.°dONLNd˜hät®(qäioErr.°dONLNd˝h    t)–36°dONLNdh,tL)#I/O err ‡°dONLNdhLtU) or.°dONLNd sä¿(|ä    flLckdErr.°dONLNds    )–45°dONLNds,º)#!Edition in use by another section.°dONLNd=~ää¥(áäpermErr.°dONLNdE~    ä)–54°dONLNdI~,äP)#Register} °dONLNdQ~Pä‚)$ed publisher on another machine.°dONLNdrâäï¿(íä    wrPermErr.°dONLNd|â    ï)–61°dONLNdÄâ,ïq)#Not a publisher.°dONLNdëîä†(ùäeditionMgrInitErr.°dONLNd£î†)z–450°dONLNd®î,†ì)(Manager not initializedˇ@ˇ ˇˇˇˇ@
  6002. ˇ·ˇ‚7^
  6003. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  6004. (‡*2-88    )BEdition Manager Reference4^*¿¯°dONLNd\*eQ(c*SEE ALSO
  6005. .°dONLNd    jlvÎ+BFor an example of the use of ,
  6006. Courier°dONLNd&jÎv?)OpenNewEdition°dONLNd4j?vT)T, see °dONLNd:jTvÑ) Listing 2-5°dONLNdEjÑvø)0 beginning on .°dONLNdTwlÉÉ(Älpage Z‡°dONLNdYwÑÉñ)2-36Æ¿°dONLNd]wñÉõ). 
  6007. ≥*º¯4¥*ª¯ µ*µ˛
  6008. ˇ·ˇ‚7^ °dONLNda¶*¥6(∞*Wú¿°dONLNdb¶5¥p) riteEditionˇˇˇˇˇˇ(∞Ú2
  6009. .°dONLNdo≈l—ë(ŒlUse the °dONLNdw≈ë—Ÿ)% WriteEdition°dONLNdÉ≈Ÿ—ÿ)H< function to write data to an edition. This function begins .°dONLNdø“lfiº(€lwriting at the curr °dONLNd““Ωfi#)Qent mark for the specifiF†°dONLNdÍ“#fiP)f
  6010. ed format..°dONLNdıÎl˜§(Ùl4FUNCTION WriteEdition (whichEdition: EditionRefNum; °dONLNd1˘Í+~ °dONLNd2˘ˆ) °dONLNd3˘ˆå)whichFormat: FormatType; °dONLNdTÍ(Í °dONLNdUˆ) °dONLNdVˆ∂) buffPtr: UNIV Ptr; buffLen: Size°dONLNdv∂¬)¿):°dONLNdx¬Ï)  OSErr;°dONLNdÄl+¥((l whichEdition.°dONLNdç+Æ7π+B Thr °dONLNdè+∫7≈) e rÄ¿°dONLNdí+≈7’) efer,‡°dONLNdñ+÷7U)ence number for the edition. .°dONLNd¥;lGÆ(Dl whichFormat.°dONLNd¿GÆS_+B (The format type that you want to write. .°dONLNdÈWlcê(`lbuffPt°dONLNdÔWêcñ)$r.°dONLNdÒWÆcµ)A∫†°dONLNdÚWµcΩ) p<¿°dONLNdÙWæc)    ointer to the buf4‡°dONLNdWc)GfeR`°dONLNdWcû)#r containing the data to write to tÏ¿°dONLNd*Wûcœ)ë he edition. .°dONLNd7glsñ(plbuffLen.°dONLNd?gÆsπ)BThr °dONLNdAg∫s«) e nç °dONLNdDg«sn)%umber of bytes that you want to write¿°dONLNdigos±)® to the edition. °dONLNd{ç*ñc(î* DESCRIPTION
  6011. .°dONLNdáöl¶Ä+BThe °dONLNdãöĶ») WriteEdition°dONLNdóö»¶?)H function writes the specifi°dONLNd≥ö?¶‡)w&ed number of bytes to the edition. If °dONLNdŸßl≥~(∞lthe °dONLNd›ß~≥◊)data cannot be entirR`°dONLNdÒß◊≥a)Y ely written to the edition, the R`°dONLNdßa≥©)ä WriteEditionR`°dONLNdß©≥’)H  function r$¿°dONLNd(ß’≥Ú),eturns .°dONLNd/¥l¿Ü(Ωlan errR†°dONLNd5¥Ü¿è)or˝`°dONLNd7¥é¿ê).°dONLNd9€*‰D(‚*RESULëÄ°dONLNd>€D‰h)T CODES°dONLNd‰:*CQ(A*SEE ALSO
  6012. °dONLNdÌGlSG+B3For an example that writes data to an edition, see   °dONLNd GHSv)‹ Listing 2-5´`°dONLNd+GvSµ). beginning on &†°dONLNd9G∂SÕ)@page Ä°dONLNd>GŒS‡)2-36U`°dONLNdBG‡SÂ). 
  6013. x*į4x*¯ z*z˛
  6014. ˇ·ˇ‚7^ °dONLNdFj*xè(t*Closing an Edition ÂÄ°dONLNdYjèx˜)eAfter Reading or W@°dONLNdkj˜x)hritingˇˇˇˇˇˇ)˚2
  6015. .°dONLNdslãé(àlAfter fi°dONLNd{éã∂)"    nishing rR`°dONLNdÑ∂ãfl)(    eading fr$¿°dONLNdçflã}))%om or writing to an edition, use the $¿°dONLNd≤}ã≈)û CloseEdition$¿°dONLNdæ≈ã¯)H function to .°dONLNdÀålò∂(ïlclose the edition..°dONLNdEËlÙä(ÒlnoErr.y†°dONLNdKË˝Ù)ë0y†°dONLNdMËÙ2)No err?@°dONLNdSË3Ù<)or.°dONLNdWÛlˇ¢(¸l    dskFulErr.y†°dONLNdaÛÛˇ)á–34y†°dONLNdeÛˇE)# Disk is full.°dONLNds˛l
  6016. ä(lioErr.y†°dONLNdy˛Û
  6017. )á–36y†°dONLNd}˛
  6018. 6)#I/O errƒÄ°dONLNdÑ˛6
  6019. ?) or.°dONLNdà    lú(lrfNumErr.y†°dONLNdë    Û)á–51y†°dONLNdï    O)#Bad edition rµÄ°dONLNd¢    O_)9efera†°dONLNd¶    `ô) ence number.°dONLNd≥l “(leditionMgrInitErr.y†°dONLNd≈Ó )Ç–450y†°dONLNd  })(Manager not initializedˇ8V@ˇ ˇˇˇˇ@
  6020. ˇ·ˇ‚7^
  6021. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äEdition Manager Reference
  6022. , (‡2-89
  6023. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  6024. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  6025. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  6026. 4€4—?òÄ
  6027. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  6028. ˛ˇˇˇ
  6029. ˛ˇˇˇ
  6030. ˛ˇˇˇ
  6031. ˛ˇˇˇ˜˝˛ˇ˛
  6032. ˛ˇ˛ˇˇ
  6033. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  6034. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  6035. ˛ˇ˛ˇˇ
  6036. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  6037. ˛ˇˇˇˇ
  6038. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  6039. ˛ˇˇˇˇ
  6040. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  6041. ˛ˇˇˇˇ
  6042. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  6043. jHr4jHr lHl
  6044. ˇ·ˇ‚7^ °dONLNd\Hjè(fH CloseEditionˇˇˇˇˇˇ(f2
  6045. .°dONLNd{äáØ(ÑäUse the ,
  6046. Courier°dONLNd{Øá˜)% CloseEdition°dONLNd"{˜á§)H) function to close an edition after you fi°dONLNdL{§áæ)≠nish rR`°dONLNdR{æáÁ)    eading fr$¿°dONLNd[{Áá))om or .°dONLNdaàäî¡(ëäwriting to it..°dONLNdp°ä≠¬*4FUNCTION CloseEdition (whichEdition: EditionRefNum; °dONLNd¨Øª+~ °dONLNd≠ت) °dONLNdÆتÄ)successful: Boolea°dONLNd¿ØĪí)ln):°dONLNd√Øíªº) OSErr;°dONLNdÀ«ä”“(–ä whichEdition.°dONLNdÿ”Ãfl◊+B Thr °dONLNd⁄”ÿfl„) e rÄ¿°dONLNd›”„flÛ) efer,‡°dONLNd·”Ùfls)ence number for the edition. .°dONLNdˇ„äÔ¿(Ïä    successfu°dONLNd„¿ÔΔ)6lˇˇòj°dONLNd
  6047. ÔÃ˚‘+ AÛ`°dONLNd Ô”˚
  6048. ) value that iºû°dONLNdÔ ˚È)81ndicates whether your application was successful O°dONLNdIÔÍ˚Ó)fl(ˇ˛…>O°dONLNdJÔÓ˚)TRUEˇˇòjO°dONLNdNÔ˚)) or °dONLNdS˚Ã(Ãunsuccessful (°dONLNda˚%);FALSE°dONLNdf˚%/)) i°dONLNdi˚/:)
  6049. n rR`°dONLNdl˚:c)     eading fr$¿°dONLNdu˚c˙))"om or writing data to the edition..°dONLNdò!H*Å((H DESCRIPTION
  6050. °dONLNd§.ä:+B When a subscriber successfully fi¥ °dONLNd≈.:>)ínishes r«‡°dONLNdÕ.>:{)"eading data frm °dONLNd€.|:—)>om the edition, the .°dONLNdÔ;äG“(Dä CloseEdition°dONLNd˚;“GB)H function takes the modifPÄ°dONLNd;BGø)pication date of the edition f!°dONLNd1;øG)}ile that you have ˇˇú∏°dONLNdCHäTé(QärR`°dONLNdDHéTÌ)ead and puts it in the ˇ˛÷(˛∞°dONLNd[HÌT)_mdDateˇˇú∏˛∞°dONLNdaHT)$ fiõh°dONLNddHTr)    eld of the subscriber.°dONLNdyHtT°)Z ’s section r:¿°dONLNdÖH°T≥)-ecor °dONLNdâH≥T)d. This indicates that .°dONLNd†Uäa(^äQthe data contained in the edition and the subscriber section within the document °dONLNdÒbäní*arE°dONLNdÛbìnö)    e 醰dONLNdıbön™)the Ï°dONLNd˘b™n√)same.°dONLNdˇtäÄ2(}ä&When a subscriber is unsuccessful in r¨Ä°dONLNd%t2Äo)®eading data frQ¿°dONLNd3tpÄÍ)>om an edition (because therqÄ°dONLNdNtÍÄ )z    e is not .°dONLNdWÅäç–(ääenough memoryd@°dONLNddÅœç)E, or you didn’t fid@°dONLNdvÅçä)Gnd a format that you can r6†°dONLNdêÅäç≈)tead), set the 6†°dONLNdûÅ≈ç);
  6051. successful6†°dONLNd®Åç)< °dONLNd©éäö«(óäparameter to °dONLNd∂é«öÂ)=FALSE°dONLNdªéÂö˛). The °dONLNd¡é˛öF) CloseEdition°dONLNdÕéFö)H0 function then closes the edition, but does not °dONLNd˝õäß´(§äset the °dONLNdõ´ßœ)!mdDate°dONLNd õœßÿ)$ fi°dONLNdõÿß    )    Eeld. This implies that the subscriber is not updated with the latest .°dONLNdS®ä¥´(±äedition..°dONLNd\∫äΔ*When a publisher successfully fi°dONLNd|∫Δ«)í'nishes writing data to an edition, the °dONLNd£∫«Δ)´ CloseEdition°dONLNdØ∫Δ)H .°dONLNd∞«ä”(–äWfunction makes the data that the publisher has written to the edition available to any .°dONLNd‘ä‡*subscribers and sets the corrR`°dONLNd$‘‡^){esponding edition fiR`°dONLNd8‘^‡é)Y
  6052. le’s modifiR`°dONLNdC‘釫)0cation date (R`°dONLNdP‘«‡˝)9    ioFlMdDatR`°dONLNdY‘˝‡)6) to °dONLNd^·äÌú(Íäthe °dONLNdb·úÌ¿)mdDate°dONLNdh·¿Ì…)$ fi°dONLNdk·…Ì#)    eld of the publisher=`°dONLNd·$ÌR)[ ’s section r¿°dONLNdã·RÌd).ecor‚ °dONLNdè·cÌ    )$d. The Edition Manager then sends a .°dONLNd≥Óä˙ (˜äSection Read event to all currÉÄ°dONLNd—Ó ˙ÿ)Å.ent subscribers set to automatic update mode. f °dONLNdˇÓÿ˙)ÕAt this point, °dONLNd˚ä†(äthe fiÍ °dONLNd˚†)le type of the edition fi¨@°dONLNd-˚f)dle is set based on the fi߆°dONLNdF˚g)c$rst known format that the publisher °dONLNdjäñ(äwrú°dONLNdlñ¶) ote..°dONLNdqä&∂(#äDWhen a publisher is unsuccessful in writing data to an edition, the °dONLNdµ∂&˛(#∂ CloseEdition°dONLNd¡˛&)H .°dONLNd¬'ä3Ã(0äfunction discarц°dONLNd—'Ã3)BLds what the publisher has written to the edition. The data contained in the °dONLNd4ä@ˆ(=äedition prior to writing r>¿°dONLNd74˜@Δ)m,emains unchanged, and Section Read events arn °dONLNdc4Δ@˛)œe not sent to °dONLNdqAäMª(Jä subscribersT‡°dONLNd|AºM¡)2. °dONLNdhHqb(oHRESULëÄ°dONLNdÑhbqÜ)T CODES
  6053. .°dONLNdãuäÅ®+(noErr.y†°dONLNdëuÅ)è0y†°dONLNdìu2ÅN)No err?@°dONLNdôuOÅX)or.°dONLNdùÄäå®(âäioErr.y†°dONLNd£Äå)Ö–36y†°dONLNdßÄ2åR)#I/O errƒÄ°dONLNdÆÄRå[) or.°dONLNd≤ãäó∫(îäfnOpnErr.y†°dONLNdªãó)Ö–38y†°dONLNdøã2ók)#File not open.°dONLNdŒñä¢∫(üärfNumErr.y†°dONLNd◊ñ¢)Ö–51y†°dONLNd€ñ2¢k)#Bad edition rµÄ°dONLNdËñk¢{)9efera†°dONLNdÏñ|¢µ) ence number.°dONLNd˘°ä≠(™äeditionMgrInitErr.y†°dONLNd °
  6054. ≠)Ä–450y†°dONLNd°2≠ô)(Manager not initializedˇX@ˇ ˇˇˇˇ@
  6055. ˇ·ˇ‚7^
  6056. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  6057. (‡*2-90    )BEdition Manager Reference4^*¿¯°dONLNd\*eQ(c*SEE ALSO
  6058. .°dONLNd    jlvÎ+BFor an example of the use of ,
  6059. Courier°dONLNd&jÎv3) CloseEdition°dONLNd2j3vH)H, see °dONLNd8jHvx) Listing 2-5°dONLNdCjxv≥)0 beginning on .°dONLNdRwlÉÉ(Älpage Z‡°dONLNdWwÑÉñ)2-36Æ¿°dONLNd[wñÉõ). 
  6060. ß*د4®*د ™*™˛
  6061. ˇ·ˇ‚7^ °dONLNd_ö*®¨(§*Displaying Dialog Boxesˇˇˇˇˇˇ(§Ú2
  6062. °dONLNdxØlª(∏l The Edition Manager supports thrg‡°dONLNdòتu)óee dialog boxes: publisheráÄ°dONLNd≤Øuªß)r , subscriberb°dONLNdæØߪ„)2, and options °dONLNdúl»®(≈ldialog boxes. Ô‡°dONLNd⁄º®»Æ)<Y∞`°dONLNd€ºÆ»”)Bour application can display simple dialog boxes that appear center¿°dONLNdº‘»Ô(≈‘ed on °dONLNd#…l’è(“lthe userõ °dONLNd+…ê’¶)$’s scr놰dONLNd1…¶’l),een, or you can customize your dialog boxes..°dONLNd^€lÁë(‰lUse the °dONLNdf€ëÁ3)%GetLastEditionContainerUsed°dONLNdÅ€3Á⁄)¢( function to get the default edition to .°dONLNd©ËlÙå(Òldisplay°dONLNd∞ËåÙé) ..°dONLNd≤˙lë(lUse the °dONLNd∫˙ë)%NewSubscriberDialog°dONLNdÕ˙Î)r6 function to display the subscriber dialog box on the °dONLNdl~(luser=`°dONLNdî)’s scr¿°dONLNdî⁄)een and use the ¿°dONLNd⁄F)FNewPublisherDialog¿°dONLNd/Ffl)l# function to display the publisher .°dONLNdRl Œ(ldialog box on the userx‡°dONLNdhœ Â)c’s scro`°dONLNdn L)een. Unlike the Standarß¿°dONLNdÖL g)gd File Ì°dONLNdåg ç)Package Œ¿°dONLNdîé ë)'rì¿°dONLNdïí «)outines, the .°dONLNd¢!l-ÿ(*lNewPublisherDialog°dONLNd¥!ÿ-ˇ)l     and the °dONLNdΩ!ˇ-q)'NewSubscriberDialog°dONLNd–!q-◊)r functions allow you to .°dONLNdË.l:‚(7lspecify the initial volume rƒ‡°dONLNd.‚:Ú)veferq°dONLNd.Û:O)ence number and dirlÄ°dONLNd.O:¨)\ectory ID so that ther¶¿°dONLNd1.¨:‰)]e can be one °dONLNd>;lG=(Dl3default location for editions for all applications..°dONLNdrMlYs*Yï°dONLNdsMrY†) ou use the ï°dONLNd~M†Y).SectionOptionsDialogï°dONLNdíMYÁ)x/ function to display the publisher options and .°dONLNd¡Zlf+(cl+subscriber options dialog boxes on the user=†°dONLNdÏZ,fB)¿’s scr4 °dONLNdÚZBfS)een..°dONLNd˜llxÄ(ulThe °dONLNd˚lÄx)NewSubscriberExpDialog°dONLNdlx    )Ñ, °dONLNdl    xá)NewPublisherExpDialog°dONLNd(láxü)~, and °dONLNd.ylÖˆ(ÇlSectionOptionsExpDialog°dONLNdEyˆÖ,)ä functions arR`°dONLNdRy,Ö˜)6.e the same as the simple dialog functions but .°dONLNdÄÜlíâ(èlhave fiN°dONLNdáÜäí˚)ve additional parameters.
  6063. ¬*À¯4√* ¯ ƒ*ƒ˛
  6064. ˇ·ˇ‚7^ °dONLNd¢µ*√œ(ø*GetLastEditionContainerUsedˇˇˇˇˇˇ(øÚ2
  6065. .°dONLNdø‘l‡ë(›lUse the °dONLNd«‘ë‡3)%GetLastEditionContainerUsed°dONLNd‚‘3‡⁄)¢( function to get the default edition to .°dONLNd
  6066. ·lÌå(Íldisplay°dONLNd·åÌì) ?. This function allows a user to easily subscribe to the data r`°dONLNdP·ìÌ„(Íìecently published.ˇÄ°dONLNdb·„ÌÂ)P .°dONLNdd˙lJ(l%FUNCTION GetLastEditionContainerUsed °dONLNdêÿ∞+l$(VAR container: EditionContainerSpec°dONLNd¥∞º)ÿ):°dONLNd∂ºÊ)  OSErr;°dONLNdæ l,¢()l    container°dONLNd» Æ, )BIf the °dONLNdœ  ,T)GetLastEditionContainer°dONLNdÊ T,l)äUsed°dONLNdÍ l,‹) function locates the last °dONLNd,Æ8E(5Æ"edition for which a section was crR`°dONLNd',E8v)ó eated, the R`°dONLNd2,v8¨)1    containerR`°dONLNd;,¨8‡)6  parameter .°dONLNdF8ÆD
  6067. (AÆcontains its volume r≈‡°dONLNd[8
  6068. D)\eferr°dONLNd_8DT) ence number˘‡°dONLNdj8SDd)8, dir√°dONLNdo8eDô) ectory ID, fifl°dONLNd|8ôDË)4lename, and part, .°dONLNdéDÆP≈(MÆand rR`°dONLNdìD≈PÍ)    eturns a R`°dONLNdúDÍP)%noErrR`°dONLNd°DP) r$¿°dONLNd£DPñ) esult code. (The last edition cr˜ °dONLNd√DïPÌ)áeated is associated .°dONLNd◊PÆ\Ò(YÆKwith the last time that your application or another application located on .°dONLNd"\Æh** the same machine used the °dONLNd<\*hf)|
  6069. NewSection°dONLNdF\fhï)<  function.) .°dONLNdSÇ*ãc(â* DESCRIPTION
  6070. .°dONLNd_èlõ+B)If the last edition used is missing, the °dONLNdàèõ∫)¨GetLastEditionContainerUsed°dONLNd£è∫õ‚)¢
  6071.  function °dONLNd≠úl®p(•lrR`°dONLNdÆúp®ö)
  6072. eturns an R`°dONLNd∏úö®æ)*fnfErrR`°dONLNdæú殃)$ r$¿°dONLNd¿úƒ®)esult code, but still r˜ °dONLNd◊ú®^)Zeturns the corr…Ä°dONLNdÊú^®î)@ ect volume rõ‡°dONLNdÚú)6efern@°dONLNdˆú¶®)ence number and °dONLNd©lµz(≤ldirR`°dONLNd    ©zµ!)&ectory ID that you should use for the R`°dONLNd/©!µì)ßNewSubscriberDialogR`°dONLNdB©ìµº)r
  6073.  function.ˇ6z@ˇ ˇˇˇˇ@
  6074. ˇ·ˇ‚7^
  6075. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äEdition Manager Reference
  6076. , (‡2-91
  6077. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  6078. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  6079. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  6080. 4€4—?òÄ
  6081. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  6082. ˛ˇˇˇ
  6083. ˛ˇˇˇ
  6084. ˛ˇˇˇ
  6085. ˛ˇˇˇ˜˝˛ˇ˛
  6086. ˛ˇ˛ˇˇ
  6087. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  6088. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  6089. ˛ˇ˛ˇˇ
  6090. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  6091. ˛ˇˇˇˇ
  6092. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  6093. ˛ˇˇˇˇ
  6094. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  6095. ˛ˇˇˇˇ
  6096. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿.°dONLNd\ähÚ(eäPass the information frR`°dONLNd\Úh)hom the ,
  6097. CourierR`°dONLNd\hµ)!GetLastEditionContainerUsedR`°dONLNd9\µh˙)¢ function to the °dONLNdJiäu¸(räNewSubscriberDialog°dONLNd]i¸u%)r
  6098.  function..°dONLNdhèHòb(ñHRESULëÄ°dONLNdmèbòÜ)T CODES°dONLNdflÿH·o(flHSEE ALSO
  6099. .°dONLNdËÊäÚ    +BFor an example of the use of °dONLNdÊ    Ú´)GetLastEditionContainerUsed°dONLNd Ê´Ú¿)¢, see °dONLNd&Ê¿Ú) Listing 2-6°dONLNd1ÊÚÚ)0 .°dONLNd2ÛäˇΔ(¸äbeginning on {@°dONLNd?Û«ˇfi)=page V °dONLNdDÛflˇÒ)2-40™°dONLNdHÛÒˇ∞).. For a description of the edition container r@°dONLNdvÛ±ˇ√)¿ecor놰dONLNdzÛ√ˇfi)d, see ˝†°dONLNdÅÛfiˇı)page ÿÄ°dONLNdÜÛˆˇ)2-71,`°dONLNdäÛ    ˇ). .°dONLNdåä û(    äThe °dONLNdêû )NewSubscriberDialog°dONLNd£ Ö)r function is described next.
  6100. <HE4=HD >H>
  6101. ˇ·ˇ‚7^ .°dONLNd¡/H=¬(9HNewSubscriberDialogˇˇˇˇˇˇ(92
  6102. °dONLNd÷NäZ,(Wä#When a user chooses the Subscribe T °dONLNd˘N,Z)¢1o menu command, your application should call the .°dONLNd*[äg¸(däNewSubscriberDialog°dONLNd=[¸g)rB function to allow the user to choose an edition to subscribe to. °dONLNdÄtäÄ8(}äFUNCTION NewSubscriberDialog °dONLNd•Çéº+~(VAR reply: NewSubscriberReply°dONLNd√Ǻé»)¥):°dONLNd≈Ç»éÚ)  OSErr;°dONLNdÕö䶮(£äreply.°dONLNd”öö◊)BThr °dONLNd’öÿ¶Â) e nç °dONLNdÿö¶()ew subscriber r
  6103. †°dONLNdÁö)¶B)Deply r퇰dONLNdÌöB¶T)ecor@°dONLNdÒöU¶])d.£°dONLNdÛö]¶_) ı`°dONLNdÙö_¶e)Yµ‡°dONLNdıöe¶˙)$ou specify a location to use as the .°dONLNd¶Ã≤\(ØÃ!default edition container in the °dONLNd:¶\≤í)ê    container°dONLNdC¶í≤õ)6 fi°dONLNdF¶õ≤–)    eld of this rR`°dONLNdS¶–≤‚)5ecor$¿°dONLNdW¶‚≤Ì)d. ˜ °dONLNdZ¶Ï≤Û)
  6104. Y  °dONLNd[¶Û≤)ou also °dONLNdc≤Ãæ (ªÃspecify in the °dONLNdr≤ æN)@ formatsMask°dONLNd}≤NæW)B fi°dONLNdÄ≤WæÁ)    eld which edition format types °dONLNdüæà>(«ÃNewSubscriberDialog°dONLNd≤æ> Ö)r should displayd@°dONLNd¡æÑ ù)F. The d@°dONLNd«æù )NewSubscriberDialogd@°dONLNd⁄æ )r .°dONLNd€ Ã÷˜(”Ã
  6105. function r”@°dONLNd ˜÷£)+&eturns information concerning the user;¿°dONLNd  •÷Ë)Æ’s choice in the .°dONLNd÷¸(flÃcanceled°dONLNd$÷¸‚)0 and °dONLNd)÷‚G)    container°dONLNd2÷G‚M)6 fPÄ°dONLNd4÷M‚ä)ields of this r"‡°dONLNdC÷ä‚ú)=ecorı@°dONLNdG÷õ‚§)d.°dONLNdJÏä¯&(ıäTYPE NewSubscriberReply = °dONLNdf˙ú¿+RECORD°dONLNdoƉ+    canceled:°dONLNd}8)ZBoolean;°dONLNdåÜÊ)~{user canceled }°dONLNd´Ü"‘*{ dialog box}°dONLNdª$Æ0ˆ(-Æ formatsMask:°dONLNdÃ$0J)Z SignedByte;°dONLNdfi$Ü0Ú)~{formats required}°dONLNdÛ2Æ>Í(;Æ
  6106. container:°dONLNd2>Ü)ZEditionContainerSpec;°dONLNd2Ü>Ú)~{edition selected}°dONLNd2@úL¥(IúEND;
  6107. ZHi4ZHh    .°dONLNd7Yäd÷(aäField descriptions
  6108. ˇ·ˇ‚7^
  6109. .°dONLNdJfär¥*cancele°dONLNdQf¥r∫)*d°dONLNdSfÊrÛ)2Th°dONLNdUfÛr˙)e °dONLNdWf˙rl)NewSubscriberDialog°dONLNdjflrò)r  function rR`°dONLNdufòrµ),eturns R`°dONLNd|fµr‹)    in this fiR`°dONLNdÜf‹r)' eld a value .°dONLNdírÊ~({Ê=that indicates whether the user canceled the dialog box. The .°dONLNdœ~Êä*
  6110. function rR`°dONLNdŸ~ä-)*eturns R`°dONLNd‡~-äE)TRUER`°dONLNd‰~EäV) in tR`°dONLNdÈ~Väd)he R`°dONLNdÏ~däî)canceledR`°dONLNdÙ~îäù)0 fiR`°dONLNd˜~ùä¶)    elR`°dONLNd˘~¶äº)    d if tR`°dONLNdˇ~ºä)he user canceled °dONLNdäÊñf(ìÊthe dialog box. Otherwise, t°dONLNd,äfñû)Ähe function rR`°dONLNd9äûñª)8eturns R`°dONLNd@äªñŸ)FALSER`°dONLNdEäŸñˇ)
  6111.  in this f"‡°dONLNdOäˇñ )&iel"‡°dONLNdRä ñ)d °dONLNdTñÊ¢˝(üÊand rR`°dONLNdYñ˝¢)) eturns in tR`°dONLNddñ)¢7),he R`°dONLNdgñ7¢m)    containerR`°dONLNdpñm¢v)6 fiR`°dONLNdsñv¢)    elR`°dONLNduñ¢ã)    d tR`°dONLNdxñ㢠   ) he edition container for the .°dONLNdï¢ÊÆ)(´Ênew subscriberÃÄ°dONLNd£¢(Æ*)B..°dONLNdtùä©®(¶änoErr.y†°dONLNdzù© )ë0y†°dONLNd|ù4©P)No err?@°dONLNdÇùQ©Z)or.°dONLNdÜ®ä¥Æ(±äfnfErr.y†°dONLNd箥 )á–43y†°dONLNdë®4¥Æ)#Edition container not found.°dONLNdÆ≥äø(ºäeditionMgrInitErr.y†°dONLNd¿≥ ø )Ç–450y†°dONLNd≈≥4øõ)(Manager not initializedˇ@ˇ ˇˇˇˇ@
  6112. ˇ·ˇ‚7^
  6113. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  6114. (‡*2-92    )BEdition Manager Reference4^*¿¯,
  6115. Courier
  6116. .°dONLNd\lhÆ(el formatsMaskˇˇ«°dONLNd \»h€)\The ˇˇUTG°dONLNd\‹h) formatsMaskˇˇ«G°dONLNd\h&)B fi8°dONLNd\'h¯)    /eld indicates which edition format type (text, .°dONLNdMh»tÈ(q»Bgraphics, and sound) to display within the subscriber dialog box. .°dONLNdèt»Äœ* Yï°dONLNdêtŒÄ )ou can set the ï°dONLNdüt ÄN)> formatsMaskï°dONLNd™tNÄW)B fiï°dONLNd≠tWÄ·)     eld to the following constants: °dONLNdÕÄ»å"(â»kTEXTformatMask°dONLNd‹Ä"å6)Z (1), °dONLNd‚Ä6åê)kPICTformatMask°dONLNdÒÄêåØ)Z     (2), or °dONLNd˙å»ò(ï»ksndFormatMask°dONLNdåò6)T (4). Tï°dONLNdå5òË)(o support a combination of formats, add °dONLNd7ò»§,(°»the constants together¬†°dONLNdMò+§u)c. For example, a ¬†°dONLNd^òu§∑)J formatsMask¬†°dONLNdiò∑§ı)B of 3 displays .°dONLNdx§»∞◊(≠»?both graphics and text edition format types in the subscriber  z‡°dONLNd∑§ÿ∞⁄(≠ÿ °dONLNd∏∞»º˘(π» dialog box..°dONLNdƒølÀ¢(»l    container.°dONLNdŒø»ÀÚ)\FThe edition container of the last edition published or subscribed to. °dONLNdÀ»◊Œ* Y@Ä°dONLNdÀŒ◊Â)ou pr@°dONLNdÀÊ◊ü)*ovide in this parameter the location and fi†°dONLNdEÀü◊Í)πlename to use as °dONLNdV◊»„Ë(‡»Fthe default edition to subscribe to. If the user clicks the Subscribe .°dONLNdú„»ÔÈ* button, °dONLNd§„ÈÔ[)!NewSubscriberDialog°dONLNd∑„[Ôa)r rR`°dONLNdπ„aÔ~)eturns R`°dONLNd¿„~Ôú)FALSER`°dONLNd≈„úÔ≠) in tR`°dONLNd „≠Ôª)he R`°dONLNdÕ„ªÔÎ)canceledR`°dONLNd’„ÎÔÌ)0 .°dONLNd÷Ô»˚Œ(¯»fiå¿°dONLNdÿÔŒ˚’)el>¿°dONLNd⁄Ô÷˚ı)d and r †°dONLNd·Ôˆ˚) eturns t„ °dONLNdÈÔ˚$)!he ˛ °dONLNdÏÔ$˚I)    selected Œ¿°dONLNdıÔJ˚Ã)&edition container for the new .°dONLNd˚»(»    subscribe°dONLNd˚)(    r in the °dONLNd%˚I)#    container°dONLNd.˚IR)6 fi°dONLNd1˚Rf)    eld. .°dONLNd8 *)c('* DESCRIPTION
  6117. .°dONLNdD.l:Ä+BThe °dONLNdH.Ä:Ú)NewSubscriberDialog°dONLNd[.Ú:Â)r8 function displays the subscriber dialog box on the user=`°dONLNdì.Ê:Ô)Ù’s °dONLNdñ;lGx(DlscrR`°dONLNdô;xG†)     een. The R`°dONLNd¢;†G)(NewSubscriberDialogR`°dONLNdµ;G¢)r! function (which is based on the R`°dONLNd÷;¢G)êCustomGetFileR`°dONLNd„;GÚ)N .°dONLNd‰HlTu(QlprG °dONLNdÊHvTî)
  6118. ocedurfi`°dONLNdÏHîT/)#e described in the chapter “Standar`°dONLNdH0TÇ)úd File Package” in q °dONLNd"HÇTfl)RInside Macintosh: Files8°dONLNd9H‡TÂ)^) °dONLNd;Ulaÿ(^lswitches to the volume rä °dONLNdSUÿaË)lefer6@°dONLNdWUÈaE)ence number and dir1¿°dONLNdjUEaπ)\ectory ID and selects the fi¿Ä°dONLNdÜUπa˜)tlename of the ˇˇhÙ.°dONLNdîblnˇ(kl!edition container that you specifi#–°dONLNd∂bn()î
  6119. ed in the ˇ˛:‹^¨°dONLNd¿b(n^)(    containerˇˇhÙ^¨°dONLNd…b^nf)6 fi«†°dONLNdÃbfní) eld of the ˇ˛:‹|°dONLNd◊bìn±)-replyˇˇhÙ|°dONLNd‹b±n‚)
  6120.  parameterÆ°dONLNdÊb·n˜)0. Use °dONLNdÏol{~(xlthe °dONLNdo~{ )GetLastEditionContainerUsed°dONLNd o {ı)¢3 function to get the edition container of the last ˇˇ›‹°dONLNd>|làà(ÖlAedition that was either published or subscribed to, then set the ˇˇôît°dONLNd|âàø(Öâ    containerˇˇ›‹t°dONLNdà|øà«)6 fiÊP°dONLNdã|«à˜) eld to this .°dONLNdóâlï∑(íledition containerÒÄ°dONLNd®â∂ï∂)J<. This allows the user to publish and then easily subscribe..°dONLNdÂõlß>(§l0Note that if an edition does not contain either °dONLNdõ>ßb)“'PICT'°dONLNdõbßg)$, °dONLNdõgßã)'TEXT'°dONLNd#õãßõ)$, or °dONLNd(õõßø)'snd '°dONLNd.õøßÓ)$  data, the °dONLNd9®l¥fi(±lNewSubscriberDialog°dONLNdL®fi¥w)r% function does not list the edition fPÄ°dONLNdq®w¥Â)ôile in the new subscriber .°dONLNdãµl¡H(æl3dialog box (unless you install an opener that can rŇ°dONLNdæµH¡œ)‹ ecognize the edition’s data in r¡†°dONLNdfiµœ¡Ù)áesponse .°dONLNdʬlŒâ(Àlto the °dONLNd̬⌛)eoCanSubscribe°dONLNd˚¬›Œ˙)T verb)..°dONLNdË*ÒD(Ô*RESULëÄ°dONLNdËDÒh)T CODES°dONLNdõ1*:Q(8*SEE ALSO
  6121. °dONLNd§?lKc+B:For an illustration of the new subscriber dialog box, see Ñ@°dONLNdfi?cK{)˜FigurW°dONLNd„?{Kº)e 2-12 on page @°dONLNdÚ?ΩK≈)B2-j °dONLNdÙ?≈Kœ)37j °dONLNdˆ?œKÚ)
  6122.     . For an .°dONLNdˇLlXÕ(Ulexample of the use of °dONLNdLÕX?)aNewSubscriberDialog°dONLNd(L?XT)r, see °dONLNd.LTXÑ) Listing 2-6°dONLNd9LÑXø)0 beginning on °dONLNdGLøX◊);page °dONLNdLL◊XÍ)2-40°dONLNdPLÍXÔ). .°dONLNdRYle&(bl,For a description of the edition container rÛ@°dONLNd~Y&e8)∫ecorg†°dONLNdÇY9eT)d, see ”†°dONLNdâYTek)page ÆÄ°dONLNdéYle~)2-71`°dONLNdíYe⁄). For information on °dONLNdßflrΔ(oledition openers, see õÄ°dONLNdºfΔr∑)Z5“Subscribing to Non-Edition Files” beginning on page 2`°dONLNdÒf∏r )Ú2-62Ü@°dONLNdıf rœ). .°dONLNdˆlä(ˇlnoErr.°dONLNdˆı˙)â0°dONLNdˆ*)No errE†°dONLNdˆ+4)or.°dONLNd!l“(
  6123. leditionMgrInitErr.°dONLNd3Ê˙)z–450°dONLNd8=)(    Manager nc`°dONLNdA>u)0ot initialized@°dONLNdOvÎ)8 or could not load package.°dONLNdk l∫(lbadSubPartErr.°dONLNdy Ê˙)z–454°dONLNd~ Ç)(Bad edition container specˇ9ÿ@ˇ ˇˇˇˇ@
  6124. ˇ·ˇ‚7^
  6125. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äEdition Manager Reference
  6126. , (‡2-93
  6127. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  6128. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  6129. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  6130. 4€4—?òÄ
  6131. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  6132. ˛ˇˇˇ
  6133. ˛ˇˇˇ
  6134. ˛ˇˇˇ
  6135. ˛ˇˇˇ˜˝˛ˇ˛
  6136. ˛ˇ˛ˇˇ
  6137. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  6138. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  6139. ˛ˇ˛ˇˇ
  6140. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  6141. ˛ˇˇˇˇ
  6142. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  6143. ˛ˇˇˇˇ
  6144. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  6145. ˛ˇˇˇˇ
  6146. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  6147. jHr4jHr lHl
  6148. ˇ·ˇ‚7^ °dONLNd\HjQ(fHN~@°dONLNd\Rjº)
  6149. ewPublisherDialogˇˇˇˇˇˇ(f2
  6150. °dONLNd{äáπ(ÑäCWhen a user selects a portion of a document and then chooses the Cr9¿°dONLNdW{∫á˚(Ñ∫eate Publisher .°dONLNdfàäîg(ëä/menu command, your application should call the ,
  6151. Courier°dONLNdïàgî”)›NewPublisherDialog°dONLNdßà”î)l function to .°dONLNd¥ïä°(ûäVallow the user to choose a name and location of the edition to which your application °dONLNd
  6152. ¢äÆ˝*writes the publisher data. µ °dONLNd%¢˝Æ)sYu†°dONLNd&¢Æe)our application specifi    ‡°dONLNd=¢fÆ)c%es a location and name to use as the °dONLNdbØäªÎ(∏ädefault edition and pr^¿°dONLNdxØΪ)a ovides a prL`°dONLNdÉت≤)1#eview of the publisher data to the .°dONLNd¶ºä»ˆ(≈äNewPublisherDialog°dONLNd∏ºˆ»!)l  function. °dONLNdƒ’ä·2(fiäFUNCTION NewPublisherDialog °dONLNdÁ„ˆÔ§+l(VAR reply: NewPublisherReply°dONLNd„§Ô∞)Æ):°dONLNd„∞Ô⁄)  OSErr;°dONLNd˚ä¢(ärepl°dONLNd˚¢®)y.°dONLNd˚Ô)*A∫†°dONLNd˚”€) n °dONLNd˚‹)    ew publisher r‡°dONLNd%˚5)@eply r¶ °dONLNd+˚5G)ecorÄ°dONLNd/˚HN)d6@°dONLNd0˚NS). †°dONLNd2˚SY)Y… °dONLNd3˚X),ou specify a location to use as the default .°dONLNd_Ã8(Ãedition container in the °dONLNdx8n)l    container°dONLNdÅnw)6 fi°dONLNdÑw¨)    eld of this rR`°dONLNdë¨æ)5ecor$¿°dONLNdïæ…)d. ˜ °dONLNdò»œ)
  6153. Y  °dONLNdôœ)ou also specify °dONLNd©Ã!(Ãinformation in the °dONLNdº!K)UusePart°dONLNd√KP)*, °dONLNd≈Pz)previewï°dONLNdÃyë)), and ï°dONLNd“ëfl)previewFormatï°dONLNdflflË)N fiï°dONLNd‚Ë)    
  6154. elds. The °dONLNdÏÃ+8((ÃNewPublisherDialog°dONLNd˛8+d)l  function rR`°dONLNd    d+˚),"eturns information concerning the °dONLNd++Ã7fi(4Ãuser=`°dONLNd/+fl7$)’s choice in the =`°dONLNd@+$7T)Ecanceled=`°dONLNdH+T7Y)0, =`°dONLNdJ+Y7è)    replacing=`°dONLNdS+è7ß)6, and =`°dONLNdY+ß7›)    container=`°dONLNdb+›7Ê)6 fi=`°dONLNde+Ê7)    elds of .°dONLNdm7ÃC‚(@Ãthis r˛ °dONLNds7‚CÙ)ecorrÄ°dONLNdw7ıC˝)d..°dONLNdzMäY (VäTYPE NewPublisherReply = °dONLNdï[úg¿+RECORD°dONLNdûiÆu‰+    canceled:°dONLNd¨iu8)ZBoolean;°dONLNdπibu˛)Z{user canceled dialog box}°dONLNd◊wÆÉÍ(ÄÆ
  6155. replacing:°dONLNdÊwÉ8)ZBoolean;°dONLNdÛwbÉÏ)Z{user chose existing } °dONLNdÖbë˛*{ filename for an edition}°dONLNd4ìÆüfi(úÆusePart:°dONLNdAìü8)ZBoolean;°dONLNdNìbü)Z{always false in version 7.0}°dONLNdn°Æ≠fi(™Æpreview:°dONLNd{°≠2)ZHandle;°dONLNdá°b≠
  6156. )Z{handle to 'prvw', 'PICT', }°dONLNd∞Øbª˛*{ 'TEXT', or 'snd ' data} °dONLNdÕΩÆ…(ΔÆpreviewFormat:°dONLNd‡Ω…J)Z FormatType;°dONLNdΩb…»)Z{type of preview}°dONLNdÀÆ◊Í(‘Æ
  6157. container:°dONLNdÀ◊Ü)ZEditionContainerSpec;°dONLNd5Ÿb¬+Z{edition chosen}°dONLNdGÁúÛ¥(úEND;
  6158. H4H    .°dONLNdLä ÷(äField descriptions
  6159. ˇ·ˇ‚7^
  6160. .°dONLNd_ä¥*cancele°dONLNdf¥∫)*d°dONLNdhÊ˙)2The °dONLNdl˙f)NewPublisherDialog°dONLNd~fí)l  function rR`°dONLNdâí÷),eturns in this fiR`°dONLNdö÷ )D eld a value .°dONLNd¶Ê%("Ê=that indicates whether the user canceled the dialog box. The .°dONLNd„%Ê1*
  6161. function rR`°dONLNdÌ%1-)*eturns R`°dONLNdÙ%-1E)TRUER`°dONLNd¯%E1d) in the R`°dONLNd%d1î)canceledR`°dONLNd%î1ù)0 fiR`°dONLNd %ù1)    eld if the user canceled °dONLNd$1Ê=j(:Êthe dialog box. The function rR`°dONLNdB1j=á)Ñeturns R`°dONLNdI1á=•)FALSER`°dONLNdN1•=Œ)
  6162.  in this fiR`°dONLNdY1Œ=))eld if the user °dONLNdi=ÊIu(FÊ clicked the Publish button and rR`°dONLNdâ=uIØ)èeturns in the R`°dONLNdó=ØIÂ):    containerR`°dONLNd†=ÂIÓ)6 fiR`°dONLNd£=ÓI)    eld the .°dONLNd´IÊUí(RÊ'edition container for the new publisher© °dONLNd“IíUî)¨..°dONLNd’Xäd∫(aäreplacin°dONLNd›X∫d¿)0g°dONLNdflXÊd˙),The °dONLNd„X˙df)NewPublisherDialog°dONLNdıXfdí)l  function rR`°dONLNdXídØ),eturns R`°dONLNdXØd«)TRUER`°dONLNd X«dÊ) in the ˇ˛„$°dONLNddÊp(mÊ    replacingˇˇ° °dONLNddp!)6 fÒå°dONLNdd!pµ)$ield if the user chose an existing f)`°dONLNdBd∂p‰)ï
  6163. ilename frúðdONLNdLd‰p). om the list .°dONLNdXpÊ|j(yÊof available editions and confi'`°dONLNdwpk|õ)Ö rmed this r—Ä°dONLNdÇpõ|)0eplacement. If the value of .°dONLNdû|Êà¯(ÖÊthe °dONLNd¢|¯à.)    replacing°dONLNd´|.à7)6 fi°dONLNdÆ|7àR)    eld is °dONLNdµ|Ràj)TRUE°dONLNdπ|jà≤), do not call the °dONLNdÀàÊîÇ(ëÊCreateEditionContainerFile°dONLNdÂàÇî)ú  function. If the value of this °dONLNdîʆÌ(ùÊfi°dONLNdî̆#) eld and the °dONLNdî#†S)6canceled°dONLNdîS†\)0 fi°dONLNdî\†w)    eld is °dONLNd%îw†ï)FALSE°dONLNd*î), you can call °dONLNd9†Ê¨Ç(©ÊCreateEditionContainerFile°dONLNdS†Ç¨ó)ú to crR`°dONLNdY†ó¨Ï)eate a new edition .°dONLNdl¨Ê∏(µÊ    container2 °dONLNdu¨∏)).ˇÇ@ˇ ˇˇˇˇ@
  6164. ˇ·ˇ‚7^
  6165. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  6166. (‡*2-94    )BEdition Manager Reference4^*¿¯,
  6167. Courier
  6168. .°dONLNd\lhê(elusePar°dONLNd\êhñ)$t°dONLNd\»h–)8AÛ`°dONLNd    \œhA) value that must be set to Û`°dONLNd$\AhG)rFÛ`°dONLNd%\Gh_)ALSEÛ`°dONLNd)\_hx) befor≈¿°dONLNd/\xh≥)e calling the °dONLNd=h»t4(q»NewPublisherDialog°dONLNdOh4t])l
  6169.  function.°dONLNdZwlÉê(Älprevie°dONLNd`wêÉñ)$w°dONLNdbw»É–)8AÛ`°dONLNdcwœÉÿ) hÛ`°dONLNdewÿɡ)        andle to Û`°dONLNdnwˇÉ#)''prvw'Û`°dONLNdtw#É()$, Û`°dONLNdvw(ÉL)'PICT'Û`°dONLNd|wLÉQ)$, Û`°dONLNd~wQÉu)'TEXT'Û`°dONLNdÑwuÉÖ)$, or Û`°dONLNdâwÖÉ©)'snd 'Û`°dONLNdèw©ÉΔ)$ data. Û`°dONLNdñwΔÉ⁄)The °dONLNdöÉ»è4(å»NewPublisherDialog°dONLNd¨É4è⁄)l& function displays this data in the prR`°dONLNd“É⁄è¯)¶eview .°dONLNdÿè»õ–(ò»arE°dONLNd⁄è—õ*)    ea of the dialog box..°dONLNdûl™¥(ßl previewForma°dONLNd¸û¥™∫)Ht.°dONLNd˛û»™œ)A∫†°dONLNdˇûœ™) value that iÿÄ°dONLNd û™#)4ndicate*@°dONLNdû$™()!sg@°dONLNdû(™∞) which type of data the handle L@°dONLNd3û±™Ã)âin the .°dONLNd:™»∂Ú(≥»preview°dONLNdA™Ú∂¯)* fPÄ°dONLNdC™¯∂)ield PÄ°dONLNdH™∂)r"‡°dONLNdI™∂#)eferı@°dONLNdM™"∂<)ences.°dONLNdTπl≈ú(¬lcontaine°dONLNd\πú≈¢)0r.°dONLNd^π»≈)),An edition container r Ä°dONLNdtπ*≈<)becorć°dONLNdxπ<≈t)d that specifi`‡°dONLNdÜπu≈É)9es t)‡°dONLNdäπÑ≈π) he volume r2¿°dONLNdïππ≈…)5eferfi‡°dONLNdôπ…≈fl)ence °dONLNdû≈»—Í(Œ»number≥°dONLNd§≈Í—˚)", dir| °dONLNd©≈¸—C)ectory ID, and fi@°dONLNd∫≈D—_)Hlenam\†°dONLNdø≈_—í)e to use as tk@°dONLNdÃ≈í—ü)3he Ü@°dONLNdœ≈ü—¿)default q`°dONLNd◊≈¡—‚)"edition 0¿°dONLNdfl≈„—Ó)"to ˇˇË†.°dONLNd‚—»›8(⁄»publish the data to. The ˇˇπ‡  °dONLNd˚—9›•)qNewPublisherDialogˇˇË†  °dONLNd—•›–)l  function rÆ¿°dONLNd—–›˜)+
  6170. eturns in .°dONLNd"›»È‡(Ê»this fiE‡°dONLNd)›·ÈR)eld the edition container t‚@°dONLNdD›RÈ∞)qhat the user selected. °dONLNd\* c(    * DESCRIPTION
  6171. .°dONLNdhlÄ+BThe °dONLNdlÄÏ)NewPublisherDialog°dONLNd~Ïœ)l3 function displays the new publisher dialog box on °dONLNd±l)~(&lthe °dONLNdµ~)ê)user=`°dONLNdπë)¶)’s scr¿°dONLNdø¶)¿)een. T¿°dONLNd≈¿)Œ)he ¿°dONLNd»Œ):)NewPublisherDialog¿°dONLNd⁄:) )l! function (which is based on the °dONLNd˚*l6∫(3lCustomPutFile°dONLNd*∫6Δ)N prR`°dONLNd *Δ6„) ocedur$¿°dONLNd*„64)e described in the $¿°dONLNd$*46_)Q    chapter “$¿°dONLNd-*_6Ñ)+Standar˜ °dONLNd4*É6¡)$d File Packag˜ °dONLNdA*¡6ÿ)>e” in .°dONLNdG7lCÜ(@lInside qÄ°dONLNdN7áC…)Macintosh: FilesF‡°dONLNd^7 CÕ)C)ö¿°dONLNd_7ÕC;) switches to the volume r$‡°dONLNdx7<CL)oefer—°dONLNd|7LC®)ence number and dirÃÄ°dONLNdè7®C…)\ectory IÄ°dONLNdó7 C‘)"D °dONLNdôDlPà(MlspecifiÓ °dONLNd†DàP˛)ed by the edition containerπ °dONLNdªD˛P)v, sˆ °dONLNdæDP)    ets th“‡°dONLNdƒDP+)e eÊ °dONLNd«D+P4) diÍ@°dONLNd…D4Px)    table text item th°dONLNd⁄DyPó)Eo the fi«†°dONLNd‚DóP≤)lenam°dONLNdÁD≥P÷)e specifi÷¿°dONLNdD÷P)#ed by °dONLNdˆQl]o(Zlt¬`°dONLNd˜Qo]√)he edition containe†°dONLNd
  6172. Qƒ]«)UrN‡°dONLNd Q«]), and displays a prz‡°dONLNdQ])Q1eview of the publisher data in the new publisher .°dONLNdO^lj¥(gldialog box. The °dONLNd_^¥j )HNewPublisherDialog°dONLNdq^ jÒ)l1 function handles all user interaction until the .°dONLNd¢klw(tl)user clicks the Cancel or Publish button..°dONLNdÃ}lâs*Yï°dONLNdÕ}râ )!ou should deallocate the handle rg`°dONLNdÓ} â)ôefer9¿°dONLNdÚ}âW)enced by the 9¿°dONLNdˇ}WâÅ):preview9¿°dONLNd}Åâä)* fi9¿°dONLNd    }äâÆ)        eld to fr  °dONLNd}ÆâÎ)$ ee up memory`°dONLNd}ÈâÏ);..°dONLNd £*¨D(™*RESULëÄ°dONLNd%£D¨h)T CODES°dONLNd∏Ï*ıQ(Û*SEE ALSO
  6173. °dONLNd¡˙l_+B9For an illustration of the new publisher dialog box, see †°dONLNd˙˙`x)ÙFigurÎ`°dONLNdˇ˙wã)e 2-1¸@°dONLNd˙ã∏)
  6174. 1 on page °dONLNd˙π¡).2-q‡°dONLNd˙¡À)29q‡°dONLNd˙ÀÓ)
  6175.     . For an .°dONLNdlÕ(lexample of the use of °dONLNd1Õ9)aNewPublisherDialog°dONLNdC9N)l, see °dONLNdIN~) Listing 2-4°dONLNdT~π)0 beginning on °dONLNdbπ—);page °dONLNdg—‰)2-33°dONLNdk‰È). .°dONLNdml &(l,For a description of the edition container rÛ@°dONLNdô& 8)∫ecorg†°dONLNdù9 T)d, see ”†°dONLNd§T k)page ÆÄ°dONLNd©l ~)2-71`°dONLNd≠ Ñ). 
  6176. P*Y¯4Q*X¯ R*R˛
  6177. ˇ·ˇ‚7^ °dONLNd±C*Q1(M*S‘Ä°dONLNd≤C1Q§)ectionOptionsDialogˇˇˇˇˇˇ(MÚ2
  6178. .°dONLNd«blnë(klUse the °dONLNdœbën    )%SectionOptionsDialog°dONLNd„b    nÿ)x/ function to display the publisher options and .°dONLNdol{+(xl+subscriber options dialog boxes on the user=†°dONLNd=o,{B)¿’s scr4 °dONLNdCoB{S)een..°dONLNdHàlî&(ëlFUNCTION SectionOptionsDialog  °dONLNdoñÍ¢§+~(VAR reply: SectionOptionsReply°dONLNdéñ§¢∞)∫):°dONLNdêñ∞¢⁄)  OSErr;°dONLNd,±lΩä(∫lnoErr.°dONLNd2±ıΩ˙)â0°dONLNd4±Ω*)No errE†°dONLNd:±+Ω4)or.°dONLNd>ºl»“(≈leditionMgrInitErr.°dONLNdPºÊ»˙)z–450°dONLNdUº»=)(    Manager nc`°dONLNd^º>»u)0ot initialized@°dONLNdlºv»Î)8 or could not load package.°dONLNdà«l”∫(–lbadSubPartErr.°dONLNdñ«Ê”˙)z–454°dONLNdõ«”Ç)(Bad edition container specˇ;ä@ˇ ˇˇˇˇ@
  6179. ˇ·ˇ‚7^
  6180. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äEdition Manager Reference
  6181. , (‡2-95
  6182. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  6183. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  6184. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  6185. 4€4—?òÄ
  6186. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  6187. ˛ˇˇˇ
  6188. ˛ˇˇˇ
  6189. ˛ˇˇˇ
  6190. ˛ˇˇˇ˜˝˛ˇ˛
  6191. ˛ˇ˛ˇˇ
  6192. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  6193. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  6194. ˛ˇ˛ˇˇ
  6195. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  6196. ˛ˇˇˇˇ
  6197. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  6198. ˛ˇˇˇˇ
  6199. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  6200. ˛ˇˇˇˇ
  6201. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿,
  6202. Courier.°dONLNd\äh®(eäreply°dONLNd\Ãh‡)BThe °dONLNd
  6203. \‡h˛)reply°dONLNd\˛h©)' parameter contains a section options rR`°dONLNd6\©hƒ)´eply r$¿°dONLNd<\ƒh÷)ecor˜ °dONLNd@\’hfi)d.˜ °dONLNdB\fih‡)     …Ä°dONLNdC\‡hÁ)YfiÄ°dONLNdD\Êh) ou specify .°dONLNdOhÃt:(qÃa handle to the publishero`°dONLNdhh;t~)o’s or subscriber1°dONLNdxht≠)D ’s section r‚¿°dONLNdÑh≠tø).ecorW °dONLNdàh¿t‰)    d in the .°dONLNdëtÃĸ(}ÃsectionH°dONLNdôt¸Ä)0 fPÄ°dONLNdõtÄ;)ield of this r"‡°dONLNd©t;ÄM)9ecorı@°dONLNd≠tLÄk)d. The ı@°dONLNd¥tkÄ„)SectionOptionsDialogı@°dONLNd»t„Ä )x
  6204.  function °dONLNd“ÄÃå–(âÃrR`°dONLNd”Ä–åy)&eturns information concerning the user¿°dONLNd˘Äzå¬)™’s actions in the ¿°dONLNd ĬåÚ)Hcanceled¿°dONLNdÄÚå˜)0, °dONLNdåÃòˆ(ïÃchanged°dONLNdåˆò)*, and °dONLNd"åò2)action°dONLNd(å2ò8)$ fPÄ°dONLNd*å8òR)ields.°dONLNd1¢äÆ,(´äTYPE SectionOptionsReply = °dONLNdN∞úº¿+RECORD°dONLNdWæÆ ‰+    canceled:°dONLNdd戠&)HBoolean;°dONLNdræb ˛)l{user canceled dialog box}°dONLNdèÃÆÿfi(’Æchanged:°dONLNdõÈÿ&)HBoolean;°dONLNd©Ãbÿ
  6205. )l{changed the section record}°dONLNd»⁄Æʉ(„Æ    sectionH:°dONLNd’⁄ˆÊJ)HSectionHandle;°dONLNdÈ⁄bÊ˛)l{handle to the specified }°dONLNdËbÙ»*{ section record}°dONLNd$ˆÆÿ(ˇÆaction:°dONLNd/ˆˆ&)HResType;°dONLNd=ˆb∂)l{action codes}°dONLNdMú¥(úEND;
  6206. H,4H,    .°dONLNdRä(÷(%äField descriptions
  6207. ˇ·ˇ‚7^
  6208. .°dONLNde*ä6∫*canceledˇˇË†°dONLNdn*Ê6˘)\The ˇˇπ‡h†°dONLNdr*˙6r)SectionOptionsDialogˇˇË†h†°dONLNdÜ*r6ù)x  function r @°dONLNdë*û6·),eturns in this fiΔ °dONLNd¢*·6)C eld a value .°dONLNdÆ6ÊB(?Ê=that indicates whether the user canceled the dialog box. The .°dONLNdÎBÊN*
  6209. function rR`°dONLNdıBN-)*eturns R`°dONLNd¸B-NE)TRUER`°dONLNdBENd) in the R`°dONLNdBdNî)canceledR`°dONLNdBîNù)0 fiR`°dONLNdBùN)    eld if the user canceled °dONLNd,NÊZû(WÊ)the dialog box. Otherwise, the function rR`°dONLNdUNûZª)∏eturns R`°dONLNd\NªZŸ)FALSER`°dONLNdaNŸZ)
  6210.  in this fiR`°dONLNdlNZ))eld. °dONLNds]äi¥(fächangedˇˇË†°dONLNd{]Êi˘)\The ˇˇπ‡h†°dONLNd]˙ir)SectionOptionsDialogˇˇË†h†°dONLNdì]riù)x  function r @°dONLNdû]ûi∫),eturns ˇˇπ‡Ù‡°dONLNd•]∫i“)TRUEˇˇË†Ù‡°dONLNd©]“i˙)
  6211.  in this fiÆ¿°dONLNd¥]˚i))eld if .°dONLNdªiÊuÈ(rÊt¬`°dONLNdºiÈui)he user changed the section r °dONLNdŸiiu{)ÄecordÄ°dONLNd›i|u) d. For example, the update mode .°dONLNd˝uÊÅ?(~Êmay have changed.°dONLNdu?Å≥)Y Otherwise, the function rR`°dONLNd(u≥Å–)teturns R`°dONLNd/u–ÅÓ)FALSER`°dONLNd4uÓÅ)     in this .°dONLNd=ÅÊçÏ(äÊfiå¿°dONLNd?ÅÏç˛)eld. .°dONLNdEêäú¥(ôäsection°dONLNdLê¥ú∫)*H.°dONLNdNêÊúÌ)2A∫†°dONLNdOêÌúı) h °dONLNdQêˆúR)    andle to the section ṙ°dONLNdgêQúc)[ecorb@°dONLNdkêdú˘)$d for the section the user selected..°dONLNdêüä´Æ(®äaction°dONLNdóüÊ´˙)\The °dONLNdõü˙´r)SectionOptionsDialog°dONLNdØür´û)x  function rR`°dONLNd∫üû´‚),eturns in this fiR`°dONLNdÀü‚´)Deld the °dONLNd”´Ê∑.(¥Êcode for one of fi°dONLNd´.∑®)Hve user actions: action code °dONLNd´®∑Ã)z'read'°dONLNd´Ã∑Ò)$
  6212.  for user °dONLNd∑Ê√–(¿Ê5selection of the Get Edition Now button, action code °dONLNdG∑–√Ù)Í'writ'°dONLNdM∑Ù√)$ for °dONLNdR√ÊœÍ(ÃÊ;user selection of the Send Edition Now button, action code °dONLNdç√Íœ(ÃÍ'goto'°dONLNdì√œ)$ °dONLNdîœÊ€Î(ÿÊ<for user selection of the Open Publisher button, action code°dONLNd–œÎ€Ò(ÿΠ°dONLNd—€ÊÁ
  6213. (‰Ê'cncl'°dONLNd◊€
  6214. ÁÒ)$6 for user selection of the Cancel Publisher or Cancel °dONLNdÁÊÛv(Ê"Subscriber button, or action code °dONLNd/ÁvÛÇ)ê' °dONLNd1ÁÇÛà)  °dONLNd2ÁàÛé) °dONLNd3ÁéÛî) °dONLNd4ÁîÛ†)' °dONLNd6Á†Û˚) ($20202020) for user .°dONLNdKÛÊˇ\(¸Êselection of the OK button.°dONLNdgH!Å(H DESCRIPTION
  6215. ˇˇÍˆ.°dONLNds&ä2ù+BThe ˇˇ¿‚jˆ°dONLNdw&û2)SectionOptionsDialogˇˇÍˆjˆ°dONLNdã&2è)x function displays the apprÈ.°dONLNd¶&è2)yopriate options dialog box for .°dONLNd≈3ä?∂(<ä
  6216. the specifiKÄ°dONLNd–3∑?È)- ed section rfi`°dONLNd‹3È?˚)2ecorR¿°dONLNd‡3¸?)=d. The function displays information about the subscriber or °dONLNd@äL¥(Iä    publisherÓ‡°dONLNd&@≥LI))%, such as its latest edition and currˆ°dONLNdK@IL)ñ-ent update mode setting, and allows the user .°dONLNdxMäY(Vä to perform various actions. The °dONLNdòMYê)éSectionOptionsDialog°dONLNd¨MêY)x function handles all user .°dONLNd«ZäfÅ(cä;interaction until the user selects a button. The function ru@°dONLNdZÅf¬)˜eturns the user$Ä°dONLNdZƒf)C’s action in the .°dONLNd"gäsÆ(päaction°dONLNd(gÆs¥)$ fPÄ°dONLNd*g¥sÊ) ield of the PÄ°dONLNd6gÊs)2replyPÄ°dONLNd;gs˘)5 parameter; your application should then perform the .°dONLNdptäÄõ(}äcorr`°dONLNdttúÄÌ)esponding action. °dONLNdáöH£b(°HRESULëÄ°dONLNdåöb£Ü)T CODES
  6217. .°dONLNdì®ä¥®+(noErr.|@°dONLNdô®¥ı)f0|@°dONLNdõ®    ¥%)No errA‡°dONLNd°®&¥/)or.°dONLNd•≥äøΔ(ºä
  6218. memFullErr.|@°dONLNd∞≥·øı)W–108|@°dONLNdµ≥    ø@)( Memory fullˇ&@ˇ ˇˇˇˇ@
  6219. ˇ·ˇ‚7^
  6220. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  6221. (‡*2-96    )BEdition Manager Reference4^*¿¯°dONLNd\*eQ(c*SEE ALSO
  6222. °dONLNd    jlvY+B9For illustrations of the section options dialog box, see Ù¿°dONLNdBjYvq)ÌFigur«Ä°dONLNdGjqvä)e 2-13e°dONLNdMjãvö) thrΩ¿°dONLNdQjöv≥)ough ‡°dONLNdVj¥vÃ)Figur̆°dONLNd[jÀv‰)e 2-16ã °dONLNdajÂvÁ) .°dONLNdbwlÉ•(Älbeginning on °dONLNdow•ÉΩ)9page °dONLNdtwΩÉ–)2-43°dONLNdxw–ÉT). For an example of the use of ,
  6223. Courier°dONLNdówTÉÃ)ÑSectionOptionsDialog°dONLNd´wÃÉ·)x, see .°dONLNd±Ñlêö(çl Listing 2-8 @°dONLNdºÑõê⁄)/ beginning on õÄ°dONLNd Ñ⁄êÒ)?page v`°dONLNdœÑÚê)2-46 @°dONLNd”Ñêó)$. For a description of the section r˜ °dONLNd˜Ñóê©)ìecorkÄ°dONLNd˚Ñ™ê≈)d, see ◊Ä°dONLNdÑ≈ê‹)page ≤`°dONLNdÑ›êÔ)2-72@°dONLNd Ñêı). 
  6224. ¿*…¯4¡*»¯ ¬*¬˛
  6225. ˇ·ˇ‚7^ °dONLNd≥*¡3(Ω*N~@°dONLNd≥4¡›)
  6226. EewSubscriberExpDialog, NewPublisherExpDialog, SectionOptionsExpDialogˇˇˇˇˇˇ(ΩÚ2
  6227. .°dONLNdW“lfiÄ(€lThe °dONLNd[“Äfi)NewSubscriberExpDialog°dONLNdq“fi    )Ñ, °dONLNds“    fiá)NewPublisherExpDialog°dONLNdà“áfiü)~, and °dONLNdéfllΈ(ËlSectionOptionsExpDialog°dONLNd•flˆÎ,)ä functions arR`°dONLNd≤fl,Θ)6.e the same as the simple dialog functions but .°dONLNd‡Ïl¯â(ılhave fiN°dONLNdÁÏä¯Ò)Pve additional parameters. These additional parameters allow you to add items to °dONLNd7˘l„(lVthe bottom of the dialog boxes, apply alternate mapping of events to item hits, apply °dONLNdçl…*Qalternate meanings to the item hits, and choose the location of the dialog boxes..°dONLNdfll+,* FUNCTION NewSubscriberExpDialog °dONLNd-Δ9‘+Z-(VAR reply: NewSubscriberReply; where: Point;°dONLNd8;ΔGÃ* °dONLNd9;ÃGz)expansionDITLresID: Integer; °dONLNd\IΔUÃ(RΔ °dONLNd]IÃUt)dlgHook: ExpDlgHookProcPtr; °dONLNdWΔcÃ(`Δ °dONLNdÄWÃcû)#filterProc: ExpModalFilterProcPtr; °dONLNd©eΔqÃ(nΔ °dONLNd™eÃqÄ)yourDataPtr: UNIV Ptr): OSErr;°dONLNd…lã (àlFUNCTION NewPublisherExpDialog°dONLNdÁ ã&)¥ °dONLNdÓçΔôÃ(ñΔ(°dONLNdÔçÃô§)$VAR reply: NewPublisherReply; where:°dONLNdç§ôŒ)ÿ Point;°dONLNd õΔßÃ(§Δ °dONLNd!õÃß“)e°dONLNd"õ“ßt)xpansionDITLresID: Integer;°dONLNd=õtßz)¢ °dONLNdD©ΔµÃ(≤Δ °dONLNdE©Ãµ“)d°dONLNdF©“µn)lgHook: ExpDlgHookProcPtr;°dONLNd`©nµt)ú °dONLNdg∑Δ√Ã(¿Δ °dONLNdh∑Ã√“)f°dONLNdi∑“√)    ilterProc°dONLNdr∑√)6: E°dONLNdu∑√ò)xpModalFilterProcPtr;°dONLNdä∑ò√û)~ °dONLNdë≈Δ—Ã(ŒΔ °dONLNdí≈ד)y°dONLNdì≈“—J)ourDataPtr: UNIV Ptr°dONLNdß≈J—V)x):°dONLNd©≈V—Ä)  OSErr;°dONLNd±fllÎ,(Ël FUNCTION SectionOptionsExpDialog°dONLNd—fl,Î2)¿ °dONLNdÿÌΔ˘Ã(ˆΔ(°dONLNdŸÌÃ˘∞)&VAR reply: SectionOptionsReply; where:°dONLNdˇÌ∞˘⁄)‰ Point;°dONLNd ˚ΔÃ(Δ °dONLNd˚Ó)e°dONLNd˚“t)xpansionDITLresID: Integer;°dONLNd)˚tz)¢ °dONLNd0    ΔÃ(Δ °dONLNd1    Ã“)d°dONLNd2    “n)lgHook: ExpDlgHookProcPtr;°dONLNdL    nt)ú °dONLNdSΔ#Ã( Δ °dONLNdTÃ#“)f°dONLNdU“#ò)!ilterProc: ExpModalFilterProcPtr;°dONLNdvò#û)Δ °dONLNd}%Δ1Ã(.Δ °dONLNd~%Ã1“)y°dONLNd%“1J)ourDataPtr: UNIV Ptr°dONLNdì%J1V)x):°dONLNdï%V1Ä)  OSErr;°dONLNdù=lIÑ(Flrepl°dONLNd°=ÑIä)y.°dONLNd£=ÆIµ)*A∫†°dONLNd§=µIΩ) n °dONLNd¶=æI)    ew subscriber râÄ°dONLNdµ=I)Ceply±°dONLNdπ=I^), new publisher rî@°dONLNd =^Iq)Keplyª¿°dONLNdŒ=pIz), o1@°dONLNd—={IÖ) r s‡‡°dONLNd‘=ÖI≈)
  6228. ection options °dONLNd„IÆU±(RÆrE°dONLNd‰I≤U«)eply @°dONLNdÈI»UÀ)rÕ@°dONLNdÍIÀU›)ecorA†°dONLNdÓIfiUÈ)d. /¿°dONLNdÒIÈUÔ) Y@°dONLNdÚIÓUv)ou specify information in the fiêÄ°dONLNdIwU≠)âelds of this r‚¿°dONLNd I≠Uø)6ecorW °dONLNd$I¿U»)d °dONLNd&UÆa¿(^Æjust ›@°dONLNd+U¿aÀ)as ö@°dONLNd.UÃa+) you do in the the corr… °dONLNdDU+ab)_ esponding fi
  6229.  °dONLNdPUcaÜ)8    elds of r£@°dONLNdYUÜaò)#ecor†°dONLNd]UôaÀ) ds used by .°dONLNdhaÆm (jÆNewSubscriberDialog°dONLNd{a m%)r, °dONLNd}a%më)NewPublisherDialog°dONLNdèaëm©)l, and °dONLNdïmÆy&(vÆSectionOptionsDialog°dONLNd©m&y))x.°dONLNd´}lâä(Ülwhere.°dONLNd±}Æâµ)BA∫†°dONLNd≤}µâ) point that specifir†°dONLNd≈}âe)Mes a location on the scrœÄ°dONLNd›}eâç)ceen wherk °dONLNdÂ}éâÙ))e the function displays °dONLNd˝âÆïÒ(íÆthe dialog box. F†°dONLNdâÚï¯)DY °dONLNdâ¯ïÁ)6ou can automatically center the dialog box by passing .°dONLNdDïÆ°≤(ûÆ(°dONLNdFï≤°Ó)–1, –1) in the °dONLNdUïÓ° )<where°dONLNdZï °>)
  6230.  parameter¬†°dONLNddï=°B)1. ˇ?Ç@ˇ ˇˇˇˇ@
  6231. ˇ·ˇ‚7^
  6232. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äEdition Manager Reference
  6233. , (‡2-97
  6234. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  6235. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  6236. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  6237. 4€4—?òÄ
  6238. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  6239. ˛ˇˇˇ
  6240. ˛ˇˇˇ
  6241. ˛ˇˇˇ
  6242. ˛ˇˇˇ˜˝˛ˇ˛
  6243. ˛ˇ˛ˇˇ
  6244. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  6245. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  6246. ˛ˇ˛ˇˇ
  6247. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  6248. ˛ˇˇˇˇ
  6249. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  6250. ˛ˇˇˇˇ
  6251. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  6252. ˛ˇˇˇˇ
  6253. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿,
  6254. Courier.°dONLNd\ähˆ(eäexpansionDITLresID°dONLNdhÃt‘+B AÛ`°dONLNdh”t)  value of 0Û`°dONLNdht*).
  6255.  or a valiÛ`°dONLNd)h*t6))d iÛ`°dONLNd,h6t_)
  6256. tem list (Û`°dONLNd6h_tÉ))'DITL'Û`°dONLNd<hÉtç)$) r≈¿°dONLNd?hçt§)
  6257. esourò °dONLNdDh§t)ce ID. This integer is .°dONLNd[tÃÄ‹(}Ãthe ›`°dONLNd_t‹ÄÉ)'ID of a dialog item list whose items ar;°dONLNdÜtÑÄ)®e appended to the end of the °dONLNd£ÄÃåÌ(âÃstandar±Ä°dONLNd™ÄÌåª)!1d dialog item list. The dialog items keep their r+°dONLNd€Äºå    )œelative positions, °dONLNdÓåÃò¸(ïà but they ardž°dONLNd˘å¸òA)0e moved as a gr≤Ä°dONLNdåAò›)E#oup to the bottom of the dialog boxœÄ°dONLNd+å›òfl)ú..°dONLNd-úä®Æ(•ädlgHoo°dONLNd3úÆ®¥)$k°dONLNd5úî‘)AÛ`°dONLNd6ú”®´)0 pointer to an expandable dialog hook function oÛ`°dONLNdfú´®±)ÿr Û`°dONLNdhú±®√)NILÛ`°dONLNdkú√®»). ï°dONLNdmú»®)An expandable .°dONLNd{®Ã¥(±ÃIdialog hook function is similar to a dialog hook function except that an °dONLNdƒ¥Ã¿Ì* ?expandable dialog hook function accepts an additional parameter∞Ä°dONLNd¥Ì¿Ú(ΩÌ. .°dONLNd¿ÃÓ(…ÃT°dONLNd¿“Ç)he °dONLNd    ¿‡Ãd)NewSubscriberExpDialog°dONLNd¿dÃi)Ñ, °dONLNd!¿iÃÁ)NewPublisherExpDialog°dONLNd6¿ÁÃˇ)~, and °dONLNd<ÃÃÿV(’ÃSectionOptionsExpDialog°dONLNdSÃVÿÜ)ä  functions c°dONLNd_ÃÜÿê)0al°dONLNdaÃêÿ)
  6258. l your expandable dialog °dONLNdzÿÉ(·Ãhook function a°dONLNdâÿ‰T)Efter each call t°dONLNdôÿT‰f)Co th°dONLNdùÿf‰m)e °dONLNdüÿm‰Ø) ModalDialog°dONLNd™ÿ؉ª)B prR`°dONLNd≠ÿª‰ÿ) ocedur$¿°dONLNd≥ÿÿ‰›)e$¿°dONLNd¥ÿ›‰Ë). T$¿°dONLNd∑ÿˉˆ) he .°dONLNd∫‰Ã(Ìà expandable  °dONLNd≈‰1)6
  6259. dialog hooH†°dONLNdœ‰1Ñ)/k function should t7Ä°dONLNd‚‰Öè)TakΔ†°dONLNd‰‰èô)
  6260. e tR†°dONLNdÁ‰öº) he appr6‡°dONLNdÓ‰º)"opriate action, such .°dONLNdøfl(˘Ãas fi°dONLNdfl¸)lling in a chec°dONLNd¸))?kb°dONLNd)¸L) ox. The °dONLNd!L¸à)#
  6261. itemOffset°dONLNd+ณ)< parameter to th°dONLNd;“¸)Je expandable .°dONLNdH¸Ã-(Ãdialog hook function i3@°dONLNd^¸.§)bs the number of items in th⁄@°dONLNdy¸§Æ)ve i @°dONLNd|¸ØÈ) tem list befor°dONLNdä¸È):e your °dONLNdëÃ7(Ãexpansion dialog items. z‡°dONLNd©7=)kY;`°dONLNd™=√)ou need to subtract the item of °dONLNd…√‹)Üfset fr‡°dONLNd–›) om the item °dONLNd‹Ã 
  6262. (Ãhit to get the rqÄ°dONLNdÏ
  6263.  ®)>#elative item number in the expansioÓ†°dONLNd® ≥)ûn i(`°dONLNd¥ ‘) tem listÿÄ°dONLNd‘ Ï) . The °dONLNd  Ã,Ö()Ã(expandable dialog hook function should r∫ °dONLNdH Ö,„)πeturn as its function r    @°dONLNd_ ‰, )_
  6264. esult the °dONLNdi,Ã8,(5Ãabsolute item number±°dONLNd},,81)`. .°dONLNdÄ<äH¿(Eä    filterPro°dONLNdâ<¿HΔ)6c°dONLNdãHÃT‘+ AÛ`°dONLNdåH”Tè)( pointer to an expandable modal-dialog fiÛ`°dONLNdµHèTÕ)ºlter function oÛ`°dONLNdƒHÕT”)>r Û`°dONLNdΔH”TÂ)NILÛ`°dONLNd…HÂTÍ). ï°dONLNdÀHÍT˘)An .°dONLNdŒTÃ`E(]Ãexpandable modal-dialog fi:Ä°dONLNdËTF`˙)z+lter function is similar to a modal-dialog °dONLNd`Ãl“(iÃfiå¿°dONLNd`“l„)lter Û¿°dONLNd`„l7)function or event fiD °dONLNd.`8lÊ)U(lter function except that an expandable °dONLNdVlÃx(uÃmodal-dialog fiü`°dONLNdelxŒ)D,lter function accepts two extra parameters. D`°dONLNdëlœx’)øTe °dONLNdíl’x‚)he .°dONLNdïxÃÑ“(ÅÃM°dONLNdñx“Ñ)
  6265. odalDialog°dONLNd†xÑ)< prR`°dONLNd£xÑ7) ocedur$¿°dONLNd©x7Ñ<)e$¿°dONLNd™x<щ)$ calls the expandable modal-dialog fı@°dONLNdŒx„Ñ˙)ßilter .°dONLNd‘ÑÃê(çÃfunction you pra °dONLNd„Ñêw)Eovide in this parameterë °dONLNd˙Ñwê|)f. 2¿°dONLNd¸Ñ|êˇ)An expandable modal-dialog °dONLNdêÃú“(ôÃfiå¿°dONLNdê“úÊ)lter fG†°dONLNdêÁúc)unction allows you to map rª°dONLNd:êcú˚)|!eal events (such as a mouse-down °dONLNd[úî(•ÃLevent) to an item hit (such as clicking a Cancel button). For instance, you °dONLNd߮åG* may want to map a keyboar‡°dONLNd¿®H¥ø)|d equivalent to an item hit..°dONLNd›∏äƒÃ(¡ä yourDataPtr.°dONLNdȃÖ◊+B Re˜†°dONLNd΃◊–¬) 6served for your use. It is passed back to your hook anΔÄ°dONLNd!ƒ√–È)Ï    d event fS‡°dONLNd*ƒÍ–˛)'ilter .°dONLNd0–Ë∑(ŸÃ5function. This parameter does not have to be of type °dONLNde–∑‹…)ÎPtr°dONLNdh–…‹)—it can be any °dONLNdw‹ÃËÄ(ÂÃ(32-bit quantity that you want. In Pascal°dONLNdü‹ÄËæ)¥, you can pass °dONLNdÆ‹æË)> yourDataPtr°dONLNdπ‹Ë)B in .°dONLNdΩËÃÙœ(ÒÃrE°dONLNdæË–ÙÔ)egister „`°dONLNdΔËÔÙ/)A6, and declar¿°dONLNd‘Ë0Ù∫)Ae your dialog hook and event fifÄ°dONLNdÛË∫Ù⁄)ä    lter as lr‡°dONLNd¸Ë⁄ÙÓ) ocal °dONLNdÙÃm(˝Ã$functions without the last parameterˆ °dONLNd%ÙlÍ)†. The stack frame is set up prSÄ°dONLNdCÙÎ
  6266. )operly °dONLNdJÃ o(    Ã'for these functions to access their parΔ¿°dONLNdqo æ)£ent local variablesRÄ°dONLNdÑø ¡)P.°dONLNdÜ%H.Å(,H DESCRIPTION
  6267. .°dONLNdí3ä?û+BThe °dONLNdñ3û?)NewPublisherExpDialog°dONLNd´3?!)~, °dONLNd≠3!?•)NewSubscriberExpDialog°dONLNd√3•?Ω)Ñ, and °dONLNd…@äL(IäSectionOptionsExpDialog°dONLNd‡@Lé)ä functions display the apprR`°dONLNd˚@éL    )zopriate dialog box, handle °dONLNd    MäYo(Vä4user interaction, and call any functions you have prR`°dONLNd    JMoYÆ)Âovided in the R`°dONLNd    XMÆYÿ)?dlgHookR`°dONLNd    _MÿYÌ)* and °dONLNd    dZäfΔ(cä
  6268. filterProc°dONLNd    nZΔfˇ)<  parameters.°dONLNd    {läx≠(uäFor the °dONLNd    Él≠x+)#NewPublisherExpDialog°dONLNd    òl+x@)~ and °dONLNd    ùl@xƒ)NewSubscriberExpDialog°dONLNd    ≥lƒx)Ñ functions, all °dONLNd    √yäÖú(Çäthe °dONLNd    «yúÖ )pseudo-items for the StandarR`°dONLNd    „y Öá)Ñd File Package such as R`°dONLNd    ˙yáÖ’)ghookFirstCallR`°dONLNd
  6269. y’ÖÏ)N(–1), °dONLNd
  6270. Üäíÿ(èähookNullEvent°dONLNd
  6271. ÜÿíÙ)N(100), °dONLNd
  6272. !ÜÙíN)hookRebuildList°dONLNd
  6273. 0ÜNí})Z (101), and °dONLNd
  6274. ;Ü}í≈)/ hookLastCall°dONLNd
  6275. GÜ≈í)H(–2) can be used, °dONLNd
  6276. Yìäüπ(úä as well as °dONLNd
  6277. dìπü)/hookRedrawPreview°dONLNd
  6278. uìü9)f(150).ˇ™@ˇ ˇˇˇˇ@
  6279. ˇ·ˇ‚7^
  6280. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  6281. (‡*2-98    )BEdition Manager Reference4^*¿¯
  6282. .°dONLNd\lhè(elFor the ,
  6283. Courier°dONLNd\èh)#SectionOptionsExpDialog°dONLNd\h–)ä) function, the only valid pseudo-items arR`°dONLNdH\–h◊)∑e °dONLNdJilu∫(rlhookFirstCall°dONLNdWi∫u—)N(–1), °dONLNd]i—u)hookNullEvent°dONLNdjiu;)N(100), °dONLNdqi;uÉ) hookLastCall°dONLNd}iÉuö)H(–2), °dONLNdÉvlÇfi(lemHookRedrawPreview°dONLNdñvfiÇ˙)r(150), °dONLNdùv˙Çl)emHookCancelSection°dONLNd∞vlÇà)r(160), °dONLNd∑Élèfi(ålemHookGoToPublisher°dONLNd Éfiè˙)r(161), °dONLNd—É˙èl)emHookGetEditionNow°dONLNd‰Élèà)r(162), °dONLNdÎêlú‰(ôlemHookSendEditionNow°dONLNdˇê‰ú)x(162), °dONLNdêúÑ)emHookManualUpdateMode°dONLNdêÑú≥)Ñ (163), and °dONLNd'ùl©‰(¶lemHookAutoUpdateMode°dONLNd;ù‰©˛)x(164)..°dONLNdBØlªÄ(∏lIf yo∑°dONLNdGØĪí)u pr@°dONLNdKØ쪘)ovide an expandable dw°dONLNd`ؘª‘)d3ialog hook function, it must contain the following °dONLNdìºl»ô(≈l    parameter°dONLNdúºö»†).s:.°dONLNdü’l·⁄(fil=FUNCTION MyExpDlgHook (itemOffset: Integer; itemHit: Integer;°dONLNd„¸ÔÄ+êtheDialog: DialogPtr; °dONLNdÒÍ˝(˙Í °dONLNdÒ¸˝\)yourDataPtr: Ptr°dONLNdÒ\˝h)`):°dONLNdÒh˝û)      Integer;.°dONLNd!    lÄ(lIf yo∑°dONLNd&    Äí)u pr@°dONLNd*    ì2)"ovide an expandable modal-dialog fí@°dONLNdL    2e)üilter functioÄ°dONLNdY    fn)4n,o‡°dONLNd[    nÚ) it must contain the following °dONLNdzl"†(l parameters..°dONLNdÜ/l;í*1FUNCTION MyExpModalFilter (theDialog: DialogPtr; °dONLNd¡=I∞+¢VAR theEvent: EventRecord; °dONLNdÊKWå*itemOffset: Integer; °dONLNdYeí*VAR itemHit: Integer; °dONLNd%gsn*yourDataPtr: Ptr°dONLNd5gnsz)`):°dONLNd7gzs™)  Boolean°dONLNd?g™s∞)0;.°dONLNdAé*óQ(ï*SEE ALSO
  6284. °dONLNdJúl®+B$See the chapter “Dialog Manager” in Q °dONLNdnú®è)•Inside Macintosh: Macintosh T£†°dONLNdãú鮓)}oolbox Essentialsh†°dONLNdúú”®‰)E for °dONLNd°©lµz(≤l>additional information on item lists. See the chapter “Standar¯†°dONLNdfl©zµÃ(≤zd File Package” in °dONLNdÚ∂l¬Ü(ølInside qÄ°dONLNd˘∂á¬Ã)Macintosh: Files Δ‡°dONLNd
  6285. ∂ìØ)E1for information on dialog hook and modal-dialog fiŒ@°dONLNd<∂جÏ)„lter functions.
  6286. Ê*Ó¯4Á*Ó¯ È*È˛
  6287. ˇ·ˇ‚7^ °dONLNdMŸ*ÁÊ(„*#Locating a Publisher and Edition Fr˝Ä°dONLNdpŸÊÁ;)ºom a Subscriberˇˇˇˇˇˇ(„Ú2
  6288. .°dONLNdÅÓl˙Ä(˜lThe °dONLNdÖÓÄ˙‘)GetEditionInfo°dONLNdìÓ‘˙)T  function rR`°dONLNdûÓ˙Û),9eturns information about a section’s edition such as its .°dONLNd◊˚l√(llocation, last modifi‡°dONLNdÏ˚ƒ)Xcation date, cr¿¿°dONLNd˚˚)=eatorwÄ°dONLNd˚E) , and type..°dONLNd lO(l5Once you locate a section’s edition, you can use the °dONLNdAO«)„GoToPublisherSection°dONLNdU«Ô)x
  6289.  function .°dONLNd_l&}(#lto fiƒ†°dONLNdd}&7)(nd the document containing the publisherÄ°dONLNdå7&9)∫.
  6290. V*_¯4W*^¯ X*X˛
  6291. ˇ·ˇ‚7^ °dONLNdèI*W}(S*GetEditionInfoˇˇˇˇˇˇ(SÚ2
  6292. .°dONLNdühltë(qlUse the °dONLNdßhëtÂ)%GetEditionInfo°dONLNdµhÂt€)T9 function to obtain information about a section’s edition°dONLNdÓh€tfi)ˆ,°dONLNdÔhfitˆ) such .°dONLNdıulÅ‹(~las its location, last modifi¶†°dONLNdu‹Å)pcation date, creÄ°dONLNd uÅ0)>eator@°dONLNd%u0Å^) , and type..°dONLNd1élöˆ(ólFUNCTION GetEditionInfo°dONLNdPúÍ®Ü+~(sectionH: SectionHandle; °dONLNdr™Í∂* °dONLNds™∂º)"VAR editionInfo: EditionInfoRecord°dONLNd∂»)Ã):°dONLNdó™»∂Ú)  OSErr;ˇ7@ˇ ˇˇˇˇ@
  6293. ˇ·ˇ‚7^
  6294. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äEdition Manager Reference
  6295. , (‡2-99
  6296. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  6297. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  6298. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  6299. 4€4—?òÄ
  6300. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  6301. ˛ˇˇˇ
  6302. ˛ˇˇˇ
  6303. ˛ˇˇˇ
  6304. ˛ˇˇˇ˜˝˛ˇ˛
  6305. ˛ˇ˛ˇˇ
  6306. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  6307. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  6308. ˛ˇ˛ˇˇ
  6309. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  6310. ˛ˇˇˇˇ
  6311. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  6312. ˛ˇˇˇˇ
  6313. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  6314. ˛ˇˇˇˇ
  6315. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿,
  6316. Courier.°dONLNd\äh¥(eäsection°dONLNd\¥h∫)*H.°dONLNd    \Ãh”)A∫†°dONLNd
  6317. \”h€) h °dONLNd \‹h8)    andle to the section ṙ°dONLNd"\7hI)[ecorb@°dONLNd&\Jh®)d for a given section. .°dONLNd>läxÃ(uä editionInfo°dONLNdJxÃÑŸ+B An°dONLNdLxŸÑ:) edition information rR`°dONLNdbx:ÑL)aecor$¿°dONLNdfxLÑk)d. The $¿°dONLNdmxkÑø)GetEditionInfo$¿°dONLNd{xøÑÎ)T  function r˜ °dONLNdÜxÍÑ)+eturns .°dONLNdçÑÃê∫(çÃ7the public information contained in the section’s contrE†°dONLNdƒÑªê‡)Ô    ol block.°dONLNdŒ©H≤Å(∞H DESCRIPTION
  6318. °dONLNd⁄∑ä√„+BThe Edition Managel†°dONLNdÏ∑‰√Ô)Zr e®‡°dONLNdÔ∑Ô√) nsurÉ`°dONLNdÛ∑√)eM°dONLNdÙ∑√ )sä°dONLNdı∑ √¶)$ that the existing edition name corr¨ °dONLNd∑¶√)öesponds to the FinderH°dONLNd.∑√)a’s .°dONLNd1ƒä– (Õäexisting edition name. If the °dONLNdOƒ –6)Çcontrol°dONLNdVƒ6–<)*B°dONLNdWƒ<–T)lock°dONLNd[ƒT–]) fi°dONLNd^ƒ]–∞)    eld of the section rR`°dONLNdrƒ∞–¬)Secor$¿°dONLNdvƒ¬–‘)d is $¿°dONLNd{ƒ‘–Ó)set to $¿°dONLNdǃÓ–˙)NI$¿°dONLNdу˙–) LΔ`°dONLNdÖƒˇ–) oΔ`°dONLNdზ )r °dONLNdâ—ä›#(⁄ä#the edition cannot be located, the °dONLNd¨—#›w)ôGetEditionInfo°dONLNd∫—w›£)T  function rR`°dONLNd≈—£›Õ),
  6319. eturns an R`°dONLNdœ—Õ›Ò)*fnfErrR`°dONLNd’—Ò›Û)$ .°dONLNd÷fiäÍç(ÁärE°dONLNd◊fiéÍ•)esult ˝Ä°dONLNd›fi•Íπ)code»†°dONLNd·fi∫ͺ)..°dONLNd„ä¸û(˘äThe °dONLNdÁû¸Ú)GetEditionInfo°dONLNdıÚ¸)T  function rR`°dONLNd¸),9eturns information about the section’s edition in a data °dONLNd9˝ä    ñ(ästrl°dONLNd<˝ñ    ¨) uctur>`°dONLNdA˝¨    ’)
  6320. e of type >`°dONLNdK˝’    ;))EditionInfoRecord>`°dONLNd\˝;    >)f.°dONLNd^ä  (äTYPE EditionInfoRecord = °dONLNdy"ú.¿+RECORD°dONLNdÇ0Æ<ÿ+crDate:°dONLNdç0ˆ<2)H
  6321. TimeStamp;°dONLNdû0t<
  6322. )~{date edition container }°dONLNd≈>tJ»*{ was created}°dONLNd÷LÆXÿ(UÆmdDate:°dONLNd·LˆX2)H
  6323. TimeStamp;°dONLNdÚLtXÚ)~{date of last change}°dONLNd
  6324. ZÆfÍ(cÆ
  6325. fdCreator:°dONLNdZˆf )HOSType;°dONLNd&Ztf»)~{file creator}°dONLNd7hÆtÿ(qÆfdType:°dONLNdBhˆt )HOSType;°dONLNdPhtt∂)~ {file type}°dONLNd^vÆÇÍ(Æ
  6326. container:°dONLNdlvˆÇt)HEditionContainerSpec;°dONLNdàvtǬ)~{the edition}°dONLNdóÑúê¥(çúEND;
  6327. ùH¨4ûH¨    .°dONLNdúùä®÷(•äField descriptions
  6328. ˇ·ˇ‚7^
  6329. .°dONLNdØ™ä∂Æ*crDate.°dONLNd∂™Ê∂Ò)\Thr °dONLNd∏™Ú∂˝) e c,°dONLNdª™˛∂) rÒ°dONLNdº™∂t)eation date of the edition. .°dONLNd⁄πä≈Æ(¬ämdDate.°dONLNd·πÊ≈Ò)\Thr °dONLNd„πÚ≈) e mè¿°dONLNdÊπ≈)odifi °dONLNdÎπ≈á)cation date of the edition..°dONLNd»ä‘¿(—ä    fdCreator.°dONLNd»Ê‘Ï)\T†¿°dONLNd»Ï‘˝)he c,°dONLNd»˛‘)rÒ°dONLNd»‘)eatorÄ°dONLNd»‘)r oZ†°dONLNd» ‘]) f the edition fiX°dONLNd.»^‘j)>le. .°dONLNd3◊ä„Æ(‡äfdType.°dONLNd:◊Ê„Ò)\Thr °dONLNd<◊Ú„ˇ) e fi»Ä°dONLNd@◊ˇ„)le type ¿°dONLNdH◊ „c)!of the edition fi䆰dONLNdY◊c„o)Cle. .°dONLNd^ÊäÚ∫(Ôäcontaine°dONLNdfÊ∫Ú¿)0r.°dONLNdhÊÊÚG),An edition container r Ä°dONLNd~ÊHÚZ)becorć°dONLNdÇÊZÚü)d, which specifi› °dONLNdíÊüÚ¿)Ees the vg`°dONLNdöÊ¡Ú„)"olume rØ°dONLNd°Ê„ÚÛ)"efer[ °dONLNd•ÊÙÚ
  6330. )ence °dONLNd™ÚÊ˛(˚Ênumber≥°dONLNd∞Ú˛)", dir| °dONLNdµÚ˛N) ectory ID, fiò °dONLNd¬ÚN˛˛)4(lename, script, and part number for the °dONLNdͲÊ
  6331. (Êedition.°dONLNdÛ#H,b(*HRESULëÄ°dONLNd¯#b,Ü)T CODES°dONLNdklHuo(sHSEE ALSO
  6332. .°dONLNdtzäÜ    +BFor an example of the use of °dONLNdëz    Ü])GetEditionInfo°dONLNdüz]Ür)T, see °dONLNd•zrÜ¢) Listing 2-8°dONLNd∞z¢Ü›)0 beginning on °dONLNdæz›Üı);page °dONLNd√zıÜ)2-46°dONLNd«zÜ). .°dONLNd…áäì)(êä&For another use of this function, see |‡°dONLNdÔá*ìé)†“Canceling Sections Wl°dONLNdáéì)dithin Documents” beginning °dONLNdîä†Ø(ùäon page !¿°dONLNd'î∞†¬)&2-48u†°dONLNd+Å).. For a description of the edition container rˇ°dONLNdYîņì)øecor]@°dONLNd]îî†Ø)d, see …@°dONLNddî؆Δ)page § °dONLNdiŸ)2-71¯°dONLNdmfi). .°dONLNdˇ1ä=®(:änoErr.°dONLNd1=)â0°dONLNd1,=H)No errE†°dONLNd1I=R)or.°dONLNd<äHÆ(EäfnfErr.°dONLNd<    H)–43°dONLNd<,HC)#Not rÀ¿°dONLNd!<CH`)egister‡°dONLNd(<aHÄ)ed or fiu °dONLNd0<ÄH©)le moved.°dONLNd:GäS(PäeditionMgrInitErr.°dONLNdLGS)z–450°dONLNdQG,Sì)(Manager not initializedˇ,@ˇ ˇˇˇˇ@
  6333. ˇ·ˇ‚7^
  6334. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  6335. (‡*2-100    )BEdition Manager Reference4^*¿¯
  6336. j*r¯4j*r¯ l*l˛
  6337. ˇ·ˇ‚7^ °dONLNd\*j3(f*G~@°dONLNd\4jB)
  6338. oT÷Ä°dONLNd\Aj•)oPublisherSectionˇˇˇˇˇˇ(fÚ2
  6339. °dONLNd{láÆ(ÑlJWhen the user wants to locate the publisher for a particular subscriber (bÆ¿°dONLNd`{Æá€(ÑÆ y clicking .°dONLNdkàlît(ëlO°dONLNdlàtîÜ)pen °dONLNdpàÜîe)3Publisher in the subscriber options dialog box), th°dONLNd£àeîl)fle ,
  6340. Courier°dONLNd•àlî‰)SectionOptionsDialog°dONLNdπà‰îÊ)x °dONLNd∫ïl°ñ(ûl
  6341. function rR`°dONLNdƒïñ°À)* eturns the aR`°dONLNd–ïÀ°˘)5 ction code R`°dONLNd€ï˘°).'gotoR`°dONLNd‡ï°)'R`°dONLNd·ï°<) in the R`°dONLNdÈï<°`)actionR`°dONLNdÔï`°i)$ fiR`°dONLNdÚïi°fl)    eld of the section options r$¿°dONLNdïfl°ˆ)veply .°dONLNd¢lÆo(´lrE°dONLNd¢pÆÇ)ecorπ`°dONLNd¢ÇÆ¡)d. When you r@°dONLNd%¢¬ÆË)@Aeceive this action code, you should open the document containing °dONLNdfØlª|(∏lthe ›`°dONLNdjØ|ª¶)    publisherL@°dONLNdsضª´)*. .°dONLNdv¡lÕê( l    First, us°dONLNd¡êÕ©)$e the °dONLNdÖ¡©Õ˝)GetEditionInfo°dONLNdì¡˝Õ7)T function to fi°dONLNd¢¡7Õ£):nd the edition container¬†°dONLNd∫¡¢Õ≈)k. Then u¬†°dONLNd¬¡≈Õ‚)#se the °dONLNd…Œl⁄‰(◊lGoToPublisherSection°dONLNd›Œ‰⁄€)x7 function to open the document containing the publisher¬†°dONLNdŒ⁄⁄›)ˆ.°dONLNdÁlÛr(lF°dONLNdÁrÛ )UNCTION GoToPublisherSection °dONLNd=ı¸º+ä (container: EditionContainerSpec°dONLNd]ıº»)¿):°dONLNd_ı»Ú)  OSErr;°dONLNdglú(lcontaine°dONLNdoú¢)0r.°dONLNdqÆ)An edition container r Ä°dONLNdá")becorć°dONLNdã"g)d, which specifi› °dONLNdõgx)Ees v
  6342. °dONLNdüyõ)olume rQ†°dONLNd¶õ´)"efer˝¿°dONLNd™´‰) ence numberÖ†°dONLNdµ‰È)9, °dONLNd∑Æ%∫("ÆdirI °dONLNd∫ª%)ectory ID, and fi“@°dONLNdÀ%")GlenameÛ@°dONLNd—"%m)  of the subscribero@°dONLNd„o%ö)M ’s edition.≤‡°dONLNdÓö%ú)+ @°dONLNdÔù%£)Y≈¿°dONLNd¢%fi)ou obtain the .°dONLNd˛%Æ1>(.Æ!edition container by calling the °dONLNd%>1í)êGetEditionInfo°dONLNd-%í1Ω)T  function. .°dONLNd9K*Tc(R* DESCRIPTION
  6343. .°dONLNdEXldÄ+BThe °dONLNdIXÄd¯)GoToPublisherSection°dONLNd]X¯d$)x  function rR`°dONLNdhX$d≈),%esolves the alias in the edition to fiR`°dONLNdéX≈d“)°nd .°dONLNdëelq|(nlthe ›`°dONLNdïe|q)!document containing its publisherÍ °dONLNd∂eq◊)ó0. In general, this function internally uses the .°dONLNdÊrl~ÿ({lGetStandardFormats°dONLNd¯rÿ~Ë)l> function to get the alias to the publisher document and then .°dONLNd6lão(àlrE°dONLNd7pã3)/esolves the alias. It next sends the Finder an ä`°dONLNdf3ã)√(Apple event to open the document (which °dONLNdéålòá(ïlDlaunches its application if necessary) and, after the publisher is rº °dONLNd“åáò§(ïáegister @°dONLNdŸå•òÿ) ed, sends a °dONLNdÂôl•ú(¢l Section Scr`@°dONLNdôú•
  6344. )0oll event to the publisher˜‡°dONLNd
  6345. ô    • )m..°dONLNd ´l∑Ê(¥lAs an optimization, if therR`°dONLNd'´Ê∑)ze is a r$¿°dONLNd/´∑")egister˜ °dONLNd6´!∑Z) ed publisher9¿°dONLNdB´Z∑q)9, the 9¿°dONLNdH´q∑È)GoToPublisherSection9¿°dONLNd\´È∑Î)x .°dONLNd]∏lƒ(¡l#function simply sends a Section Scr@°dONLNdÄ∏ƒv)úoll event to the publisher©‡°dONLNdö∏uƒz)m. °dONLNdù l÷;(”l1If the edition does not contain an alias and ther °dONLNdŒ <÷L)–e ar ¿°dONLNd“ L÷e)e no rˆ@°dONLNdÿ d÷Å)egisterE`°dONLNdfl Ç÷È)ed publishers, then the .°dONLNd˜◊l„‰(‡lGoToPublisherSection°dONLNd ◊‰„Ò)x< function sends an Open Documents event to open the edition .°dONLNdG‰lè(Ìl    to the crJÄ°dONLNdP‰ê‚)$eating application.°dONLNddˆl#(ˇl,If the edition container is not an edition fiä¿°dONLNdëˆ#¢)∑le (as is the case when you ar[`°dONLNd؈£≈)Äe using .°dONLNd∑l( l)bottlenecks to subscribe to non-edition fi°dONLNd·F)≤
  6346. les), the °dONLNdÎFæ)(GoToPublisherSection°dONLNdˇæÊ)x
  6347.  function .°dONLNd    l≈(lsends the Finder an "°dONLNd≈;)YApple event to open that fiö °dONLNd8;G)vle. °dONLNd=7*@D(>*RESULëÄ°dONLNdB7D@h)T CODES
  6348. .°dONLNdIDlPä+(noErr.°dONLNdODıP˙)â0°dONLNdQDP*)No errE†°dONLNdWD+P4)or.°dONLNd[Ol[ê(XlfnfErr.°dONLNdbOÎ[˙)–43°dONLNdfO[L)#File not found.°dONLNdvZlf“(cleditionMgrInitErr.°dONLNdàZÊf˙)z–450°dONLNdçZfu)(Manager not initialized.°dONLNd¶elq∫(nlbadSubPartErr.°dONLNd¥eÊq˙)z–454°dONLNdπeq{)(Invalid edition containerˇ8h@ˇ ˇˇˇˇ@
  6349. ˇ·ˇ‚7^
  6350. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äEdition Manager Reference
  6351. , (‡ˇ2-101
  6352. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  6353. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  6354. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  6355. 4€4—?òÄ
  6356. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  6357. ˛ˇˇˇ
  6358. ˛ˇˇˇ
  6359. ˛ˇˇˇ
  6360. ˛ˇˇˇ˜˝˛ˇ˛
  6361. ˛ˇ˛ˇˇ
  6362. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  6363. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  6364. ˛ˇ˛ˇˇ
  6365. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  6366. ˛ˇˇˇˇ
  6367. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  6368. ˛ˇˇˇˇ
  6369. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  6370. ˛ˇˇˇˇ
  6371. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\Heo(cHSEE ALSO
  6372. °dONLNd    jävª+BIFor illustrations of the section options dialog box for subscribers, see Ö†°dONLNdRjªv”(sªFigurX`°dONLNdWj”vÏ)e 2-15ı‡°dONLNd]jÏv¸) on °dONLNdawäÉ°(Ääpage Z‡°dONLNdfw¢É¥)2-44Æ¿°dONLNdjw¥É…) and õ‡°dONLNdow É‚)Figurn†°dONLNdtw‚É˚)e 2-16  °dONLNdzw¸É ) on S°dONLNd~w É#)page -‡°dONLNdÉw$É6)2-45Å¿°dONLNdáw6Éê). For an example of rS °dONLNdúwëÉ)[esponding to the action code ,
  6373. Courier.°dONLNdπÑäêÆ(çä'goto'°dONLNdøÑÆê√)$, see °dONLNd≈Ñ√êÛ) Listing 2-8°dONLNd–ÑÛê.)0 beginning on °dONLNdfiÑ.êF);page °dONLNd„ÑFêY)2-46°dONLNdÁÑYêÏ)#. For a description of the edition .°dONLNd
  6374. ëäùπ(öä container r4Ä°dONLNdë∫ùÃ)0ecor®‡°dONLNdëÃùÁ)d, see ‡°dONLNd ëËùˇ)page Ô¿°dONLNd%ëˇù)2-71C†°dONLNd)ëù).
  6375. ¡H…4¬H… ƒHƒ
  6376. ˇ·ˇ‚7^ °dONLNd,¥H¬’(æHEdition Container Formatsˇˇˇˇˇˇ(æ2
  6377. .°dONLNdG…ä’(“äThe Edition Manager calls the °dONLNde…’Ç)åGetStandardFormats°dONLNdw…Ç’)l# function to get the alias used in °dONLNdö÷ä‚ú(fläthe °dONLNdû÷ú‚)GoToPublisherSection°dONLNd≤÷‚Ü)x function and to get the prR`°dONLNdÕ÷Ü‚)review shown in the subscriber .°dONLNd΄äÔΩ(Ïä dialog box. È@°dONLNd˜„ΩÔ√)3Y©¿°dONLNd¯„√Ô⁄)ou prmÄ°dONLNd˝„€Ôñ),obably do not need to call this function dir°dONLNd)„óÔ´)ºectlyÊ°dONLNd.„™Ô¨).
  6378. H(4 H' !H!
  6379. ˇ·ˇ‚7^ °dONLNd1H π(HGetStandardFormatsˇˇˇˇˇˇ(2
  6380. .°dONLNdE1ä=ë(:äYï°dONLNdF1ê=¶)ou prg`°dONLNdK1¶=,)obably do not need to call the g`°dONLNdj1,=ò)ÜGetStandardFormatsg`°dONLNd|1ò=Œ)l function dir9¿°dONLNdâ1Œ= )6ectly because .°dONLNdó>äJ7(Gä(the Edition Manager calls this function..°dONLNd¿Wäc2*FUNCTION GetStandardFormats °dONLNd‚e‰q∞+Z"(container: EditionContainerSpec; °dONLNd
  6381. s‰Í* °dONLNd sÍû)VAR previewFormat: FormatType;°dONLNd/ʼnçÍ(䉠°dONLNd0ÅÍç∞)!preview, publisherAlias, formats:°dONLNdQÅ∞ç∂)Δ °dONLNdRÅ∂ç⁄)Handle°dONLNdXÅ⁄çÊ)$):°dONLNdZÅÊç)  OSErr;°dONLNdbôä•∫(¢äcontaine°dONLNdjô∫•¿)0r.°dONLNdlôÕ-)An edition container r Ä°dONLNdÇô.•@)becorć°dONLNdÜô@•x)d that specifi`‡°dONLNdîôy•ô)9es the eÄ°dONLNdúôö•fl)!dition volume rÚ °dONLNd´ôfi•Ó)Deferû@°dONLNdØôÔ•)ence °dONLNd¥•Ã±Ó(ÆÃnumber≥°dONLNd∫•Ó±ˇ)", dir| °dONLNdø•±4) ectory ID, fiò °dONLNdÕ4±Å)4lename, and part..°dONLNdfiµä¡ÿ(æäpreviewFormat°dONLNdÏ¡ÃÕ‡+B The °dONLNd¡‡ÕL)GetStandardFormats°dONLNd¡LÕx)l  function rR`°dONLNd¡xÕ),"eturns in this parameter a handle .°dONLNd/ÕßÍ(÷Ãto the f9†°dONLNd7ÕΟ) irst format f`°dONLNdCÕŸ;)1of the r“ °dONLNdKÕ;Ÿæ)equested format type that it fiÁ†°dONLNdjÕæŸ)Énds in the edition.Ë@°dONLNd}ÕŸ)P .°dONLNd›äÈ¥(Êäpreview°dONLNdá›ÃÈ‘)BAÛ`°dONLNdà›”È$) format type. The Û`°dONLNdö›$Èê)QGetStandardFormatsÛ`°dONLNd¨›êÈ)l  function looks for a format of .°dONLNdÃÈÃı(ÚÃthe type specifih¿°dONLNd‹ÈıÅ)Ced in this parameter and r °dONLNdˆÈÇı˛)seturns in this parameter the °dONLNdıÃ$(˛Ãformat type of the fi£ °dONLNd(ı$t)Xrst format that it fiu °dONLNd=ıuÎ)Qnds. The function tries to fiQ‡°dONLNdZıÏ )wnd one .°dONLNdaÃ(
  6382. Ãof four formats: °dONLNdr7)G'prvw'°dONLNdx7<)$, °dONLNdz<`)'PICT'°dONLNdÄ`e)$, °dONLNdÇeâ)'TEXT'°dONLNdàâô)$, or °dONLNdçôΩ)'snd '°dONLNdìΩ¬)$. °dONLNdñäfi(äpublisherAlias°dONLNd•Ã)‡+B The °dONLNd©‡)4)publisherAlias°dONLNd∑4)l)T  parameter rR`°dONLNd√l)∂)8eads the format °dONLNd”)Ã5\(2ÃkPublisherDocAliasFormat°dONLNdÎ)\5b)ê (°dONLNdÌ)b5Ü)'alis'°dONLNdÛ)Ü5ç)$).°dONLNdˆ9äE¥(BäformatsˇˇÂ¥°dONLNd˛9ÃEfl)BThe ˇˇ±e¥°dONLNd9‡E
  6383. )formatsˇˇÂ¥e¥°dONLNd    9
  6384. EA)*  parameter r|°dONLNd9BEÆ)8eads the virtual format ˇˇ±öL°dONLNd-9ÆE)lkFormatListFormatˇˇÂ¥öL°dONLNd>9E)f °dONLNd?EÃQ–(NÃ(°dONLNd@E–QÙ)'fmts'°dONLNdFEÙQ˝)$). .°dONLNdJkHtÅ(rH DESCRIPTION
  6385. .°dONLNdVxäÑë+BYï°dONLNdWxêѺ)Bou should pass in valid handles for the formats that you want and ï°dONLNdôxºÑŒ(źNIL6†°dONLNdúxŒÑ) for the formats .°dONLNd≠Öäë((éä#that you don’t want. The handles arg °dONLNd–Ö(ë3)ûe ru¿°dONLNd”Ö3ë¥)  esized to the size of the data. .°dONLNdÙóä£é(†äI°dONLNdıóé£Δ)f one of the rR`°dONLNdóΔ£])8"equested formats cannot be found, R`°dONLNd%ó]£…)óGetStandardFormatsR`°dONLNd7󅣜)l r$¿°dONLNd9óœ£Ù)    eturns a °dONLNdB§ä∞¿(≠ä    noTypeErr°dONLNdK§¿∞Δ)6 rR`°dONLNdM§Δ∞˜) esult code. ˇ“@ˇ ˇˇˇˇ@
  6386. ˇ·ˇ‚7^
  6387. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  6388. (‡*2-102    )BEdition Manager Reference4^*¿¯°dONLNd\*eD(c*RESULëÄ°dONLNd\Deh)T CODES
  6389. Ø*∑¯4∞*∑¯ ≤*≤˛
  6390. ˇ·ˇ‚7^ °dONLNd|¢*∞|(¨*Reading and W(°dONLNdâ¢|∞˙)Rriting Non-Edition Filesˇˇˇˇˇˇ(¨Ú2
  6391. °dONLNd£∑l√ï(¿lBThe Edition Manager never opens or closes an edition container diro†°dONLNdÂ∑ï√‚(¿ïectly—it calls the °dONLNd¯ƒl–~(ÕlcurrØ°dONLNd¸ƒ~–Œ)ent edition opener›@°dONLNdƒŒ–›)P. Seʆ°dONLNdƒ›–‰)e 0@°dONLNdƒÂ–÷)5“Subscribing to Non-Edition Files” beginning on page « °dONLNdIƒ÷–Ë)Ò2-62°dONLNdMƒÈ–Î) °dONLNdN—l›o(⁄lf”‡°dONLNdO—o›‚)or additional information.°dONLNdj„lÔr(ÏlTµ¿°dONLNdk„qÔ“)o override the standarRÄ°dONLNdÅ„”Ô!)bd opener functionK`°dONLNdí„"Ô+)O, cª†°dONLNdï„+Ô.)    rĆ°dONLNdñ„/ÔÂ)*eate an opener function that contains the °dONLNd¿l¸Δ(˘lfollowing parameter@Ä°dONLNd”«¸Õ)[s:,
  6392. Courier.°dONLNd÷    lÜ(l/FUNCTION MyOpener (selector: EditionOpenerVerb;°dONLNd ÿ#ò+l  VAR PB: EditionOpenerParamBlock°dONLNd,ò#§)¿):°dONLNd.§#Œ)  OSErr;°dONLNd6/l;Y(8l3When this function is called by the Edition Manager¬†°dONLNdi/X;o)Ï, the ¬†°dONLNdo/o;ü)selector¬†°dONLNdw/ü;˜)0 parameter is set to °dONLNdå<lH˚(El!one of the edition opener verbs (°dONLNd≠<˚H)èeoOpen°dONLNd≥<H$)$, °dONLNdµ<$HN)eoClose°dONLNdº<NHS)*, °dONLNdæ<SHâ)    eoOpenNewï°dONLNd«<àHç)5, ï°dONLNd…<çH…)
  6393. eoCloseNew™°dONLNd”<»HÕ);, °dONLNd’IlU¿(RleoCanSubscribe°dONLNd„I¿U›)T). The °dONLNdÍI›UÈ)PB°dONLNdÏIÈU‡) 6 parameter contains an edition opener parameter block .°dONLNd"Vlbo(_lrE°dONLNd#VpbÇ)ecorπ`°dONLNd'VÇbä)d..°dONLNd*hltë(qlUse the °dONLNd2hët    )%GetEditionOpenerProc°dONLNdFh    t})x function to locate the currR`°dONLNdbh}t )tent edition openeR`°dONLNdsh t÷)Mr aR`°dONLNdvh÷tÛ) nd use °dONLNd}ulÅ~(~lthe °dONLNdÅu~ň)SetEditionOpenerProc°dONLNdïuˆÅ3)x function to prR`°dONLNd§u3Å∂)=ovide your own edition openeR`°dONLNd¿u∂Å∫)Érï°dONLNd¡uπź).ï°dONLNd¬uºÅæ) °dONLNdƒálìë(êlUse the °dONLNdÃáëì)%CallEditionOpenerProc°dONLNd·áì†)~" function to call an edition opene°dONLNdá†ì¨)ër a°dONLNdá¨ì€) nd use the °dONLNdîl†Ã(ùlCallFormatIOProc°dONLNd!îÆ@)` function to call a format I°dONLNd=î@†v)t /O function.
  6394. –*Ÿ¯4—*ÿ¯ “*“˛
  6395. ˇ·ˇ‚7^ .°dONLNdK√*—ß(Õ*GetEditionOpenerProcˇˇˇˇˇˇ(ÕÚ2
  6396. .°dONLNda‚lÓë(ÎlUse the °dONLNdi‚ëÓ    )%GetEditionOpenerProc°dONLNd}‚    Ó})x function to locate the currR`°dONLNdô‚}Ó )tent edition openeR`°dONLNd™‚ ÓŒ)Mrï°dONLNd´‚ÕÓ–).°dONLNd≠˚l(lFUNCTION GetEditionOpenerProc°dONLNd“    Í∞+~!(VAR opener: EditionOpenerProcPtr°dONLNdÛ    ∞º)Δ):°dONLNdı    ºÊ)  OSErr;°dONLNd˝!l-ê(*lopener°dONLNd!Æ-ª)BTh°dONLNd!ª-¿)e°dONLNd!¿-¬) °dONLNd!¬-:)GetEditionOpenerProc°dONLNd!:-f)x  function rR`°dONLNd'!f-}),eturnR`°dONLNd,!}-ë)s a pR`°dONLNd1!ë-‹)ointer to the curr$¿°dONLNdC!‹-Ï)Kent .°dONLNdG-Æ9Í(6Æedition opene†°dONLNdT-Î9d)=r function in this parameter„°dONLNdp-c9e)x.
  6397. i*q¯4i*q¯ k*k˛
  6398. ˇ·ˇ‚7^ °dONLNds[*i•(e*SetEditionOpenerProcˇˇˇˇˇˇ(eÚ2
  6399. .°dONLNdâ{láë(ÑlUse the °dONLNdë{ëá    )%SetEditionOpenerProc°dONLNd•{    áF)x function to prR`°dONLNd¥{Fá…)=ovide your own edition openeR`°dONLNd–{…áÕ)Érï°dONLNd—{Ãáœ).°dONLNd”îl† (ùlFUNCTION SetEditionOpenerProc °dONLNd˘¢ÍÆò+~(opener: EditionOpenerProcPtr°dONLNd¢òƧ)Æ):°dONLNd¢§ÆŒ)  OSErr;°dONLNd jlvä(slnoErr.°dONLNdjıv˙)â0°dONLNdjv*)No errE†°dONLNdj+v4)or.°dONLNdulÅ¢(~l    noTypeErr.°dONLNd(uÊÅ˙)z–102°dONLNd-uÅà)(Edition container not found.°dONLNdJÄlå“(âleditionMgrInitErr.°dONLNd\ÄÊå˙)z–450°dONLNdaÄåu)(Manager not initializedˇ/≤@ˇ ˇˇˇˇ@
  6400. ˇ·ˇ‚7^
  6401. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äEdition Manager Reference
  6402. , (‡ˇ2-103
  6403. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  6404. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  6405. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  6406. 4€4—?òÄ
  6407. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  6408. ˛ˇˇˇ
  6409. ˛ˇˇˇ
  6410. ˛ˇˇˇ
  6411. ˛ˇˇˇ˜˝˛ˇ˛
  6412. ˛ˇ˛ˇˇ
  6413. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  6414. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  6415. ˛ˇ˛ˇˇ
  6416. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  6417. ˛ˇˇˇˇ
  6418. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  6419. ˛ˇˇˇˇ
  6420. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  6421. ˛ˇˇˇˇ
  6422. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿,
  6423. Courier.°dONLNd\äh®(eäopene°dONLNd\®hÆ)r.°dONLNd\Ãh”)$A∫†°dONLNd\”h€) p<¿°dONLNd
  6424. \‹hP)    ointer to the edition openeÄ°dONLNd%\QhÇ)u r function t^¿°dONLNd1\ÇhØ)1
  6425. hat you arC@°dONLNd;\Øh¿)-e prT°dONLNd?\¿h‰)oviding.
  6426. óH†4òHü ôHô
  6427. ˇ·ˇ‚7^ °dONLNdIäHò»(îHCallEditionOpenerProcˇˇˇˇˇˇ(î2
  6428. .°dONLNd`©äµØ(≤äUse the °dONLNdh©Øµ-)%CallEditionOpenerProc°dONLNd}©-µæ)~" function to call an edition opene°dONLNdü©æµ¬)ër¬†°dONLNd†©¡µƒ).°dONLNd¢¬äŒD(ÀäFUNCTION CallEditionOpenerProc °dONLNd…–‹º+~(selector: EditionOpenerVerb; °dONLNdÔfiÍŒ*! VAR PB: EditionOpenerParamBlock;°dONLNdϯº* routine: EditionOpenerProcPtr°dONLNd6Ϻ¯»)¥):°dONLNd8Ï»¯Ú)  OSErr;°dONLNd@ä∫(äselector°dONLNdIÃg)B!An edition opener verb. When the °dONLNdjgÂ)õCallEditionOpenerProc°dONLNdÂ)~
  6429.  function ˇˇ≤°dONLNdâÃ^(àis called by the Edition Manager=°dONLNd©^t)í, the ˇˇH°H°dONLNdØt§)selectorˇˇ≤°H°dONLNd∑§)0 parameter is set to one of °dONLNd”Ã(?(%Ãthe edition opener verbs (°dONLNdÌ?(c)seoOpen°dONLNdÛc(h)$, °dONLNdıh(í)eoClose°dONLNd¸í(ó)*, °dONLNd˛ó(Õ)    eoOpenNewï°dONLNdÃ(—)5, ï°dONLNd    —()
  6430. eoCloseNew™°dONLNd ();, °dONLNd(Ã4 (1ÃeoCanSubscribe°dONLNd#( 4))T). °dONLNd'8äDê(AäP°dONLNd(8êDñ)B.°dONLNd*8ÃDŸ)<An†°dONLNd,8⁄Da) edition opener parameter bloc†°dONLNdJ8bDj)àk.¿°dONLNdL8jDl) .°dONLNdNHäTÆ(Qäroutin°dONLNdTHÆT¥)$e.°dONLNdVHÃT”)A∫†°dONLNdWH”T€) p<¿°dONLNdYH‹TM)    ointer to an edition openeÄ°dONLNdsHNT|)r r function.°dONLNdnHwÅ(uH DESCRIPTION
  6431. °dONLNdã{äá+BXThe Edition Manager calls an edition opener function whenever it needs to open or close °dONLNd„àäî*Wan edition. The Edition Manager passes an edition opener parameter block as one of the °dONLNd:ïä°ˇ*Sparameters to an edition opener function. The edition opener parameter block is defiÀ °dONLNdéïˇ°(ûˇned °dONLNdí¢äƵ(´ä by this str-‡°dONLNdù¢∂ÆÕ),uctur≥¿°dONLNd¢¢ÕÆ‘)e:.°dONLNd•πä≈D(¬äTYPE EditionOpenerParamBlock = °dONLNdΔ«ú”¿+RECORD°dONLNdœ’Æ·Ã+info:°dONLNdŸ’·t)ZEditionInfoRecord;°dONLNdÚ’Ü·)~{edition container to }°dONLNd„ÜÔ¯*{ be subscribed to}°dONLNd.ÒÆ˝‰(˙Æ    sectionH:°dONLNd<Ò˝\)ZSectionHandle;°dONLNdQÒÜ˝‡)~{publisher or }°dONLNdoˇÜ ⁄*{ subscriber }°dONLNdåÜÚ*{ requesting open}°dONLNd°Æ'‰($Æ    document:°dONLNdØ'D)Z
  6432. FSSpecPtr;°dONLNd¿Ü'Ï)~{document passed}°dONLNd‘)Æ5Í(2Æ
  6433. fdCreator:°dONLNd„)52)ZOSType;°dONLNdÒ)Ü5)~{Finder creator type}°dONLNd    7ÆC‰(@Æ    ioRefNum:°dONLNd7C8)ZLongInt;°dONLNd&7ÜCÚ)~{reference number}°dONLNd;EÆQÿ(NÆioProc:°dONLNdGEQh)ZFormatIOProcPtr;°dONLNd^EÜQÚ)~{routine to read }°dONLNdSÜ_¬*
  6434. { formats}°dONLNdåaÆmfi(jÆsuccess:°dONLNdôam8)ZBoolean;°dONLNd®aÜm)~{reading or writing }°dONLNdÃoÜ{Ï*{ was successful}°dONLNd‡}Æâˆ(ÜÆ formatsMask:°dONLNdÒ}âJ)Z SignedByte;°dONLNd}Üâ
  6435. )~{formats required to }°dONLNd(ãÜóŒ* { subscribe}°dONLNd6ôú•¥(¢úEND;ˇÿ@ˇ ˇˇˇˇ@
  6436. ˇ·ˇ‚7^
  6437. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  6438. (‡*2-104    )BEdition Manager Reference4^*¿¯
  6439. °dONLNd\lhr(elTµ¿°dONLNd\qh“)o override the standarRÄ°dONLNd\”hfl)bd r≥@°dONLNd\flh°) +eading and writing functions, you should cr'@°dONLNdE\¢h◊)√ eate an I/O °dONLNdQilu@(rl0function that contains the following parameters.,
  6440. Courier.°dONLNdÇÇléV*'FUNCTION MyIO (selector: FormatIOVerb; °dONLNdØêΔúb+ZVAR PB: FormatIOParamBlock°dONLNd…êbún)ú):°dONLNdÀênúò)  OSErr;°dONLNd”®l¥è(±lSet the °dONLNd€®è¥ø)#selector°dONLNd„®ø¥~)0+ parameter to one of the format I/O verbs (°dONLNd®~¥¿)ø ioHasFormat°dONLNd®¿¥≈)B, ˇ˛ˇ˛°dONLNdµl¡¥(æl ioReadFormatˇˇ™™°dONLNd'µ¥¡∏)H, ˇ˛ˇ˛*™°dONLNd)µπ¡˚) ioNewFormatˇˇ™™*™°dONLNd4µ˚¡ˇ)B, ˇ˛ˇ˛’T°dONLNd6µˇ¡M)ioWriteFormatˇˇ™™’T°dONLNdCµM¡i)N). The ˇ˛ˇ˛*®°dONLNdJµj¡v)PBˇˇ™™*®°dONLNdLµv¡¯)  parameter contains a format .°dONLNdi¬lŒŒ(ÀlI/O parameter block rÑÄ°dONLNd~¬ŒŒ‡)becor¯‡°dONLNdǬ‡ŒÊ)d†°dONLNdɬÁŒÈ).°dONLNdÖË*ÒQ(Ô*SEE ALSO
  6441. °dONLNdéˆl}+BSee ”°dONLNdíˆ}R).“Calling an Edition Opener” beginning on page q‡°dONLNd¿ˆSe)÷2-64≈¿°dONLNdƒˆe›) for additional information.
  6442. 2*;¯43*:¯ 4*4˛
  6443. ˇ·ˇ‚7^ °dONLNd‚%*32(/*C)¿°dONLNd„%33é)    allFormatIOProcˇˇˇˇˇˇ(/Ú2
  6444. .°dONLNdÙDlPë(MlUse the °dONLNd¸DëPÒ)%CallFormatIOProc°dONLNd DÒPe)` function to call a format I°dONLNd(DePõ)t /O function.°dONLNd5]liû(fl3FUNCTION CallFormatIOProc (selector: FormatIOVerb; °dONLNdrkw∞+¢VAR PB:FormatIOParamBlock; °dONLNdóyÖû*routine: FormatIOProcPtr°dONLNdØyûÖ™)ê):°dONLNd±y™Ö‘)  OSErr;°dONLNdπëlùñ(ölselecto°dONLNd¿ëñùú)*r°dONLNd¬ëÆù∂)AÛ`°dONLNd√ëµùª) fÛ`°dONLNd≈ëªù˙)ormat I/O verÛ`°dONLNd“ë˙ù)?b (Û`°dONLNd’ëùG) ioHasFormatÛ`°dONLNd‡ëGùL)B, Û`°dONLNd‚ëLùî) ioReadFormatÛ`°dONLNdÓëîùô)H, Û`°dONLNdëôù€) ioNewFormatÛ`°dONLNd˚ë€ù‡)B, °dONLNd˝ùÆ©¸(¶ÆioWriteFormat°dONLNd
  6445. ù¸©)N). °dONLNd≠lπr(∂lP°dONLNd≠rπx)B.°dONLNd≠Æπµ)<A∫†°dONLNd≠µπ∫) féÄ°dONLNd≠ªπ:)ormat I/O parameter block rëÄ°dONLNd/≠:πL)ecor‡°dONLNd3≠MπU)d..°dONLNd6Ωl…ê(Δlroutin°dONLNd<Ωê…ñ)$e.°dONLNd>ΩÆ…µ)A∫†°dONLNd?Ωµ…Ω) p<¿°dONLNdAΩæ…)    ointer to a format I/b†°dONLNdVΩ…K)Y O function. °dONLNdc„*Ïc(Í* DESCRIPTION
  6446. °dONLNdol¸®+BFThe Edition Manager calls a format I/O function whenever it needs to r\°dONLNdµ®¸¡(˘®ead fr⁄@°dONLNdª¡¸˜) om or write °dONLNd«˝l    Ë(lUto an edition. The Edition Manager passes a format I/O parameter block as one of the °dONLNd
  6447. lÒ*parameters to a format I/O pri°dONLNd9
  6448. Ò)Öocedur@°dONLNd?
  6449. Δ)(e. The format I/O parameter block is defi/°dONLNdh
  6450. ΔÊ)∂ned by °dONLNdol#ä( lthis stró °dONLNdwä#°)uctur°dONLNd|¢#©)e:.°dONLNd.l:(7lTYPE FormatIOParamBlock = °dONLNdõ<~H¢+RECORD°dONLNd§JêVΔ+    ioRefNum:°dONLNd≤JÍV)ZLongInt;°dONLNdøJDV∞)Z{reference number}°dONLNd‘Xêd∫(aêformat:°dONLNd‡XÍd,)Z FormatType;°dONLNdXDd¬)Z{edition format type}°dONLNdfêrÿ(oê formatIndex:°dONLNdfÍr)ZLongInt;ˇ˝ˇ¸°dONLNd&fDr˜)Z{opener-specific enumeration } °dONLNdRtDÄí*{ of formats}°dONLNdbÇêé∫(ãêoffset:°dONLNdnÇÍé)ZLongInt;°dONLNd{ÇDéº)Z{offset into format}°dONLNdíêêú¿(ôêbuffPtr:°dONLNdüêÍú)ZPtr;°dONLNd®êDú∞)Z{data starts here}°dONLNdΩûꙿ(ßêbuffLen:°dONLNd ûÍ™)ZLongInt;°dONLNd◊ûD™§)Z{length of data}°dONLNdȨ~∏ê(µ~END°dONLNdϨê∏ñ);ˇ%¬@ˇ ˇˇˇˇ@
  6451. ˇ·ˇ‚7^
  6452. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äEdition Manager Reference
  6453. , (‡ˇ2-105
  6454. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  6455. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  6456. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  6457. 4€4—?òÄ
  6458. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  6459. ˛ˇˇˇ
  6460. ˛ˇˇˇ
  6461. ˛ˇˇˇ
  6462. ˛ˇˇˇ˜˝˛ˇ˛
  6463. ˛ˇ˛ˇˇ
  6464. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  6465. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  6466. ˛ˇ˛ˇˇ
  6467. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  6468. ˛ˇˇˇˇ
  6469. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  6470. ˛ˇˇˇˇ
  6471. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  6472. ˛ˇˇˇˇ
  6473. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\Heo(cHSEE ALSO
  6474. °dONLNd    jävõ+BSee ”°dONLNdjõvÑ)2“Calling a Format I/O Function” beginning on page ˙Ä°dONLNd?jÑvñ)È2-68N`°dONLNdCjóv) for additional information.
  6475. ¢H™4£H™ •H•
  6476. ˇ·ˇ‚7^°dONLNdaíH¢∞(ûHApplication-Defi߇°dONLNdqí∞¢)h ned Routinesˇˇˇˇˇˇ(û2
  6477. °dONLNd™ä∂ê(≥äY@Ä°dONLNdÄ™ê∂Ò)our application can prÔ`°dONLNdñ™Ò∂Â)a7ovide an edition opener function, format I/O function, °dONLNdÕ∑ä√Æ(¿ä>expandable dialog hook function, and expandable modal-dialog fi熰dONLNd ∑Æ√ (¿Ælter function. For the °dONLNd#ƒä–ç(ÕärE°dONLNd$ƒé–…)Houtine declarations of the edition opener and format I/O functions, see @@°dONLNdlƒ –    (Õ “Reading and °dONLNdy—ä›î(⁄äW¬†°dONLNdz—ì›X)    ,riting Non-Edition Files” beginning on page `†°dONLNd¶—Y›p)Δ2-102¥Ä°dONLNd´—p›ö) . For the rN °dONLNd∂—õ›)+outine declarations of the °dONLNd—fiäÍÉ(Áä4expandable dialog hook and expandable modal-dialog fi`°dONLNdfiÑ͉)˙lter functions, see the .°dONLNdÎ䘠(Ùädescription of ,
  6478. Courier°dONLNd-Π˜N)@NewSubscriberExpDialog°dONLNdCÎN˜S)Ñ, °dONLNdEÎS˜—)NewPublisherExpDialog°dONLNdZΗ˜È)~, and °dONLNd`¯ä(äSectionOptionsExpDialog°dONLNdw¯O)ä beginning on °dONLNdÖ¯Og);page °dONLNdä¯gz)2-96°dONLNdé¯z). ˇR@ˇ ˇˇˇˇ@
  6479. ˇ·ˇ‚7^
  6480. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  6481. (‡*2-106    )BSummary of the Edition Manager4^*¿¯
  6482. ^*x¯4^*x¯
  6483. à*ê¯4â*ꯠä*ä˛
  6484. ˇ·ˇ‚7^ˇˇ©ˇÆ°dONLNdu*à(É*Summary of the Edition ManagerˇˇˇˇˇˇV˛(É2
  6485. ¡*»¯4¡*»¯ ¬*¬¯
  6486. ˇ·ˇ‚7^°dONLNd!≤*¡ì(Ω*Pascal Summaryˇˇˇˇˇˇ∑†(Ω2
  6487. È*Ô¯4Í*Ó¯ Î*ί
  6488. ˇ·ˇ‚7^ °dONLNd2fi*È[(Ê*    Constantsˇˇˇˇˇˇa‡(ÊÚ2,
  6489. Courier
  6490. .°dONLNd=˘*H(*CONST°dONLNdF<ú+{resource types}°dONLNdX<!Ñ* rSectionType°dONLNdn!&)¥    = 'sect';°dONLNd{8!º)H{resource type for a }°dONLNd°#8/n*    { section°dONLNd™#n/t)6}°dONLNd≠1<=ñ(:<{section types}°dONLNdæ?<KÑ* stSubscriber°dONLNd‘?K)¥= $01;°dONLNdfi?8KŒ)H{subscriber section type}°dONLNd˘M<Y~(V< stPublisher°dONLNdMY)¥= $0A;°dONLNdM8Y¬)H{publisher section type°dONLNd/M¬YŒ)ä} °dONLNd3[<gê(d<{update modes}°dONLNdCi<uÑ* sumAutomatic°dONLNdYiu)¥= 0;°dONLNdai8u⁄)H{subscriber receives new } °dONLNdåw8ÉŒ*{ editions automatically}°dONLNdßÖ<ër(é<    sumManual°dONLNd∫Öë)¥= 1;°dONLNd¬Ö8ë⁄)H{subscriber receives new } °dONLNdÌì8ü∞*{ editions manually}°dONLNd°<≠r(™<    pumOnSave°dONLNd°≠)¥= 0;°dONLNd°8≠¬)H{publisher sends new } °dONLNdEØ8ª™*{ editions on save}°dONLNdZΩ<…r(Δ<    pumManual°dONLNdmΩ…)¥= 1;°dONLNduΩ8…⁄)H{publisher does not send } °dONLNd†À8◊⁄*{ new editions until user }°dONLNdÀŸ8Ân*    { request°dONLNd‘ŸnÂt)6}°dONLNd◊Á<ÛB(<{°dONLNdÿÁBÛ)!edition container subpart number}°dONLNd˚ı<ä(˛<kPartsNotUsed°dONLNdı)¥= 0;°dONLNdı8⁄)H{edition is the whole file}°dONLNd7<®( <kPartNumberUnknown°dONLNdS)¥= -1;°dONLNd\8Œ)H{not used in version 7.0}°dONLNduŒ‘)ñ °dONLNdy<+B((<{°dONLNdzB+ê)preview size}°dONLNdâ-<9ä(6<kPreviewWidth°dONLNd†-9)¥= 120;°dONLNd™-89ò)H{preview width} °dONLNdº;<Gê(D<kPreviewHeight°dONLNd‘;G)¥= 120;°dONLNdfi;8Gí)H{preview height°dONLNdÌ;íGò)Z}°dONLNdÒW<c¢(`<{special formats}°dONLNde<qÃ*kPublisherDocAliasFormat°dONLNd&eq&)¥    = 'alis';°dONLNd3e8qŒ)H{alias record from the } °dONLNd\s8»*{ edition to publisher} °dONLNdvÅ<çê(ä<kPreviewFormat°dONLNdéÅç&)¥    = 'prvw';°dONLNdõÅ8çŒ)H{'PICT' thumbnail sketch}°dONLNd∂è<õ¢(ò<kFormatListFormat°dONLNd—èõ&)¥    = 'fmts';°dONLNdfiè8õ»)H{list of all available }°dONLNdù8©Œ*{ formats and their sizes°dONLNdùŒ©‘)ñ}ˇ/®@ˇ ˇˇˇˇ@
  6491. ˇ·ˇ‚7^
  6492. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äSummary of the Edition Manager
  6493. , (‡ˇ2-107
  6494. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  6495. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  6496. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  6497. 4€4—?òÄ
  6498. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  6499. ˛ˇˇˇ
  6500. ˛ˇˇˇ
  6501. ˛ˇˇˇ
  6502. ˛ˇˇˇ˜˝˛ˇ˛
  6503. ˛ˇ˛ˇˇ
  6504. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  6505. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  6506. ˛ˇ˛ˇˇ
  6507. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  6508. ˛ˇˇˇˇ
  6509. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  6510. ˛ˇˇˇˇ
  6511. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  6512. ˛ˇˇˇˇ
  6513. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿,
  6514. Courier.°dONLNd\Zhÿ(eZ{bits for formatMask}°dONLNdjZv¥*kPICTformatMask°dONLNd0jv&)¥= 1;°dONLNd8jVvº)H{graphics format}°dONLNdKxZÑ¥(ÅZkTEXTformatMask°dONLNddxÑ&)¥= 2;°dONLNdlxVѧ)H{text format}°dONLNd{ÜZíÆ(èZksndFormatMask°dONLNdìÜí&)¥= 4;°dONLNdõÜVí™)H{sound format}°dONLNd¨¢ZÆ(´Z {Finder types for edition files}°dONLNdŒ∞Zº“*kPICTEditionFileType°dONLNdÏ∞ºD)¥    = 'edtp';°dONLNd˘∞Vº»)H{contains 'PICT', }°dONLNdæZ “(«ZkTEXTEditionFileType°dONLNd,æ D)¥    = 'edtt';°dONLNd9æV ∞)H{ 'TEXT', and }°dONLNdJÃZÿÃ(’ZksndEditionFileType°dONLNdgÃÿD)¥    = 'edts';°dONLNdtÃVÿŒ)H{ 'snd ' file types}°dONLNdä⁄Zʉ(„ZkUnknownEditionFileType°dONLNd´⁄ÊD)¥    = 'edtu';°dONLNd∏⁄Vʬ)H{unknown file type°dONLNd ⁄¬Ê»)l}°dONLNdÕËZÙ`(ÒZ{°dONLNdŒË`Ù¥)miscellaneous}°dONLNdfiˆZ“(ˇZkFormatLengthUnknown°dONLNd¸ˆD)¥    = -1;    °dONLNd    ˆVÚ)H{length of format unknown}°dONLNd&Z∂(Z:{message IDs for Apple events sent by the Edition Manager}°dONLNdb Z,“*sectionEventMsgClass°dONLNdÄ ,D)¥    = 'sect';°dONLNdç V,¯)H{Apple events sent by the }°dONLNd∏.V:¬*{ Edition Manager}°dONLNdÃ<ZH∫(EZsectionReadMsgID°dONLNdÊ<HD)¥    = 'read';°dONLNdÛ<VH‘)H{Section Read events}°dONLNd
  6515. JZV¿(SZsectionWriteMsgID°dONLNd%JVD)¥    = 'writ';°dONLNd2JVV⁄)H{Section Write events}°dONLNdJXZdΔ(aZsectionScrollMsgID°dONLNdfXdD)¥    = 'scrl';°dONLNdsXVd‡)H{Section Scroll events}°dONLNdåfZrΔ(oZsectionCancelMsgID°dONLNd®frD)¥    = 'cncl';°dONLNdµfVr‡)H{Section Cancel events}°dONLNdœÇZéå(ãZ3{refCon field when displaying stacked dialog boxes}°dONLNdêZúΔ*sfMainDialogRefCon°dONLNd êúD)¥    = 'stdf';°dONLNd-êVúŒ)H{new publisher and }°dONLNdQûV™º*{ new subscriber}°dONLNdd¨Z∏‰(µZsfNewFolderDialogRefCon°dONLNdÖ¨∏D)¥    = 'nfdr';°dONLNdí¨V∏û)H {new folder}°dONLNd†∫ZΔÿ(√ZsfReplaceDialogRefCon°dONLNdø∫ΔD)¥    = 'rplc';°dONLNdÃ∫VΔ∂)H{replace dialog}°dONLNdfi»Z‘fi(—ZsfStatWarnDialogRefCon°dONLNd˛»‘D)¥    = 'stat';°dONLNd »V‘∂)H{warning dialog}°dONLNd÷Z‚Ã(flZsfErrorDialogRefCon°dONLNd:÷‚D)¥    = 'err ';°dONLNdG÷V‚™)H{error dialog}°dONLNdW‰Zÿ(ÌZemOptionsDialogRefCon°dONLNdv‰D)¥    = 'optn';°dONLNdɉV∂)H{options dialog}°dONLNdïÚZ˛¸(˚ZemCancelSectionDialogRefCon°dONLNd∫Ú˛D)¥    = 'cncl';°dONLNd«ÚV˛∂)H{cancel section}°dONLNdŸZ Í(    ZemGotoPubErrDialogRefCon°dONLNd˚ D)¥    = 'gerr';°dONLNdV ¬)H{locate publisher}°dONLNdZ(&(%Z"{pseudo-item hits for dialogHooks}°dONLNdA*Z6Ã*emHookRedrawPreview°dONLNd^*62)¥= 150;°dONLNdh*V6⁄)H{for NewPublisher or }°dONLNdé8VDÊ*{ NewSubscriber dialogs}°dONLNd®FZRÃ(OZemHookCancelSection°dONLNd≈FR2)¥= 160;°dONLNdœFVR¯)H{for SectionOptions dialog}°dONLNdÏTZ`Ã(]ZemHookGoToPublisher°dONLNd    T`2)¥= 161;°dONLNdTV`¯)H{for SectionOptions dialog}°dONLNd0bZnÃ(kZemHookGetEditionNow°dONLNdMbn2)¥= 162;°dONLNdWbVn¯)H{for SectionOptions dialog}°dONLNdtpZ|“(yZemHookSendEditionNow°dONLNdíp|2)¥= 162;°dONLNdúpV|¯)H{for SectionOptions dialog}°dONLNdπ~Zäfi(áZemHookManualUpdateMode°dONLNdŸ~ä2)¥= 163;°dONLNd„~Vä¯)H{for SectionOptions dialog}°dONLNdåZò“(ïZemHookAutoUpdateMode°dONLNdåò2)¥= 164;°dONLNd(åVò¯)H{for SectionOptions dialog}ˇ–@ˇ ˇˇˇˇ@
  6516. ˇ·ˇ‚7^
  6517. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  6518. (‡*2-108    )BSummary of the Edition Manager4^*¿¯
  6519. h*n¯4i*m¯ j*j¯
  6520. ˇ·ˇ‚7^ °dONLNd]*hD(e*Data òp°dONLNd]DhJ)Tµ‡°dONLNd]Jha)ypesˇˇˇˇˇˇa‡(eÚ2,
  6521. Courier
  6522. .°dONLNd x*Ñ~(Å*TYPE TimeStamp°dONLNd%xÑ,)Δ
  6523. = LongInt;°dONLNd4xJѬ)Z{seconds since 1904}°dONLNdJÜ<íê(è<EditionRefNum °dONLNdbÜí,)¥
  6524. = Handle; °dONLNdqÜJí⁄)Z{for use in Edition I/O}°dONLNdãî<†~(ù< UpdateMode °dONLNd†î†,)¥
  6525. = Integer;°dONLNdØîJ†™)Z{sumAutomatic, }°dONLNd–¢JƧ*{ sumManual, } °dONLNd∞Jº‘*{ pumOnSave, pumManual}°dONLNd    æ< Ñ(«< SectionType °dONLNdæ >)¥= SignedByte;°dONLNd1æJ ∂)Z{stSubscriber or }°dONLNdTÃJÿ§*{ stPublisher} °dONLNde⁄<Ê~(„< FormatType °dONLNdz⁄ʧ)¥= PACKED ARRAY[1..4] OF CHAR; °dONLNd©ËJÙÏ+Z{similar to ResType used } °dONLNd’ˆJ‘*{ by the Scrap Manager}°dONLNdÔ<ä(<SectionHandle°dONLNdD)¥= ^SectionPtr;°dONLNd <,x()<
  6526. SectionPtr°dONLNd* ,V)¥= ^SectionRecord;°dONLNd=.<:ê(7<SectionRecord °dONLNdU.:¸)¥= °dONLNdY<<H`(E<RECORD°dONLNdbJNV~+version:°dONLNdsJV2)¢ SignedByte;°dONLNdÉJJV‡)Z{always 1 in version 7.0}°dONLNdüXNdl(aNkind:°dONLNd≠Xd8)¢ SectionType;°dONLNdæXJd‡)Z{publisher or subscriber}°dONLNd⁄fNrl(oNmode:°dONLNdËfr2)¢ UpdateMode;°dONLNd¯fJr»)Z{automatic or manual}°dONLNdtNÄx(}NmdDate:°dONLNd tÄ,)¢
  6527. TimeStamp;°dONLNd/tJÄ⁄)Z{last change to section}°dONLNdJÇNéä(ãN
  6528. sectionID:°dONLNd]Çé )¢LongInt;°dONLNdjÇJé⁄)Z{application-specific, }°dONLNdìêJúŒ*{ unique per document}°dONLNd¨ûN™x(ßNrefCon:°dONLNdºû™ )¢LongInt;°dONLNd…ûJ™Œ)Z{application-specific}°dONLNd‚¨N∏r(µNalias:°dONLNdÒ¨∏8)¢ AliasHandle;°dONLNd¨J∏⁄)Z{handle to alias record}°dONLNd»N‘§(—N9{The following fields are private and are set up by the }°dONLNdZ÷N‚ˆ*{ RegisterSection function.}°dONLNdzÚN˛~*subPart:°dONLNdãÚ˛ )¢LongInt;°dONLNdòÚJ˛Ä)Z    {private}°dONLNd§N ñ(    N nextSection:°dONLNdπ D)¢SectionHandle;°dONLNdÃJ Ä)Z    {private}°dONLNdÿNú(NcontrolBlock:°dONLNdÓ)¢Handle;°dONLNd˙JÄ)Z    {private}°dONLNdN(x(%NrefNum:°dONLNd(D)¢EditionRefNum;°dONLNd)J(Ä)Z    {private}°dONLNd4*<6T(3<END;°dONLNd:C<OV*/EditionContainerSpecPtr =^EditionContainerSpec;°dONLNdkQ<]¥*EditionContainerSpec°dONLNdQ¥]¿)x =°dONLNdÉ_<k`(h<RECORD°dONLNdåmNy~+theFile:°dONLNdùmy)¢FSSpec;°dONLNd©mJyÏ)Z{file containing edition } °dONLNd’{Ját*{ data}°dONLNdflâNï®(íNtheFileScript: °dONLNd˜âï2)¢ ScriptCode;°dONLNdâJï‡)Z{script code of filename}°dONLNd#óN£~(†NthePart:°dONLNd4ó£ )¢LongInt;°dONLNdAóJ£‘)Z{which part of file, } °dONLNdi•J±‘*{ always kPartsNotUsed}ˇ*∂@ˇ ˇˇˇˇ@
  6529. ˇ·ˇ‚7^
  6530. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äSummary of the Edition Manager
  6531. , (‡ˇ2-109
  6532. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  6533. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  6534. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  6535. 4€4—?òÄ
  6536. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  6537. ˛ˇˇˇ
  6538. ˛ˇˇˇ
  6539. ˛ˇˇˇ
  6540. ˛ˇˇˇ˜˝˛ˇ˛
  6541. ˛ˇ˛ˇˇ
  6542. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  6543. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  6544. ˛ˇ˛ˇˇ
  6545. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  6546. ˛ˇˇˇˇ
  6547. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  6548. ˛ˇˇˇˇ
  6549. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  6550. ˛ˇˇˇˇ
  6551. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿,
  6552. Courier.°dONLNd\lh¥(el thePartName:°dONLNd\h2)¢Str31;°dONLNd \hh§)Z
  6553. {reserved}°dONLNd-jlvΔ(slthePartScript: °dONLNdEjvJ)¢
  6554. ScriptCode°dONLNdOjJvP)<;°dONLNdUjhv§)
  6555. {reserved}°dONLNdaxZÑr(ÅZEND;°dONLNdgëZù *!FormatsAvailable = ARRAY[0..0] OF°dONLNdäüZ´~*RECORD°dONLNdì≠lπú+theType:°dONLNd§≠πP)¢ FormatType;°dONLNd¥≠hπÊ)Z{format type for an }°dONLNd⁄ªh«§*
  6556. { edition}°dONLNdÁ…l’®(“l
  6557. theLength:°dONLNd˙…’>)¢LongInt;°dONLNd…h’
  6558. )Z{length of edition format }°dONLNd3◊h„í*{ type}°dONLNd<ÂZÒr(ÓZEND;°dONLNdB˛Z
  6559. “*EditionInfoRecord = °dONLNdX Z~*RECORD°dONLNdal&ñ+crDate:°dONLNdq&J)¢
  6560. TimeStamp;°dONLNdÄh&˛)Z{date edition container }°dONLNd™(h4º*{ was created}°dONLNdª6lBñ(?lmdDate:°dONLNdÀ6BJ)¢
  6561. TimeStamp;°dONLNd⁄6hBÊ)Z{date of last change}°dONLNdÚDlP®(Ml
  6562. fdCreator:°dONLNdDP8)¢OSType;°dONLNdDhPº)Z{file creator}°dONLNd"Rl^ñ([lfdType:°dONLNd2R^8)¢OSType;°dONLNd>Rh^™)Z {file type}°dONLNdL`ll®(il
  6563. container:°dONLNd_`lå)¢EditionContainerSpec;°dONLNdÖnhz∂+Z{the edition}°dONLNdî|Zàr(ÖZEND;°dONLNdöïZ°“*NewPublisherReply = °dONLNd∞£ZØ~*RECORD°dONLNdπ±lΩ¢+    canceled:°dONLNd»±ÿΩ)lBoolean;°dONLNd◊±VΩ¯)~{user canceled dialog box} °dONLNdıølÀ®(»l
  6564. replacing:°dONLNdøÿÀ)lBoolean;°dONLNdøVÀ‡)~{user chose existing } °dONLNd;ÕVŸÚ*{ filename for an edition}°dONLNdX€lÁú(‰lusePart:°dONLNdf€ÿÁ)lBoolean;°dONLNdu€VÁ)~{always FALSE in version 7.0}°dONLNdïÈlıú(Úlpreview:°dONLNd£Èÿı)lHandle;°dONLNd±ÈVı¯)~{handle to 'prvw', 'PICT',}°dONLNd‹˜VÏ*{ 'TEXT', or 'snd ' data}°dONLNd¯l¿(lpreviewFormat:°dONLNd ÿ)l FormatType;°dONLNdVº)~{type of preview}°dONLNd2l®(l
  6565. container:°dONLNdBÿV)lEditionContainerSpec;°dONLNdg!V-∂+~{edition chosen}°dONLNdy/Z;r(8ZEND;°dONLNdHZT“*NewSubscriberReply =°dONLNdïVZb~*RECORD°dONLNdûdlp¢+    canceled:°dONLNd≠dÿp)lBoolean;°dONLNdºdVpÚ)~{user canceled dialog box}°dONLNdŸrl~¥({l formatsMask:°dONLNdÎrÿ~)l SignedByte;°dONLNd˝rV~¬)~{formats required}°dONLNdÄlåÆ(âl container: °dONLNd#ÄÿåV)lEditionContainerSpec;°dONLNdHéVö¬+~{edition selected}°dONLNd\úZ®r(•ZEND;ˇ@ˇ ˇˇˇˇ@
  6566. ˇ·ˇ‚7^
  6567. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  6568. (‡*2-110    )BSummary of the Edition Manager4^*¿¯,
  6569. Courier
  6570. .°dONLNd\<h∫(e<SectionOptionsReply =°dONLNdj<v`*RECORD°dONLNd xNÑÑ+    canceled:°dONLNd/x∫ÑÍ)lBoolean;°dONLNd>x8Ñ‘)~{user canceled dialog box}°dONLNd[ÜNíÑ(èN    changed: °dONLNdjÜ∫íÍ)lBoolean;°dONLNdyÜ8íº)~{changed the section }°dONLNdüî8†n*    { record}°dONLNd´¢NÆÑ(´N    sectionH:°dONLNd∫¢∫Æ)lSectionHandle;°dONLNdœ¢8Æ‘)~{handle to the specified }°dONLNd˘∞8ºû*{ section record}°dONLNdæN x(«Naction:°dONLNdæ∫ Í)lResType;°dONLNd)æ8 å)~{action codes}°dONLNd9Ã<ÿT(’<END;°dONLNd?Â<Ò¢*EditionOpenerVerb°dONLNdQ¢Òò)f)= (eoOpen, eoClose, eoOpenNew, eoCloseNew°dONLNdzÂòÒû)ˆ,°dONLNdÑÛ∫ˇ (¸∫eoCanSubscribe); °dONLNdó<ÿ(
  6571. <EditionOpenerParamBlock = °dONLNd≥<`*RECORD°dONLNdºN)l+info:°dONLNd«∫)&)lEditionInfoRecord;°dONLNd‡8)¬)~{edition container to }°dONLNd+87™*{ be subscribed to}°dONLNd9NEÑ(BN    sectionH:°dONLNd,9∫E)lSectionHandle;°dONLNdA98E»)~{publisher or subscriber°dONLNdY9»EŒ)ê °dONLNdZ9ŒE‘)}°dONLNdkG8S§(P8{ requesting open}°dONLNdÄUNaÑ(^N    document:°dONLNdèU∫aˆ)l
  6572. FSSpecPtr;°dONLNd†U8aû)~{document passed}°dONLNd¥cNoä(lN
  6573. fdCreator:°dONLNdƒc∫o‰)lOSType;°dONLNd“c8o∂)~{Finder creator type}°dONLNdÍqN}Ñ(zN    ioRefNum:°dONLNd˘q∫}Í)lLongInt;°dONLNdq8}§)~{reference number}°dONLNdNãx(àNioProc:°dONLNd*∫ã)lFormatIOProcPtr;°dONLNdA8ãŒ)~{routine to read formats}°dONLNd]çNô~(ñNsuccess:°dONLNdkç∫ôÍ)lBoolean;°dONLNdzç8ôŒ)~{reading or writing was }°dONLNd£õ8ßÜ*{ successful}°dONLNd≥©Nµñ(≤N formatsMask:°dONLNd≈©∫µ¸)l SignedByte;°dONLNd◊©8µº)~{formats required to }°dONLNd˝∑8√Ä* { subscribe}°dONLNd ≈<—T(Œ<END;°dONLNdfi<ÍÑ* FormatIOVerb°dONLNdfiÑÍä)H °dONLNdfiäÍÄ))= (ioHasFormat, ioReadFormat, ioNewFormat°dONLNdHfiÄÍí)ˆ, i°dONLNdKfiíÍÊ)oWriteFormat);°dONLNd[Ï<¯∫(ı<FormatIOParamBlock = °dONLNdr˙<`*RECORD°dONLNd{NÑ+    ioRefNum:°dONLNdä∫Í)lLongInt;°dONLNdô8§)~{reference number}°dONLNdÆN"x(Nformat:°dONLNdª∫"¸)l FormatType;°dONLNdÕ8"∂)~{edition format type}°dONLNdÂ$N0ñ(-N formatIndex:°dONLNd˜$∫0Í)lLongInt;°dONLNd$80Ï)~{opener-specific enumeration }°dONLNd428>Ü*{ of formats}°dONLNdD@NLx(INoffset:°dONLNdQ@∫LÍ)lLongInt;°dONLNd`@8L∞)~{offset into format}°dONLNdwNNZ~(WNbuffPtr:°dONLNdÖN∫Z“)lPtr;°dONLNdêN8Z§)~{data starts here}°dONLNd•\Nh~(eNbuffLen:°dONLNd≥\∫hÍ)lLongInt;°dONLNd¬\8hò)~{length of data}°dONLNd”j*vB(s*END;ˇ*æ@ˇ ˇˇˇˇ@
  6574. ˇ·ˇ‚7^
  6575. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äSummary of the Edition Manager
  6576. , (‡ˇ2-111
  6577. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  6578. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  6579. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  6580. 4€4—?òÄ
  6581. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  6582. ˛ˇˇˇ
  6583. ˛ˇˇˇ
  6584. ˛ˇˇˇ
  6585. ˛ˇˇˇ˜˝˛ˇ˛
  6586. ˛ˇ˛ˇˇ
  6587. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  6588. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  6589. ˛ˇ˛ˇˇ
  6590. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  6591. ˛ˇˇˇˇ
  6592. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  6593. ˛ˇˇˇˇ
  6594. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  6595. ˛ˇˇˇˇ
  6596. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  6597. hHn4iHm jHj
  6598. ˇ·ˇ‚7^ °dONLNd]HhΔ(eHEdition Manager Routinesˇˇˇˇˇˇa‡(e2°dONLNd~HäÍ(áH Initializing the Edition Manager,
  6599. Courier
  6600. .°dONLNd;ëHùfi*FUNCTION InitEditionPack °dONLNdUëÚù")™: OSErr; .°dONLNd^ØHªˆ(∏H"Creating and Registering a Section
  6601. .°dONLNdÅ¡HÕ∫*FUNCTION NewSection°dONLNdï¡ÚÕæ)™"(container: EditionContainerSpec; °dONLNd∑Œ¯⁄+/sectionDocument: FSSpecPtr; kind: SectionType; °dONLNdÊ€¯Á*-sectionID: LongInt; initialMode: UpdateMode; °dONLNd˯Ùö*VAR sectionH: SectionHandle°dONLNd.ËöÙ¶)¢):°dONLNd0˶ٖ)  OSErr;°dONLNd8¯Hÿ(HFUNCTION RegisterSection°dONLNdQ¯Úà)™(sectionDocument: FSSpec;°dONLNdj¯àé)ñ °dONLNdl¯˛(¯s°dONLNdm˛à)ectionH: SectionHandle;°dONLNdÑàé)ä °dONLNdܯ˛(¯V°dONLNdᲆ)AR aliasWasUpdated: Boolean°dONLNd¢†¶)¢)°dONLNd§¯+
  6602. ((¯: O°dONLNdß
  6603. +()SErr;°dONLNd≠/H;‰(8HFUNCTION UnRegisterSection°dONLNd»/Ú;Ç)™(sectionH: SectionHandle°dONLNd‡/Ç;é)ê):°dONLNd‚/é;∏)  OSErr;°dONLNdÍ?HK(HHFUNCTION IsRegisteredSection°dONLNdLÚX∏+™!(sectionH: SectionHandle): OSErr;°dONLNd)\Hhfi(eHFUNCTION AssociateSection°dONLNdC\Úhé)™(sectionH: SectionHandle; °dONLNd^i¯u¶+newSectionDocument: FSSpecPtr°dONLNd{i¶u≤)Æ):°dONLNd}i≤u‹)  OSErr; .°dONLNdÖáHì#(êH*Creating and Deleting an Edition Container
  6604. .°dONLNd∞öH¶*#FUNCTION CreateEditionContainerFile°dONLNd‘ßÚ≥Ë+™)(editionFile: FSSpec; fdCreator: OSType; °dONLNd˝¥¯¿æ+!editionFileNameScript: ScriptCode°dONLNd¥æ¿ )Δ):°dONLNd ¥ ¿Ù)  OSErr;°dONLNd(ƒH–(ÕH#FUNCTION DeleteEditionContainerFile°dONLNdL—Ú›j+™(editionFile: FSSpec°dONLNd`—j›v)x):°dONLNdb—v›†)  OSErr; .°dONLNdjÔH˚{(¯H
  6605. Setting anÉ¿°dONLNdtÔ{˚ö)3d Gett˘ °dONLNdzÔö˚˜)ing a Format Mark
  6606. .°dONLNdåHˆ(
  6607. HFUNCTION SetEditionFormatMark°dONLNd™Ú¶+™(whichEdition: EditionRefNum; °dONLNd…¯'é+whichFormat: FormatType; °dONLNd„(¯4d*setMarkTo: LongInt°dONLNdı(d4p)l):°dONLNd˜(p4ö)  OSErr;°dONLNdˇ8HDˆ(AHFUNCTION GetEditionFormatMark°dONLNdEÚQ¶+™(whichEdition: EditionRefNum; °dONLNd<R¯^é+whichFormat: FormatType; °dONLNdV_¯kà*VAR currentMark: LongInt°dONLNdn_àkî)ê):°dONLNdp_îkƒ)  OSErr; ˇÊ@ˇ ˇˇˇˇ@
  6608. ˇ·ˇ‚7^
  6609. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  6610. (‡*2-112    )BSummary of the Edition Manager4^*¿¯ °dONLNd\*h£(e*Reading in Edition Data,
  6611. Courier
  6612. .°dONLNdo*{¢*FUNCTION OpenEdition°dONLNd-o‘{¶)™#(subscriberSectionH: SectionHandle;°dONLNdPo¶{¨)“ °dONLNdR|⁄à‡(Ö⁄V°dONLNdS|‡àp)AR refNum: EditionRefNum°dONLNdk|pà|)ê):°dONLNdm||à¶)  OSErr;°dONLNduå*ò¿(ï*FUNCTION EditionHasFormat°dONLNdèå‘òà)™(whichEdition: EditionRefNum; °dONLNdÆô⁄•p+whichFormat: FormatType; °dONLNd»¶⁄≤R*VAR formatSize: Size°dONLNd‹¶R≤^)x):°dONLNdfi¶^≤é)  OSErr; °dONLNdÁ∂*¬¢(ø*FUNCTION ReadEdition°dONLNd¸∂‘¬à)™(whichEdition: EditionRefNum; °dONLNd√⁄œ‚+,whichFormat: FormatType; buffPtr: UNIV Ptr; °dONLNdG–⁄‹@*VAR buffLen: Size°dONLNdX–@‹L)f):°dONLNdZ–L‹v)  OSErr; .°dONLNdbÓ*˙5(˜*WØ∞°dONLNdcÓ4˙•)
  6613. riting out Edition Data
  6614. .°dONLNd{* ¥(    *FUNCTION OpenNewEdition°dONLNdì‘ ¶)™#(publisherSectionH: SectionHandle; °dONLNd∑⁄L+fdCreator: OSType; °dONLNdÀ⁄&∏*%publisherSectionDocument: FSSpecPtr; °dONLNdÒ'⁄3p*VAR refNum: EditionRefNum°dONLNd
  6615. 'p3|)ñ):°dONLNd '|3¶)  OSErr;°dONLNd7*C®(@*FUNCTION WriteEdition°dONLNd*7‘Cà)™(whichEdition: EditionRefNum; °dONLNdID⁄P‚+,whichFormat: FormatType; buffPtr: UNIV Ptr; °dONLNduQ⁄](*buffLen: Size°dONLNdÇQ(]4)N):°dONLNdÑQ4]^)  OSErr; .°dONLNdåo*{Ï(x*%Closing an Edition After Reading or Wûê°dONLNd±oÏ{)¬riting
  6616. .°dONLNd∏Ç*é®(ã*FUNCTION CloseEdition°dONLNdŒÇ‘éà)™(whichEdition: EditionRefNum; °dONLNdÌè⁄õL+successful: Boolean°dONLNdèLõX)r):°dONLNdèXõÇ)  OSErr; .°dONLNd
  6617. ≠*πß(∂*Displaying Dialog Boxes
  6618. .°dONLNd"ø*À*$FUNCTION GetLastEditionContainerUsed°dONLNdGÑÿ¨+™$(VAR container: EditionContainerSpec°dONLNdkèÿ∏)ÿ):°dONLNdmÃ∏ÿ‚)  OSErr;°dONLNdu‹*Ë“(Â*FUNCTION NewSubscriberDialog°dONLNdíÈ‘ıà+™(VAR reply: NewSubscriberReply°dONLNd∞Èàıî)¥):°dONLNd≤Èîıæ)  OSErr;°dONLNd∫˘*Ã(*FUNCTION NewPublisherDialog°dONLNd÷˘‘Ç)™(VAR reply: NewPublisherReply°dONLNdÛ˘Çé)Æ):°dONLNdı˘é∏)  OSErr;°dONLNd˝    *ÿ(*FUNCTION SectionOptionsDialog°dONLNd‘"é+™(VAR reply: SectionOptionsReply°dONLNd:é"ö)∫):°dONLNd<ö"ƒ)  OSErr;°dONLNdD&*2‰(/*FUNCTION NewSubscriberExpDialog°dONLNdd3‘?Ë+™.(VAR reply: NewSubscriberReply; where: Point; °dONLNdí@⁄Là+expansionDITLresID: Integer; °dONLNd∞M⁄YÇ*dlgHook: ExpDlgHookProcPtr; °dONLNdÕZ⁄f¨*#filterProc: ExpModalFilterProcPtr; °dONLNdg⁄sX*yourDataPtr: UNIV Ptr°dONLNdgXsd)~):°dONLNdgdsé)  OSErr;ˇ,:@ˇ ˇˇˇˇ@
  6619. ˇ·ˇ‚7^
  6620. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äSummary of the Edition Manager
  6621. , (‡ˇ2-113
  6622. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  6623. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  6624. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  6625. 4€4—?òÄ
  6626. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  6627. ˛ˇˇˇ
  6628. ˛ˇˇˇ
  6629. ˛ˇˇˇ
  6630. ˛ˇˇˇ˜˝˛ˇ˛
  6631. ˛ˇ˛ˇˇ
  6632. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  6633. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  6634. ˛ˇ˛ˇˇ
  6635. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  6636. ˛ˇˇˇˇ
  6637. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  6638. ˛ˇˇˇˇ
  6639. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  6640. ˛ˇˇˇˇ
  6641. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿,
  6642. Courier.°dONLNd\Hh¸(eHFUNCTION NewPublisherExpDialog°dONLNdiÚu+™-(VAR reply: NewPublisherReply; where: Point; °dONLNdLv¯Ç¶+expansionDITLresID: Integer; °dONLNdjɯè†*dlgHook: ExpDlgHookProcPtr; °dONLNdáê¯ú *#filterProc: ExpModalFilterProcPtr; °dONLNd™ù¯©v*yourDataPtr: UNIV Ptr°dONLNdøùv©Ç)~):°dONLNd¡ùÇ©¨)  OSErr;°dONLNd…≠Hπ(∂H FUNCTION SectionOptionsExpDialog°dONLNdÍ∫ÚΔ +™/(VAR reply: SectionOptionsReply; where: Point; °dONLNd«¯”¶+expansionDITLresID: Integer; °dONLNd7‘¯‡†*dlgHook: ExpDlgHookProcPtr; °dONLNdT·¯Ì *#filterProc: ExpModalFilterProcPtr; °dONLNdwÓ¯˙v*yourDataPtr: UNIV Ptr°dONLNdåÓv˙Ç)~):°dONLNdéÓÇ˙¨)  OSErr; .°dONLNdñ HK(H2Locating a Publisher and Edition From a Subscriber
  6643. .°dONLNd…H*“*FUNCTION GetEditionInfo°dONLNd·Ú*é)™(sectionH: SectionHandle; °dONLNd¸+¯7ƒ+"VAR editionInfo: EditionInfoRecord°dONLNd+ƒ7–)Ã):°dONLNd +–7˙)  OSErr;°dONLNd(;HGˆ(DHFUNCTION GoToPublisherSection°dONLNdFHÚT≤+™ (container: EditionContainerSpec°dONLNdfH≤Tæ)¿):°dONLNdhHæTË)  OSErr; .°dONLNdpfHrÕ(oHEdition Container Formats
  6644. .°dONLNdäyHÖÍ*FUNCTION GetStandardFormats°dONLNd¶yÚÖæ)™"(container: EditionContainerSpec; °dONLNd…ܯí≤+VAR previewFormat: FormatType; °dONLNdÈì¯üé*preview, publisherAlias, °dONLNd†¯¨R*formats: Handle°dONLNd†R¨^)Z):°dONLNd†^¨à)  OSErr; .°dONLNdæH ï(«HReading and WI∞°dONLNd)æï ¸)Mriting Non-Edition fiä∞°dONLNd>渠
  6645. )gles
  6646. .°dONLNdB–H‹ˆ(ŸHFUNCTION GetEditionOpenerProc°dONLNd`›ÚÈ∏+™!(VAR opener: EditionOpenerProcPtr°dONLNdÅ›∏ȃ)Δ):°dONLNdÉ›ƒÈÓ)  OSErr;°dONLNdãÌH˘ˆ(ˆHFUNCTION SetEditionOpenerProc°dONLNd©˙Ú†+™(opener: EditionOpenerProcPtr°dONLNdΔ˙†¨)Æ):°dONLNd»˙¨÷)  OSErr;°dONLNd–
  6647. H¸(HFUNCTION CallEditionOpenerProc°dONLNdÔÚ#¶+™(selector: EditionOpenerVerb; °dONLNd$¯0æ+!VAR PB: EditionOpenerParamBlock; °dONLNd01¯=¶*routine: EditionOpenerProcPtr°dONLNdM1¶=≤)Æ):°dONLNdO1≤=‹)  OSErr;°dONLNdWAHMfi(JHFUNCTION CallFormatIOProc°dONLNdqAÚMà)™(selector: FormatIOVerb; °dONLNdãN¯Z†+VAR PB: FormatIOParamBlock; °dONLNd®[¯gà*routine: FormatIOProcPtr°dONLNd¿[àgî)ê):°dONLNd¬[îgæ)  OSErr;
  6648. äHè4äHè ãHã
  6649. ˇ·ˇ‚7^ .°dONLNdÀHäï(áHApplication-Defiâ°°dONLNd€ïä’)M ned Routinesˇˇˇˇˇˇa‡(á2
  6650. .°dONLNdÈïH°Δ(ûHFUNCTION MyExpDlgHook°dONLNdˇïÚ°‚)™((itemOffset: Integer; itemHit: Integer; °dONLNd(¢¯Æ|+theDialog: DialogPtr; °dONLNd?دªX*yourDataPtr: Ptr°dONLNdOØXªd)`):°dONLNdQØdªö)      Integer;ˇ@ˇ ˇˇˇˇ@
  6651. ˇ·ˇ‚7^
  6652. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  6653. (‡*2-114    )BSummary of the Edition Manager4^*¿¯,
  6654. Courier
  6655. .°dONLNd\*h¿(e*FUNCTION MyExpModalFilter°dONLNd\‘h^)™(theDialog: DialogPtr; °dONLNd2i⁄u|+VAR theEvent: EventRecord; °dONLNdNv⁄Ç‹*+itemOffset: Integer; VAR itemHit: Integer; °dONLNdyÉ⁄è:*yourDataPtr: Ptr°dONLNdâÉ:èF)`):°dONLNdãÉFè|)      Boolean;°dONLNdïì*üê(ú*FUNCTION MyOpener°dONLNdßì‘üà)™(selector: EditionOpenerVerb; °dONLNdΔ†⁄¨ +(VAR PB: EditionOpenerParamBlock): OSErr;°dONLNdÔ∞*ºx(π*FUNCTION MyIO°dONLNd˝∞‘ºj)™(selector: FormatIOVerb; °dONLNdΩ⁄…v+VAR PB: FormatIOParamBlock°dONLNd1Ωv…Ç)ú):°dONLNd3ΩÇ…¨)  OSErr;
  6656. ˙*¯4˙*¯ ˚*˚¯
  6657. ˇ·ˇ‚7^.°dONLNd<Î*˙s(ˆ*    C Summaryˇˇˇˇˇˇ∑†(ˆ2
  6658. "*(¯4#*'¯ $*$¯
  6659. ˇ·ˇ‚7^ °dONLNdH*"[(*    Constantsˇˇˇˇˇˇa‡(Ú2
  6660. .°dONLNdS2*>H(;*CONST°dONLNd[@*LN*enum {°dONLNdcN<Z®+/*resource types*/°dONLNdw\<hÆ*#define rSectionTyp°dONLNdä\Æh¥)re°dONLNdï\h¸)B '°dONLNdó\¸h) sect'°dONLNd†\8h»)</*resource type for a */°dONLNd»j8vÄ* /* section*/°dONLNd◊Ü<í¢(è</*section types*/°dONLNdÍî<†Ñ* stSubscriber°dONLNdî†)¥= 0x01,°dONLNd î8†⁄)H/*subscriber section type*/°dONLNd(¢<Æ~(´< stPublisher°dONLNd=¢Æ)¥= 0x0A,°dONLNdH¢8Æ⁄)H/*publisher section type*/ °dONLNdfæ< ú(«</*update modes*/°dONLNdxÃ<ÿÑ* sumAutomatic°dONLNdéÃÿ)¥= 0,°dONLNdñÃ8ÿÊ)H/*subscriber receives new */ °dONLNd√⁄8Ê⁄*/* editions automatically*/°dONLNd‡Ë<Ùr(Ò<    sumManual°dONLNdÛËÙ)¥= 1,°dONLNd˚Ë8ÙÊ)H/*subscriber receives new */ °dONLNd(ˆ8º*/* editions manually*/°dONLNd@<r(<    pumOnSave°dONLNdS)¥= 0,°dONLNd[8Œ)H/*publisher sends new */ °dONLNdÑ8∂*/* editions on save*/°dONLNdõ <,r()<    pumManual°dONLNdÆ ,)¥= 1,°dONLNd∂ 8,Ê)H/*publisher does not send */ °dONLNd„.8:Ê*/* new editions until user */°dONLNd<8HÄ* /* request*/°dONLNdU<a(^<$/*edition container subpart number*/°dONLNdDc<oä*kPartsNotUsed°dONLNd[co)¥= 0,°dONLNdcc8oÊ)H/*edition is the whole file*/°dONLNdÇq<}®(z<kPartNumberUnknown°dONLNdûq})¥= -1,°dONLNdßq8}‡)H/*not used in version 7.0*/ °dONLNdΔç<ôú(ñ</*preview size*/°dONLNdÿõ<ßä*kPreviewWidth°dONLNdÔõß)¥= 120,°dONLNd˘õ8ߧ)H/*preview width*/ °dONLNd©<µê(≤<kPreviewHeight°dONLNd%©µ)¥= 120,°dONLNd/©8µ§)H/*preview height*/ˇ3.@ˇ ˇˇˇˇ@
  6661. ˇ·ˇ‚7^
  6662. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äSummary of the Edition Manager
  6663. , (‡ˇ2-115
  6664. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  6665. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  6666. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  6667. 4€4—?òÄ
  6668. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  6669. ˛ˇˇˇ
  6670. ˛ˇˇˇ
  6671. ˛ˇˇˇ
  6672. ˛ˇˇˇ˜˝˛ˇ˛
  6673. ˛ˇ˛ˇˇ
  6674. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  6675. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  6676. ˛ˇ˛ˇˇ
  6677. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  6678. ˛ˇˇˇˇ
  6679. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  6680. ˛ˇˇˇˇ
  6681. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  6682. ˛ˇˇˇˇ
  6683. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿,
  6684. Courier.°dONLNd\ZhÃ(eZ/*special formats*/°dONLNdjZv*#define kPublisherDocAliasForma°dONLNd4jv)∫t°dONLNd?jv&) '°dONLNdAj&vD) alis'°dONLNdJjVv¯)0/*alias record from the */ °dONLNduxVÑÚ*/* edition to publisher*/ °dONLNdëÜZíÿ(èZ#define kPreviewForma°dONLNd¶Üÿífi)~t°dONLNd≤Ü í&)H'°dONLNd≥Ü&í>)prvw°dONLNd∑Ü>íD)'°dONLNdªÜVí\)/°dONLNdºÜ\í¯)*'PICT' thumbnail sketch*/°dONLNdÿîZ†Í(ùZ#define kFormatListForma°dONLNdî͆)êt°dONLNd˚î†)$ °dONLNd˝î †&)'°dONLNd˛î&†>)fmts°dONLNdî>†D)'°dONLNdîV†\)/°dONLNdî\†Ú)*list of all available */°dONLNd0¢VÆ˛(´V/* formats and their sizes*/°dONLNdOæZ ‰(«Z/*bits for formatMask*/°dONLNdhÃZÿ¥*kPICTformatMask°dONLNdÅÃÿ&)¥= 1,°dONLNdâÃVÿ»)H/*graphics format*/°dONLNdû⁄ZÊ¥(„ZkTEXTformatMask°dONLNd∑⁄Ê&)¥= 2,°dONLNdø⁄VÊ∞)H/*text format*/°dONLNd–ËZÙÆ(ÒZksndFormatMask°dONLNdËËÙ&)¥= 4,°dONLNdËVÙ∂)H/*sound format*/°dONLNdZ&(Z"/*Finder types for edition files*/°dONLNd'Z¸*#define kPICTEditionFileTyp°dONLNdB¸)¢e°dONLNdM) °dONLNdO &)'°dONLNdP&>)edtp°dONLNdT>D)'°dONLNdXV\)/°dONLNdY\‘)*contains 'PICT', */°dONLNdo Z,¸()Z#define kTEXTEditionFileTyp°dONLNdä ¸,)¢e°dONLNdï ,) °dONLNdó  ,&)'°dONLNdò &,>)edtt°dONLNdú >,D)'°dONLNd† V,\)/°dONLNd° \,º)* 'TEXT', and */°dONLNd≥.Z:ˆ(7Z#define ksndEditionFileTyp°dONLNdÕ.ˆ:¸)úe°dONLNdÿ.:) °dONLNd⁄. :&)'°dONLNd€.&:>)edts°dONLNdfl.>:D)'°dONLNd„.V:\)/°dONLNd‰.\:⁄)* 'snd ' file types*/°dONLNd˚<ZH(EZ#define kUnknownEditionFileTyp°dONLNd<H)¥e°dONLNd$<H) °dONLNd&< H&) '°dONLNd'<&H>)edtu°dONLNd+<>HD)'°dONLNd/<VH\)/°dONLNd0<\H‘)*unknown file type*/°dONLNdGXZd2(aZ$/*pseudo-item hits for dialogHooks*/°dONLNdmfZrÃ*emHookRedrawPreview°dONLNdäfr2)¥= 150,°dONLNdîfVrÊ)H/*for NewPublisher or */°dONLNdºtVÄÚ*/* NewSubscriber dialogs*/°dONLNdÿÇZéÃ(ãZemHookCancelSection°dONLNdıÇé2)¥= 160,°dONLNdˇÇVé)H/*for SectionOptions dialog*/°dONLNdêZúÃ(ôZemHookGoToPublisher°dONLNd;êú2)¥= 161,°dONLNdEêVú)H/*for SectionOptions dialog*/°dONLNddûZ™Ã(ßZemHookGetEditionNow°dONLNdÅû™2)¥= 162,°dONLNdãûV™)H/*for SectionOptions dialog*/°dONLNd™¨Z∏“(µZemHookSendEditionNow°dONLNd»¨∏2)¥= 162,°dONLNd“¨V∏)H/*for SectionOptions dialog*/°dONLNdÒ∫ZΔfi(√ZemHookManualUpdateMode°dONLNd∫Δ2)¥= 163,°dONLNd∫VΔ)H/*for SectionOptions dialog*/°dONLNd:»Z‘“(—ZemHookAutoUpdateMode°dONLNdX»‘&)¥= 16°dONLNd\»&‘,)4°dONLNda»V‘\)0/°dONLNdb»\‘)*for SectionOptions dialog*/°dONLNd÷H‚N(flH}°dONLNdÄ÷N‚T);°dONLNdɉZÍ+ /*edition opener verbs*/°dONLNdúÚH˛º(˚H>enum {eoOpen, eoClose, eoOpenNew, eoCloseNew, eoCanSubscribe};°dONLNd‹Hf*enum °dONLNd·fl){°dONLNd‰Z(`(%Z/°dONLNdÂ`(í)3*refCon field when displaying stacked dialog boxes*°dONLNdí(ò(%í/°dONLNd*Z6(3Z#define emOptionsDialogRefCo°dONLNd7*6)®n°dONLNdD*26>)0 '°dONLNdF*>6\) optn'°dONLNdO*z6Ê)</*options dialog*/°dONLNdc8ZD&(AZ"#define emCancelSectionDialogRefCo°dONLNdÖ8&D,)Ãn°dONLNdí82D>)  '°dONLNdî8>D\) cncl'°dONLNdù8zDÊ)</*cancel section*/°dONLNd±FZR(OZ#define emGotoPubErrDialogRefCo°dONLNd–FR)∫n°dONLNd›F2R>) '°dONLNdflF>R\) gerr'°dONLNdËFzRÚ)</*locate publisher*/°dONLNdˇbZn“(kZkFormatLengthUnknown°dONLNdbn,)¥= -1 °dONLNd&bVn˛)H/*length of format unknown*/°dONLNdCpH|N(yH}°dONLNdDpN|T);°dONLNdG~Zäò+ 5/*refCon field when displaying stacked dialog boxes*/°dONLNd~åZòˆ*#define sfMainDialogRefCon°dONLNd¢åò8)¥ 'stdf'°dONLNd≠åVòŒ)H{new publisher and }°dONLNd—öV¶º*{ new subscriber}°dONLNd‰®Z¥(±Z#define sfNewFolderDialogRefCon°dONLNd®¥8)∫'nfdr'°dONLNd®V¥û)B {new folder}ˇ@ˇ ˇˇˇˇ@
  6685. ˇ·ˇ‚7^
  6686. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  6687. (‡*2-116    )BSummary of the Edition Manager4^*¿¯,
  6688. Courier
  6689. .°dONLNd\<hÍ(e<#define sfReplaceDialogRefCon°dONLNd'\h)¥ 'rplc'°dONLNd2\8hò)H{replace dialog}°dONLNdDj<v(s<#define sfStatWarnDialogRefCon°dONLNdcjv)¥ 'stat'°dONLNdwj8vò)H{warning dialog}°dONLNdâx<Ñfi(Å<#define sfErrorDialogRefCon°dONLNdÆxÑ)¥ 'err '°dONLNdπx8Ñå)H{error dialog}°dONLNd î<†§(ù<</*message IDs for Apple events sent by the Edition Manager*/°dONLNd¢<Æl*#define °dONLNd¢lÆfi)0sectionEventMsgClas°dONLNd#¢fiƉ)rs°dONLNd.¢Ƹ) '°dONLNd0¢¸Æ) sect°dONLNd4¢Æ)'°dONLNd9¢8Æ>)$/°dONLNd:¢>ÆÊ)*Apple events sent by the */°dONLNdf∞8º™(π8/* Edition Manager*°dONLNdy∞™º∞)r/°dONLNd|æ< r(«<    #define s°dONLNdÖær Δ)6ectionReadMsgI°dONLNdìæΔ Ã)TD°dONLNdûæ ¸)* '°dONLNd†æ¸ ) read°dONLNd§æ )'°dONLNd©æ8 >)$/°dONLNd™æ> ¬)*Section Read events*/°dONLNd¬Ã<ÿr(’<    #define s°dONLNdÀÃrÿÃ)6ectionWriteMsgI°dONLNd⁄ÃÃÿ“)ZD°dONLNdÂÃÿ¸)$ '°dONLNdÁøÿ) writ°dONLNdÎÃÿ)'°dONLNdÃ8ÿ>)$/°dONLNdÒÃ>ÿ»)*Section Write events*/°dONLNd
  6690. ⁄<Êl(„<#define °dONLNd⁄lÊ“)0sectionScrollMsgI°dONLNd#⁄“Êÿ)fD°dONLNd.⁄ʸ) '°dONLNd0⁄¸Ê) scrl°dONLNd4⁄Ê)'°dONLNd9⁄8Ê>)$/°dONLNd:⁄>ÊŒ)*Section Scroll events*/°dONLNdTË<Ùl(Ò<#define °dONLNd\ËlÙ“)0sectionCancelMsgI°dONLNdmË“Ùÿ)fD°dONLNdxËÙ¸) '°dONLNdz˸Ù) cncl°dONLNd~ËÙ)'°dONLNdÉË8Ù>)$/°dONLNdÑË>ÙŒ)*Section Cancel events*/
  6691. *¯4*¯ *¯
  6692. ˇ·ˇ‚7^ .°dONLNdû *D(*Data òp°dONLNd£ DJ)Tµ‡°dONLNd§ J[)yper °dONLNdß \a)sˇˇˇˇˇˇa‡(Ú2
  6693. .°dONLNd™'*30(0*t°dONLNd´'03Í)ypedef unsigned long TimeStamp;°dONLNdŸ'83∂(08/*seconds since 1904*°dONLNdÓ'∂3º)~/°dONLNd5*A0(>*t°dONLNdÒ50Aÿ)ypedef Handle EditionRefNum;°dONLNdˇˇ)®`°dONLNd58Aº)`/*used in Edition I/O*°dONLNd35ºA¬)Ñ/°dONLNd5C*O0(L*t°dONLNd6C0O¿)ypedef short UpdateMode;°dONLNd]C8OD(L8/*°dONLNd_CDOí) update mode: °dONLNdlCíOÚ)NsumAutomatic, */°dONLNdåQ8]û(Z8/* sumManual, */ °dONLNd≠_8kŒ*/* pumOnSave, pumManual*/°dONLNd«m*y¿(v*typedef char SectionType;°dONLNdÔm8y⁄(v8/*one byte, stSubscriber */°dONLNd{8á∞*/* or stPublisher*/ °dONLNd/â*ï(í*!typedef unsigned long FormatType;°dONLNd_â8ïº(í8/*similar to ResType*/°dONLNdw•*±Æ(Æ*struct SectionRecord {°dONLNdè≥<øÆ+SignedByte version;°dONLNd∞≥8øÏ)¸/*always 1x01 in version 7.0*/°dONLNd–¡<Õ¢( <SectionType kind;°dONLNdÔ¡8Õ™)¸/*stPublisher or */°dONLNdœ8€û*/* stSubscriber*/°dONLNd%›<Èú(Ê<UpdateMode mode;°dONLNdC›8Ȭ)¸/*automatic or manual*/°dONLNd\Î<˜¢(Ù<TimeStamp mdDate;°dONLNd{Î8˜‘)¸/*last change to section*/°dONLNdó˘<ñ(<long sectionID;°dONLNd¥˘8‘)¸/*application-specific, */°dONLNdfi8»*/* unique per document*/°dONLNd¯<!Ñ(< long refCon;°dONLNd8!»)¸/*application-specific*/°dONLNd,#</®(,<AliasHandle alias;°dONLNdL#8/‘)¸/*handle to alias record*/°dONLNdh1<=ä(:<long subPart;°dONLNdÉ18=>)¸/°dONLNdÑ1>=z)
  6694. *private*/°dONLNdê?<KB(H<s°dONLNdë?BK)"truct SectionRecord **nextSection;°dONLNd¡?8K>)ˆ/°dONLNd¬?>Kz)
  6695. *private*/°dONLNdŒM<YB(V<H°dONLNdœMBY¥)andle controlBlock;°dONLNdM8Yz)ˆ /*private*/°dONLNd˝[<g∫(d<EditionRefNum refNum;°dONLNd [8gz)¸ /*private*/°dONLNd,i*u6(r*};°dONLNd0Ö*ë,*+typedef struct SectionRecord SectionRecord;°dONLNd\ì*ü\*3typedef SectionRecord *SectionPtr, **SectionHandle;ˇ*‡@ˇ ˇˇˇˇ@
  6696. ˇ·ˇ‚7^
  6697. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äSummary of the Edition Manager
  6698. , (‡ˇ2-117
  6699. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  6700. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  6701. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  6702. 4€4—?òÄ
  6703. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  6704. ˛ˇˇˇ
  6705. ˛ˇˇˇ
  6706. ˛ˇˇˇ
  6707. ˛ˇˇˇ˜˝˛ˇ˛
  6708. ˛ˇ˛ˇˇ
  6709. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  6710. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  6711. ˛ˇ˛ˇˇ
  6712. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  6713. ˛ˇˇˇˇ
  6714. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  6715. ˛ˇˇˇˇ
  6716. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  6717. ˛ˇˇˇˇ
  6718. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿,
  6719. Courier.°dONLNd\Hhˆ(eHstruct EditionContainerSpec {°dONLNdjZv¥+FSSpec theFile;°dONLNd<jVv‘)¸/*file containing */ °dONLNdaxVѺ*/* edition data*/°dONLNdtÜZíˆ(èZScriptCode theFileScript; °dONLNdúÜVí¯)¸/*script code of filename*/°dONLNdπîZ†®(ùZlong thePart;°dONLNd‘îV†Ï)¸/*which part of file, */ °dONLNd˝¢VÆÏ*/* always kPartsNotUsed*/°dONLNd∞ZºΔ(πZStr31 thePartName;°dONLNd8∞Vº\)¸/°dONLNd9∞\ºò)
  6720. *reserved*°dONLNdC∞òºû)</°dONLNdFæZ ˆ(«ZScriptCode thePartScript; °dONLNdnæV \)¸/°dONLNdoæ\ ò)
  6721. *reserved*°dONLNdyæò û)</°dONLNd{ÃHÿT(’H};°dONLNdËHÙû*9typedef struct EditionContainerSpec EditionContainerSpec;°dONLNdπˆHå*6typedef EditionContainerSpec *EditionContainerSpecPtr;°dONLNdÒH‰*struct EditionInfoRecord {°dONLNd Z,¿+TimeStamp crDate;°dONLNd+ D,Ê)Í/*date edition container */°dONLNdU.D:§*/* was created*/°dONLNdg<ZH¿(EZTimeStamp mdDate;°dONLNdÖ<DHŒ)Í/*date of last change*/°dONLNdûJZV¿(SZOSType fdCreator;°dONLNdºJDV§)Í/*file creator*/°dONLNdŒXZdÆ(aZOSType fdType;°dONLNdÈXDdí)Í/*file type*/°dONLNd¯fZr(oZEditionContainerSpec container;°dONLNd$fDrû)Í/*the edition*/°dONLNd4tHÄT(}H};°dONLNd8êHúz*3typedef struct EditionInfoRecord EditionInfoRecord;°dONLNdm¨H∏‰*struct NewPublisherReply {°dONLNdâ∫ZΔ¿+Boolean canceled;°dONLNdß∫DΔÚ)Í/*user canceled dialog box*/ °dONLNdΔ»Z‘Δ(—ZBoolean replacing;°dONLNd»D‘⁄)Í/*user chose existing */ °dONLNd÷D‚Ï*/* filename for an edition*/°dONLNd+‰Z∫(ÌZBoolean usePart;°dONLNdH‰DÚ)Í/*always FALSE in version */ °dONLNdtÚD˛t*/* 7.0*/°dONLNd~Z ¥(    ZHandle preview;°dONLNdöD Ú)Í/*handle to 'prvw', 'PICT',*/°dONLNdΔDÊ*/* 'TEXT', or 'snd ' data*/°dONLNd„Z((%ZFormatType previewFormat;°dONLNd    D(∂)Í/*type of preview*/°dONLNd*Z6(3ZEditionContainerSpec container;°dONLNdJ*D6∞)Í/*edition chosen*/°dONLNd]8HDT(AH};°dONLNd`FHRz*3typedef struct NewPublisherReply NewPublisherReply;°dONLNdïbHnÍ*struct NewSubscriberReply {°dONLNd≤pZ|¿+Boolean canceled;°dONLNd–pD|Ï)Í/*user canceled dialog box*/°dONLNdÓ~Zäˆ(áZunsigned char formatsMask;°dONLNd~Däº)Í/*formats required*/°dONLNd+åZò(ïZ EditionContainerSpec container; °dONLNdXåDòº)Í/*edition selected*/°dONLNdmöH¶T(£H};°dONLNdp®H¥Ü*5typedef struct NewSubscriberReply NewSubscriberReply;ˇ à@ˇ ˇˇˇˇ@
  6722. ˇ·ˇ‚7^
  6723. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  6724. (‡*2-118    )BSummary of the Edition Manager4^*¿¯,
  6725. Courier
  6726. .°dONLNd\*h“(e*struct SectionOptionsReply {°dONLNdj<v¢+Boolean canceled;°dONLNd<j&vŒ)Í/*user canceled dialog box*/°dONLNdZx<Ñ¢(Å<Boolean changed; °dONLNdxx&Ñ∂)Í/*changed the section */°dONLNdüÜ&íh* /* record*/°dONLNd¨î<†Δ(ù<SectionHandle sectionH;°dONLNd–î&†Œ)Í/*handle to the specified */°dONLNd˚¢&Æò*/* section record*/°dONLNd∞<ºñ(π<ResType action;°dONLNd,∞&ºÜ)Í/*action codes*/°dONLNd=æ* 6(«*};°dONLNdA⁄*Êt*7typedef struct SectionOptionsReply SectionOptionsReply;°dONLNdzˆ*Œ*Ftypedef pascal Boolean (*ExpModalFilterProcPtr) (DialogPtr theDialog, °dONLNdÕ+ÿE°dONLNdŒÚ)'ventRecord *theEvent, short itemOffset,°dONLNdıÚ¯)Í °dONLNd(s°dONLNd») hort *itemHit, Ptr yourDataPtr);°dONLNd&.*:Ê(7*Jtypedef pascal short (*ExpDlgHookProcPtr) (short itemOffset, short itemHit°dONLNdp.Ê:Ï(7Ê,°dONLNdy<®HÆ(E® °dONLNdÄ<HÚ)l%DialogPtr theDialog, Ptr yourDataPtr)°dONLNd•<ÚH¯)fi;°dONLNd®X*d0(a*t°dONLNd©X0d)'ypedef unsigned char EditionOpenerVerb;°dONLNd”t*ÄÍ(}* struct EditionOpenerParamBlock {°dONLNdıÇ<éΔ+EditionInfoRecord info;°dONLNdÇ&éº)Í/*edition container to */°dONLNdAê&ú§*/* be subscribed to*/°dONLNdXû<™Δ(ß<SectionHandle sectionH;°dONLNd|û&™Œ)Í/*publisher or subscriber */°dONLNdߨ&∏û*/* requesting open*/°dONLNdΩ∫<ΔÆ(√<FSSpecPtr document;°dONLNd›∫&Δò)Í/*document passed*/°dONLNdÚ»<‘¢(—<OSType fdCreator;°dONLNd»&‘∞)Í/*Finder creator type*/°dONLNd)÷<‚ê(fl<long ioRefNum;°dONLNdD÷&‚û)Í/*reference number*/°dONLNdZ‰<Δ(Ì<FormatIOProcPtr ioProc;°dONLNd~‰&»)Í/*routine to read formats*/°dONLNdõÚ<˛ú(˚<Boolean success;°dONLNd∏Ú&˛»)Í/*reading or writing was */°dONLNd‚& Ä*/* successful*/°dONLNdÛ<ÿ(<unsigned char formatsMask;°dONLNd&∂)Í/*formats required to */°dONLNdA&(z*/* subscribe*/°dONLNdP**60(3*}°dONLNdQ*066);°dONLNdS8*D§(A*?typedef struct EditionOpenerParamBlock EditionOpenerParamBlock;°dONLNdîT*`⁄*Htypedef pascal short (*EditionOpenerProcPtr) (EditionOpenerVerb selector°dONLNd‹T⁄`‡(]⁄,°dONLNdÌb8n>(k8F°dONLNdÓb>n¬)ormatIOParamBlock *PB)°dONLNdb¬n»)Ñ;°dONLNd~*äò(á*=enum {ioHasFormat, ioReadFormat, ioNewFormat, ioWriteFormat};°dONLNdEå*ò¸*#typedef unsigned char FormatIOVerb;ˇ(P@ˇ ˇˇˇˇ@
  6727. ˇ·ˇ‚7^
  6728. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äSummary of the Edition Manager
  6729. , (‡ˇ2-119
  6730. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  6731. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  6732. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  6733. 4€4—?òÄ
  6734. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  6735. ˛ˇˇˇ
  6736. ˛ˇˇˇ
  6737. ˛ˇˇˇ
  6738. ˛ˇˇˇ˜˝˛ˇ˛
  6739. ˛ˇ˛ˇˇ
  6740. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  6741. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  6742. ˛ˇ˛ˇˇ
  6743. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  6744. ˛ˇˇˇˇ
  6745. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  6746. ˛ˇˇˇˇ
  6747. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  6748. ˛ˇˇˇˇ
  6749. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿,
  6750. Courier.°dONLNd\HhÍ(eHstruct FormatIOParamBlock {°dONLNdjZvÆ+long ioRefNum;°dONLNd8jDvº)Í/*reference number*/°dONLNdNxZÑΔ(ÅZFormatType format;°dONLNdmxDÑŒ)Í/*edition format type*/°dONLNdÜÜZí¿(èZlong formatIndex;°dONLNd§ÜDí»)Í/* opener-specific */ °dONLNd…îD†™*/* enumeration */°dONLNdÈ¢DÆû*/* of formats*/°dONLNd˙∞Zºÿ(πZunsigned long offset;°dONLNd∞Dº»)Í/*offset into format*/°dONLNd4æZ ¢(«Z Ptr buffPtr;°dONLNdMæD º)Í/*data starts here*/°dONLNdcÃZÿfi(’Zunsigned long buffLen;°dONLNdÜÃDÿ∞)Í/*length of data*/°dONLNdô⁄HÊT(„H};°dONLNdùˆHÜ*5typedef struct FormatIOParamBlock FormatIOParamBlock;°dONLNd‘H¬*?typedef pascal short (*FormatIOProcPtr) (FormatIOVerb selector,°dONLNd! 2,¬+ÍFormatIOParamBlock *PB);
  6751. OHU4PHT QHQ
  6752. ˇ·ˇ‚7^ .°dONLNd;DHOΔ(LHEdition Manager Routinesˇˇˇˇˇˇa‡(L2°dONLNdUeHqÍ(nH Initializing the Edition Manager
  6753. .°dONLNdvxHÑ*pascal OSErr InitEditionPack°dONLNdìxÚÑ)™(void) .°dONLNdöñH¢ˆ(üH"Creating and Registering a Section
  6754. .°dONLNdΩ®H¥“*pascal OSErr NewSection°dONLNd’®Ú¥‹)™'(const EditionContainerSpec *container,°dONLNd˝µ¯¡¨+const FSSpec *sectionDocument,°dONLNd¬¯Œæ*!SectionType kind, long sectionID,°dONLNd>œ¯€Ç*UpdateMode initialMode,°dONLNdV‹¯Ëé*SectionHandle *sectionH);°dONLNdpÏH¯(ıHpascal OSErr RegisterSection°dONLNdç˘Ú¨+™(const FSSpec *sectionDocument,°dONLNd≠¯Ç+SectionHandle sectionH,°dONLNd≈¯î*Boolean *aliasWasUpdated);°dONLNd‡#H/¸(,Hpascal OSErr UnRegisterSection°dONLNdˇ0Ú<à+™(SectionHandle sectionH);°dONLNd@HL(IH pascal OSErr IsRegisteredSection°dONLNd:MÚYà+™(SectionHandle sectionH);°dONLNdT]Hiˆ(fHpascal OSErr AssociateSection°dONLNdrjÚvÇ+™(SectionHandle sectionH,°dONLNdãw¯Éƒ+"const FSSpec *newSectionDocument);ˇ à@ˇ ˇˇˇˇ@
  6755. ˇ·ˇ‚7^
  6756. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  6757. (‡*2-120    )BSummary of the Edition Manager4^*¿¯ °dONLNd\*h(e**Creating and Deleting an Edition Container,
  6758. Courier
  6759. .°dONLNd+o*{*'pascal OSErr CreateEditionContainerFile°dONLNdS|‘àË+™.(const FSSpec *editionFile, OSType fdCreator, °dONLNdÅâ⁄ï¶+"ScriptCode editionFileNameScript);°dONLNd§ô*•(¢*'pascal OSErr DeleteEditionContainerFile°dONLNdö‘≤|+™(const FSSpec *editionFile); .°dONLNdȃ*–](Õ*
  6760. Setting anÉ¿°dONLNdÛƒ]–|)3d Gett˘ °dONLNd˘ƒ|–Ÿ)ing a Format Mark
  6761. .°dONLNd ÷*‚(fl*!pascal OSErr SetEditionFormatMark°dONLNd-„‘Ô|+™(EditionRefNum whichEdition,°dONLNdJ⁄¸d+FormatType whichFormat,°dONLNdb˝⁄    p*unsigned long setMarkTo);°dONLNd|*(*!pascal OSErr GetEditionFormatMark°dONLNdû‘&|+™(EditionRefNum whichEdition,°dONLNdª'⁄3d+FormatType whichFormat,°dONLNd”4⁄@Ç*unsigned long *currentMark); .°dONLNdR*^£([*Reading in Edition Data
  6762. .°dONLNde*q∫*pascal OSErr OpenEdition°dONLNd!e‘q¶)™#(SectionHandle subscriberSectionH, °dONLNdDr⁄~d+EditionRefNum *refNum);°dONLNd\Ç*éÿ(ã*pascal OSErr EditionHasFormat°dONLNdzè‘õ|+™(EditionRefNum whichEdition,°dONLNdóú⁄®d+FormatType whichFormat,°dONLNdØ©⁄µF*Size *formatSize);°dONLNd¬π*≈∫(¬*pascal OSErr ReadEdition°dONLNd€π‘≈|)™(EditionRefNum whichEdition,°dONLNd¯Δ⁄“æ+&FormatType whichFormat, void *buffPtr,°dONLNd”⁄fl4*Size *buffLen); .°dONLNd/Ò*˝5(˙*WØ∞°dONLNd0Ò4˝•)
  6763. riting out Edition Data
  6764. .°dONLNdH*Ã( *pascal OSErr OpenNewEdition°dONLNdd‘ö)™!(SectionHandle publisherSectionH,°dONLNdÜ⁄@+OSType fdCreator,°dONLNdò⁄)ƒ*'const FSSpec *publisherSectionDocument,°dONLNd¿*⁄6d*EditionRefNum *refNum);°dONLNdÿ:*F¿(C*pascal OSErr WriteEdition°dONLNdÚ:‘F|)™(EditionRefNum whichEdition,°dONLNdG⁄SË+-FormatType whichFormat, const void *buffPtr, °dONLNd<T⁄`4*Size *buffLen); .°dONLNdLr*~Ï({*%Closing an Edition After Reading or Wûê°dONLNdqrÏ~)¬riting
  6765. .°dONLNdxÖ*ë¿(é*pascal OSErr CloseEdition°dONLNdíÖ‘ë|)™(EditionRefNum whichEdition,°dONLNdØí⁄ûR+Boolean successful);ˇ(™@ˇ ˇˇˇˇ@
  6766. ˇ·ˇ‚7^
  6767. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äSummary of the Edition Manager
  6768. , (‡ˇ2-121
  6769. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  6770. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  6771. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  6772. 4€4—?òÄ
  6773. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  6774. ˛ˇˇˇ
  6775. ˛ˇˇˇ
  6776. ˛ˇˇˇ
  6777. ˛ˇˇˇ˜˝˛ˇ˛
  6778. ˛ˇ˛ˇˇ
  6779. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  6780. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  6781. ˛ˇ˛ˇˇ
  6782. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  6783. ˛ˇˇˇˇ
  6784. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  6785. ˛ˇˇˇˇ
  6786. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  6787. ˛ˇˇˇˇ
  6788. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿ °dONLNd\Hh≈(eHDisplaying Dialog Boxes,
  6789. Courier
  6790. .°dONLNdoH{8*(pascal OSErr GetLastEditionContainerUsed°dONLNdA|Úàæ+™"(EditionContainerSpec *container);°dONLNddåHò(ïH pascal OSErr NewSubscriberDialog°dONLNdÖôÚ•ö+™(NewSubscriberReply *reply);°dONLNd¢©Hµ(≤Hpascal OSErr NewPublisherDialog°dONLNd¬∂Ú¬î+™(NewPublisherReply *reply);°dONLNdfiΔH“(œH!pascal OSErr SectionOptionsDialog°dONLNd”Úfl†+™(SectionOptionsReply *reply);°dONLNd„HÔ(ÏH#pascal OSErr NewSubscriberExpDialog°dONLNdBÚ¸‚+™((NewSubscriberReply *reply, Point where,°dONLNdk˝¯    é+short expansionDITLresID,°dONLNdÖ
  6791. ¯î*ExpDlgHookProcPtr dlgHook,°dONLNd†¯#æ*!ExpModalFilterProcPtr filterProc,°dONLNd¬$¯0j*void *yourDataPtr);°dONLNd÷4H@(=H"pascal OSErr NewPublisherExpDialog°dONLNd˘AÚM‹+™'(NewPublisherReply *reply, Point where,°dONLNd!N¯Zé+short expansionDITLresID,°dONLNd;[¯gî*ExpDlgHookProcPtr dlgHook,°dONLNdVh¯tæ*!ExpModalFilterProcPtr filterProc,°dONLNdxu¯Åj*void *yourDataPtr);°dONLNdåÖHë (éH$pascal OSErr SectionOptionsExpDialog°dONLNd±íÚûË+™)(SectionOptionsReply *reply, Point where,°dONLNd⁄íËûÓ)ˆ °dONLNd‹ü¯´˛(®¯s°dONLNd›ü˛´é)hort expansionDITLresID,°dONLNdˆ¨¯∏î(µ¯ExpDlgHookProcPtr dlgHook,°dONLNdπ¯≈æ*!ExpModalFilterProcPtr filterProc,°dONLNd3Δ¯“j*void *yourDataPtr); .°dONLNdG‰HK(ÌH2Locating a Publisher and Edition From a Subscriber
  6792. .°dONLNdzˆHÍ*pascal OSErr GetEditionInfo°dONLNdñˆÚ¶)™(const SectionHandle sectionH,°dONLNdµ¯∏+ EditionInfoRecord *editionInfo);°dONLNd÷H(H!pascal OSErr GoToPublisherSection°dONLNd¯ Ú,‚+™((const EditionContainerSpec *container); .°dONLNd!>HJÕ(GHEdition Container Formats
  6793. .°dONLNd;QH]*pascal OSErr GetStandardFormats°dONLNd[^Új‹+™'(const EditionContainerSpec *container,°dONLNdÉk¯wî+FormatType *previewFormat,°dONLNdûx¯Ñ‹*&Handle preview, Handle publisherAlias,°dONLNd≈Ö¯ëX*Handle formats);ˇ‡@ˇ ˇˇˇˇ@
  6794. ˇ·ˇ‚7^
  6795. 4*\¯, Palatino&e.3+l"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@lEdition Manager4⁄*˙¯
  6796. (‡*2-122    )BSummary of the Edition Manager4^*¿¯ °dONLNd\*hw(e*Reading and WI∞°dONLNd\whfi)Mriting Non-Edition fiä∞°dONLNd"\fihÏ)gles,
  6797. Courier
  6798. .°dONLNd&o*{(x*!pascal OSErr GetEditionOpenerProc°dONLNdH|‘àé+™(EditionOpenerProcPtr *opener);°dONLNdhå*ò(ï*!pascal OSErr SetEditionOpenerProc°dONLNdäô‘•à+™(EditionOpenerProcPtr opener);°dONLNd©©*µˆ(≤*"pascal OSErr CallEditionOpenerProc°dONLNdÃ∂‘¬|+™(EditionOpenerVerb selector,°dONLNdÈ√⁄œÇ+EditionOpenerParamBlock *PB,°dONLNd–⁄‹é*EditionOpenerProcPtr routine);°dONLNd%‡*Ïÿ(È*pascal OSErr CallFormatIOProc°dONLNdCÌ‘˘^+™(FormatIOVerb selector,°dONLNd[˙⁄d+FormatIOParamBlock *PB,°dONLNds⁄p*FormatIOProcPtr routine);
  6799. 5*;¯46*:¯ 7*7¯
  6800. ˇ·ˇ‚7^ .°dONLNdé**5w(2*Application-Defiâ°°dONLNdû*w5∑)M ned Routinesˇˇˇˇˇˇa‡(2Ú2
  6801. .°dONLNd¨@*L¿(I*pascal OSErr MyExpDlgHook°dONLNdΔ@‘Lö)™!(short itemOffset, short itemHit,°dONLNdËM⁄YR+DialogPtr theDialog,°dONLNd˝Z⁄f@*Ptr yourDataPtr);°dONLNdj*vÿ(s*pascal OSErr MyExpModalFilter°dONLNd-w‘ÉR+™(DialogPtr theDialog,°dONLNdCÑ⁄ê^+EventRecord *theEvent,°dONLNdZë⁄ù¶*"short itemOffset, short *itemHit, °dONLNd}û⁄™@*Ptr yourDataPtr);°dONLNdèÆ*∫®(∑*pascal OSErr MyOpener°dONLNd•Æ‘∫|)™(EditionOpenerVerb selector,°dONLNd¬ª⁄«à+EditionOpenerParamBlock *PB);°dONLNd‡À*◊ê(‘*pascal OSErr MyIO°dONLNdÚÀ‘◊^)™(FormatIOVerb selector,°dONLNd
  6802. ÿ⁄‰j+FormatIOParamBlock *PB);
  6803. *¯4*¯ *¯
  6804. ˇ·ˇ‚7^°dONLNd$*~(* Result Codesˇˇˇˇˇˇ.∑†(2
  6805. .°dONLNd0*(H(%*noErr.°dONLNd6◊(‹)≠0°dONLNd8( )No errE†°dONLNd>()or.°dONLNdB(*4Z(1*abortErr.°dONLNdK(Õ4‹)£–27°dONLNdO(4ç)##Publisher has written a new edition.°dONLNdt3*?`(<*    dskFulErr.°dONLNd~3Õ?‹)£–34°dONLNdÇ3?)# Disk is full.°dONLNdê?*KN(H*nsvErr.°dONLNdó?ÕK‹)£–35°dONLNdõ?K8)#No such volume.°dONLNd´J*VH(S*ioErr.°dONLNd±JÕV‹)£–36°dONLNdµJV)#I/O err ‡°dONLNdºJV) or.°dONLNd¿V*bZ(_*bdNamErr.°dONLNd…VÕb‹)£–37°dONLNdÕVb    )#Bad fiD@°dONLNd”V
  6806. b*)lename.°dONLNd€a*mZ(j*fnOpnErr.°dONLNd‰aÕm‹)£–38°dONLNdËam))#File not open.°dONLNd˜m*yN(v*eofErr.°dONLNd˛mÕy‹)£–39°dONLNdmy)# No additional data in the format.°dONLNd$x*ÑN(Å*fnfErr.°dONLNd+xÕÑ‹)£–43°dONLNd/xÑj)#Edition container not found.°dONLNdLÑ*êf(ç*
  6807. flLckedErr.°dONLNdWÑÕê‹)£–45°dONLNd[Ñêw)#Publisher writing to an edition.°dONLNd|è*õT(ò*fBsyErr.°dONLNdÑèÕõ‹)£–47°dONLNdàèõ@)#Section doing I/O.°dONLNdõõ*ßZ(§*paramErr.°dONLNd§õÕß‹)£–50°dONLNd®õß?)#Invalid parameter.°dONLNdª¶*≤Z(Ø*rfNumErr.°dONLNdƒ¶Õ≤‹)£–51°dONLNd»¶≤))#Bad edition rª‡°dONLNd’¶)≤9)9eferh°dONLNdŸ¶:≤s) ence number.°dONLNdÊ≤*æT(ª*permErr.°dONLNdÓ≤Õæ‹)£–54°dONLNdÚ≤æ8)#Not a subscriberˇ'B@ˇ ˇˇˇˇ@
  6808. ˇ·ˇ‚7^
  6809. 4H\, Palatino&e.3+ä"CHAPTER à)>2,     Helvetica    ˇˇ—ÚˇÆ(@äEdition Manager4⁄ä˙(‡äSummary of the Edition Manager
  6810. , (‡ˇ2-123
  6811. ˇˇˇˇˇˇˇˇ4∏4÷lòÄ2∏A÷rHH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏A÷r∏A÷r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  6812. ∏6÷@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""∏6÷@∏6÷@˜˜˜˜˜˜˜˜˜˜˜˜ ˇˇ˛ˇˇ ˛ˇˇˇ     ˇˇˇˇ
  6813. ˇ˝ˇ ˇ˛ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜
  6814. 4€4—?òÄ
  6815. €6—@HH –ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""€6—@€6—@$˛˙ˇ
  6816. ˛ˇˇˇ
  6817. ˛ˇˇˇ
  6818. ˛ˇˇˇ
  6819. ˛ˇˇˇ˜˝˛ˇ˛
  6820. ˛ˇ˛ˇˇ
  6821. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˝¸ˇ
  6822. ˛ˇ˛ˇˇ˜˛¸ˇˇ˜˝˛ˇ˛
  6823. ˛ˇ˛ˇˇ
  6824. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˛˙ˇ˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˙ˇˇ˛˙ˇ˜˝ˇˇ˛
  6825. ˛ˇˇˇˇ
  6826. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝ˇˇ˛
  6827. ˛ˇˇˇˇ
  6828. ˛ˇˇˇˇ˝˛ˇ˛˛ˇ˚    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˝˛ˇ˛
  6829. ˛ˇˇˇˇ
  6830. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿,
  6831. Courier.°dONLNd]Hi~(fH    wrPermErr.°dONLNd
  6832. ]Îi˙)£–61°dONLNd]iS)#Not a publisher.°dONLNdiHu~(rH    noTypeErr.°dONLNd)iÊu˙)û–102°dONLNd.iui)(Format not available.°dONLNdDtHÄÑ(}H
  6833. memFullErr.°dONLNdOtÊÄ˙)û–108°dONLNdTtÄE)( Memory full.°dONLNdaÄHåx(âHdirNFErr.°dONLNdjÄÊå˙)û–120°dONLNdoÄå)(Dir͆°dONLNdrÄåe)ectory not found.°dONLNdÑãHó¢(îHuserCanceledErr.°dONLNdîãÊó˙)û–128°dONLNdôãó%)(User ¿Ä°dONLNdûã%óM)    clicked C}@°dONLNdßãNób))anceàÄ°dONLNd´ãbóx)l in dF`°dONLNd±ãyó°)    ialog box.°dONLNdºóH£Æ(†HeditionMgrInitErr.°dONLNdŒóÊ£˙)û–450°dONLNd”ó£Í)(1Manager not initialized or could not load package.°dONLNd¢HÆñ(´HbadSectionErr.°dONLNd¢ÊÆ˙)û–451°dONLNd¢Æw)(Not a valid section type.°dONLNd3ÆH∫“(∑HnotRegisteredSectionErr.°dONLNdKÆÊ∫˙)û–452°dONLNdPÆ∫%)(Not rÀ¿°dONLNdUÆ%∫B)egister‡°dONLNd\ÆC∫M)ed.°dONLNd`πH≈ñ(¬HbadSubPartErr.°dONLNdnπÊ≈˙)û–454°dONLNdsπ≈˛)(7Bad edition container spec or invalid edition container.°dONLNd¨≈H—¿(ŒHmultiplePublisherWrn.°dONLNd¡≈Ê—˙)û–460°dONLNdΔ≈—)(AlrÙ†°dONLNd…≈—o)eady is a publisher.°dONLNdfi–H‹¿(ŸHcontainerNotFoundWrn.°dONLNdÛ–Ê‹˙)û–461°dONLNd¯–‹P)(Alias was not r∑@°dONLNd–P‹q)Besolved.°dONLNd‹HË¥(ÂHnotThePublisherWrn.°dONLNd#‹ÊË˙)û–463°dONLNd(‹Ë\)(Not the publisherˇJ@ˇ ˇˇˇˇ@
  6834. ˇ·ˇ‚7^
  6835. 4^*¿¯ˇ"û@ˇ ˇˇˇˇ@
  6836. ˇ·ˇ‚7^
  6837. 4⁄∫˙,     Helvetica    .(‡∫Contents, Palatino
  6838. , (‡    3-1    3, Ã(#∫CHAPTER ÿ)h3
  6839. ˇˇˇˇˇˇˇˇ440lòÄ2A0rMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""A0rA0r$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  6840. 60@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""60@60@˜˜˜˜˜˜˜˜˜˜˜˜
  6841. ˛ˇ˛ˇˇ ˇˇ˛ˇˇ     ˇˇˇ˙ˇ
  6842. ˛ˇˇˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜ˇˇˇˇˇˇ(JH
  6843. Figure 3-0*     Listing 3-0*    T)able 3-0
  6844. zH,
  6845. 4zH, H°dONLNd∫*˘+m Contentsˇˇˇˇˇˇ
  6846. ˇ·ˇ‚7^ˇˇ∫Ρ◊(qH3°dONLNd[∫xÂ)rIntr9°dONLNd[Âxq)+ oduction to ¶∞°dONLNd[px)ã Apple Events
  6847. °dONLNd&;∫Gÿ(D∫About ØÄ°dONLNd,;ÿG) Apple Eventsâ`°dONLNd:;(G5)P3-3°dONLNd>HƒT(QƒApple Events and ˆ°dONLNdOHTo)QApple Event Objectsy°dONLNddHÑTë)o3-6°dONLNdhUƒa˛(^ƒ Apple Event >Ä°dONLNdtU˛ar):Attributes and Parametersˇ‡°dONLNdèUÜaì)à3-7°dONLNdìbŒn(kŒ Apple Event >Ä°dONLNdübn4):
  6848. Attributes=@°dONLNd´bInV)A3-8°dONLNdØoŒ{9(xŒApple Event Parametersr`°dONLNd«oN{[)Ä3-9°dONLNdÀ|ŒàÌ(ÖŒInterpru†°dONLNd“|Ìà)eting Ï °dONLNdÿ|à?) Apple Event ™†°dONLNd‰|?à≥):Attributes and Parametersl°dONLNdˇ|»à⁄)â3-10°dONLNdâƒïÁ(íƒData Str``°dONLNd âËïˇ)$ucturÊ@°dONLNdâˇï)es W‡@°dONLNdâï+)ithin ∑¿°dONLNdâ+ïf) Apple Events놰dONLNd)â{ïç)P3-12°dONLNd.ñŒ¢(üŒDescriptor Recorfi °dONLNd>ñ¢")Jds6‡°dONLNdBñ7¢I)3-12°dONLNdG£ŒØÒ(¨ŒKeywor¨`°dONLNdM£ÒØ)#d-Specifi凰dONLNdV£Øo)'ed Descriptor RecorP`°dONLNdi£pØz)Xds© °dONLNdm£é؆)3-15°dONLNdr∞Œº(πŒDescriptor Lists|@°dONLNdÑ∞(º:)Z3-16°dONLNdâΩ∫…˝(Δ∫Responding to ;¿°dONLNdóΩ˝…8)C Apple Events†°dONLNd•ΩM…_)P3-20°dONLNd™ ƒ÷(”ƒAccepting and Pr:Ä°dONLNd∫ ÷8)M    ocessing Œ`°dONLNd√ 8÷s)' Apple Events®@°dONLNd— à÷ö)P3-20°dONLNd÷◊ƒ„‚(‡ƒAbout ØÄ°dONLNd‹◊‚„E)Apple Event HandlersÏÄ°dONLNdÚ◊Y„k)w3-23°dONLNd˜‰ŒR(ÌŒExtracting and Checking Data[‡°dONLNd‰gy)ô3-23°dONLNdÒŒ˝
  6849. (˙ŒInteracting Wù`°dONLNd'Ò
  6850. ˝=)< ith the User7`°dONLNd5ÒR˝d)H3-25°dONLNd:˛Œ
  6851. D(ŒPerforming the Requested d°dONLNdS˛D
  6852.  )vAction and Returning a ResultÆ¿°dONLNdr˛fi
  6853. )ö3-25°dONLNdw ∫≈(∫Cr\°dONLNdy ≈) eating and Sending ˇ°dONLNdå #)WAΔ@°dONLNdç $X) pple Eventsÿ‡°dONLNdö l~)H3-28°dONLNdüƒ$œ(!ƒCr\°dONLNd°œ$˙)
  6854. eating an #‡°dONLNd´˙$M)+Apple Event Recorc °dONLNdºM$S)Sd~‡°dONLNdøg$y)3-29°dONLNdƒ%ƒ1Ë(.ƒAdding È@°dONLNdÀ%Ë1")$ Apple Event ß¿°dONLNd◊%"1ñ):Attributes and Parametersi °dONLNdÚ%´1Ω)â3-29°dONLNd˜2ƒ>¯(;ƒ Sending an 2`°dONLNd2¯>ú)4"Apple Event and Handling the Reply˙¿°dONLNd&2∞>¬)∏3-30°dONLNd+?∫Kƒ(H∫Wï°dONLNd,?√KÏ)    orking W»Ä°dONLNd4?ÏK6))ith Object Specifil°dONLNdF?7K[)Ker Recor †°dONLNdN?[Ke)$ds#`°dONLNdR?zKå)3-32°dONLNdWLƒXÀ(UƒD=@°dONLNdXLÃXË)ata Str``°dONLNd_LËXˇ)ucturÊ@°dONLNddLˇX)es W‡@°dONLNdhLXt)ithin an Object Specifi釰dONLNdLuXô)aer RecorÌÄ°dONLNdáLôXü)$d    @°dONLNdäL¥XΔ)3-34°dONLNdèYƒe˜(bƒ The Classifi*@°dONLNdõY¯e )4
  6855. cation of w °dONLNd•Y ez)(Apple Event ObjectsÄ°dONLNd∫Yèe°)o3-39°dONLNdøfŒr(oŒObject Classes∂Ä°dONLNdœf!r3)S3-39°dONLNd‘sŒ◊(|ŒPrN†°dONLNd÷sÿ:)
  6856. operties and Elements] °dONLNdÌsN`)v3-42°dONLNdÚăåÈ(âƒFinding O °dONLNd˙ÄÈåC)%Apple Event ObjectsflÄ°dONLNdÄWåi)n3-46ˇÿ@ˇ ˇˇˇˇ@
  6857. ˇ·ˇ‚7^
  6858. 4*\¯, Palatino&e.3+ú"CHAPTER à)>34⁄*˙¯
  6859. (‡*3-2,     Helvetica    )rContents4^*¿¯
  6860. °dONLNd\úh (eú
  6861. About the  ‡°dONLNd
  6862. \Àh,)/Apple Event Managerª¿°dONLNd\@hR)u3-48°dONLNd$i¶u⁄(r¶ Supporting ‡ °dONLNd/i⁄uJ)4Apple Events as a Server ˜ °dONLNdHiJu~)p Applicationu@°dONLNdUiìu•)I3-48°dONLNdZv¶Ç⁄(¶ Supporting ‡ °dONLNdev⁄ÇH)4Apple Events as a Client ]¿°dONLNd~vIÇ})o Application€‡°dONLNdãvëÇ£)H3-49°dONLNdêɶè⁄(å¶ Supporting ‡ °dONLNdõÉ⁄è4)4Apple Event ObjectspÄ°dONLNd∞ÉIè[)o3-49°dONLNdµê¶ú⁄(ô¶ Supporting ‡ °dONLNd¿ê⁄ú-)4Apple Event Recor`°dONLNd—ê.úB)TdingÑ°dONLNd◊êVúh)(3-50ˇ<Z@ˇ ˇˇˇˇ@
  6863. ˇ·ˇ‚7^, Palatino&e.3+ä"CHAPTER ”)>3
  6864. 4⁄ä˙,     Helvetica    (‡äAbout ‡) Apple Events
  6865. , (‡    3-3
  6866. ˇˇˇˇˇˇˇˇ440lòÄ.B0oMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""B0oB0o$””””””””””””””””””””””””””””””òÄ
  6867. 60@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""60@60@˜˜˜˜˜˜˜˜˜˜˜˜˜
  6868. ˛ˇ˛ˇˇ ˇˇ˛ˇˇ     ˇˇˇ˙ˇ
  6869. ˛ˇˇˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜
  6870. 454+?òÄ
  6871. 56+@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""56+@56+@$˜˛˙ˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  6872. ˛ˇ˛ˇˇ˛¸ˇˇ˚ˇ˛˙ˇˇ˝˛ˇ˛
  6873. ˛ˇ˛ˇˇ
  6874. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  6875. ˛ˇ˛ˇˇ
  6876. ˛ˇ˛ˇˇ˛˙ˇ˜˝˝ˇˇ˛ˇ˚˝ˇ¸˛¸ˇˇ˜˝˛ˇ˛
  6877. ˛ˇ˛ˇˇ
  6878. ˛ˇ˛ˇˇ˝ˇˇ˛˜˝¸ˇ
  6879. ˛ˇ˛ˇˇ˛¸ˇˇ˜˝˛ˇ˛
  6880. ˛ˇ˛ˇˇ
  6881. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˜˝¸ˇ
  6882. ˛ˇ˛ˇˇ˝˛ˇ˛
  6883. ˛ˇ˛ˇˇ
  6884. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  6885. ˛ˇ˛ˇˇ
  6886. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  6887. ˛ˇ˛ˇˇ
  6888. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  6889. ˛ˇˇˇˇ
  6890. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  6891. ˛ˇˇˇ
  6892. ˛ˇˇˇ
  6893. ˛ˇˇˇ
  6894. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  6895. ˛ˇˇˇˇ
  6896. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  6897. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  6898. ˛ˇˇˇˇ
  6899. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜    ˇˇ—ÚˇÆ°dONLNd8äC¬(@äIntroduction to •°dONLNd8¬CÙ)8 Apple Eventsˇˇˇˇˇˇ≠>(@3
  6900. °dONLNd\äh”(eäThis chapter intrõ°dONLNd.\”hÙ)Ioduces À‡°dONLNd5\ÙhT)!Apple events and the ?¿°dONLNdJ\Uh∂)aApple Event Manager1@°dONLNd]\∂hŸ)a    . Later c;‡°dONLNdf\Ÿhı)#hapter°dONLNdl\ˆh¸)s °dONLNdniäuê(rädõ¿°dONLNdoiêuF))escribe how your application can use the ‡`°dONLNdòiFuπ)∂Apple Event Manager to r  °dONLNd∞i∫u)tespond to and send °dONLNd√väÇÂ(äApple events, locate Ä°dONLNdÿvÊÇY)\Apple event objects, and rÄ°dONLNdÚvYÇk)secorŇ°dONLNdˆvkÇs)d ø@°dONLNd¯vsÇ∞)Apple events.°dONLNdàäîR(ëä+The interapplication communication (IAC) arÖ°dONLNd1àRîx)»    chitectur9¿°dONLNd:àyîÒ)'e for Macintosh computers °dONLNdTïä°é(ûäc@°dONLNdUïé°ø) onsists of fiÔ°dONLNdbï¿°C)2ve parts: the Edition ManagerñÄ°dONLNdïC°ù)É, the Open Scripting &‡°dONLNdîïû°©)[Ar≥ °dONLNdñï©°œ)     chitecturg‡°dONLNdüï–°‘)'e1Ä°dONLNd†ï’°Û) (OSA)< °dONLNd¶ïÛ°¯), °dONLNd®¢äÆó(´äthe]`°dONLNd´¢òÆö) °dONLNd¨¢öÆ˚)Apple Event ManagerpÄ°dONLNdø¢˚ÆT)a, the Event Manager¡‡°dONLNd“¢SÆÖ)X , and the Pr[°dONLNdfi¢Üƺ)3 ogram-to-PrTÄ°dONLNdÈ¢ºÆ€)6ogram °dONLNdÔØäª˚(∏äCommunications (PPC) Tú°dONLNdØ˙ªi)poolbox. The chapter “Intr Ä°dONLNdØiªÁ)ooduction to Interapplication °dONLNd;ºä»(≈äCommunication” in this book pr°dONLNdYº»í)êovides an overview of the r}‡°dONLNdtºí»Î)xelationships among °dONLNdá…ä’†(“äthesed°dONLNdå…°’£) ‰°dONLNdç…£’æ)parts. °dONLNdï€äÁù(‰äThe ª¿°dONLNdô€ùÁ9)%Apple Event Registry: Standard Suites©Ä°dONLNdæ€:ÁM)ù defi†°dONLNd√€NÁ˜)&nes both the actions performed by the °dONLNdÈËäÙ´(Òästandar±Ä°dONLNdË´Ù≥)!d Ó‡°dONLNdÚË≥Ùj))Apple events, or “verbs,” and the standarŇ°dONLNdËkÙs)∏d ø@°dONLNdËsÙ)"Apple event object classes, which °dONLNd?ıä”(˛äcan be used to cr)Ä°dONLNdPı‘≠)J0eate “noun phrases” describing objects on which .`°dONLNdÄı≠)ŸApple events act. If °dONLNdïä˚( äyour application uses the ˇ°dONLNdØ˚n)qApple Event Manager to r*¿°dONLNd«o¸)tespond to some of these standar˝°dONLNdʸ)çd °dONLNdËäö(ä>Apple events, you can make it scriptable—that is, capable of rˇ°dONLNd&öı(öesponding to scripts °dONLNd;ä(7(%ä(written in a scripting language such as .@°dONLNdc7()≠/AppleScript. In addition, your application can °dONLNdí)ä5´(2äuse the  ¿°dONLNdö)¨5#)"Apple Event Manager to cr®¿°dONLNd≥)#5b)weate and send ć°dONLNd¡)b5)?'Apple events and to allow user actions °dONLNdË6äB¸(?äin your application to be r= °dONLNd6˝B)secor±Ä°dONLNd6B.)ded as ë@°dONLNd6.Bk)Apple events.°dONLNdHäT°(QäBeforÛ¿°dONLNd!H°T¨)>e you use this chapter or any of the other chapters about the Ã@°dONLNd_H¨T(Q¨Apple Event ManagerΩ¿°dONLNdrHT)a, °dONLNdtUäaõ(^ä<you should be familiar with the chapters “Event Manager” in ⁄¿°dONLNd∞UõaÂ(^õInside Macintosh: °dONLNd¬bän¥(kä    MacintoshpÄ°dONLNdÀbµn∑)+ Ä°dONLNdÃb∑nΩ)TÄ°dONLNdÕbºnÃ)oolb9@°dONLNd—bÕn÷)ox©Ä°dONLNd”b÷nÿ)     )Ä°dONLNd‘bŸn) Essentials 5Ä°dONLNdflbn    )+a5Ä°dONLNd‡b    n&)nd “Prq@°dONLNdÊb&ny)ocess Manager” in f`°dONLNd¯bznø)TInside MacintoshH`°dONLNdb¿nŒ)F: Pr °dONLNd bœnÌ)ocesses.é`°dONLNdbÌnÔ) °dONLNdtäÄ!(}ä"This chapter begins by describing 'Ä°dONLNd8t!Ä»)ó%Apple events and some of the data strO`°dONLNd]t»Äfl)ßuctur’@°dONLNdbtflÄ)es they °dONLNdjÅäçΔ(ääcontain. The r4°dONLNdxÅ«ç%)=est of the chapter intr'@°dONLNdèÅ%çÑ)^oduces the use of the Í°dONLNd•ÅÉçÔ)^Apple Event Manager to,Zapf Dingbats°dONLNdºóäûè(ùän
  6901. °dONLNdæîñ†ô) rE°dONLNdøîö†¥)espondONLNdƒî¥†ø)d tr¿°dONLNd«î¿†«) o     ‡°dONLNd…˛) Apple eventT†°dONLNd‘)6s°dONLNd÷©ä∞è(Øän
  6902. °dONLNdÿ¶ñ≤≠) send ï`°dONLNd›¶≠≤¥)A\†°dONLNdfi¶µ≤Á) pple events °dONLNdȶË≤˘)3 to rö°dONLNdÓ¶˘≤~)equest services or information°dONLNdªä¬è(¡än
  6903. °dONLNd∏ñƒˇ) work with object specififl†°dONLNd'∏ˇƒ)ier r‡‡°dONLNd+∏ƒ )ecorU@°dONLNd/∏!ƒ+)ds°dONLNd2Õä‘è(”än
  6904. °dONLNd4 ñ÷π)     classify ?†°dONLNd= π÷)#Apple event objects °dONLNdRfläÊè(Âän
  6905. °dONLNdT‹ñË≤) locate {¿°dONLNd[‹≤Ë)Apple event objects°dONLNdoÌ䢮(ˆäFinally°dONLNdvÌ®˘ƒ), this c6`°dONLNd~̃˘‹)hapte‡°dONLNdÉÌ›˘)r summarizes t†°dONLNdëÌ˘∏)B"he tasks you can perform with the Ì°dONLNd≥Ì∑˘Ò)ò Apple Event °dONLNdø˙ä«(ä Manager and ˇ °dONLNdÀ˙«Ó)=    explains R†°dONLNd‘˙Ô)(wher    †°dONLNdÿ˙¸)8e to locate information you need to perform those tasks.
  6906. H(4H(
  6907. 8H@49H@ :H:
  6908. ˇ·ˇ‚7^ˇˇ©ˇÆ°dONLNd%H8y(3HAbout ÃÈ°dONLNd%y8⁄)1 Apple EventsˇˇˇˇˇˇU˛(33
  6909. °dONLNd&IäUö(RäAn ò†°dONLNd)IöU—) Apple eventj°dONLNd4I“Uä)8, is a high-level event that conforms to the Ê °dONLNd`IäU„)∏Apple Event Interpr¯†°dONLNdsI„U¸)Yocess °dONLNdyVäbΔ(_ä Messaging Pr_Ä°dONLNdÖVΔb˘)< otocol. The 8`°dONLNdëV˘b)3>Apple Event Manager uses the services of the Event Manager to °dONLNdœcäo°(läsend ï`°dONLNd‘c°oú)5Apple events between applications on the same compute. °dONLNd        cùo†)¸rc`°dONLNd    
  6910. c†o™), bΰdONLNd    c™o)
  6911. etween applications on °dONLNd    $pä|ç(yärE°dONLNd    %pé|⁄)emote computers‚¿°dONLNd    4p⁄|Ú)L, or fr„¿°dONLNd    ;pÚ|g)om an application to itself.ˇLÜ@ˇ ˇˇˇˇ@
  6912. ˇ·ˇ‚7^
  6913. 4*\¯, Palatino&e.3+l"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@lIntroduction to •)8 Apple Events4⁄*˙¯
  6914. (‡*3-4    )BAbout ‡) Apple Events4^*¿¯
  6915. °dONLNd\lh·(elApplications typically use ˆ†°dONLNd\·h-)uApple events to r˚@°dONLNd,\-h√)L"equest services and information frn@°dONLNdN\ƒhÓ)ó    om other °dONLNdWilu≈(rlapplications or to pr€°dONLNdli≈u_)Y#ovide services and information in rjÄ°dONLNdèi`u¨)õesponse to such rC`°dONLNd†i¨u—)L    equests. °dONLNd©vlÇc(l4Communication between two applications that support 쇰dONLNd›vcÇÊ)˜Apple events is initiated by a °dONLNd¸Élèæ(ålclient application,©¿°dONLNdÉæè)R which sends an ü‡°dONLNdÉèN)IApple event to rgÄ°dONLNd/ÉOè‹)H!equest a service or information. °dONLNdPêlú(ôlThe ª¿°dONLNdTêúΩ)application prπ¿°dONLNdbêΩú3)>oviding the service or the rL °dONLNd~ê4ú¿)w equested information is called aÎÄ°dONLNdûê¿ú‡)å server °dONLNd¶ùl©¢(¶l application.¢ °dONLNd≤ù¢©Q)6) The client and server applications can r?†°dONLNd€ùR©Û)∞$eside on the same local computer or °dONLNdˇ™l∂}(≥lon r ‡°dONLNd™~∂9)(emote computers connected to a network. ‡°dONLNd+™9∂∫)ªAn application can also send Z@°dONLNdH™∫∂˜)ÅApple events °dONLNdU∑l√0(¿l0to itself, thus acting as both client and serverp†°dONLNdÖ∑0√5)ƒ. p†°dONLNdá∑5√7) †°dONLNdà∑7√9) °dONLNdä…l’Ñ(“lFigurR¿°dONLNdè…Ñ’ò)e 3-1@°dONLNdî…ò’È) shows a common ~`°dONLNd§…Í’œ)R0Apple event, the Open Documents event. The FindeÔ@°dONLNd‘…œ’ÿ)Âr iJ@°dONLNd◊…Ÿ’fl)
  6916. s °dONLNdŸ÷l‚y(fllthe]`°dONLNd‹÷z‚|) ›`°dONLNd›÷|‚•) client; it rkÄ°dONLNdÈ÷¶‚
  6917. )*equests that the SurfWfi‡°dONLNdˇ÷    ‚–)c+riter application open the documents named °dONLNd*„lÔq(Ïl“°dONLNd+„qÔÑ)Dec.˜ °dONLNd/„ÑÔÜ) w °dONLNd0„áÔû)Invoi´ °dONLNd5„ûÔ≥)ce” ae°dONLNd:„¥Ôπ)n6`°dONLNd;„∫Ô’)d “NoñÄ°dONLNd@„’Ô⁄)v!°dONLNdA„⁄Ô˙). Invoic≈@°dONLNdI„˙Ô) e.” T؆°dONLNdN„Ô8)he SurfWö†°dONLNdV„8ÔÖ))riter application r °dONLNdi„ÖÔ‰)Mesponds to the Finderå°dONLNd~„ÊÔÔ)a’s °dONLNdÅl¸o(˘lrE°dONLNdÇp¸Ë)equest by opening window„ °dONLNdö˸)xs for tÄ°dONLNd°¸+)    he specifi߆°dONLNd´+¸k))ed documents.
  6918. */¯4*/¯"*]
  6919. ˇ·ˇ‚7^    °dONLNdπlñ(l
  6920. Figure 3-1°dONLNdƒÆ)BAn Open Documents event
  6921. °dONLNd›l)Œ(&lThe Finder is considerà‡°dONLNdÛŒ))b@ed the client application for the Open Documents event shown in °dONLNd3*l6Ñ(3lFigurR¿°dONLNd8*Ñ6ò)e 3-1@°dONLNd=*ò6))# because the Finder initiates the rv°dONLNd`**6È)í-equest for a service. The Finder can also be °dONLNdç7lCë(@lconsider‡°dONLNdï7íC√)& ed the sourH@°dONLNd†7√C©)12ce application for the same Open Documents event. -`°dONLNd“7©C∞)ÊAh°dONLNd”7∞C≤) Ë°dONLNd‘7≤C—)source °dONLNd€DlPü(Ml application" °dONLNdÊD†Pø)4 for an — °dONLNdÓDæPO)!Apple event is one that sends an K†°dONLNdDPPÏ)í#Apple event to another application °dONLNd2Ql]≈(Zlor to itself. Similarly(‡°dONLNdIQ≈]ˆ)Y , the SurfWV@°dONLNdTQˆ]·)18riter application can be described as either the server °dONLNdå^lj»(glapplication or the tar¿°dONLNd¢^…j√)]6get application for the Open Documents event shown in 3‡°dONLNdÿ^√j€)˙Figur†°dONLNd›^€jÔ)e 3-1§ °dONLNd‚^ÔjÙ). °dONLNd‰klws(tlA∫†°dONLNdÂkswu) :†°dONLNdÊkvw»)target application ˜@°dONLNd˘k»w‰)Rfor an &@°dONLNdkÂw_)Apple event is the one addrÄ¿°dONLNdk_wà)z
  6922. essed to r&†°dONLNd%kâw∑)* eceive the `°dONLNd0k∑wÚ).Apple event. °dONLNd=xlÑö(Ål
  6923. The terms K`°dONLNdGxõч)/client applicationÕ¿°dONLNdYx‡Ñı)E and ∫‡°dONLNd^xˆÑ)sourS‡°dONLNdbxÑ?)ce applicationd¿°dONLNdpx?ÑJ)7 ar©¿°dONLNdsxJÑ‹) e not always synonymous, nor ar¿°dONLNdíx›ÑÙ)ìe the °dONLNdòÖlëá(élterms †°dONLNdûÖàëœ)server applicationù °dONLNd∞Öœë‰)G and ä@°dONLNdµÖÂë)tar`°dONLNd∏ÖÒë&) get applicatio» °dONLNdΔÖ&ë.)5n.◊@°dONLNd»Ö.ë6) Tí°dONLNd Ö6ëY)ypically¿°dONLNd“ÖXëj)", an ≥°dONLNd◊ÖjëÒ)Apple event client application °dONLNdˆílûï(õl    sends an #¿°dONLNdˇíïû—))Apple event r≥Ä°dONLNd í—û?)<equesting a service to an ‡°dONLNd&í@ûÕ)o Apple event server application; 
  6924. .d¯4/d¯
  6925. 0k¯4/j0kò@@˜@˜0kpb¡¡?‡ˇ¯‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?Èˇ˛˝˛ˇ¸‰?Èˇ˛˝˛ˇ¸‰?Èˇ˛˛˛ˇ¸‰?Èˇ˛˛˛ˇ¸‰?Èˇ˛ Ä˛ˇ¸‰?Èˇ˛ @˛ˇ¸‰?Èˇ˛!Á¯˛ˇ¸‰?Èˇ˛¯˛ˇ¸‰?Èˇ˛ ¿Ä˛ˇ¸‰?Èˇ˛Ç`˛ˇ¸‰?Èˇ˛ê˛ˇ¸‰?Èˇ˛˛ˇ¸‰?Èˇ˛‰˛ˇ¸‰?Èˇ˛!R˛ˇ¸‰?Èˇ˛"©˛ˇ¸‰?Èˇ˛DQ˛ˇ¸‰?Èˇ˛ Ñ)˛ˇ¸‰?Èˇ˛ à4˛ˇ¸‰?Èˇ˛!"˛ˇ¸‰?Èˇ˛!Q˛ˇ¸‰?Èˇ˛"hIJˇ¸‰?Èˇ˛‘@˛ˇ¸‰?Èˇ˛ ™ ˛ˇ¸‰?Èˇ˛ ï˛ˇ¸‰?Èˇ˛ äà˛ˇ¸‰?Èˇ˛ ÖD˛ˇ¸‰?Èˇ˛ Ç¶˛ˇ¸‰?Èˇ˛êAY˛ˇ¸‰?Èˇ˛P@π˛ˇ¸‰?Èˇ˛0 a˛ˇ¸‰ò@@Ę@Ępk∞b?Èˇ˛#˛ˇ¸‰?Èˇ˛ ˛ˇ¸‰?Èˇ˛@˛ˇ¸‰?Èˇ˛Ä˛ˇ¸‰?Èˇ˛˝˛ˇ¸‰?Èˇ˛˝˛ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰ò@Ä¿˜Ä¿˜∞kb?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰ò@¿˜¿˜k0b?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰?‡ˇ¸‰‡ˇ¸‰¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡    ˛èÉĬ»    ˛ÑÅ.»
  6926. Ñ"»
  6927. á$»
  6928. H::$»
  6929. HÇ"D»
  6930.  ˇ¡é»¡¡¡¡¡–0ÄÄ¿˛˛Äÿ@HÄ @ ˛˛Äÿ—dõ*-Ç"4uñ›¡Èm¿ÿ≤ä8ç=VÑ%\ö´J™¥Äÿ$ñúàI)‰Ñ)ÖíÚQ«O%◊3DS“âÑJ∑$DÿDTMÄÿ '8 Ú yÑE•<ìÉ£…◊ ˛Ä˚Õ ˛Ä˚Õ
  6931. ˛˙Õ¡¡'?É¿Ä˽ć@ć>Ê&≈ÄÄ@1¸@@Ä@Ê)%¶Ì ÀJHÀíl@-mdlò∫-ÄvˆC¢˘&« 1JDÈ€∏Áò@@˜@˜0kpb)%î™4ïΩIU4@V¶¨¥©RVÄöH•eQSBP3ΩJ*È@Á)%d≤%9%)í&)$@•BdîÄíâ)."íDêI)ú OJ8Á)%)"M¢>R⁄ˇ:L#©    M€ˆ©Å&—K:Û§Δ†äR–"TõÁ)%-ß#I)åë*$HIIE…"§I§êç≠"DÑAùåé|#ípÁ¸@ı ˘‚¸@ı ˘‚ ˘Ï‚¡¡¯Ä 0Δ 1ÄÄ ÿPÄ˝ I)J@ÄÿR/Ïπ&√Æ$    )Wq’ÜÇäUŒâ@⁄VPëQSD2P8ÓÍÄU)CÑâ˙ê)W†⁄¢œbíCƒ‡RLp¶KÇàìKπ ⁄ÛÉ£Û§¿ËÄFRñ´Zî•ÇZ"@⁄ ¢›"¢Dá^t9åd‡“mÕûcm›Ä⁄ÙÄ˚ ŸÙÄ˚ ŸÙÄ˚ Ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¡˛Ä8Õ˛ÄƒÕäR!5îéV±ÄœùÍQöªî®“Äœ IL·ííπ»îŒRñÄç$$Ì    5Äœ Ïdpr%∏ç" œ˛IJ Ã˛IJ à ˛IJ  ¡¡ÄÉ¿4˛@–@Å $@–K¬$ylwb%ˆ\V—îÇ í¥••'(H®®—%íî•))Igâ1(—=ÇTeMnjm¡—˘P—)(‚I∫DFInëPê— ¸˛Äà ¸˛ÄÃ˚‡»¡¡    ¯Ä`0À    PÄêHÀ    R/Ï∏¨àÀ    VPëQPpàÀ    ¢œbPàÀ    ÛÉ£Ú†àêÀ     ¢›"° r`Àò@@Ę@Ępk∞b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜∞kb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜k"b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜0kpb¡¡fl30‰fl‰ ¬fl ‰fl‰fl ‰ ¬fl‰ ¬fl ‰fl‰fl ‰ ¬ Ù 0Ô‰ @˘ 0˙¿›˛e˙˜ææ˙ ˚ ‰˛AY‹˙fiˇ>ˇ~˙ç•∞˝‰˛A}(˙3fi¯0¯~˘‡˝ ‰ Ea(˙3˜øœ˙1 fl˛9]$˘Δˆœ‡˝‰ ÙΔ–fl ‰fl‰˛˝˜ˇ‡¸  ˝ ‰ ˝˜0¸@fl
  6932. gs39∏˜    0ùÃÃʇ˛‰
  6933.  ÙÀOöd
  6934. ˜"    0Ä”->iê‡
  6935. îÀDödˇ¸˜    1ˇˇ¿S-iê˛ ‰$ws;â§>¸    1`›ÃÓ&ê˛‰"@˛àÎààÿ˛àéà±0˙ ‰ @˛àc˜p€‹ˇéÔ1‹˙àcfl¯fivˇfl˜‡1¯‰ ˚
  6936. "c˛z˛rˇ˙ˆ210⁄˙ˇˆ>˜¯Ûfiœ˜‡1ˇˇ`¯ ‰¯¿˙0¿˙‰¯àà»˙à∞Ä˙ ‰ ˇˇ˛˝˜0˝ Ä›˛Ä˝˜0˝ @˚‰ Ä˝˜ˇ˝!Á¯fi˛üˇÚ˝˜0˝¯¸ ‰˛üˇ˝˜0˝ ¿Ä˝‰˛üˇ˝˜0˝Ç`˝ ‰ ü˝˜0˝êfl˛ü˝˜0˝˝‰ ü˝˜0˝‰fl˛ü˝˜0˝!R˝ ‰˛ü˝˜0˝"©˝‰"˛ü˝˛0˝DQ˝ ‰ ü¿˝¸0˝ Ñ)fl"˛ü¿˝ f“À00˝ à4˝‰ ê˝ ˘+,¯0˝!"fl"˛ò2˝ à-,@0˝!Q˝ ‰"˛èˇ‚˝ wC(À∏0˝"hÄ˝‰˛Ä˝˜0˝‘@˝ ‰ Ä˝˜0˝ ™ fl˛Ä˝˜0˝ ï˝‰ ÄÚ˝"˛0˝ äàfl ˛Ä˝2¸0˝ ÖD˝ ‰"˛Ä˝ *i“À00˝ Ç¶˝‰!˛Ä˝ *ï+,¯0¸êAY˝ ‰ Ä˝ &ñ-,@0¸P@πfl!˛ˇˇ˛˝ "dC(À∏0¸0 a˝‰ò@@Ę@Ępk∞b @˝˜0¸#fl˛@˝˜0¸ ˝ ‰˛@˝˜0¸@¸‰˛ˇ¸˝˜0¸ĸ ‰  ¯˜0◊˜˜0ı‰  ¯˜0◊˜˜0ı ‰˛|¸˜0˝‡HÄ˝‰˛@¸˜0˛H˝ ‰ EŒl˝˜0˝…nÆ濇˛}2¯˝˜0˝9F¥üIJ‰ E2à˝˜ˇ˛E¥òć˛E.x˝˜ˇ˝ÁEèIJ ‰fl‰fl ‰ ¬fl‰ ¬fl ‰
  6937. ²¸‰
  6938. Âä¸ ‰ ÊÇfi
  6939. Âí¸‰ Ê¢fi
  6940. ÂǸ ‰
  6941. ÂΔ¸‰
  6942. Âä¸ ‰ ÊÇfi
  6943. Âí¸‰ Ê¢fi ÊÉÄ˝ ‰ ÊG¸‰ Êé¸ ‰ ÊÃfi
  6944. Âx¸‰ Ê0fifl ‰fl‰fl ‰ ¬ È˘ˇ¿‰  Í@˘`„È@¿¸` ‰È
  6945. @QDT@`‰È
  6946. @HÄÿ` ‰ Í    @  `„È
  6947. @QDT@`‰  Í@˘`„ È˘ˇ‡ ‰ È@˙ `‰ ͢ˇ¸` ‰ Î˘`„Íø˝Ô˛`‰ Î
  6948. °à¿È~`„Í °œ`ŸöŸÈ~` ‰Í °ø`ŸöŸÔ~`‰Í °èdŸöŸË~` ‰ Îø˝Ô˛`„ ͢`‰ Î˘ˇ˛`„Í˙f` ‰Í˙ˆ`‰Í˙û` ‰ò@Ä¿˜Ä¿˜∞kb Î˙æ`„Í̸¶`‰ Îï!˝Ê`„ÍÌ&˝˛` ‰Íù)˝`‰ÍÌ'˝` ‰ Î˙`„Í˙`‰ Î˙`„Íà˝` ‰Íÿ$˝`‰Í › ÙÈî` ‰ Î
  6949. ≠%*ùT`„Í ™ÍÌH`‰ Î
  6950. Ä`„Í Ä` ‰Í pÄ2`‰ÍIJ≤` ‰ Î
  6951. eáiö€2`„Í D]c‰Ñ `‰ Î
  6952. ÁDM[õCJ`„Í˚@` ‰Í˚@`‰Í˙` ‰ Î˙`„Í˙`‰ Î˙`„Í˙` ‰Í˙`‰Í˙` ‰ Î˙`„Í˝`‰ Îà˛`„Í és¿0§Ç` ‰Í éı†§Ç`‰Í ˜”†6$Ç` ‰ Î
  6953. õ`„Í `‰ Î ¸`„Í`˛€` ‰Íb˛1$Ç`‰Ín˛§Ç` ‰ Îö˛4dÇ`„Íö˛õ`‰ Î¸`„Í˙` ‰Í¸¸`‰ÍÑ˛` ‰ Î
  6954. Ô@0§Ç`„Í é†§Ç`‰ Î
  6955. é†6$Ç`„͸õ` ‰Í˚ˇ¬‡‰Í˝` ‰ Î
  6956. ˜˚@õ`„Í H£@2dɲ`‰ Î
  6957. H£@dÇÊ`„Í H§¿5‰Ç¶` ‰Í G$õæ`‰Í¸∑‡ ‰ Î˙Á‡„Í˙F‰  Î˘ˇ˛‚Í˙ ‰ò@¿˜¿˜k0bÍ˙ˆ‰Í˙6 ‰ Î˙ˆ‚Í˙ñ‰ Î˙ˆ‚ ͢ˇ˛ ‰ ͢ˇ˛‰fl ‰ ¬fl‰ ¬fl ‰fl‰fl ‰ ¬fl‰ ¬fl ‰‡UT‰ flÉ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡    ˛èÉĬ»    ˛ÑÅ.»
  6958. Ñ"»
  6959. á$»
  6960. H::$»
  6961. HÇ"D»
  6962.  ˇ¡é»¡¡¡¡¡–0ÄÄ¿˛˛Äÿ@HÄ @ ˛˛Äÿ—dõ*-Ç"4uñ›¡Èm¿ÿ≤ä8ç=VÑ%\ö´J™¥Äÿ$ñúàI)‰Ñ)ÖíÚQ«O%◊3DS“âÑJ∑$DÿDTMÄÿ '8 Ú yÑE•<ìÉ£…◊ ˛Ä˚Õ ˛Ä˚Õ
  6963. ˛˙Õ¡¡'?É¿Ä˽ć@ć>Ê&≈ÄÄ@1¸@@Ä@Ê)%¶Ì ÀJHÀíl@-mdlò∫-ÄvˆC¢˘&« 1JDÈ€∏Áò@@˜@˜0kpb)%î™4ïΩIU4@V¶¨¥©RVÄöH•eQSBP3ΩJ*È@Á)%d≤%9%)í&)$@•BdîÄíâ)."íDêI)ú OJ8Á)%)"M¢>R⁄ˇ:L#©    M€ˆ©Å&—K:Û§Δ†äR–"TõÁ)%-ß#I)åë*$HIIE…"§I§êç≠"DÑAùåé|#ípÁ¸@ı ˘‚¸@ı ˘‚ ˘Ï‚¡¡¯Ä 0Δ 1ÄÄ ÿPÄ˝ I)J@ÄÿR/Ïπ&√Æ$    )Wq’ÜÇäUŒâ@⁄VPëQSD2P8ÓÍÄU)CÑâ˙ê)W†⁄¢œbíCƒ‡RLp¶KÇàìKπ ⁄ÛÉ£Û§¿ËÄFRñ´Zî•ÇZ"@⁄ ¢›"¢Dá^t9åd‡“mÕûcm›Ä⁄ÙÄ˚ ŸÙÄ˚ ŸÙÄ˚ Ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¡˛Ä8Õ˛ÄƒÕäR!5îéV±ÄœùÍQöªî®“Äœ IL·ííπ»îŒRñÄç$$Ì    5Äœ Ïdpr%∏ç" œ˛IJ Ã˛IJ à ˛IJ  ¡¡ÄÉ¿4˛@–@Å $@–K¬$ylwb%ˆ\V—îÇ í¥••'(H®®—%íî•))Igâ1(—=ÇTeMnjm¡—˘P—)(‚I∫DFInëPê— ¸˛Äà ¸˛ÄÃ˚‡»¡¡    ¯Ä`0À    PÄêHÀ    R/Ï∏¨àÀ    VPëQPpàÀ    ¢œbPàÀ    ÛÉ£Ú†àêÀ     ¢›"° r`Àò@@Ę@Ępk∞b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜∞kb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜k"b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜"kbb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ębk¢b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜¢k‚b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜‚k"b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜"kbb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ębk¢b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜¢k‚b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜‚kb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜"kbb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ębk¢b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜¢k‚b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜‚k"b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜"kbb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ębk¢b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜¢k‚b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜‚kb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ˇE@ˇ ˇˇˇˇ@
  6964. ˇ·ˇ‚7^
  6965. 4H\, Palatino&e.3+ä"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@äIntroduction to •)8 Apple Events4⁄ä˙(‡äAbout ‡) Apple Events
  6966. , (‡    3-5
  6967. ˇˇˇˇˇˇˇˇ440lòÄ.B0oMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""B0oB0o$””””””””””””””””””””””””””””””òÄ
  6968. 60@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""60@60@˜˜˜˜˜˜˜˜˜˜˜˜˜
  6969. ˛ˇ˛ˇˇ ˇˇ˛ˇˇ     ˇˇˇ˙ˇ
  6970. ˛ˇˇˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜
  6971. 454+?òÄ
  6972. 56+@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""56+@56+@$˜˛˙ˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  6973. ˛ˇ˛ˇˇ˛¸ˇˇ˚ˇ˛˙ˇˇ˝˛ˇ˛
  6974. ˛ˇ˛ˇˇ
  6975. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  6976. ˛ˇ˛ˇˇ
  6977. ˛ˇ˛ˇˇ˛˙ˇ˜˝˝ˇˇ˛ˇ˚˝ˇ¸˛¸ˇˇ˜˝˛ˇ˛
  6978. ˛ˇ˛ˇˇ
  6979. ˛ˇ˛ˇˇ˝ˇˇ˛˜˝¸ˇ
  6980. ˛ˇ˛ˇˇ˛¸ˇˇ˜˝˛ˇ˛
  6981. ˛ˇ˛ˇˇ
  6982. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˜˝¸ˇ
  6983. ˛ˇ˛ˇˇ˝˛ˇ˛
  6984. ˛ˇ˛ˇˇ
  6985. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  6986. ˛ˇ˛ˇˇ
  6987. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  6988. ˛ˇ˛ˇˇ
  6989. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  6990. ˛ˇˇˇˇ
  6991. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  6992. ˛ˇˇˇ
  6993. ˛ˇˇˇ
  6994. ˛ˇˇˇ
  6995. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  6996. ˛ˇˇˇˇ
  6997. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  6998. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  6999. ˛ˇˇˇˇ
  7000. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähH(eä/in this case, the server application is the tarc‡°dONLNd/\Hh´)æget application for the ‡°dONLNdG\´hÊ)cApple event. ›@°dONLNdT\ÊhÌ);A‡°dONLNdU\Óh) server °dONLNd]iäuÿ(räapplication may r_°dONLNdniÿuv)N&eturn information to the client in a r£‡°dONLNdîivuã)ûeply ¿°dONLNdôiåu )Apple event—in which case, °dONLNd¥väÇ(ä!the client application is the tarº¿°dONLNd’vÇv)Öget application for the rm °dONLNdÓvwÇä)heplydONLNdÚvâÇã).†°dONLNdÛvåÇé) dONLNdÙvéÇê) °dONLNdˆàäîê(ëäTµ¿°dONLNd˜àèîî)o+@°dONLNd¯àïî“) perform the rú°dONLNdà“îï)=,equested service—that is, to open the specifiÄ°dONLNd3àñîÓ)ƒed documents—the °dONLNdDïä°¶(ûäSurfWP°dONLNdIﶰ)riter application shown in FÄ°dONLNddï°3)uFigur@°dONLNdiï3°G)e 3-1∂¿°dONLNdnïG°O) fiCÄ°dONLNdqïP°Ñ)    rst uses the ˇ@°dONLNd~ïÉ°Ú)3Apple Event Manager to °dONLNdï¢äÆo(´ä2identify the event (the Open Documents event) and (Ä°dONLNd«¢pÆ{)Êto ``°dONLNd ¢{Æ—) dispatch the event t†°dONLNdfi¢“ƈ)Wo SurfW⁄ °dONLNd¢ıÆ)#riterq °dONLNdÍ¢    Æ)’s °dONLNdÌØäªè(∏ähQ`°dONLNdÓØꪓ)andler for that ‡°dONLNd˛Ø“ªÙ)BApple efi°dONLNdØÙª )"vent. @°dONLNd ت)An ‡°dONLNdتz)Apple event handler¯°dONLNd!ØzªŸ)] is an application-defik†°dONLNd8Ø⁄ª)`ned function °dONLNdEºä»
  7001. (≈äthat extracts pertinent data fr˚‡°dONLNddº
  7002. »()Äom an ∏`°dONLNdjº(»¢)Apple event, performs the r0‡°dONLNdÖº£»){equested action, and °dONLNdö…ä’∑(“ä (usually) r‡°dONLNd•…∏’‚).
  7003. eturns a rÒ°dONLNdØ…·’M))esult. In this case, SurfWŸ`°dONLNd……M’_)lriterp`°dONLNdŒ…a’˙) ’s Open Documents event handler °dONLNdÓ÷ä‚Δ(fläexamines the Ö†°dONLNd˚÷Δ‚])< Apple event to determine which d1¿°dONLNd÷^‚˛)ò#ocuments to open (Dec. Invoice and °dONLNd>„äÔù(ÏäNovŒ‡°dONLNdA„úÔû).N‡°dONLNdB„üÔ°) Œ‡°dONLNdC„°Ôº)Invoics °dONLNdI„ΩÔ«)e),†°dONLNdL„»Ô&)  then opens them as rB`°dONLNda„&ÔR)^
  7004. equested. °dONLNdlıäê(˛äTµ¿°dONLNdmıèº) o identify y¿°dONLNdxıº)-Apple events and r≥†°dONLNdäıG)T espond apprh@°dONLNdïıHo)8    opriately"†°dONLNdûıoŸ)', every application can r`°dONLNd∑ıŸˆ)jely on £`°dONLNdæıˆ˝)a °dONLNd¿äè( äv&@°dONLNd¡êÎ)ocabulary of standarˇ¿°dONLNd’ÍÚ)Zd = °dONLNd◊Ûä)    !Apple events that developers and X@°dONLNd¯ä)óApple have established for all °dONLNdä(ä"applications to use. These events Ü °dONLNd9%)ìarK °dONLNd;&>)    e defi܇°dONLNdA>l) ned in the T¿°dONLNdLm )/&Apple Event Registry: Standard Suites.¬Ä°dONLNdr )ü °dONLNdsä(æ(%ä The standarÌ@°dONLNd~æ(Δ)4d â°dONLNdÄ«(›)    suiteº¿°dONLNdÖ›(„)s,≠°dONLNdá‰(˚) or gri@°dONLNdç¸(#)    oups of r≥`°dONLNdñ#(@)'elated Æ¿°dONLNdù@(ô)Apple events that arQ†°dONLNd±ö()Ze usually implemented °dONLNd«)ä5Æ(2ätogether£@°dONLNdœ)Æ5)$, include the RequirD¿°dONLNd„)5M)Wed suite, the CorëÄ°dONLNdÙ)M5ª)He suite, and functional-arê@°dONLNd)ª5)nea suites such as °dONLNd 6äB†(?äthe T °dONLNd%6†B©)ex`°dONLNd'6™B∫)
  7005. t su ‡°dONLNd+6∫B)ite and the Databas°dONLNd>6B )Ue suú¿°dONLNdB6 B6)ite. TΔ‡°dONLNdH65B„))o function as a server application, your °dONLNdqCäO(Läapplication should be able to rM¿°dONLNdêCO[)Üespond to all the ¿¿°dONLNd¢C[O—)KApple events in the Requir$‡°dONLNdºC“O
  7006. )wed suite and °dONLNd…Pä\Ó(Yäany of those in the Cor¢`°dONLNd‡PÓ\A)de and functional-arh†°dONLNdÛPB\∫)T ea suites that it is likely to r·°dONLNdP∫\Î)x eceive. For °dONLNd]äifi(fäexample, most wor‘¿°dONLNd0]fiiÒ)Td-pr Ä°dONLNd4]Úi≥),ocessing applications should be capable of rå`°dONLNd`]≥iˇ)¡esponding to the °dONLNdqjävË(säApple events in the TT†°dONLNdÜjËv¸)^?ext suite, and most database applications should be capable of °dONLNd≈wäÉç(ÄärE°dONLNdΔwéÉE)*esponding to those in the Database suite. °dONLNdÒâäïæ(íä If necessaryg@°dONLNd˝âΩï))3, you can extend the defioÄ°dONLNdâ)ïÜ)lnitions of the standar0 °dONLNd,âáïè)^d mÄ°dONLNd.âèï◊)Apple events to °dONLNd>ñä¢ß(üämatch X°dONLNdDñ®¢ƒ)specifiΔ °dONLNdKñƒ¢X)$c capabilities of your application. k‡°dONLNdoñY¢_)ïY,`°dONLNdpñ_¢£)ou can also defi˜†°dONLNdÄñ£¢)Dne your own custom °dONLNdì£äØ(¨äApple events; however`°dONLNd®£Ø )f, beforÙ°dONLNdØ£ Ø#)e defi/¿°dONLNdµ£$Ø›)(ning custom events, you should check witª¿°dONLNd›£›ØÂ)πh °dONLNdfl∞äºö(πäthe °dONLNd„∞öº∑)Apple |Ä°dONLNdÈ∞∏º)Event Registrar t≤°dONLNd˙∞º)Jo fi¥@°dONLNd˛∞ºV)nd out whether ¢`°dONLNd∞Wºò)Gyou can adapt –°dONLNd∞òºΩ)A    existing îÄ°dONLNd$∞Ωºı)% Apple event °dONLNd0Ωä…ö(Δädefir °dONLNd4Ωõ…ÿ)nitions or defi4¿°dONLNdCΩŸ…`)>nitions still under developmen*`°dONLNdaΩa…j)àt t/ °dONLNddΩj…Û)    o the needs of your application>°dONLNdÉΩÛ…¯)â. °dONLNdÜœä€˝(ÿäBy supporting the standarıÄ°dONLNdüœ˝€)sd 2‡°dONLNd°œ€ß)    $Apple events in your application, yoÆ@°dONLNd≈œß€¥)°u eˇ°dONLNd»œ¥€»)nsurŸÄ°dONLNdÃœ»€˙) e that your °dONLNdÿ‹äË(Âäapplication can communicate ef≥@°dONLNdˆ‹Ë)å:fectively with other applications that also support them. °dONLNd    0Èäı(ÚäInstead of supporting many difx†°dONLNd    NÈı )äfer[ °dONLNd    QÈ ı€) *ent custom events for a limited number of °dONLNd    {ˆä(ˇä applications, you can support a ¥ °dONLNd    õˆ)çry °dONLNd    úˆC)
  7007. elatively Ω@°dONLNd    ¶ˆCØ)(small number of standar
  7008. @°dONLNd    Ωˆ∞∏)md G†°dONLNd    øˆ∏)Apple events that °dONLNd    —äG( ä)can be used by any number of applications·@°dONLNd    ˙GL)Ω. °dONLNd    ˝ä!ê(äY@Ä°dONLNd    ˛ê!˛)ou can begin supporting v@°dONLNd
  7009. ˛!√)n+Apple events by making your application a r;°dONLNd
  7010. Aƒ!)Δeliable server °dONLNd
  7011. P"ä.Δ(+äapplication: fiC†°dONLNd
  7012. _"«.¯)=rst for the rî°dONLNd
  7013. l"¯.)1equir´@°dONLNd
  7014. q".)ed ≤@°dONLNd
  7015. t".z)Apple events, then fo2 °dONLNd
  7016. â"{.Ñ)_r tÁ °dONLNd
  7017. å"Ñ.û)    he cor¨‡°dONLNd
  7018. í"ü.Ω)e and f∑Ä°dONLNd
  7019. ô"Ω.Ú) unctional-ars °dONLNd
  7020. •"Û.ˇ)6ea °dONLNd
  7021. ®/ä;Á(8äApple events as appr°dONLNd
  7022. º/Ë;á)^$opriate. Once your application can r†°dONLNd
  7023. ‡/á;⁄)üespond to the apprYÄ°dONLNd
  7024. Ú/⁄;˚)Sopriate °dONLNd
  7025. ˙<äH´(Eästandar±Ä°dONLNd <´H≥)!d Ó‡°dONLNd <≥H;)Apple events, you can make it Ä°dONLNd !<<Hc)â    scriptabl¿°dONLNd *<dHk)(e,í¿°dONLNd ,<kH¨) or capable of r5@°dONLNd <<≠HÈ)Besponding to °dONLNd IIäUû(Räinstró¿°dONLNd NIûU®)<uctions written in a system-wide scripting language such as Õ¿°dONLNd äI®UÎ(R®AppleScript. If °dONLNd öVäb¥(_ä    necessary4‡°dONLNd £V¥bB)*!, your application can also send ‹°dONLNd ƒVAb
  7026. )ç0Apple events to itself or to other applications.°dONLNd ıhätΩ(qä “About the  ‡°dONLNd hæt)4Apple Event Manager˛`°dONLNd ht%)`,”~`°dONLNd h&ts) which begins on Ó¿°dONLNd &hstä)Mpage …†°dONLNd +hãtù)3-48Ä°dONLNd /hût¨), pr‰†°dONLNd 3h¨t›)
  7027. ovides morô†°dONLNd =hfitÂ)2e °dONLNd ?uäÅÇ(~ä8information about the steps you need to take to support °dONLNd wuÉÅ‚)˘Apple events in your °dONLNd åÇäé¿(ãäapplication. ˇ"h@ˇ ˇˇˇˇ@
  7028. ˇ·ˇ‚7^
  7029. 4*\¯, Palatino&e.3+l"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@lIntroduction to •)8 Apple Events4⁄*˙¯
  7030. (‡*3-6    )BAbout ‡) Apple Events4^*¿¯
  7031. °dONLNd\lh∏(elThe next section, *@°dONLNd\πh)M“Apple Events and 퇰dONLNd$\hq)VApple Event Objects,”£@°dONLNd9\qhµ)b describes how ^†°dONLNdH\µhÚ)DApple events °dONLNdUiluË(rlUcan describe data and other items within an application or its documents. Subsequent °dONLNd™vlÇÎ*sections describe the basic orôÄ°dONLNd»vÎÇ')ganization of ø°dONLNd÷v'Ç©)<Apple events and the data strÕ`°dONLNdÛv©Ç¿)ÇucturS@°dONLNd¯v¡Ç”)es frÚ¿°dONLNd˝v”Ç„)om °dONLNdÉlè®(ålwhich they ar‡°dONLNdÉ©èÀ)=e constrb†°dONLNdÉÀèË)"ucted. 
  7032. ¥*ª¯4µ*ª¯ ∂l∂¯
  7033. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd•l¥€(∞lApple Events and Ùé°dONLNd.•⁄¥O)nApple Event Object@Í°dONLNd@•P¥V)vsˇˇˇˇˇˇ€r)†3
  7034. °dONLNdCªl«(ƒl"The Open Documents event shown in Ä°dONLNdeª«.)™Figur”@°dONLNdjª-«A)e 3-1p¿°dONLNdoªB«ê), like the other thr‡°dONLNdɪë«°)Oee rÓ °dONLNd᪆«∑)equir`°dONLNdåª∏«Ê) ed events, °dONLNdó»l‘à(—lspecifiÓ °dONLNdû»à‘ÿ)Mes an action and the applications or documents to which that action applies. °dONLNdÎ’l·(filThe ª¿°dONLNdÔ’·)%Apple Event Registry: Standard Suites©Ä°dONLNd’·()ù pr†°dONLNd’(·fi) *ovides a vocabulary of actions for use by °dONLNdA‚lÓy(Îlall –¿°dONLNdE‚yÓΩ)applications. InÙÄ°dONLNdU‚ΩÓe)D( addition to a vocabulary of actions, efö‡°dONLNd}‚fÓı)©fective communication between °dONLNdõÔl˚®(¯lapplications r∏‡°dONLNd©Ô®˚ø)<equir– °dONLNdÆÔø˚)es a method of rß¿°dONLNdæÔ˚≤)G&eferring to windows, data (such as wor1 °dONLNd‰Ô≥˚Ô)≠ds or graphic °dONLNdÚ¸lñ(l    elements)=‡°dONLNd˚¸ó¢)+, fiJ†°dONLNdˇ¸¢b) -les, folders, volumes, zones, and other discr‹¿°dONLNd,¸bÍ)¿ete items on which actions can °dONLNdK    l¿(lbe performed. The b`°dONLNd]    ¿$)TApple Event Manager ë@°dONLNdq    $O)d
  7035. includes r °dONLNd{    PÜ),outines that Á†°dONLNdà    Üñ)6allo-‡°dONLNdå    ó¶)w a‡°dONLNdè    ßÙ)ny application to °dONLNd°l"á(lconstrï °dONLNdßá"ë)uc Ä°dONLNd©í"¬) t or interpr6Ä°dONLNdµ¬"Δ)0e °dONLNd∂«"—)t “¬Ä°dONLNdπ—"´)
  7036. 1noun phrases” that describe the objects on which &°dONLNdͨ"¯)€Apple events act.°dONLNd¸(l4†(1l Most of the ≤Ä°dONLNd(†4È)4Apple event defio`°dONLNd(Í4&)Jnitions in the Ó‡°dONLNd'(&4¬)<%Apple Event Registry: Standard Suites‹†°dONLNdL(√4Ë)ù     include °dONLNdU5lA|(>ldefir °dONLNdY5}A©) nitions of £‡°dONLNdd5©A#),Apple event object classes,Õ°dONLNd5#AL)z     which ar‰`°dONLNdà5LAı))'e simply names for objects that can be °dONLNdØBlNÊ(Klacted upon by each kind of Y¿°dONLNd BÊN!)zApple event. F °dONLNd◊B!N1);An ^¿°dONLNd⁄B1NÉ)Apple event objec °dONLNdÎBÑNá)Sts°dONLNdÏBáN£) is any¯‡°dONLNdÛB£N”) distinct ite› °dONLNdB‘Nfl)1m °dONLNdOl[Ó(Xlsupported by an application t9†°dONLNdOÔ[Ï)É8hat can be described within an Apple event. Apple event °dONLNdW\lh(el[objects can be anything that an application can locate on the basis of such a description, °dONLNd≤ilup*;including items that a user can differentiate and manipulatÑ`°dONLNdÌipu≤(rpe while using a¿°dONLNd¸i≥uÚ)Cn application, °dONLNd vlÇy(l;such as words, paragraphs, shapes, windows, or style format)¿°dONLNdFvzÇÄ(zs.Ê¿°dONLNdHvÄÇÇ) °dONLNdJàlîê(ëlThe defi≠‡°dONLNdRàêî“)$nition for each ¬ °dONLNdbà“îZ)B Apple event object class in the Δ¿°dONLNdÇàZî∂)àApple Event Registry: °dONLNdòïl°ë(ûlStandard∂@°dONLNd†ïë°ì)% 6@°dONLNd°ïî°≠)Suites6‡°dONLNdßï≠°E)" determines only how that kind of ±@°dONLNd…ïE°«)òApple event object should be °dONLNdÊ¢lÆñ(´l    describedZ†°dONLNdÔ¢óÆô)+ ⁄†°dONLNd¢ôÆ≈)
  7037. within an ZÄ°dONLNd˙¢ΔÆb)-#Apple event, not how it should be rÄ°dONLNd¢cÆq)ùepr≠@°dONLNd ¢qÆ›)esented internally by an °dONLNd9Ølª”(∏lindividual application. ·°dONLNdQØ”ªŸ)gY°Ä°dONLNdRØŸªÎ)?ou do not have to write your application in an object-oriented °dONLNdëºl»u(≈lprG °dONLNdìºv»–)
  7038. ogramming languagé`°dONLNd§º–»⁄)Ze t`°dONLNdߺ€»)
  7039. o support $`°dONLNd±º»…)-,Apple event objects. Instead, you need to orè`°dONLNd›º…»Ë)¡ganize °dONLNd‰…l’⁄(“lyour application so that i&@°dONLNd˛…€’ı)ot can i톰dONLNd…ı’)nterpr)¿°dONLNd …’&)et a r˙¿°dONLNd…&’M)    equest fo˜°dONLNd…N’^)(r sp®¿°dONLNd…_’q)ecifi◊¿°dONLNd#…q’w)c i†°dONLNd%…x’«)Apple event objec¬ °dONLNd6…«’Ô)O ts, locate °dONLNdA÷l‚ö(fll the objectsÍÄ°dONLNdL÷ö‚Y).*, and perform the requested action on themh`°dONLNdv÷Z‚\)¿.°dONLNdxËlÙÑ(ÒlFigurR¿°dONLNd}ËÑÙò)e 3-2@°dONLNdÇËòÙÈ) shows a common ~`°dONLNdíËÍÙÅ)R"Apple event, the Get Data event frπ`°dONLNd¥ËÅÙ≤)ó
  7040. om the Cor1¿°dONLNdæË≥ÙÚ)2e suite. In this °dONLNdœılü(˛l example, th °dONLNd⁄ı†¿)4e SurfC¸ °dONLNd·ı¿â) 2harter application is the client application; it r=`°dONLNd    ıäÒ) equests data contained °dONLNd    *lõ( l in a specifi߇°dONLNd    6õÈ)/c table in a SurfW‡°dONLNd    HÈ6)Nriter document. Tg@°dONLNd    Y5^)L
  7041. o obtain t`°dONLNd    c_≥)*he data it wants, thw¿°dONLNd    w≥”)Te SurfCe¿°dONLNd    ~‘Ò)!harter °dONLNd    ÖlB(l1application must include a description of the datˆÄ°dONLNd    ∂BW)÷a in tÚ†°dONLNd    ºXŸ)he Get Data event it sends to °dONLNd    ⁄l(à(%lSurfWP°dONLNd    flà(ö)riterl@°dONLNd    ‰ö(). This description identifi;¿°dONLNd    ˇ    (()oes the r‰¿°dONLNd
  7042. ((l)equested data a€ °dONLNd
  7043. m(~)Es aniÄ°dONLNd
  7044. (â) A∞¿°dONLNd
  7045. â(Ú)
  7046. pple event object called °dONLNd
  7047. 5)l5Ñ(2la tabl≤`°dONLNd
  7048. ;)Ñ5»)e. The table is n*Ä°dONLNd
  7049. L)…5‚)E;amed “Summary of Sales” and is located in a document named °dONLNd
  7050. á6lB±(?l“Sales Report.” °dONLNd
  7051. òHlT:*.The SurfWriter application’s Get Data handler m¿°dONLNd
  7052. ΔH;TΔ)œ extracts information about the r)°dONLNd
  7053. ÊH«TË)åequest, °dONLNd
  7054. ÓUlaπ(^llocates the specifi‚†°dONLNd Uπa¯)Med table, and rˆ °dONLNd U¯a")?
  7055. eturns a rœ@°dONLNd U"a7)*esult¿°dONLNd U8aÂ)%. The Apple Event Manager provides a °dONLNd Dblnˆ(klXreply Apple event to which the SurfWriter application adds the requested information in °dONLNd úol{‰*Rthe form requested by the Get Data event. The Apple Event Manager sends the reply °dONLNd Ó|làk*:event back to the SurfCharter application, which can use tÎÄ°dONLNd (|kàæ)ˇhe requested data i◊‡°dONLNd ;|øàÛ)T n whatever °dONLNd Fâlï3(íl-way is appropriate—in this case, displaying i∂¿°dONLNd sâ3ïI)«t as a6 °dONLNd yâJïu)  pie chart.ˇnû@ˇ ˇˇˇˇ@
  7056. ˇ·ˇ‚7^
  7057. 4H\, Palatino&e.3+ä"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@äIntroduction to •)8 Apple Events4⁄ä˙(‡äAbout ‡) Apple Events
  7058. , (‡    3-7
  7059. ˇˇˇˇˇˇˇˇ440lòÄ.B0oMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""B0oB0o$””””””””””””””””””””””””””””””òÄ
  7060. 60@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""60@60@˜˜˜˜˜˜˜˜˜˜˜˜˜
  7061. ˛ˇ˛ˇˇ ˇˇ˛ˇˇ     ˇˇˇ˙ˇ
  7062. ˛ˇˇˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜
  7063. 454+?òÄ
  7064. 56+@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""56+@56+@$˜˛˙ˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  7065. ˛ˇ˛ˇˇ˛¸ˇˇ˚ˇ˛˙ˇˇ˝˛ˇ˛
  7066. ˛ˇ˛ˇˇ
  7067. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  7068. ˛ˇ˛ˇˇ
  7069. ˛ˇ˛ˇˇ˛˙ˇ˜˝˝ˇˇ˛ˇ˚˝ˇ¸˛¸ˇˇ˜˝˛ˇ˛
  7070. ˛ˇ˛ˇˇ
  7071. ˛ˇ˛ˇˇ˝ˇˇ˛˜˝¸ˇ
  7072. ˛ˇ˛ˇˇ˛¸ˇˇ˜˝˛ˇ˛
  7073. ˛ˇ˛ˇˇ
  7074. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˜˝¸ˇ
  7075. ˛ˇ˛ˇˇ˝˛ˇ˛
  7076. ˛ˇ˛ˇˇ
  7077. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  7078. ˛ˇ˛ˇˇ
  7079. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  7080. ˛ˇ˛ˇˇ
  7081. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  7082. ˛ˇˇˇˇ
  7083. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  7084. ˛ˇˇˇ
  7085. ˛ˇˇˇ
  7086. ˛ˇˇˇ
  7087. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  7088. ˛ˇˇˇˇ
  7089. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  7090. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  7091. ˛ˇˇˇˇ
  7092. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  7093. gHw4gHw"hH]
  7094. ˇ·ˇ‚7^    °dONLNd\äg¥(dä
  7095. Figure 3-2°dONLNd \Ãg“)BA0°dONLNd \“g) Get Data event
  7096. √H 4ƒH  ≈ä≈
  7097. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd¥ä√◊(øä Apple Event j»°dONLNd)¥◊√v)MAttributes and Parametersˇˇˇˇˇˇ€r(ø3
  7098. °dONLNdD…ä’(“äWhen an application cr)‡°dONLNdZ…Ò’F)geates and sends an Õ`°dONLNdm…E’ê)TApple event, the  °dONLNd~…ë’
  7099. )LApple Event Manager uses °dONLNdó÷ä‚í(fläarE°dONLNdô÷ì‚Ë)    guments passed to †°dONLNd´÷Ë‚P)UApple Event Manager r¯Ä°dONLNd¿÷O‚ò)goutines to constrD‡°dONLNd—÷ô‚⁄)Juct the data str °dONLNd·÷€‚Ú)Bucturû°dONLNdÊ÷Ú‚)es that °dONLNdÓ„äÔ√(Ïä make up the µ°dONLNd˙„√Ô˛)9Apple event. °`°dONLNd„˛Ô);An [†°dONLNd
  7100. „Ô˙)7Apple event consists of attributes (which identify the °dONLNdAä¸(˘äYApple event and denote its task) and, often, parameters (which contain information to be °dONLNdö˝ä    À*used by the tar%°dONLNd©˝Ã    )Bget application). °dONLNdºäö(äAn ò†°dONLNdøö˚)Apple event attributeT†°dONLNd‘¸)b is a rø°dONLNd€%)ecor3`°dONLNdfl&b)d that identifi{‡°dONLNdÓbÈ)<!es the event class, event ID, tar °dONLNdÈ˘)áget °dONLNdä(U(%ä0application, or some other characteristic of an ‘Ä°dONLNdCU(ñ)ÀApple event. TU°dONLNdQñ(“)Aaken together"`°dONLNd^“()<, the attributes °dONLNdo)ä5¢(2äof an º`°dONLNdu)¢5Ω)>Apple event denote the task to be performed on any data specifi€¿°dONLNd¥)Ω5Â(2Ω
  7101. ed in the y‡°dONLNdæ)Ê5))Apple °dONLNdƒ6äB‚(?äevent’s parameters. ¡ °dONLNdÿ6‚BÈ)XA˚¿°dONLNdŸ6ÈB:) client application Q°dONLNdÌ6;BL)Rcan †°dONLNdÒ6MBW)usV¿°dONLNdÛ6WB^)
  7102. e B°dONLNdı6^Be)A    @°dONLNdˆ6fBΔ)pple Event Manager r5‡°dONLNd
  7103. 6ΔB)`outines to add °dONLNdCäOœ(Läattributes to an b`°dONLNd*CœO
  7104. )EApple event. N¿°dONLNd7C
  7105. O');After r≠Ä°dONLNd>C'O[) eceiving an ˚Ä°dONLNdJC[OÁ)4 Apple event, a server applicatioáÄ°dONLNdjCËO)çn can u°†°dONLNdqCO) se °dONLNdtPä\Ú(YäApple Event Manager rs‡°dONLNdâPÚ\∑)h/outines to extract and examine its attributes. 
  7106. wáú4wàú
  7107. wäú4vâwäò@@˜@˜wä∑Å¡¡?‘ˇ˛?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇò@@Ę@Ę∑ä˜Å?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ ?‹ˇ˝˝ˇ ?‹ˇ˝˝ˇ?‹ˇp˛˝ˇ?ˇˇ˛‡„ˇà˛˝ˇ?ˇˇ˛`„ˇÒ˛˝ˇ?ˇˇ˛Ä„ˇÒ˛˝ˇ?ˇˇ˛¡„ˇÒ?¿˝ˇ?ˇˇ˛!„ˇü¿0˝ˇ?ˇˇ˛„ˇ^Ã˝ˇ?ˇˇ˛ …„ˇ<˝ˇ?ˇˇ˛B•„ˇ Ä˝ˇ?ˇˇ˛ D    S„ˇ @@˝ˇ?ˇˇ˛ à£„ˇ Ä ˝ˇ?ˇˇ˛A S„ˇAê˝ˇ?ˇˇ˛A@#„ˇÅ%H˝ˇ?ˇˇ˛B@%„ˇÇ Bà˝ˇ?ˇˇ˛B Ä„ˇÒ ¡H˝ˇ?ˇˇ˛D Ä„ˇÒA†à˝ˇ?ˇˇ˛$!„ˇÒAê˝ˇ?ˇˇ˛$A„ˇÒÇàp˝ˇ?ˇˇ˛A?„ˇÒÉD˝ˇ?ˇˇ˛ G„„ˇêÜ¢˝ˇ?ˇˇ˛O„}„ˇëQ˝ˇ?ˇˇ˛¯„˝„ˇA®Ä˝ˇ?ˇˇ˛¯„無1T@˝ˇ?ˇˇ˛=„無* ˝ˇ?ˇˇ˛:˜ç„ˇ    0˝ˇ?ˇˇ˛=Λ„ˇÇ
  7108. »˝ˇ?ˇˇ˛:˜≠„ˇÇ»˝ˇ?ˇˇ˛}Λ„ˇÅ˝ˇ?ˇˇ˛∫˜≠„ˇÄÅ˝ˇ?ˇˇ˛}Λ„ˇA¯˝ˇ?ˇˇ˛∫˜≠„ˇ"˝ˇ?ˇˇ˛}Λ„ˇ˝ˇ?ˇˇ˛Ôæ˘„ˇ˝˝ˇ ?‹ˇ˝˝ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇò@Ä¿˜Ä¿˜˜ä7Å?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇò@¿˜¿˜7äwÅ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇò@@˜@˜wä∑Å?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ?”ˇ”ˇ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  7109. 0»
  7110.     »»
  7111. à»
  7112. ê»
  7113. êËx†»
  7114. ëâ@»
  7115. ˛x»¡¡¡ò@@Ę@Ę∑ä˜Å¡¡¿``¿É‡ “Äêê Å “OF–¡rÖ“€Ä”R…(p 
  7116. Ç•
  7117. Ui“íYp@    }…ûJ“Ãr@àÄ 1Ç'Ô®õ“úZ8p3Éœ≈JG퓲"≈˛"≈˛≈¡¡( }‡@8˛DÅ$ ¿|Ê&)ä˛Äƒ¸@  Ä$Ê)%)Lfl+*î£/E±µµë⁄2‰õo¨éâÙ[@bîà#•æpÁ)%1TjTWz•RJ—Zö≤jUEM5Uí§≠†gzî8™‘ÄÁ)%—dL‰íSHîíëRíñLâäI&d¥I) íS8A<òpÁ)%bDûàٕΈ’0é§$ûøŒìO"¨ÂÌSA•†EQ<Á)%sNåîx£D§â q%%îJâFJ!6≤HíÉ;¯è(‡Á˝˛ ıĢ ‚˝˛ ıĢ ‚ ˘ Ï ‚¡¡$Ä√0aÅÿ  ˛ $§$íÿ$≤Ù[úê$•\ÁTrî+∏9%Ÿ    ,¬E$≠•@„ª©T•Èu@RfiÄ⁄
  7118. EºII) ÄI0‚ô..¶8ó‰Ä⁄gèmSíJX"≠h !(À¥âŸEÙäHí=–Ê1ë√I∑6<«2p€ˆŸı˙@Ÿı˙@Ÿı˙@Ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ‡Õ Õ §D÷R8¨fŒ ;‘§jÓQP    ™Œ íôƒ    JJ„ê    0Œ •-:êì≤ vŒÿ»·ƒîb··H@œ ˛!˝Äà ˛!˝ÄÃ
  7119. ˛!˝Ä ¡¡˛ –<Ä∏¸@÷ÇÄ@((@÷ò@Ä¿˜Ä¿˜˜ä7Åó≟÷»Hú°uä)ˆ\V‡ÿ* JjìTH°AÊZñ+(H®©◊L
  7120. &RL¢dQB"íºQgâ1(‡ÿ~    )îù¥Ëëá¬#§&y¡—˘P ÿTìàñ‰êø:ár•FQnëPë¿ÿ¸@˝ÄÄ“¸@˛Ä“ ¸Ä˚œ¡¡     ¿¿À      ! À    $≤Ú∞" À        ,¬E%@‚ À    
  7121. EºII@ À    gèjÅ@À    EÙäDÄÂÄÀ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜7äiÅ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜wä∑Å¡¡”32” ‘¡”¡ ‘” ‘¡”¡ Ì`ÄÎÏ`Ä0Ó ÌÛ˝∏ÌÛ¯Ó ÏÛw˝˜˚‹Ìõw·á√Ó Ìõ˝ºˆ{¯‹ Ì0Í Ï0Í ‘¡ ıˇÒ ˆàâć ÛˆÄÚÚ¿ˆÄÚ Û`ˆ"#åÚÛ¯8˛‡¿˝è·Ù¸˛0c`¿˛à¿ÙÙ˛àéè˚ˇ¸˛àâà‚  ıp˛„ofi˛à¿ıı¿˛<c{ˆ˛àpı! ˆˇ8˛"#˜ÛÔ˛˛"#è¿ıı8ŇˆÄ„ı‡¿ÄˆÄ¸¿ˆˆÄ8˛ˆàâÄp‰ ˜ ‡˛ˆÄ¿ˆˆIJıˇÄpˆ ˜p˝ˆÄĘˆ¿8˝ˆÄ¿Â˜ć˝ˆÄ¿`˜˜Ä˝ˆIJp0 ¯¸ˆIJ˜!˜ ¸~à˛˛IJ ˜# ¯08¸ à˛˛IJ˜˜``¸ò|Èé6Üp˛IJÅÄÊ!˜¿¿¸|>õ…}Oê˛Ä˝¿¿¯¯Åĸ`2ö    MHê˛Ä˝``Ê# ˘˚\È…=Gp˛Ä˝00¯¯˚ˆÄ˝¯ ˘˚ˆÄ˝ ¯¯ 0˚ˆÄ˝Ê ¯ ˚W˝8Ä˝ܯ¯`˚XIJDĸÉÊ" ˘0¿˚Nç§n1ñ8ĸ¡¯!¯`Ä˚ÕJü$îfl`ĸAĢ# ˘AÄ˚ÕJìîFXĸ`Ģ¯√˙=Jèd9◊pĸ0¿Á˘Ç˙˝˚ĸ`˘˘˙˝ ˚ĸ Á ˙ ˙ˆĸ 0˘˘˙@ ˚ĸ˘ò@@Ę@Ę∑ä˜Å# ˙˙( ˛@ĸ˘"¸  0˙\~`Ïi–‹ÓfÜpĸ È'˝(@ ˙R)Ò2ô©ÚIıOêĸÄ˚&˝
  7122. Œ‡‡˙R)Å2â©IïHêĸá m,¿Ï) ˛ È@¯RpÏw®Ú)uGpÄ˚ůæIJ˝+    @¯ˆÄ˚¡à–IJ" ˛ È ¯ˆĸÅxéIJˆĸÅÁW˝Ä˚¡˘XÑ`˝Ä˚cÁ& ˝@¯4«nf‡˝Ä˚:`˝$¸į˝Ï˘î@˝Ä˚@˝) ;ôôÕ¿˘Õâî@˝Ä˚ Ófg7˛$˛¶Z|” ˘<Ó~d ˝Ä˙ôiÛLÄÌ$˛¶Z$” ˘˝˚Ä˙ôhìLÄ!˛ªô‹M ˘˝˚Ä˙Ógq4ÄÌ ˛"ıˆĢà˚˝"ıˆĢà˚ ÒˆÄÚ
  7123. ıˇÄ‡ıˇÄÚ¡  €p˚¸‡·à˚ ˝`‚˚ ¸Ä‚È˝¿„?¿˝˝ ‚ü¿0Π˛‚^Ã˝˝ »‚<˝ ˛B§‚ IJ˝ D    R‚ @@Ï˝ à¢‚ Ä ˛˝A R‚AêÏ ˛A@"‚Å%H˛˝B@$‚Ç Bà˛ ˛B Ä„ ¡H˛˝D Ä‚A†àÏ˝$!·Aê˛˝$A‚ÇàpÏ ˛A?‚ÉD˝˝ G„·êÜ¢˝ ˛O„|‚ëQ˝˝¯„¸‚A®ÄÏ˝¯„å‚1T@˛˝=„å‚* Ï ˛:˜å‚    0˛˝=΋‚Ç
  7124. »˛ ˛:˜¨‚Ç»˛˝}΋‚ÅÏ˝∫˜¨·ÄÅ˛˝}΋·A¯Ï ˛∫˜¨·"¸˝}΋·¸ ˛Ô毀¡”¡ ‘€¿    !˝ ,Ä‚  @˛˛ÄrÄ„ì∫≠ÌÄÌ˛N‡Êo∞„s…_˛˛Ã`üG‡‰3…QÏò@Ä¿˜Ä¿˜˜ä7Å ÃbôF ‰œI/˛˛<\óC‡‹ ‘¡”¡ ⁄Ä˝‹<¿˝ ›'Ä`˝¸‡„a0θ`„C4P˝¸†„¬8¯Î ˝ ¿ÊÇ@˝¸ ‡ÁÜ    @˝ ˝ 8Á
  7125. @˝¸  Á @θ`Á @˝¸†Ä˿Π˝ Á@˝¸ Á0    @˝ ˝ Á  
  7126. @˝¸ AÄË`@θ`‡ÄË@ @˝¸† ¿Ë0@¿Î ˝ 0`Ë`¿@˝¸ 0Ë@Ä    @˝ ˝  Ë¡Ä
  7127. @˝¸ Èɲ@θ` È˛ @˝¸†È ˛¿Î ˝ ÇÈ ˛@˝¸ ˛ÉÈ0˛    @˝ ˝ ˛¡ÄÍ ˛
  7128. @˝¸ ˛`¿Í0`˛@θ`˛0pÍ`¿˛ @˝¸†˛Î¡Ä˛¿Î" ˝ ˛ ¯`¿˜˝@˝#¸ ˛¯`¿˙˝    @˝& ˝ ˛ĢÛfi¯ÌÛº˙ ˝
  7129. @˝ ¸ ˛¿¿˘Û{˝˜˚ÿ˙p˝@Î$¸`˝`p˙õ{·á√ÿ˙¿0˝ @˝!¸º˝0˙õfi¸ˆ{‹˚ć˝¿Î" ˝ ˝˘˜Ä˝@˝ ¸0˝Ä˙˜¸¿˝ ˝`˝Óˆ¸¿˝ÄÔÄ0‰˚ĸ‡Ä?ˆˇ˛ <‡ˆı8(ˆàãq‡ĉ ˆ‡ ˆflıı¿?¸ ˆ˙ˇ˛ ıxı"#@˙&˙ˇ‡ ˝˝˛@˙Ó,@˙0¿ ˝Ä˝x˛@˛-{Ô˝˛(˝à窛˝àã¿˛@å»Ã»Ó0
  7130.  z/ Ä/K˛ˇÙ ˝IJé˝
  7131. @  -
  7132. z/¨ÿÃØK¸ ˝„˝¯˝
  7133. @@DP&
  7134.  z/ ¨òÃØ{˚¸"/øˇ˝"#˝@˙#
  7135. z/¨fiÃØC˚ ¸˝˚@˙Ó$
  7136. {Ô¨fiÃØ˚ ¸˝˚˘ˇ˙ˇ˚(ˆàã˚@˚Ó @˚0˚ ˆ˚@˚@˚0˚?ıˇ˚@˚! @˚∞˚ ˆ˚
  7137. @ƒH"
  7138. Aê˚ ˆ˚@@HÓò@¿˜¿˜7äwÅ$
  7139. BP0˚ ˆ˚
  7140. @eíyÄ"
  7141. B∏l“Ã0˚ ˆ˚@WóKÄÓ$
  7142.  BUËô˚‹0˚ ˆ˚
  7143. @Wy¿'
  7144. AîËiö¯˚ p˝Å˝˚@˚$ @˚0˚ à˝$A˝˚@˚'@˚0˚  d¥–⁄Fs3Ä˚@Ä®Ó)@˚0˚ ™©ÚI fl~˛˚
  7145. @Ä®P*B ˛0˚  å™©1I$SAÄ˚@ΔÆX¿Ó,
  7146.  B 0˚ s™®ÒÜ#è?˛˚
  7147. @©^U¿(
  7148. C©€jq6@0˚ ˛˙˚
  7149. @¶\T‡%
  7150.  Bi4™ìƇ0˚ ˛˙˚@˚
  7151. Cë”fqßp0˚ ˆ˚@˚Ó'@¸0˚  f0ÿ3 «˚@˚(@!¸0˚  ôHS LÄ(˚@ÄÓ) @˚0˚  Hì LÄ.˚
  7152. @Ñ)@˚0˚  )H ¿LÄ ¡˚
  7153. @K1îÄ) @˚0˚  ôH     LÄ    ˚
  7154. @ÔrΩ¿'@˚0˚  f0 ¿3Ê˚@k·ú–Ó@˚0˚ ˆ˚@˚@˚0˚ ˆ˚@˚Ó @˚0˚ ˆ˚@˚@˚0˚ ˆ˚@˚ @˚0˚ ˆ˚@˚@˚0˚ ˆ˚@˚Ó@˚0˚?ıˇ˚@˚@˚0˚ıˇ˚@˚Ó @˚0Ë@˚@˚0Ë@˚ @˚0Ë@IJ0@˚0Ë@NögC0Ó@˝`0Ë
  7155. @MU5D† @N¥ŒÜ`0ˇÎ
  7156. ˛@ÕUTƒ†Ó   @Mjjâ@0¿Ï @=U4É  @Mj©â@0@Ï @˝Ä   @=ji@0`Ï@˛@˛0 Ï@Ñ˝Ó @˛0 Ï@då˛@˚0 Ï@5P˛Ó  @‚˛0 Ï@’»˛  @F0 Ï@4ú˛  @Œ®0 Ï@˚ @6‰0 Ï@˚Ó @ŒN0 Ï@˚@˚0 Ï@˚Ó @˚0 Ï@˚@˚0 Ï@˚ @˚0 Ï@˚@˚0 Ï@˚Ó&@9 0 8˛Ä@ı@˚)@Ä
  7157. –0 $@¸ĸ@˚Ó. @Δ`˚∞0 %üû≤Y¿˝
  7158. @@˚0@)ëΩ‹H0?ˇ¯'œãÃ˘~@˝ \ÈÜKsøˇ¯@˝ˇ¿1 @iì34∞0 &Lä ¡¢@˝“õœ/…@@/@íÏ0 9«âƒπ¿˝2ö4I@@Ó( @ÊfOv0 Ù<È«#»Ä@Δbê@# @åŒ0 Ûĸ
  7159. @)íh@Ó%  @ª0 Ûĸ @iíÿ@'@ ˇ›0 @Û @í    $@, @ ˇ0  
  7160. @¯˛ @Êbÿ@*@ã0 {4
  7161. ÓL¯@@Ó,@ F0 4™ô^¯ÀÄ@@*@ä0 4™ôP¯/•@@Ó+ @&0 3*ÓN¯,!@˝ˇ¿) @10 ¸à˜ÀúÄ@@ò@@˜@˜wä∑Å(  @1¢,,p0 ¸àˆ˛ @@" @»Ë∏R@0 ˛
  7162. @@Ó$ @»}‡6`0 ¸Ú @vb    ú@% @»H0 ˝ Ù
  7163. @IíP@Ó( @>` 4∑9ù3pÙ @ií ÿ@%@˚ 0`z¸íS|†Ù @í@% @˚ 0¿CDíSD Ù @fbÿ@#@˚ Ä:<âù;êÙ
  7164. Ä@@Ó@˚∞˛˚Ò ˛@@@˚0˙@˝ˇ¿Ó @˚0Ë@˚˙ˇˢˇ @˚0Ë@˚@˚∞Ë@˚Ó@˚∞Ë@˚@˚∞Ë@˚Ó @˚∞Ë@˚@˚0Ë@˚ ˙ˇˢˇ?˙ˇË?˘ˇÓ”¡ ‘” ‘¡”¡ ‘” ‘¡”U ”Ã¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  7165. 0»
  7166.     »»
  7167. à»
  7168. ê»
  7169. êËx†»
  7170. ëâ@»
  7171. ˛x»¡¡¡ò@@Ę@Ę∑ä˜Å¡¡¿``¿É‡ “Äêê Å “OF–¡rÖ“€Ä”R…(p 
  7172. Ç•
  7173. Ui“íYp@    }…ûJ“Ãr@àÄ 1Ç'Ô®õ“úZ8p3Éœ≈JG퓲"≈˛"≈˛≈¡¡( }‡@8˛DÅ$ ¿|Ê&)ä˛Äƒ¸@  Ä$Ê)%)Lfl+*î£/E±µµë⁄2‰õo¨éâÙ[@bîà#•æpÁ)%1TjTWz•RJ—Zö≤jUEM5Uí§≠†gzî8™‘ÄÁ)%—dL‰íSHîíëRíñLâäI&d¥I) íS8A<òpÁ)%bDûàٕΈ’0é§$ûøŒìO"¨ÂÌSA•†EQ<Á)%sNåîx£D§â q%%îJâFJ!6≤HíÉ;¯è(‡Á˝˛ ıĢ ‚˝˛ ıĢ ‚ ˘ Ï ‚¡¡$Ä√0aÅÿ  ˛ $§$íÿ$≤Ù[úê$•\ÁTrî+∏9%Ÿ    ,¬E$≠•@„ª©T•Èu@RfiÄ⁄
  7174. EºII) ÄI0‚ô..¶8ó‰Ä⁄gèmSíJX"≠h !(À¥âŸEÙäHí=–Ê1ë√I∑6<«2p€ˆŸı˙@Ÿı˙@Ÿı˙@Ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ‡Õ Õ §D÷R8¨fŒ ;‘§jÓQP    ™Œ íôƒ    JJ„ê    0Œ •-:êì≤ vŒÿ»·ƒîb··H@œ ˛!˝Äà ˛!˝ÄÃ
  7175. ˛!˝Ä ¡¡˛ –<Ä∏¸@÷ÇÄ@((@÷ò@Ä¿˜Ä¿˜˜ä7Åó≟÷»Hú°uä)ˆ\V‡ÿ* JjìTH°AÊZñ+(H®©◊L
  7176. &RL¢dQB"íºQgâ1(‡ÿ~    )îù¥Ëëá¬#§&y¡—˘P ÿTìàñ‰êø:ár•FQnëPë¿ÿ¸@˝ÄÄ“¸@˛Ä“ ¸Ä˚œ¡¡     ¿¿À      ! À    $≤Ú∞" À        ,¬E%@‚ À    
  7177. EºII@ À    gèjÅ@À    EÙäDÄÂÄÀ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜7äiÅ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜iä©Å¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę©äÈÅ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜Èä)Å¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜)äiÅ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜iä©Å¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę©äÈÅ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜Èä)Å¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜)ä[Å¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜iä©Å¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę©äÈÅ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜Èä)Å¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜)äiÅ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜iä©Å¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę©äÈÅ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜Èä)Å¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜)ä[Å¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ˇ%¢@ˇ ˇˇˇˇ@
  7178. ˇ·ˇ‚7^
  7179. 4*\¯, Palatino&e.3+l"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@lIntroduction to •)8 Apple Events4⁄*˙¯
  7180. (‡*3-8    )BAbout ‡) Apple Events4^*¿¯
  7181. °dONLNd\lh|(elAn ò†°dONLNd\|h‰)Apple event parameterÄ°dONLNd\Âh¸)i is a rn‡°dONLNd\¸h)ecor„@°dONLNd#\hé)d containing data that the tar °dONLNdA\èhÎ)Åget application uses. °dONLNdWiluå(rlUnlike c¿°dONLNd^iåuÎ) OApple event attributes (which contain information that can be used by both the °dONLNd≠vlÇ(lApple Event Manager and the tarÄ¿°dONLNdÃvÇJ)îget application), H@°dONLNdfivJÇ)J$Apple event parameters contain data °dONLNdÉlèƒ(ålused only by the tarc`°dONLNdɃèW)X"get application. For example, the &°dONLNd8ÉWè·)ìApple Event Manager uses the °dONLNdUêlú‹(ôlWevent class and event ID attributes to identify the server application’s handler for a °dONLNd¨ùl©à*specifiÓ °dONLNd≥ùà©é)c °dONLNdµùè©≤)AApple event, and the server application must have a handler to pr•¿°dONLNdˆù≤©ˆ(¶≤ocess the event °dONLNd™l∂ã(≥lidentifiV†°dONLNd™å∂◊) Led by those attributes. By comparison, the list of documents contained in a °dONLNdZ∑l√…(¿lMparameter to an Open Documents event is used only by the server application. Ɔ°dONLNdß∑…√Ó(¿…As with °dONLNd؃l–(Õl)attributes, a client application can use ˝¿°dONLNdÿƒ–|)®Apple Event Manager rÒ†°dONLNd̃|–Ú)houtines to add parameters °dONLNd—l›Ñ(⁄lto an ™‡°dONLNd—Ñ›O).Apple event, and a server application can use Ê`°dONLNd;—O›∑)ÀApple Event Manager r⁄@°dONLNdP—∑›Â)h outines to °dONLNd[filÍ$(Ál)extract and examine the parameters of an ¯`°dONLNdÑfi$Íz)∏Apple event it has r¡@°dONLNdòfi{Íû)Weceived.°dONLNd°l¸t(˘lNŒ‡°dONLNd¢t¸ó)    ote that H °dONLNd´ò¸)$Apple event parameters ar%‡°dONLNdƒ¸!)ve difô‡°dONLNd…!¸-)fer|`°dONLNdÃ-¸D) ent frÚ†°dONLNd“D¸§)om the parameters of RÄ°dONLNdÁ•¸¿)aApple–°dONLNdÏ¿¸¬) °dONLNdÌ˝l    Ö(lEvent`°dONLNdڽܠ   à) ü`°dONLNdÛ˝à    ‡)Manager functions. û@°dONLNd˝‡    V)XApple event parameters ar|°dONLNd˝V    a)ve r䆰dONLNd"˝a    s) ecorˇ°dONLNd&˝s    y)d¿°dONLNd'˝z    ©) s used by tZ`°dONLNd2˝©    ≥)/heı`°dONLNd4˝≥    µ)
  7182.  °dONLNd5˝∂    —)AppleîÄ°dONLNd:˝—    ”) Ä°dONLNd;˝‘    )Event °dONLNdA
  7183. l˝(lManager; function parameters ar≥@°dONLNd`
  7184. ˝)ëe ar¡‡°dONLNdd
  7185. “)-guments you pass to the function or that the °dONLNdël#ó( l
  7186. function r”@°dONLNdõó#÷)+eturns to you. }`°dONLNd™◊#›)@Y=‡°dONLNd´›#5)ou can specify both Û°dONLNdø4#ö)WApple event parameterN¿°dONLNd‘õ#µ)gs and Ä°dONLNd⁄µ#º)A·¿°dONLNd€º#Ì) pple event °dONLNdÊ$l0ë(-l    attributezÄ°dONLNdÔ$í0õ)&s i‡°dONLNdÚ$ú0„)
  7187. n parameters to ò¿°dONLNd$„0¡)G0Apple Event Manager functions. For example, the ,
  7188. Courier°dONLNd21l=∫(:lAEGetParamPtr{ °dONLNd?1∫=)N function uses a bufâ °dONLNdS1=-)Vfer to r °dONLNd[1.=µ)eturn the data contained in an Ó °dONLNdz1¥=Ï)Ü Apple event °dONLNdÜ>lJô(Gl    parameterS†°dONLNdè>ôJû)-. &°dONLNdë>ûJ§)YÊÄ°dONLNdí>£J∞)ou „ °dONLNdï>±J¬)can §¿°dONLNdô>√J‹)specifZ°dONLNdü>›Jı)y the h °dONLNd•>ıJ¸)A/`°dONLNd¶>˝JW)pple event paramete—@°dONLNdπ>WJ¡)Zr whose data you want i•`°dONLNd–>¬J⁄)kn one@°dONLNd’>€J›) á@°dONLNd÷>›JË)of °dONLNdŸKlWÃ(Tlthe parameters of the “ °dONLNdÔKÃW)`AEGetParamPtrÕ@°dONLNd¸KWA)N     function[Ä°dONLNdKBWD)(.
  7189. u*|¯4v*|¯ wlw¯
  7190. ˇ·ˇ‚7^ °dONLNdhlvt(rlAÅ°dONLNdhtv∞) pple Event fi@°dONLNdhØv·);
  7191. Attributesˇˇˇˇˇˇ‘@(rÒ3
  7192. °dONLNd|là±(ÖlApple events arL¿°dONLNd.|≤àŸ)F    e identifim°dONLNd8|Ÿàª)'5ed by their event class and event ID attributes. The 
  7193. ¿°dONLNdm|ºàÌ)„ event class. °dONLNdx|ÌàÔ)1 °dONLNdyâlï‚(ílis the attribute that identifi™°dONLNdóâ‚ï˛)ves a gr¿°dONLNdûâˇï")oup of r‡°dONLNd¶â"ï?)#elated @°dONLNd≠â?ïÙ))Apple events. The event class appears in °dONLNd÷ñl¢|(ülthe ›`°dONLNd⁄ñ|¢¶)message⁄¿°dONLNd·ñ¶¢Æ)* figÄ°dONLNd‰ñØ¢˘)    eld of the event rÓ@°dONLNdˆñ˘¢ )Jecorb†°dONLNd˙ñ ¢1)    d for an -`°dONLNdñ1¢—)%$Apple event. For example, the four rœ@°dONLNd'ñ—¢Ë)†equirÊÄ°dONLNd,ñË¢ı)ed °dONLNd/£lØÏ(¨lApple events have the value Ö¿°dONLNdK£ÏØ)Ä'aevt'ÉÄ°dONLNdQ£Ø.)$ in the ö†°dONLNdY£.ØX)messageò°dONLNd`£XØ`)* fi$¿°dONLNdc£aØ∂)    elds of their event r√Ä°dONLNdx£∂Ø»)Uecor7‡°dONLNd|£…ØÎ)ds. The °dONLNdÑ∞lºÜ(πlvalue _`°dONLNdä∞Ẵ)'aevt'] °dONLNdê∞´º‰)$ can also be rO‡°dONLNdû∞‰ºÚ)9epr‡†°dONLNd°∞Úº4)esented by the  °dONLNd∞∞5ºè)CkCoreEventClassÄ°dONLNdø∞èºfi)Z constant. Several °dONLNd“Ωl…∞(Δlevent classes arkÄ°dONLNd‚Ω∞…Ê)D e shown herA`°dONLNdÌΩÊ…Ì)6e:°dONLNd„,l8(5lThe ª¿°dONLNdÁ,8¶)event IDr°dONLNdÔ,ß8)( is the attribute that identifi°dONLNd    , 8i)yes the particular ìÄ°dONLNd     ,i8È)IApple event within its event °dONLNd    =9lE¶(BlIclass. In conjunction with the event class, the event ID uniquely identifi⁄`°dONLNd    á9¶E¡(B¶es the `°dONLNd    é9¬Efl)Apple °dONLNd    îFlR#(Ol'event and communicates what action the 燰dONLNd    ªF#RÈ)∑+Apple event should perform. (The event IDs °dONLNd    ÊSl_®(\lappear in the W†°dONLNd    ÙS©_«)=whereU¿°dONLNd    ˘S«_œ) fi‚Ä°dONLNd    ¸Sœ_)eld of the event ri@°dONLNd
  7194. S_,)Kecor›†°dONLNd
  7195. S,_Q)    d for an ®`°dONLNd
  7196. SQ_Ø)%Apple event. For morx‡°dONLNd
  7197. /S∞_Ó)_e information °dONLNd
  7198. =`ll¶(ilabout event rÿ‡°dONLNd
  7199. J`¶l∏):ecorM@°dONLNd
  7200. N`πl )ds, see the chapter °dONLNd
  7201. b`l)T“E1¿°dONLNd
  7202. d`lh) vent Manager” in Å °dONLNd
  7203. u`hl‡)PInside Macintosh: Macintosh °dONLNd
  7204. ëmlyr(vlT°dONLNd
  7205. ímqy∏)oolbox Essentials.≈°dONLNd
  7206. §m∏yÚ)GE) For example, the event ID of an Open Documents event has the value °dONLNd
  7207. ÈzlÜê(Él'odoc'}¿°dONLNd
  7208. ÔzêÜÍ)$ (which can also be rñ¿°dONLNd zÍܯ)Zepr'Ä°dONLNd z˘Ü;)esented by the e°dONLNd z;Üõ)BkAEOpenDocuments_°dONLNd &zõÜfi)` constant). The °dONLNd 6álìΔ(êlkCoreEventClassz`°dONLNd EáΔì\)Z" constant in combination with the †°dONLNd gá]ìΩ)ókAEOpenDocuments†°dONLNd wáΩìÁ)`
  7209.  constant °dONLNd Åîl†ã(ùlidentifiV†°dONLNd âîå†.) #es the Open Documents event to the P@°dONLNd ¨î.†è)¢Apple Event ManagerA¿°dONLNd øîè†ë)a.    °dONLNd÷l·ù(fil Event class°dONLNd¸÷˛·)íValue°dONLNd÷6·g)8 Description
  7210. °dONLNd‰lΔ(ÌlkCoreEventClass°dONLNd‰˛")í'aevt'°dONLNd&‰6=)8A∫†°dONLNd'‰=C) rˇ†°dONLNd)‰CZ)equir‡°dONLNd.‰[h)ed ‡°dONLNd1‰hõ)
  7211. Apple even&@°dONLNd;‰õû)3t°dONLNd>Ùl¥(˝l kAECoreSuite°dONLNdKÙ˛")í'core'°dONLNdRÙ6=)8A∫†°dONLNdSÙ=?) :†°dONLNdTÙ@D)c™‡°dONLNdUÙDM)orÂ`°dONLNdWÙMT)    e –†°dONLNdYÙTä) Apple event°dONLNdflΔ(lkAEFinderEvents°dONLNdv˛")í'FNDR'°dONLNd}6¿)8An event that the Finder accept(‡°dONLNdú¡≈)ãs°dONLNdül Í(lkSectionEventMsgClass°dONLNdµ˛ )í'†°dONLNd∂ ")sect'°dONLNdº6 ⁄)2#An event sent by the Edition Manage•@°dONLNdfl⁄ ›)§rˇ?"@ˇ ˇˇˇˇ@
  7212. ˇ·ˇ‚7^
  7213. 4H\, Palatino&e.3+ä"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@äIntroduction to •)8 Apple Events4⁄ä˙(‡äAbout ‡) Apple Events
  7214. , (‡    3-9
  7215. ˇˇˇˇˇˇˇˇ440lòÄ.B0oMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""B0oB0o$””””””””””””””””””””””””””””””òÄ
  7216. 60@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""60@60@˜˜˜˜˜˜˜˜˜˜˜˜˜
  7217. ˛ˇ˛ˇˇ ˇˇ˛ˇˇ     ˇˇˇ˙ˇ
  7218. ˛ˇˇˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜
  7219. 454+?òÄ
  7220. 56+@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""56+@56+@$˜˛˙ˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  7221. ˛ˇ˛ˇˇ˛¸ˇˇ˚ˇ˛˙ˇˇ˝˛ˇ˛
  7222. ˛ˇ˛ˇˇ
  7223. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  7224. ˛ˇ˛ˇˇ
  7225. ˛ˇ˛ˇˇ˛˙ˇ˜˝˝ˇˇ˛ˇ˚˝ˇ¸˛¸ˇˇ˜˝˛ˇ˛
  7226. ˛ˇ˛ˇˇ
  7227. ˛ˇ˛ˇˇ˝ˇˇ˛˜˝¸ˇ
  7228. ˛ˇ˛ˇˇ˛¸ˇˇ˜˝˛ˇ˛
  7229. ˛ˇ˛ˇˇ
  7230. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˜˝¸ˇ
  7231. ˛ˇ˛ˇˇ˝˛ˇ˛
  7232. ˛ˇ˛ˇˇ
  7233. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  7234. ˛ˇ˛ˇˇ
  7235. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  7236. ˛ˇ˛ˇˇ
  7237. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  7238. ˛ˇˇˇˇ
  7239. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  7240. ˛ˇˇˇ
  7241. ˛ˇˇˇ
  7242. ˛ˇˇˇ
  7243. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  7244. ˛ˇˇˇˇ
  7245. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  7246. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  7247. ˛ˇˇˇˇ
  7248. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähõ(eäHer`°dONLNd\õh´)e arn†°dONLNd\´h()e the event IDs for the four r] °dONLNd%\(h?)}equirt`°dONLNd*\?hL)ed {`°dONLNd-\Lhâ)Apple events:°dONLNdZ·äÌë(Íä>In addition to the event class and event ID attributes, every ·°dONLNdò·ëÌ(ÍëApple event must include an °dONLNd¥Óä˙‚(˜äattribute that specifi>¿°dONLNd Ó„˙ )Y
  7249. es the tar* °dONLNd‘Ó ˙k)(get application’s addr|‡°dONLNdÍÓk˙x)`ess¿Ä°dONLNdÌÓx˙Δ). Remember that tÜ °dONLNd˛Ó«˙‡)Ohe tar®Ä°dONLNdÓ‡˙)get °dONLNd˚äˇ(äapplication is the one addrF†°dONLNd#˚))v
  7250. essed to rÏÄ°dONLNd-˚)W)) eceive the «@°dONLNd8˚Wí).Apple event. ‰`°dONLNdE˚íò);Y§‡°dONLNdF˚ò)our application can send an °dONLNdbä„(äOApple event to itself or to another application (on the same computer or on a rf`°dONLNd±„(„emote °dONLNd∑ä!-(ä#computer connected to the network).°dONLNd€'ä3¶*Every Ø°dONLNd·'¶3ö)7Apple event must include event class, event ID, and tar–Ä°dONLNd'ö3ø)Ùget addrË °dONLNd 'ø3˝)%ess attributes. °dONLNd04ä@§(=äSome ÙÄ°dONLNd54§@h)-Apple events can include other attributes; se@`°dONLNdb4i@p)≈e ä°dONLNdd4p@ò)“Keywor∂`°dONLNdk4ò@æ)(d-Specifiñ‡°dONLNdt4ø@˝)'ed Descriptor °dONLNdÇAäM£(JäRecor¢`°dONLNdáA£M¥)ds,”{ °dONLNdãAµM) which begins on ÎÄ°dONLNdúAM)Mpage Δ`°dONLNd°AM,)3-15@°dONLNd•A-M5), fn °dONLNd®A5MÉ)or a complete list.
  7251. kHr4lHr mäm
  7252. ˇ·ˇ‚7^ °dONLNdº^äl (häApple Event Parametersˇˇˇˇˇˇ‘@(h3
  7253. °dONLNd‘rä~({äAs with attributes, ther±@°dONLNdÏr~)fe arø‡°dONLNdr~Q)e various kinds of —°dONLNdrQ~¿)QApple event parameters.  `°dONLNdr¡~»)pAF°dONLNdr»~ ) Δ°dONLNdr ~Ê)direct °dONLNd$äã∫(àä
  7254. parameter Ä°dONLNd.ªã˙)1usually specifi≥¿°dONLNd=˙ãé)?"es the data to be acted upon by th†°dONLNd_èã¢)ïe tarb†°dONLNdd¢ã∑)get a}¿°dONLNdi∑ã˙)pplication. For °dONLNdyåäò—(ïäexample, the dir ‡°dONLNdâå“ò)HIect parameter of the Print Documents event contains a list of documents. °dONLNd“ô䕧(¢äSome ÙÄ°dONLNd◊ô§•
  7255. )Apple events also take 2@°dONLNdÓô •q)gadditional parameters,Ó‡°dONLNdôq•ö)f     which thU°dONLNdôõ•Æ)*e tar¶°dONLNdôÆ•√)get a¡ °dONLNdô√•)pplication uses in °dONLNd*¶ä≤ˇ(Øäaddition to the data specifis°dONLNdF¶≤5)ved in the dir8†°dONLNdS¶6≤r)6ect parameterÄ°dONLNd`¶r≤è)<. Thus,æ¿°dONLNdg¶è≤û) an 1¿°dONLNdk¶ü≤‡)Apple event fo≈‡°dONLNdy¶‡≤Ê)Ar °dONLNd{≥äøè(ºäa°dONLNd|≥èø    )Urithmetic operations might include additional parameters that specify operands in an °dONLNd—¿äõ(…ä
  7256. equation. °dONLNd‹“äfiù*The ª¿°dONLNd‡“ùfi9)%Apple Event Registry: Standard Suites©Ä°dONLNd“:fi’)ù% describes all parameters as either r» °dONLNd*“’fiÏ)õequirfl`°dONLNd/“Ïfi)ed or °dONLNd5fläÎ≥(Ëä
  7257. optional. Û@°dONLNd?fl≥Î∫))A-‡°dONLNd@flªÎΩ) ≠‡°dONLNdAflΩÎ)required parameter∂¿°dONLNdSflÎA)X  is one thaÄ`°dONLNd^flBÎw)- t must be prµ†°dONLNdjflwκ)5esent for the tar∫`°dONLNd{flºÎ)Eget application tN¿°dONLNdåflÎ )Ho °dONLNdéÏä¯(ıä"carry out the task denoted by the y@°dONLNd∞ϯY)îApple event. e†°dONLNdΩÏY¯i);An ~@°dONLNd¿Ïi¯¬)optional parameter Í °dONLNd”Ϭ¯)Yis a supplemental °dONLNd¢ä©(äAApple Event parameter that also can be used to specify data to th@°dONLNd&˘™Ω(™e tarR@°dONLNd+˘Ω“)get am`°dONLNd0˘“) pplication. °dONLNd<ä`(ä/Optional parameters need not be included in an (@°dONLNdk`)÷)Apple event; default values for optional °dONLNdîä«(äparameters arì°dONLNd°«*)=e part of the event defi˘‡°dONLNdπ*U)c
  7258. nition. Th`°dONLNd√Vi),e tarh`°dONLNd»i~)get aÉÄ°dONLNdÕ~)"pplication that handles the event °dONLNdÔ ä,Ç()ä8must supply default values if the optional parameters ar  °dONLNd' É,±)˘ e omitted. ¿°dONLNd2 ≤,¥)/ °dONLNd42ä>ò(;äDir͆°dONLNd72ò>‰)ect parameters ar˘‡°dONLNdH2‰>)Le usually defi`¿°dONLNdV2 >B)<ned as rÄ°dONLNd^2C>Z)#equir0¿°dONLNdc2Z>∑)ed parameters in the {@°dONLNdx2∑>)]Apple Event Registry: °dONLNdé?äK (HäStandard Suites6‡°dONLNdù?ÀKÕ)A;∂‡°dONLNdû?ÕKg)! additional parameters may be defi%@°dONLNd¿?hK¶)õned as either r‡°dONLNdœ?¶KΩ)>equir˜@°dONLNd‘?ΩK˚)ed or optional`°dONLNd‚?¸K)?. °dONLNd‰LäX≥(UäHowever †°dONLNdÎL≥X»)), the  †°dONLNdÒL»Xk)"Apple Event Manager does not enforÖ°dONLNd    LkXò)£
  7259. ce the defié`°dONLNd    LòX»)- nitions of rÖ °dONLNd    *L»Xfl)0equirú`°dONLNd    /LflXˇ)ed and °dONLNd    6Yäe(bä"optional events. Instead, the sourÃÄ°dONLNd    XYe,)íce aÜ`°dONLNd    \Y-eS)    pplicatiok‡°dONLNd    eYTex)'n specifi+`°dONLNd    nYye¸)%es, when it sends the event, w“Ä°dONLNd    åY¸e)Éhich °dONLNd    ëfär¬(oä Apple event J¿°dONLNd    ùf√r)9parameters the tar˝Ä°dONLNd    Øfr)PgeV@°dONLNd    ±fr<) t can tr·†°dONLNd    πf<rá)eat as if they werπ°dONLNd    Àfár≥)K
  7260. e optional‘@°dONLNd    ’f≥rµ),.°dONLNd    ◊xäÑè(ÅäF °dONLNd    ÿxêÑÆ)or mor¿°dONLNd    fixÆÑv)-e information about optional parameters, see ¡@°dONLNd
  7261. xvÑ
  7262. )» “Specifying Optional Parameters °dONLNd
  7263. +Öäë¶(éäfor an Ø°dONLNd
  7264. 2Ö¶ëÂ)Apple Event,”À‡°dONLNd
  7265. ?ÖÂë2)? which begins on <@°dONLNd
  7266. PÖ3ëJ)Npage  °dONLNd
  7267. UÖKëX)5-7k°dONLNd
  7268. XÖXëZ).    °dONLNd;uäÄÆ(}äEvent ID°dONLNdDu
  7269. Ä)ÄV¸/°dONLNdEuÄ!)alue°dONLNdJuBÄs)3 Description,
  7270. Courier
  7271. °dONLNdWÉäèˆ(åäkAEOpenApplication°dONLNdjÉ
  7272. è.)Ä'oapp'°dONLNdqÉBèÖ)8Perform tasks rÊ`°dONLNdÄÉÖèú)Cequir˝†°dONLNdÖÉúè)ed when a user opens your °dONLNdüéBö(óB,application without opening or printing any °dONLNdÀôB•n* document:°dONLNd”ôo•s)-s°dONLNd÷©äµÍ(≤äkAEOpenDocuments°dONLNdÁ©
  7273. µ.)Ä'odoc'°dONLNdÓ©Bµç)8Open documents°dONLNd˛πä≈(¬äkAEPrintDocuments°dONLNdπ
  7274. ≈.)Ä'pdoc'°dONLNdπB≈ã)8Print documents°dONLNd(…ä’ˆ(“äkAEQuitApplication°dONLNd;…
  7275. ’.)Ä'quit'°dONLNdB…B’°)8Quit your applicationˇV˛@ˇ ˇˇˇˇ@
  7276. ˇ·ˇ‚7^
  7277. 4*\¯, Palatino&e.3+l"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@lIntroduction to •)8 Apple Events4⁄*˙¯
  7278. (‡*3-10    )BAbout ‡) Apple Events4^*¿¯
  7279. j*p¯4j*p¯ klk¯
  7280. ˇ·ˇ‚7^ °dONLNd\ljo(flI’Ä°dONLNd\oj´) nterpreting ⁄°dONLNd\´jÔ)< Apple Event 8@°dONLNd\Ôjz)DAttributes and Parametersˇˇˇˇˇˇ‘@(fÒ3
  7281. °dONLNd4pl|Ñ(ylFigurR¿°dONLNd9pÑ|ò)e 3-3@°dONLNd>pò|Â) shows the major °dONLNdOpÊ|k)NApple event attributes and dir“Ä°dONLNdmpk|…)Öect parameter for the °dONLNdÉ}lâÑ(ÜlOpen˘°dONLNdá}ÑâÜ) y°dONLNdà}áâ—)Documents evenú`°dONLNdñ}—âŸ)Jt iG °dONLNdô}⁄âÁ)    ntr‡°dONLNdú}Áâ)
  7282. oduced in «†°dONLNd¶}â-).Figurö`°dONLNd´}-âA)e 3-17‡°dONLNd∞}BâD).
  7283. ´*º¯4¨*º¯"¨*]
  7284. ˇ·ˇ‚7^    °dONLNd≤°l¨ñ(©l
  7285. Figure 3-3°dONLNdΩ°Æ¨¡)BMajoˇ†°dONLNd¡°¡¨H)#r attributes and direct parameter oÉ–°dONLNd‰°I¨π)àf an Open Documents event
  7286. °dONLNdˇòl§å(°lWhen tÆ¿°dONLNdò姵) he SurfWô¿°dONLNdòµ§ˆ))riter applicatioÿ‡°dONLNdòˆ§)An rÔ@°dONLNd ò§ê) "eceives any high-level event, it cI °dONLNdBòë§≤)è    alls the ,
  7287. Courier°dONLNdK•l±fi(ÆlAEProcessAppleEventx‡°dONLNd^•fi±)r     function °dONLNdg•±)( to prÜ °dONLNdm•±É)ocess the event. For an D`°dONLNd֕ɱÓ)fApple event such as the °dONLNdù≤læ(ªlOpen Documents event shown in ƒ¿°dONLNdª≤æ)ñFiguróÄ°dONLNd¿≤æ.)e 3-35°dONLNd≈≤/æD), the í`°dONLNdÀ≤DæJ)Aí°dONLNdÃ≤Jæ∞)EProcessAppleEvenㆰdONLNd›≤∞æ∂)ftã@°dONLNdfi≤∂æª) f_ °dONLNd‡≤ºæˆ)unction uses °dONLNdÌølÀ≠(»lJthe event class and event ID attributes to dispatch the event to the SurfWô‡°dONLNd7ø≠À¬(»≠riter °dONLNd=Ãlÿ(’l$application’s Open Documents handlerr`°dONLNdaÃÿ-)≠. In rÁ@°dONLNdgÃ-ÿ^) esponse, thQ@°dONLNdrÃ_ÿ‘)2e Open Documents handle‡°dONLNdâÃ’ÿ‡)vr o°dONLNdå÷ÿ¯) pens °dONLNdëŸlÂÃ(‚lthe documents specifi¬Ä°dONLNd¶ŸÃÂ)`ed in the dirà °dONLNd≥ŸÂ>)6ect parameterX°dONLNd¿Ÿ>ÂC)<. °dONLNd√Îl˜ê(ÙlThe defi≠‡°dONLNdÀÎê˜⁄)$nition of a given ˝°dONLNd›Î⁄˜.)JApple event in the ^‡°dONLNdÎ/˜»)U$Apple Event Registry: Standard Suitei°dONLNdλ˜À)ôsL†°dONLNdÎ؈)
  7288.  suggests °dONLNd¯lq(lhQ`°dONLNd ¯r¶) ow the soury‡°dONLNd+¯¶Â)4ce application j†°dONLNd:¯Ê˜)@can ,@°dONLNd>¯¯)orf¿°dONLNd@¯)    ganiz؆°dONLNdE¯#)e t;†°dONLNdH¯$b) he data in the mÄ°dONLNdW¯b÷)>Apple event’s parameters °dONLNdpl|(landm °dONLNds}) Ì °dONLNdt±) how the taro¿°dONLNd≤)3get application interprA@°dONLNdñë)cets that data. The data in an Ö °dONLNd¥ë…)| Apple event °dONLNd¿l©(l parameter mae°dONLNdÙ«)>y use s>‡°dONLNd”»Â)tandar3`°dONLNdŸÂÌ)d œ °dONLNd€Ì) or private Δ†°dONLNdÊD).    data typeB°dONLNdÔEù)*s and may include aŒ °dONLNdùÏ)X description of an °dONLNdl+æ((lApple event object‡°dONLNd'ø+€)S. Each ô‡°dONLNd.€+Ë)Apc@°dONLNd0È+2)ple event handle’ °dONLNd@2+B)Ir pr‡°dONLNdDC+·)#ovided by an application should be °dONLNdg,l8W(5l5written with the format of the expected data in mind.°dONLNdù>lJÌ*Apple events can use standar†°dONLNdπ>ÓJΔ)Ç4d data types, such as strings of text, long integers‰@°dONLNdÌ>ΔJÀ)ÿ, °dONLNdÔKlWr(TlBõ¿°dONLNdKrWè)oolean
  7289.  °dONLNdˆKêWí) ä °dONLNd˜KíW™)valueÈÄ°dONLNd¸K™WÆ)s&Ä°dONLNd˝KØW±),¶Ä°dONLNd˛K±WÀ) and a솰dONLNdKÃW·)lias rÊ`°dONLNd
  7290. K·WÛ)ecorZ¿°dONLNdKÙW)    ds, for t1‡°dONLNdKW4)"he corrÍ@°dONLNdK4WÜ)esponding data in ÿ°dONLNd0KÜWı)RApple event parameters. °dONLNdHXldè(al@For example, the Get Data event can contain an optional paramete@°dONLNdàXêdö(aêr s.‡°dONLNdãXõd≠) peciS@°dONLNdèX≠d…)fying tAÄ°dONLNdñX dÔ)he form °dONLNdûelq•(nlin which the ÈÄ°dONLNd´e•q®)9rÆÄ°dONLNd¨e©q”)    equested Δ¿°dONLNdµe”q·)*dat$‡°dONLNd∏e‚qÌ)a s·‡°dONLNdªeÌq)
  7291. hould be rJ@°dONLNd≈eqˆ).1eturned. This optional parameter always consists °dONLNdˆrl~¨({lof a list of four¯`°dONLNdr¨~6)@-character codes denoting desir˛¿°dONLNd&r6~°)äed descriptor types in orÇ°dONLNd?r¢~»)l    der of pr5`°dONLNdHr…~Ÿ)'efer·Ä°dONLNdLrŸ~Ò)ence. °dONLNdRlãB(àl0Apple events can also use special data types defiÊ@°dONLNdÉBãs)÷ ned by the ≤¿°dONLNdésã‘)1Apple Event Manager§@°dONLNd°‘ãŸ)a. °dONLNd§ëlù“(ölApple event parameter€¿°dONLNdπë“ùÿ)fs ò¿°dONLNdªëŸùÚ)often øÄ°dONLNd¡ëÚùˆ)c/¿°dONLNd¬ë˜ùY)ontain descriptions of | °dONLNdŸëYù´)bApple event object°dONLNdÎë¨ù≤)Ss.‘°dONLNdÌë≤ù–) These °dONLNdÙûl™≠(ßldescriptions mÚ`°dONLNdû≠™)Aake use of a standarS¿°dONLNdû™+)X    d classifi∑@°dONLNd û+™d)& cation schem5`°dONLNd,ûe™p):e sº°dONLNd/ûp™±) ummarized in Â@°dONLNd<û±™…)A“The °dONLNdA´l∑å(¥lClassifiÓÄ°dONLNdI´å∑¥) 
  7292. cation of ;`°dONLNdS´µ∑))Apple Event Objects,”K¿°dONLNdh´∑d)b which begins on º °dONLNdy´d∑{)Mpage ó°dONLNd~´|∑é)3-39͇°dONLNdÇ´é∑ê).
  7293. ªgů4ºhį
  7294. ºků4ªjºkò@@¯@¯ºk¸c¡¡?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?¡IJÛˇ‡Ú?¡IJÛˇ‡Ú?¡ÉÄÛˇ‡Ú?¡Ñ@Ûˇ‡Ú?¡à Ûˇ‡Ú?¡àÛˇ‡Ú?¡ày˛Ûˇ‡Ú?¡Ñ˛ÄÛˇ‡Ú?¡Ç`Ûˇ‡Ú?¡ŇÄÛˇ‡Ú?¡Ä¿dÛˇ‡Ú?¡ÅÛˇ‡Ú?¡ÅyÛˇ‡Ú?¡Ç@‘áÛˇ‡Ú?¡ÑÅ*GÛˇ‡Ú?¡ÑGÛˇ‡Ú?¡à!
  7295. GÛˇ‡Ú?¡à"GÛˇ‡Ú?¡àBÑáÛˇ‡Ú?¡àDCáÛˇ‡Ú?¡àÑ Ûˇ‡Ú?¡ÑÑ5Ûˇ‡Ú?¡Ñà*àÛˇ‡Ú?¡Ç%DÛˇ‡Ú?¡Åà"¢Ûˇ‡Ú?¡Äà!QÛˇ‡Ú?¡ÄH ©áÛˇ‡Ú?¡Ä$VGÛˇ‡Ú?¡Ä.GÛˇ‡Ú?¡Ä GÛˇ‡Ú?¡Ä«Ûˇ‡Ú?¡Ä«Ûˇ‡Úò@@į@į¸k<c?¡ÄÛˇ‡Ú?¡ćÛˇ‡Ú?¡IJÛˇ‡Ú?¡IJÛˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Úò@Ä¿¯Ä¿¯<k|c?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Ú?“ˇ‡Úò@¿¯¿¯|kºc“ˇ‡Ú¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  7296. ò»
  7297.     d»
  7298. D»
  7299. \»
  7300. ê‰tB»
  7301. ëD¢»
  7302. ˛É»¡¡¡¡¡-†`00@Ä˝@ ¿¿˛˛@Ï-ÄêH PÄ˝@  ˛˛@Ï.*/F»
  7303. bƒ∞ª⁄§y8-éY[-bÂ`∏]àÇ"5ãn·t∂‡Ï.*2…p8
  7304. • AQ"‹í¿Vî)"™:§V•JÅP¶àÆÑ%.Zï•ïZ@Ï.*RY8 )RBb$ïß8î§J'D$îÆúÇQ$àÙÑ)B“π(Á'íÄÏ.*lr àD/îÉÛFß4˘¨[D^%ˢ—°ÈåiIÑJ[§"l$*&¿Ï.*\Zp8zàÇ¢D≈£©6nC§H©Gè!IÜ9Ñ"ÂI√ë‰ÄÏ˛"˚Ĉ ¸ ·˛"˚Ĉ ¸†·˛¸ı ¸@·¡¡( Ç–@˛$¿Ä$ ¿|Ê&%ä˛Äb¸ ÄÄ  Ä$Ê)%%LflñîëóDÿÄö⁄—⁄2Ù[ÌÏéâÙMé@bîà#•∑pÁ)%)Tj*/zí™JhÅMMrjU$≠4ëUí§¶Ñ†gzî8™“ÄÁ)%…dLrJS$LíHÇIIVLâI)%d¥I$â íS8A<îpÁ)%RDûD|•µ˛‘òFíûømSM¢¨ÂÌIçA•†EQ6Á)%[NFî<S"Tàê9íñîJHí#I!6≤HâÉ;¯è$‡Á¸Ä ı@˘ ‚¸Ä ı@˘ ‚ ˘ Ï ‚¡¡$Äaå0cÿ  ˝ íRîÅÿ$YtMáúHRÆÁRrò´ú9Ä⁄    ,¬"§¶à§†q›’R•xı RØ@⁄
  7305. Eº$…$á    ¿§ò‚ï.(¶ór@⁄gGÌIÅëå•,"ßh    )K¥DÄ⁄EÙEHâ<Ës…√E∑Δ28€ªŸı˙@Ÿı˙@Ÿı˙@Ÿò@@¯@¯ºk¸c¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ‡Õ Õ §D÷R<¨cŒ ;‘§jÓIP    •Œ íôƒ    JJ”ê    (Œ •-:êìö kŒÿ»·ƒîb—·D@œ ˛!˝Äà ˛!˝ÄÃ
  7306. ˛!˝Ä ¡¡˛–¯Ä–ÅÄ@PÄ–óà≟÷ƒR/Ï∏¨—) JjìJVPëQP—J
  7307. &RL¢R¢œbP—{    )îù¥‘ÛÉ£Ú†—Rìàñ‰à墛"° —
  7308. ¸@À
  7309. ¸@À¸Ä»¡¡     ¿`À       êÀ    $YrX!À        ,¬"• ·À    
  7310. Eº$… À    gGÍA À    EÙED@‰¿À¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@į@į¸k<c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿¯Ä¿¯<k|c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú¯¿Ú¯|kÆc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@¯@¯ºk¸c¡¡—3 Ú—@Ú “ Ú—@Ú—@Ú—@Ú “ Ú—@Ú “ Ú—@Ú—@Ú ‹¯ˇ@Ú įÄÙ‡˚˘Ä Ú$˛f˘Ä˛`˘˚¸Ä@Ú( Bõú˘œ{·ˆÓ¯Δil˝˛ Ä Ú'˛BæH˘ÕÔÛˇˇ`¯?E¯˝ à ÄÄ@Ú(˛F¢H˘mÔÉè`˘Fà˝ Ä@Ú'˛:ûD˘o{Ò¯ˇp¯ÁDx˝ àà ÄÄ@Ú Û `Ì˘Ä ÚÚ `̯ˇÄ@Ú ›˘ÅÄ Ú˛È˝˘ˇ˘Ä@Ú ˛ ¸?ˆˇ¸˚ ˝˘çÄ@Ú(nu3s8˝(ˆàé¸nu3s8˛ˇ‡˝ˇ˝Ä@Ú, ˘MO¥§˛  ˆ
  7311. ˘MO¥§˛ á· ½ĠÚ,ôMD¥§˛0 ˆ
  7312. ÄôMD¥§˛ á·¨¡7g≥½Ä@Ú+ ~u;ì$˛8ı"
  7313. &¿~u;ì$˛ á·¨¡7g≥˝˝Ä Ú.@˛    ˇˇÏ Ä˚ˇˇ`@˚ á·l¡7g≥·˝Ä@Ú1@˛     ¿˛
  7314. Ä0@˚ ˇ·,—7g≥ˇ˝Ä@Ú$˙(àòflŒõ˚Ω˚ü¸àé¯˘Ä@Ú& ˚ €ÔŒ˝ˇfl¯¯˘ˇ˝Ä Ú%˙ €Œ=˛å0¯˙    çÄ@Ú* ˚ˇˇÏ""/øÔ>{ˇ˚ˇ˙"&ˇˇ`Ä˚˙ ÕÄ Ú&˛ˇˇ¸˝8 ˘¿@˚˙
  7315. mÄ@Ú&˛Ä˝0 ˘Ä ˚˙mÄ@Ú#˛Ä˝ (ˆàé˚˙
  7316. MÄ@Ú$ üˇ‚¸ ˆ¸y˛¸h¸ ÕÄ Ú%˛∞2¸?ˆˇ˛¸˛Ä˝    )˝˝Ä@Ú& Øˇ¸ ˆ¸`˝i0˝Ä Ú%˛Øˇ¸ ˆ¸‡Ä˝    iH˝Ä@Ú$˛Ø¸ ˆ˚¿d˝i8˝Ä@Ú"˛†¸ ˆ¸˝˙Ä@Ú# Ø¸ ˆ¸y˝˙Ä Ú.˛Ø¸ ˛0˛¸@‘IJÄ¿˝Ä@Ú/ Ø¸  ¸Å*@˛Å ˝Ä Ú/˛Ø¿¸  ñw«qøºüà¸@©ßM@Ä@Ú/˛Ø¿¸  _J'Ï√”2ó¿¸!
  7317. @Ä
  7318. ©)TÎ@Ä@Ú/˛†¸  hJ##2S2ñ¸"@¿
  7319. ê«WjÄÄ@Ú0 ∞2¸  GIÓ·…<s»¸BÑġ`ÄÄ Ú'˛üˇ‚¸ ˆ¸DCÄ    0 Ä@Ú$ Ä¸ ˆ¸Ñ 
  7320. "8˙àÄ Ú'˛Ä¸ ˆ¸Ñ5< àÄ@Ú,˛Ä¸ ˚ĸ à*à Dp ˛%àÄ@Ú/˛Ä¸  x‡<ĸ%Dˇ‡,;LÊÿ!àÄ@Ú0 Ä‚¸   â€q;;fiDLJ¸à"¢¿z"Î/$&HÄ Ú.˛Ä¸   Ç,âäE(@á1Ä˚à!QÄ:"jÏ⁄HÄ@Ú- Ä¸  
  7321. ä(˘*})Dâ `˚H ©Ä¸Ä Ú,˛Ä¸  qfi3‰∂;Á˚¿˚$V@˛¸Ä@Ú"˛ˇˇ˛¸ ˆ˚.@˛˙Ä@Ú"˛Ä¸ ˆ˚ @˛˙Ä@Ú# Ä¸?ˆˇ˛˚¿˛˙Ä Ú"˛Ä¸ ˆ˚¿˛˙Ä@Úò@@į@į¸k<c! ˇˇ¸¸ ˆ˚¸˙Ä Ú ˆ @˝˙‡¸˙Ä@Úˆ ÄP@˛Ù˙Ä@Úˆ  ñwܡr~ Ù˙Ä@Ú# ˜ _JèUJ_˛Ù ÄLÃÄ Ú!ˆ hJâUJX˛ÙIJ√2Ä@Ú. x˚  GI-qœ ¸I˝ ≥∂g2Ä Ú%˛@˚ ˆ¸"…˝ ˜’Ÿ2Ä@Ú'˛Kéø ˆ¸ù’◊Ã˛ >µnÃÄ@Ú'˛zS˸ ˆ¸ò÷ì˲ @Ä@Ú( JS¸ ˜¸"ò∂ì˛`˝Ä Ú.˛JN˸ cÓx˛¸x¢ë˲˝GÃÄ@Ú# ˜   11Òfi%œoG{¿Ù˛≈2Ä Ú!ˆ   QëJ)&1&®•Ùp˛g2Ä@Ú!ˆ  
  7322. q1KÈ&0&Ø• Ù    P˛—2Ä@Ú!ˆ  €Óp›˘œ£v¿Ù    P˛fÃÄ@Ú ˜ ˛@˙Ù¸@Ä Úˆ ˛‡˙Ù˙Ä@Ú ˜ ˆÙ˙Ä Úˆ ˆÙ†˛LÃÄ@Úˆ?ˆˇ˛Ù ˛√2Ä@Úˆ ˆÙ∫˛g2Ä@Ú ˜ ˆÙµ˛Ÿ2Ä Úˆ ˆÙµ˛nÃÄ@Ú  ˜ ˛ÄÄÙ?˚ˇÄ Ú ˆ  @ÄêÄ Ù˝Ä@Ú!ˆ  lÏÊ;∂;粉¸FÙ ≤FÃÄ@Ú!ˆ  ˘>OLØföîæÙ ä2…2˝Ä@Ú# ˜  ô0IL®íöî∞Ù ä2i2 ÕÄ Ú!ˆ  xÓ';ßwJ„ûFÙ äJ◊2
  7323. MÄ@Ú ˜  ˘Ù rKÄnÃmÄ Úˆ ¿˘Ù¸@oÄ@Úˆ ˆÙ˙ œÄ@Úˆ †D˛Ù˙    å@Ú ˜ Ä ˛Ù˘ˇ¸ Úˆ  Œ¶ngflòÙ˙ @Ú ˜  )©ˆîñÃÜ|Ù˙ Ï Úˆ  )®ñîçLÜ`Ù˙
  7324. ¨@Úˆ  ŒßrdâDÇ\Ù˙ ¨@Úˆ ¯Ù˙
  7325. ,@Ú ˜ ¯Ù˙ Ï Úˆ ˆÙ˘ˇ¸@Ú ˜ ˜Ù˘ˇ¸ Úˆ  ôÄÈ@Úˆ  ?ñ¿êìgÈ@Úˆ  LΩï‡
  7326. πHÄÈ@Ú ˜  L•ïIOÄÈ Úˆ <úÙ‡    <ɲÈ@Ú ˜ ¯È Úˆ p¯È@Úˆ ˆÈ@Úˆ ˆÈ@Ú ˜?ˆˇ˛È Úˆ ˆÈ@Ú ˜ ˆÈ Úˆ ˆÈ@Úˆ ˆÈ@Úˆ>ˆ‡Í@Ú ˜ıÍ Úˆ ˆ‡Í@Ú ˜ˆ¿Í Úˆ0ˆÄÍ@Úˆ`ˆÈ@Úˆ¿ˆÈ@Úò@Ä¿¯Ä¿¯<k|c ¯Ĉ<È Ú˜ıxÈ@Ú ¯ıÈ Ú˜‡ˆ|È@Ú˜‡@¯È@Úˆ     ˛˝È@Ú ˜     sπô¥7Ã˛È Úˆ      g•'”Í{θÈ@Ú ˜     d!&RjC˛È Úˆ cúπ—Í9˲È@Úˆ ˛ ˙È@Úˆ ˛ ˙È@Ú ˜ (˙È Úˆ H˙È@Ú ˜ ¯‹Èú˚È Úˆ (k˚È@Úˆ —(j ˚È@Úˆ à»i¯˚È@Ú ˜ ˆÈ Úˆ ˆÈ@Ú ˜ ˆÈ Úˆ     ¿@˚È@Úˆ      @˙È@Úˆ ,`y-3¸È@Ú ˜ >êd≥OÄ˝È Úˆ 0Äd”D¸È@Ú ˜ Œtdç;Ä˝È Úˆ ˜È@Úˆ ˜È@Úˆ ˆÈ@Ú ˜ @@@˝È Úˆ @@@˝È@Ú ˜ M zY3 ˝È Úˆ R†eeO†˝È@Úˆ “¿e•D ˝È@Úˆ Làe;†˝È@Ú ˜ ˚@˝È Úˆ ˚@˝È@Ú ˜ ˆÈ Úˆ ˆÈ@Úˆ ˆÈ@Úˆ ˆÈ@Ú ˜ ˆÈ Úˆ ˆÈ@Ú ˜ ˆÈ Úˆ ˆÈ@Úˆ ˆÈ@Úˆ ˆÈ@Ú ˜ ˆÈ Úˆ ˆÈ@Ú ˜?ˆˇ˛È Úˆˆˇ˛È@Ú—@Ú—@Ú “ Ú—@Ú “ Ú—@Ú—@Ú—@Ú “ Ú—@Ú “ Ú “ÿÚò@¿¯¿¯|kºc“U@Ú¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  7327. ò»
  7328.     d»
  7329. D»
  7330. \»
  7331. ê‰tB»
  7332. ëD¢»
  7333. ˛É»¡¡¡¡¡-†`00@Ä˝@ ¿¿˛˛@Ï-ÄêH PÄ˝@  ˛˛@Ï.*/F»
  7334. bƒ∞ª⁄§y8-éY[-bÂ`∏]àÇ"5ãn·t∂‡Ï.*2…p8
  7335. • AQ"‹í¿Vî)"™:§V•JÅP¶àÆÑ%.Zï•ïZ@Ï.*RY8 )RBb$ïß8î§J'D$îÆúÇQ$àÙÑ)B“π(Á'íÄÏ.*lr àD/îÉÛFß4˘¨[D^%ˢ—°ÈåiIÑJ[§"l$*&¿Ï.*\Zp8zàÇ¢D≈£©6nC§H©Gè!IÜ9Ñ"ÂI√ë‰ÄÏ˛"˚Ĉ ¸ ·˛"˚Ĉ ¸†·˛¸ı ¸@·¡¡( Ç–@˛$¿Ä$ ¿|Ê&%ä˛Äb¸ ÄÄ  Ä$Ê)%%LflñîëóDÿÄö⁄—⁄2Ù[ÌÏéâÙMé@bîà#•∑pÁ)%)Tj*/zí™JhÅMMrjU$≠4ëUí§¶Ñ†gzî8™“ÄÁ)%…dLrJS$LíHÇIIVLâI)%d¥I$â íS8A<îpÁ)%RDûD|•µ˛‘òFíûømSM¢¨ÂÌIçA•†EQ6Á)%[NFî<S"Tàê9íñîJHí#I!6≤HâÉ;¯è$‡Á¸Ä ı@˘ ‚¸Ä ı@˘ ‚ ˘ Ï ‚¡¡$Äaå0cÿ  ˝ íRîÅÿ$YtMáúHRÆÁRrò´ú9Ä⁄    ,¬"§¶à§†q›’R•xı RØ@⁄
  7336. Eº$…$á    ¿§ò‚ï.(¶ór@⁄gGÌIÅëå•,"ßh    )K¥DÄ⁄EÙEHâ<Ës…√E∑Δ28€ªŸı˙@Ÿı˙@Ÿı˙@Ÿò@@¯@¯ºk¸c¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ‡Õ Õ §D÷R<¨cŒ ;‘§jÓIP    •Œ íôƒ    JJ”ê    (Œ •-:êìö kŒÿ»·ƒîb—·D@œ ˛!˝Äà ˛!˝ÄÃ
  7337. ˛!˝Ä ¡¡˛–¯Ä–ÅÄ@PÄ–óà≟÷ƒR/Ï∏¨—) JjìJVPëQP—J
  7338. &RL¢R¢œbP—{    )îù¥‘ÛÉ£Ú†—Rìàñ‰à墛"° —
  7339. ¸@À
  7340. ¸@À¸Ä»¡¡     ¿`À       êÀ    $YrX!À        ,¬"• ·À    
  7341. Eº$… À    gGÍA À    EÙED@‰¿À¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@į@į¸k<c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿¯Ä¿¯<k|c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú¯¿Ú¯|kÆc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@¯@¯ÆkÓc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@į@įÓk.c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿¯Ä¿¯.knc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿¯¿¯nkÆc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@¯@¯ÆkÓc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@į@įÓk.c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿¯Ä¿¯.knc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú¯¿Ú¯nk†c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@¯@¯ÆkÓc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@į@įÓk.c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿¯Ä¿¯.knc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿¯¿¯nkÆc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@¯@¯ÆkÓc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@į@įÓk.c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿¯Ä¿¯.knc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú¯¿Ú¯nk†c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ˇÅ @ˇ ˇˇˇˇ@
  7342. ˇ·ˇ‚7^
  7343. 4H\, Palatino&e.3+ä"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@äIntroduction to •)8 Apple Events4⁄ä˙(‡äAbout ‡) Apple Events
  7344. , (‡3-11
  7345. ˇˇˇˇˇˇˇˇ440lòÄ.B0oMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""B0oB0o$””””””””””””””””””””””””””””””òÄ
  7346. 60@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""60@60@˜˜˜˜˜˜˜˜˜˜˜˜˜
  7347. ˛ˇ˛ˇˇ ˇˇ˛ˇˇ     ˇˇˇ˙ˇ
  7348. ˛ˇˇˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜
  7349. 454+?òÄ
  7350. 56+@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""56+@56+@$˜˛˙ˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  7351. ˛ˇ˛ˇˇ˛¸ˇˇ˚ˇ˛˙ˇˇ˝˛ˇ˛
  7352. ˛ˇ˛ˇˇ
  7353. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  7354. ˛ˇ˛ˇˇ
  7355. ˛ˇ˛ˇˇ˛˙ˇ˜˝˝ˇˇ˛ˇ˚˝ˇ¸˛¸ˇˇ˜˝˛ˇ˛
  7356. ˛ˇ˛ˇˇ
  7357. ˛ˇ˛ˇˇ˝ˇˇ˛˜˝¸ˇ
  7358. ˛ˇ˛ˇˇ˛¸ˇˇ˜˝˛ˇ˛
  7359. ˛ˇ˛ˇˇ
  7360. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˜˝¸ˇ
  7361. ˛ˇ˛ˇˇ˝˛ˇ˛
  7362. ˛ˇ˛ˇˇ
  7363. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  7364. ˛ˇ˛ˇˇ
  7365. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  7366. ˛ˇ˛ˇˇ
  7367. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  7368. ˛ˇˇˇˇ
  7369. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  7370. ˛ˇˇˇ
  7371. ˛ˇˇˇ
  7372. ˛ˇˇˇ
  7373. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  7374. ˛ˇˇˇˇ
  7375. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  7376. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  7377. ˛ˇˇˇˇ
  7378. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähè(eäF °dONLNd\êh¡)
  7379. or exampleq†°dONLNd \¡hË)1    , every GN°dONLNd\ÈhY)(et Data event includes a r'¿°dONLNd.\Yhp)pequir?°dONLNd3\phª)ed parameter tha… °dONLNdC\ªhÔ)Kt describes tI¿°dONLNdP\h˝)5he °dONLNdSiäu•(räApple˝Ä°dONLNdXi•uß) }Ä°dONLNdYi®uŸ) event objecÿÄ°dONLNddiŸu‹)1t‡°dONLNdei›u') containing the dê °dONLNdvi'u/)Jat“Ä°dONLNdxi/u:)a rÄ°dONLNd{i;u{) equested by th⁄@°dONLNdâi{u»)@e client applicatioß¿°dONLNdúi…uŸ)Nn. Tô‡°dONLNd†i⁄uÍ)husØ`°dONLNd£iÍuÏ),/`°dONLNd§iÌu) one °dONLNd©väÇù(ä?application can send a Get Data event to another application, r0‡°dONLNdËvûÇ√(ûequestinùÄ°dONLNdv√Ç)%g, for instance, °dONLNdÉäèè(åäoıÄ°dONLNdÉèè')!ne paragraph of a document, the fi»°dONLNd$É(è¸)ô1rst and last paragraphs of a document, all picturS@°dONLNdUÉ˝è)’es in °dONLNd[êäúb(ôä/the document, all paragraphs containing the worZ °dONLNdäêbú–)ÿd “sales,” or pages 10 thrz†°dONLNd§ê–ú)nough 12 of the °dONLNd≥ù䩪(¶ä
  7380. document. °dONLNdæØ䪢*FigurR¿°dONLNd√Ø¢ª∂)e 3-4@°dONLNd»Ø∂ªÁ)  shows the  °dONLNd”Ø˪m)2Apple event attributes and dirø†°dONLNdÒØmª
  7381. )Ö#ect parameter for the Get Data even‡°dONLNdØ ª)ût °dONLNdºä»å(≈äih`°dONLNdºç»ö)ntrA °dONLNdºö»»)
  7382. oduced in ˇ°dONLNd$º»»‡).Figurª†°dONLNd)º‡»Ù)e 3-2Y °dONLNd.ºı»)    . The dir^°dONLNd7º»Ô)%1ect parameter for the Get Data event sent by the °dONLNdh…ä’#(“ä#SurfCharter application describes t\ °dONLNdã…$’1)öhe w °dONLNdé…1’4)r< °dONLNdè…5’_)    equested ˆ°dONLNdò…^’≠))Apple event objecNÄ°dONLNd©…Æ’∏)Pt a‡°dONLNd¨…π’◊) s a tabl@°dONLNd¥…ÿ’˚)    e called °dONLNdΩ÷ä‚è(flä“°dONLNdæ÷è‚⁄)Summary of Sale´¿°dONLNdÕ÷⁄‚„)Ks”Ë¿°dONLNdœ÷„‚)    A in the document “Sales Report.” Both the table and the document °dONLNd„äÔí(ÏäarE°dONLNd„ìÔö)    e 0@°dONLNd„öÔV)+Apple event objects. The description of an ·†°dONLNd?„UÔ§)ªApple event objec: °dONLNdP„•Ôœ)P
  7383. t always ip`°dONLNdZ„œÔÌ)*nclude܇°dONLNd`„ÌÔÒ)s√‡°dONLNda„ÒÔ˚) a °dONLNddä¸√(˘ädescription oV‡°dONLNdqƒ¸¸):f its location.“@°dONLNdÄ¸¸>)8 In most cases, †Ä°dONLNdê>¸†)BApple event objects arΩ`°dONLNd¶†¸)be located inside other °dONLNdΩ˝ä    „(äApple event objects.
  7384. +H<4,H<",H]
  7385. ˇ·ˇ‚7^    °dONLNd“!ä,¥*#
  7386. Figure 3-4°dONLNd›!Ã,fl)BMajoˇ†°dONLNd·!fl,f)#r attributes and direct parameter oÉ–°dONLNd!g,∞)àf a Get Data event
  7387. ;H≠4<H¨
  7388. <H≠4;G<Hò@@˜@˜<H|?¡¡?Àˇ¯?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘ò@@Ę@Ę|Hº??ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?‹ˇ˝ıˇÄ˘?ˇˇ˛‡„ˇ˝ıˇÄ˘?ˇˇ˛`„ˇp˛ıˇÄ˘?ˇˇ˛Ä„ˇà˛ıˇÄ˘?ˇˇ˛¡„ˇÒ˛ıˇÄ˘?ˇˇ˛!„ˇÒ˛ıˇÄ˘?ˇˇ˛„ˇÒ?¿ıˇÄ˘?ˇˇ˛ …„ˇü¿0ıˇÄ˘?ˇˇ˛B•„ˇ^ÃıˇÄ˘?ˇˇ˛ D    S„ˇ<ıˇÄ˘?ˇˇ˛ à£„ˇ ÄıˇÄ˘?ˇˇ˛A S„ˇ @@ıˇÄ˘?ˇˇ˛A@#„ˇ Ä ıˇÄ˘?ˇˇ˛B@%„ˇAêıˇÄ˘ò@Ä¿˜Ä¿˜ºH¸??ˇˇ˛B Ä„ˇÅ%HıˇÄ˘?ˇˇ˛D Ä„ˇÇ BàıˇÄ˘?ˇˇ˛$!„ˇÒ ¡HıˇÄ˘?ˇˇ˛$A„ˇÒA†àıˇÄ˘?ˇˇ˛A?„ˇÒAêıˇÄ˘?ˇˇ˛ G„„ˇÒÇàpıˇÄ˘?ˇˇ˛O„}„ˇÒÉDıˇÄ˘?ˇˇ˛¯„˝„ˇêÜ¢ıˇÄ˘?ˇˇ˛¯„無ëQıˇÄ˘?ˇˇ˛=„無A®ÄıˇÄ˘?ˇˇ˛:˜ç„ˇ1T@ıˇÄ˘?ˇˇ˛=Λ„ˇ* ıˇÄ˘?ˇˇ˛:˜≠„ˇ    0ıˇÄ˘?ˇˇ˛}Λ„ˇÇ
  7389. »ıˇÄ˘?ˇˇ˛∫˜≠„ˇÇ»ıˇÄ˘?ˇˇ˛}Λ„ˇÅıˇÄ˘?ˇˇ˛∫˜≠„ˇÄÅıˇÄ˘?ˇˇ˛}Λ„ˇA¯ıˇÄ˘?ˇˇ˛Ôæ˘„ˇ"ıˇÄ˘?‹ˇıˇÄ˘?‹ˇ˝ıˇÄ˘?‹ˇ˝ıˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘ò@¿˜¿˜¸H<??ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘ò@@˜@˜<H|??ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘ò@@Ę@Ę|Hº??ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘ÀˇÄ˘¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜ºH¸?¡
  7390. |8 »
  7391. $ »
  7392.   "`»
  7393.  8"†»
  7394. C°„»
  7395. "D"$@»
  7396. g¯|‡»¡¡¡¡¡(?Ä AÅHÄ04˛ `¿É‡ Ê(@@bÄHIJ Ä Å Ê($=@@¿SÖ˝uƒ·lpv»¯QYuèÖ¡H¡ÚÖ“flÊ($K(°¡@U+*
  7397. Hñ≤㥆•PÍ¢öñ*
  7398. Çà
  7399. Ç%
  7400. UjÊ($"Ii¿?‡YIJê§ó‰•!): L§íºrÑà}IûLÊ($C1— ÄëzTŸ5ê'Õan"ó«§&Då1Ç/o®ûÊ($bqp·¡¿”“$ë&≈I±∫ eE%<    œ JGîÊ˛à¸ıÄ˝›˛à¸ıÄ˝›˛p¸ıÄ˝›¡¡(1ÙÄ    ‡˛ Ê'¶(˝ êÊ)%•0‹¨¥§åΩƒ÷÷F»Àílæ¥:/ëlr
  7401. R@éñ˘¿Á($≈PIQ{‘ïI+DjjÀIU4‘JVU¥%͆‚´RÊ)%#EêSíRô"RJD    JJZR&)$òRí‚$§IâM¡Úa¿Á)%!â$⁄#Â-Ø€T¬:êêt⁄ˇ:L<î≥Ø5LjíóD@Á)%qÕ:4ë‚ò…í$Ńîî\ë*$I(à⁄“"HDÃd„‚<£ÄÁ˝˛!ı¯Ä‚˝˛!ı¯Ä‚ ˘!ÎÄ‚¡¡?¿F ¿`¬¿ÿĸ à  @ë@ÿ¢˛Àël:rAêewQ»h Æ·»îŸ$    ¥Bï§Æ®Rî8tï’ïzŸ),Ò&$§<.˚Ù«
  7402. d∏ ~ò‰ªíŸM∏:?5LH"Ia
  7403. µ†0åI,%¢$Ÿi-“*"Ht˜CúÊN&‹ÿsú…Δ›ÿŸı˚˛ Ÿı˚˛ Ÿı˚˛ Ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¡ 8Ä@pÕ  @@ Õ Rí YH‚∞-òŒò@¿Ú˜¿Ú˜¸H.? ÔU´πE@F®Œ Jn%)+é@D¿Œ "î∏ÍBN»ÄâÿŒ gc'Qãáà…"Œ˛Ñ˛Ã˛Ñ˛Ã
  7404. ˛Ñ˛…¡¡<<@Ú‡ ÷†@  ÷\"'ñ«[!"rÑI÷H$_Yr[Äÿ®,Y+JMQ"Öôj®    ,¢"•$◊!0(ôJRâëDyäK–
  7405. Eú$…#Äÿ!¯$¶T÷”¢FéëgGÍ@ÄÿqPrN$õíB¸Í îÒEºEDG◊¸˛˛—¸˛˛—
  7406. ¸˙œ¡¡ ?¿     ÄÑÄÀ    ¢˛Àä¿àÄÀ    $    àÄÀ    ),Ò&%HÄÀ M∏:?*I  i-“*ñ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜<H|?¡¡ 3¯À¯ Ã¯ Ä˘À¯ Ä˘ Ã¯À¯ Ã¯ Ä˘À¯ Ä˘ Ì¿‚¯Ï¿˛`ʯ ÓÁ˚q€ÁʯÌÊÔ˚Ô˜‡ÂĢÌ6Ô√á‡Ê¯Ì7˚yϘÂĢ Ì`‚¯ Ï`‚¯ Ã¯ Ä˘ÒÙˇ¿Í¯ÒÙà‡ÈĢ ÚÙ`ͯÒÙ`ͯ Ú˝"#‚'¢¸"`Í¯Ò˝`Δ¡Ä˝`ÈĢÒ˝ Êˇ¯˝`Í¯Ò˝àåˇŒflº˝à‡ÈĢ Ú˝ xΔ˜Ï˝`Í¯Ò˝ÔÁü¸˝`ͯ ÚÙ"`ͯÒÙ`ÈĢÒÙ`ͯÒÙà‡ÈĢ ÚÙ`ͯÒÙˇ‡Í¯ ÚÙ`ͯÒÙ`ÈĢÒÙ`ͯÒÙ`ÈĢ ÚÙ`ͯҠ   xÄ˝`ͯ Ú
  7407. @êÄ ˛`ͯÒD≥∏÷;罉¸@`ÈĢÒ
  7408. z˙Q?fôîæ˛`ͯÒ
  7409. CBQíôî∞˛`ÈĢ Úz:H˜wI„û@`ͯÒÙ`ͯ ÚÙ`ͯÒÙ`ÈĢÒ¿¸ ¸`ͯÒCx‡¸`ÈĢ Ù Yââ€qcŒ˝`Í¯Û ¯båÇ,à…!˝`ί Ù Sâä(˙)!?˝`Ï¯Û <fiflqfi3«¯Δ˝`ÎĢÛ‡Ù`¿Ì¯ÙÄ Ù`xÏĢ ı<Ùˇ‡Ì¯ı‡∞Ù`‡‡Ó¯ò@@Ę@Ę|Hº? ˆ‡Ù`<<Ó¯ı <p¿x∏
  7410. ˚`ÄÄÓĢ!ˆ‡¿@§ÇÄ˝`¯Ô¯!ˆD≥∏§7˚ìÒ˝` ÓĢ# ˜8pz˙P§z™R¯˝`‡Ô¯#˜‡¿CBP§J™R¿˝`˛<¿¯% ¯˛    z:H∏9kéy˝`˛Äp¯˜x˛Ù`˝ÔĢ˜p¿˛Ù`˝¯¯¿˝Ù`˝¿Ģ ˘x˝¿ˆ`˝ÄpÒ¯ ¯¿˝Cx˚`¸‡Ò¯" ˘0¸YâÅfiHû ¸`¸8Ò¯!¯‡¸båö(I»p¸`¸¿ÒĢ"˘Ä¸SâãÈJIê¸`¸ÄcÚ¯!˘p¸fiflpΔÒÊx¸`˚‡?ÒĢ ˙¿¸Ù`˚0ÄÛ¯˘0˚Ù`˚ÄÛ¯ ˙`˚Ù`˚¿Û¯˙¿˚Ù`˚¿@ÚĢ˙p˚Ùˇ‡˙``Û¯˙¿˚Ù`˙  ÚĢ ˚˙Ù`˙` Û¯˙ ˙Ù`˙?Û¯ ˚˙¯˛D˛˛`ͯ˙˙ DÑ`ÈĢ˘¿˙#gg1›±‹o˜'‚`ͯÒ'…Úze{0Ù‘•`ÈĢ Ú$…ÇJe@Ãî‘•Ä`ͯÒ#«q9›;∏rWÚ`ͯ Ú˜`ͯ¸ ˜˜`ÈĢ˝(@˘Ù`˘Û¯"˝
  7411. Œ‡˘     ˝`˘ÚĢ' ˛ È@˘     `0˝`˘ m,¿ˆ¯&˝+    @˘
  7412. nu3s8ñ¯|¿˛`˘¯æĈ¯( ˛ È ˘
  7413. ˘MO¥§∂d3‡˛`˘à–Ĉ¯Ò    ôMD¥§jd3˝`˘xéÄıĢÒ
  7414. ~u;ì$J$‡˛`ͯÒ@˜`ÈĢ ˝@˘@˜`ͯ¸ĢÙ`¯`ı¯ ;ôôÕ¿˙ˆ`¯@ı¯)˛¶Z|” ˙˛ÃIJ`˙ Ófg7ıĢ*˛¶Z$” ˙
  7415. y¯‹∂Ñõ8IJ`˙ôiÛLĘ¯)˛ªô‹M ˙     eÏØU D˝`˙ôhìLÄˆÄ˘& ˛"ˆ    :e,®zJ|˝`˙Ógq4Ę¯˝"ˆ    ȉÁßI‰˝`˘àÛ¯ Ú@˜`˘àÛ¯ÒĘ`ÈĢÒÙ`ͯ¸‡¯Ù`ÈĢ ˝`¯Ùˇ‡˘pÛ¯¸Ä¯Ù`˘àÛ¯ ˛¿˘Ù`˙Û¯˝ ˘Ù`˙ÚĢ˝˘Ù`˙?¿ı¯˝ »˘ı˘ü¿0ÙĢ ˛B§˘‡ıÄ˙^Ãı¯˝ D    R¯¿ı˘<ı¯ ˛ à¢˘Äı˘ Ĉ¯˝A R˘Ù|˘ @@ıĢ˝A@"˘Ù¯˘ Ä ˆ¯˝B@$˘ ı˘AêıĢò@Ä¿˜Ä¿˜ºH¸?! ˛B Ä˘r˜¿˘Å%Hˆ¯$˝D Ä¯0H˛˝ĢÇ Bàˆ¯' ˛$!˜    ~Kò›ÃÕ°æ`˛¿˙ ¡Hˆ¯&˝$A¯
  7416. >K=)>üSfl_‡˛`˙A†àıĢ%˝A?¯    K!    2ìR@˝`˙Aꈯ%˝ G„¯    sÂŒèQœ@˝`˙ÇàpıĢ" ˛O„|˘˛¯`˙ÉDı¯˝¯„¸˘˛¯`˘êÜ¢ı¯ ˛¯„å˘Ù`˘ëQı¯$˝=„å˘  ¸`˘A®ÄıĢ$˝:˜å˘ @¸`˘1T@ˆ¯$˝=΋˘`ÏÌƈpŒ¸`˘* ıĢ& ˛:˜¨˘Ò?ì)YI$¸`˘    0ˆ¯$˝}΋˘ë0q)YI$¸`˘Ç
  7417. »ˆ¯& ˛∫˜¨˘pÔœ.6Hƒ¸`˘Ç»ˆ¯ ˝}΋˘˝˘`˘ÅıĢ˝∫˜¨˘˝˘`¯Äň¯˝}΋˘Ù`¯A¯ıĢ% ˛Ôæ¯˘@˛IJ`¯"Ù¯Ò
  7418. @`¯Ù¯ Ún
  7419. ÁLY‹Œòfi`Í¯Ò˘îfi=}))Ω(`ÈĢÒôî–!°))°`ͯÒyÁN$ŒúÊ`ÈĢ% ,į˛Ñ¸Ä˛`˙¿    !ı¯&˛ÄrĢ˛Ñ˝˝`˙  @ˆ¯! N‡Êo∞˙Ù`˙ì∫≠ÌĘ¯&˛Ã`üG‡˙ ˛@¸`˘s…_ıĢ'˛ÃbôF ˙Ñ ˛@¸`˙3…Qˆ¯'˛<\óC‡˙a˜,8⁄¿¸`˙œI/ıĢ Ú¸æ%ı>@¸`ͯÒêÃ∞%5"@¸`ͯ Úp.$ı¿¸`ͯÒÙ`ÈĢÒÙ`ͯÒÙ`ÈĢ ÚÆ˝p ˛`ͯұ˝à ˛`ͯ Ú
  7420.  ùH‹c,p˛`ͯÒ
  7421. öï>I(æ¿˛`¯ÛĢÒ
  7422. öï&)(å∞0˛`¯Äı¯Ò
  7423. zï0»sƇ˛`¯¿ÙĢ ˝‡¯¸ ˙`¯ `ı¯¸ ¯¸@˙`¯0ı¯ ˝ ¯Ù`¯:xı¯¸ ¯Ä@˚ `¯@ÙĢ"¸`¯P@˛Ä `¯ @ı¯"¸†¯∏¸¡ÿ”°π‹Õ ‡`¯¿ÙĢ$ ˝ ¯§S‚e3S‰ìÍü `¯@ı¯"¸ ¯§SeR$ì*ë `¯    @ı¯$ ˝ ¯§2·ÿÔQ‰RÍé‡`¯
  7424. @ı¯¸ ˙Ù`¯@ÙĢ¸`¿˚Ù`¯ @ı¯¸†x˚Ù`¸¿¿ÙĢ) ˝ ˚Æ8 ¸`¸p@ı¯'¸ ˚±$¿¸`¸    @ı¯) ˝ ˚ ié$‹Õ¿¸`¸ 
  7425. @ı¯'¸ ˚˚ÿ9Û(ĸ`¸0@ÙĢ(¸`Åĸö%(ĸ`¸0` @ı¯(¸†Ä¿¸y‹$¸»@¸`¸`¿¿ÙĢ& ˝ ‡`¸¸˙`¸AÄ@ı¯$¸ 0¸¸˙`¸√˛    @ı¯# ˝ ú¸Ù`˝ܲ
  7426. @ı¯!¸  ¸Ù`˝ ˛@ÙĢò@¿˜¿˜¸H<?!¸`¸Ù`˝˛ @ı¯!¸†ɸÙ`˝ ˛¿ÙĢ$ ˝ ˛¡Ä˝Ù`˝0˛@ı¯"¸ ˛`¿˝Ù`˝0`˛    @ı¯$ ˝ ˛0`˝Ùˇ‡˝`¿˛
  7427. @ı¯"¸ ˛0˝Ùˇ‡˝¡Ä˛@ÙĢ¸`˛ ÎÉ˝ @ı¯¸†˛ ν¿ÙĢ ˝ ˛Î ˝@ı¯¸ ˛ÅÄÏ8˝    @ı¯ ˝ ˝¿‡Ï`p˝
  7428. @ı¯¸ ˝`8Ì¿¿˝@ÙĢ¸`˝8 ÌÄ˝ @ı¯¸†˝ ̸¿ÙĢ ˝ ˝ÄÓ ¸@ı¯¸ ˝¿‡Ó0¸    @ı¯ ˝ ¸`0Ô‡p¸
  7429. @ı¯!¸ ¸8˙¿ĢÄ¿¸@ÙĢ$¸`¸ ˙¿Ä0¸ĸ @ı¯%¸†¸ĸÁΩÒ€Áx¸˚¿ÙĢ' ˝ ¸¿¿¸ʘ˚Ô˜∞¸0 ˚@ı¯$¸ ˚`ĸ6˜√á∞¸ 8˚    @ı¯& ˝ ˚9ĸ7Ω˘Ï˜∏¸``˚
  7430. @ı¯¸ ˚˙0¯@ ˚@ÙĢ¸`˚˙0¯ˇ˚ @ı¯¸†‡¿ÙĢ ˝ ‡@ı¯¸ ¯Ùˇ¿¯    @ı¯ ˝ ¯Ù"`¯
  7431. @ı¯¸ ¯Ù`¯@ÙĢ¸`¯Ù`¯ @ı¯¸†¯¸àºàË¸à‡¯¿ÙĢ  ˝ ¯¸6`¸`¯@ı¯¸ ¯¸6Ô{¸`¯    @ı¯  ˝ ¯¸"?ˇÔ¸"`¯
  7432. @ı¯¸ ¯¸7çÓ¸`¯@ÙĢ¸`¯¸6ˇn¸`¯ @ı¯¸†¯˚àåé¸à‡¯¿ÙĢ ˝<¯˚ ¸`¯@ı¯¸¯Ù`¯    @ı¯ ˝0¯Ù"`¯
  7433. @ı¯¸`¯Ù`¯@ÙĢ¸¿¯Ùˇ‡¯ @ı¯¸įÙ`¯¿ÙĢ ÚÙ`ͯÒÙ`ͯ ÚÙ`ͯÒÙ`ÈĢÒ8˝‡@˝`ͯÒD˝@˝`ÈĢ Ú
  7434. 1:46ë∏ΔX‡˛`ͯÒ
  7435. 5*|íP?}IJ`ͯ Ú
  7436. E5*LRQ``˛`ͯÒ
  7437. 8ı*<aêÁ]¿˛`ÈĢÒ¸@˙`ͯҸÄ˙`ÈĢ ÚÙ`ͯÒ1òˆ0ÿ¿3Ä`ͯ ÚJdH%     L`ͯÒ
  7438. d)H•     `ÈĢÒdF0e 0Ä`ͯÒJdIHe     DÄ`ÈĢ Ú1òF0ò¿{`ͯÒÙ`¸?˘ˇ¯¯ò@@˜@˜<H|?  ?˙ˇ¸Ù`¸ ˙ø˙¯  ˙¸Ù`¸ ˙ĢĢ(=˜Ä˛ø¯¸Ù`¸
  7439.  Ä˙¯(
  7440. =å@•¯¸Ù`¸
  7441.  ƒDDHÄ ˘Ä˘(
  7442.  =å@•¯¸Ù`¸
  7443.  2!Ä˙¯(
  7444. =â÷lfWΩ¯¸Ùˇ‡¸
  7445.  TETAÄ˙¯$
  7446.  =Ö÷LfW°¯¸Ùˇ‡¸ ˙Ä˙¯
  7447. =˜ç÷ofWø¯Ë?˘ˇÄ˘Ä˘ ˙Ë ˚Ä˙¯?˙ˇ¯Ë ˚ĢĢ  ˚    òË ˚Ä˙¯ ˚ ÿÍ ˛ ‚$Ä˙¯  ˚xÍ   $Ä˙¯"
  7448. !ê¯Í  2…<¿Ä˘Ä˘"
  7449. "P
  7450. òÍ  +À•¿ˇÄ˙¯"
  7451. "∏l“à òÍ  +⺇ĢĢ
  7452.  "UËô˚‹¯Í ˚Ä˙¯
  7453. !îËiö¯Í ˚Ä˙¯  ˚Í ˚Ä˙¯ ˚Í  @TĢĢ"" ˛Í  @T(Ä˙¯(
  7454. " 8˛  „W,`ĢĢ(
  7455.  #©Ûj—6@$˛  ‘Ø*‡Ä˙¯(
  7456. "i$´Ƈ%≥78 S.*pÄ˙¯%
  7457.  #ë„f—ßp;Á¶|§¯ ˚Ä˙¯# ¸"d¶L§ ˚ĢĢ& !¸!„û?$ @Ä˙¯# ˚Ó BĢĢ#  ˚Ó8 •ò @Ä˙¯ ˚Í  ˜π^‡Ä˙¯#  ˚Ó  5ŒhÄ˙¯  ˚Ó ˚ĢĢ  ˚Ó7,n ˚Ä˙¯  ˚ÓLæî ˚ĢĢ   ˚ÓL∞Ñ ˚Ä˙¯  ˚Ó7.r ˚Ä˙¯  ˚Ì ˛ ˚Ä˙¯ ˚Ì@˝ ˚ĢĢ ˚Ë ˚Ä˙¯ ˚Ë ˚ĢĢ  ˚Ë ˚Ä˙¯ ˚Ë ˚Ä¿˝¯  ˚Ë ˚Ä ˛@¯ ˚Ë ˚ Ä,i–‹‡Ä˘  ˚ˇÄÍ ˚ Ä2ô©Ú@¯! ˚¿Í ˚ Ä2â©@Ģ"  ˝``Í ˚ ÄÃw®Ú ¯   N¥ŒÜ` Í ˚ġ˚¯!   Mjjâ@ Ï˛ ˚Ä˙¯$  Mj©â@ Ï  ¿˛Ä˘Ä˘'  =ji@ Ï 'M3°òÄ"˝¯) ˛ Ï ¶™ö¢PÄ  ˛Ä˘(  ˛ Ï f™™bPÄ∫cp¯( ‚˛ Ï û™öAêÄfÙ†¯'   F Ï ˝@ÄfÑ ¯(  Œ® Ï ˝
  7458. ÄÄ∫sê˛Ä˘&  6‰ Ï ¬˝Ä˝¯'  ŒN Ï 2F˛Ä¸Ä˘!  ˚ Ï ö®˛Ä˙¯! ˚ Ï j‰˛Ä˙¯!  ˚ Ï öN˛Ä˙¯( ˝ê pÄÙ ˚ĢĢ) ¿h HÄÙ ˚Ä˙¯) c0<ÿ K>=d≥ÄÙ ˚ĢĢò@@Ę@Ę|Hº?+  »˚º    $?OüôÚ¸ÄÙ ˝ˇ‡Ä˙¯, 4…ùfiÿ LôÉDÄÙ   Ä˙¯0   …/2 sèâr;į>Ä  Ä˙¯(  s3Ô Ä c1H Ä˘Ä˘(  Gw ‹ò¯ …¥ Ä˙¯(  äÕ     Úº 4…l Ä˘Ä˘/  ˚ªÄ  Ñ"˜    2†  …í Ä˙¯1 ˇÄ @Ñ @˘¸ú s1l Ä˙¯-  "Ä ˆh>‰√:f‡ı   Ä˙¯- âÄ iT˘@ı   Ä˘Ä˘- E iTï¶à@ı   Ä˙¯0  ã fT‰„:w ˘  ˝ˇ‡Ä˘Ä˘,   " ˚˜  Ä˙¯,  ë&8 ˚˜7,n  Ä˙¯(   òÚ<Q  Læî  Ä˙¯(  dx30 L∞Ñ ;1Œ Ä˘Ä˘(  d¿L 7.r $…
  7459. ( Ä˙¯'  d70¯`Ô  4…l Ä˘Ä˘&  ò˝ ò@Ô@  …    Ç Ä˙¯! ˚
  7460. ò¿Ï  31Ï Ä˙¯   ˚¯ˇÎ   Ä˙¯ ˚XÍ   Ä˘Ä˘ ˚ ÿÍ  ˝ˇ‡Ä˙¯ ˚    òÍ ˚ĢĢ ?˙ˇ¯Í˛?˘ˇÄ˙¯ ˚Ë ˚Ä˙¯  ˚ÿË ˚Ä ˙¯ ˚ ÿË ˚ĢĢ ˚ÿË ˚Ä˙¯ ˚
  7461. XË ˚Äp˘Ä˘  ˚ ÿË ˚ø¿˙¯?˙ˇ¯Ë?˘ˇÄ˘¯ ˙ˇ¯Ë˘ˇÄ˘¯ Ä˘À¯ Ä˘ Ã¯À¯ Ã¯ Ä˘À¯ Ä˘ Ã¯À¯ 3¯ ÀÃĢ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜ºH¸?¡
  7462. |8 »
  7463. $ »
  7464.   "`»
  7465.  8"†»
  7466. C°„»
  7467. "D"$@»
  7468. g¯|‡»¡¡¡¡¡(?Ä AÅHÄ04˛ `¿É‡ Ê(@@bÄHIJ Ä Å Ê($=@@¿SÖ˝uƒ·lpv»¯QYuèÖ¡H¡ÚÖ“flÊ($K(°¡@U+*
  7469. Hñ≤㥆•PÍ¢öñ*
  7470. Çà
  7471. Ç%
  7472. UjÊ($"Ii¿?‡YIJê§ó‰•!): L§íºrÑà}IûLÊ($C1— ÄëzTŸ5ê'Õan"ó«§&Då1Ç/o®ûÊ($bqp·¡¿”“$ë&≈I±∫ eE%<    œ JGîÊ˛à¸ıÄ˝›˛à¸ıÄ˝›˛p¸ıÄ˝›¡¡(1ÙÄ    ‡˛ Ê'¶(˝ êÊ)%•0‹¨¥§åΩƒ÷÷F»Àílæ¥:/ëlr
  7473. R@éñ˘¿Á($≈PIQ{‘ïI+DjjÀIU4‘JVU¥%͆‚´RÊ)%#EêSíRô"RJD    JJZR&)$òRí‚$§IâM¡Úa¿Á)%!â$⁄#Â-Ø€T¬:êêt⁄ˇ:L<î≥Ø5LjíóD@Á)%qÕ:4ë‚ò…í$Ńîî\ë*$I(à⁄“"HDÃd„‚<£ÄÁ˝˛!ı¯Ä‚˝˛!ı¯Ä‚ ˘!ÎÄ‚¡¡?¿F ¿`¬¿ÿĸ à  @ë@ÿ¢˛Àël:rAêewQ»h Æ·»îŸ$    ¥Bï§Æ®Rî8tï’ïzŸ),Ò&$§<.˚Ù«
  7474. d∏ ~ò‰ªíŸM∏:?5LH"Ia
  7475. µ†0åI,%¢$Ÿi-“*"Ht˜CúÊN&‹ÿsú…Δ›ÿŸı˚˛ Ÿı˚˛ Ÿı˚˛ Ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¡ 8Ä@pÕ  @@ Õ Rí YH‚∞-òŒò@¿Ú˜¿Ú˜¸H.? ÔU´πE@F®Œ Jn%)+é@D¿Œ "î∏ÍBN»ÄâÿŒ gc'Qãáà…"Œ˛Ñ˛Ã˛Ñ˛Ã
  7476. ˛Ñ˛…¡¡<<@Ú‡ ÷†@  ÷\"'ñ«[!"rÑI÷H$_Yr[Äÿ®,Y+JMQ"Öôj®    ,¢"•$◊!0(ôJRâëDyäK–
  7477. Eú$…#Äÿ!¯$¶T÷”¢FéëgGÍ@ÄÿqPrN$õíB¸Í îÒEºEDG◊¸˛˛—¸˛˛—
  7478. ¸˙œ¡¡ ?¿     ÄÑÄÀ    ¢˛Àä¿àÄÀ    $    àÄÀ    ),Ò&%HÄÀ M∏:?*I  i-“*ñ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜.Hn?¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘnHÆ?¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜ÆHÓ?¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜ÓH.?¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜.Hn?¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘnHÆ?¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜ÆHÓ?¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜ÓH ?¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜.Hn?¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘnHÆ?¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜ÆHÓ?¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜ÓH.?¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜.Hn?¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘnHÆ?¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜ÆHÓ?¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜ÓH ?¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ˇ"(@ˇ ˇˇˇˇ@
  7479. ˇ·ˇ‚7^
  7480. 4*\¯, Palatino&e.3+l"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@lIntroduction to •)8 Apple Events4⁄*˙¯
  7481. (‡*3-12    )BAbout ‡) Apple Events4^*¿¯
  7482. °dONLNd\lhr(elTµ¿°dONLNd\qhÇ)o prr`°dONLNd\Éh€)ocess the informatioc °dONLNd\‹hÁ)Yn iú‡°dONLNd\Áhs) n the Get Data event, the SurfWs°dONLNd;\sh‚)åriter application calls the ,
  7483. Courier°dONLNdWilufi(rlAEProcessAppleEventx‡°dONLNdjifiu)r function. The B‡°dONLNdyiuê)@AEProcessAppleEvent;¿°dONLNdåiêu‡)r function uses the °dONLNdüvlÇù(lFevent class and event ID attributes to dispatch the event to the SurfW<Ä°dONLNdÂvùÇÌ(ùriter application’s °dONLNd˘Élè⁄(ålhandler for the Get Data J‡°dONLNdÉ⁄è)nApple event. dONLNdÉèÁ);/The SurfWriter application responds to the Get °dONLNdNêlú´(ôlData event by c†°dONLNd\ê¨ú÷)@    resolving(`°dONLNdeê◊úÔ)+A the description of the Apple event object—that is, by using the °dONLNd¶ùl©¢(¶l    AEResolve|†°dONLNdØù¢©¨)6; function, other Apple Event Manager routines, and its own °dONLNdÍ™l∂π(≥lJapplication-defined functions to locate the table named “Summary of Sales.ç@°dONLNd4™π∂⁄(≥π” After °dONLNd<∑l√ï(¿l
  7484. locating tõ¿°dONLNdF∑ï√∑))he table2¿°dONLNdN∑∏√Û)#, SurfWriter a¿°dONLNd\∑Ù√˜)<=dds a copy of the table’s data to the reply event, which the °dONLNdôƒl–’(ÕlOApple Event Manager then sends to the SurfCharter application. The SurfCharter °dONLNdË—l›*#application then displays the data ò‡°dONLNd —›)òin “†°dONLNd—›b) its active window. >@°dONLNd!—c›e)T °dONLNd#„lÔr(ÏlT†¿°dONLNd$„rÔ∏)he next section, *@°dONLNd5„πÔ·)G    “Data Str
  7485. †°dONLNd>„‚Ô˘))ucturêÄ°dONLNdC„˘Ô)es WäÄ°dONLNdG„Ô%)ithin b°dONLNdM„%Ôh)Apple Events,”ª‡°dONLNd[„hÔ«)C describes the data strQ@°dONLNdr„»Ôfl)`uctur◊ °dONLNdw„flÔÍ)es °dONLNdzl¸|(˘lthe °dONLNd~|¸)Apple Event Manager uses for V@°dONLNdõ¸¥)â'Apple event attributes and parameters. 
  7486. !*(¯4"*(¯ #l#¯
  7487. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd√l!€(lData Structures Wué°dONLNd‘‹!¯)pithin h¬°dONLNd⁄¯!H) Apple Eventsˇˇˇˇˇˇ€r)¯3
  7488. °dONLNdË(l4r(1lT†¿°dONLNdÈ(r4)he ]`°dONLNdÏ(4˛)Apple Event Manager constr°`°dONLNd(˛4{)ucts its own internal data strL°dONLNd$(|4ì)~uctur—‡°dONLNd)(ì4›)es to contain the °dONLNd;5lAª(>linformation in an Ë °dONLNdM5ªAq)O)Apple event. Neither the sender nor the rÌ°dONLNdv5qA´)∂eceiver of an ˜¿°dONLNdÑ5´Afi):
  7489. Apple even °dONLNdé5flA‰)4t °dONLNdêBlNï(Klshould mc °dONLNdòBñN’)*anipulate data¯†°dONLNd¶B’N‰)? dirA¿°dONLNd™BÂN˘)ectly5Ä°dONLNdØB˙N|) after it has been added to an ı °dONLNdŒB{Nƒ)ÅApple event; eacy¿°dONLNdfiB≈NÓ)J    h should °dONLNdÁOl[o(XlrE°dONLNdËOp[ç)ely on n†°dONLNdÔOç[?)&Apple Event Manager functions to do sod`°dONLNdO@[E)≥. °dONLNdalmG(jl2This section describes the most important data str€°dONLNdJaGm^)€uctur`‡°dONLNdOa_m†)es used by the &¿°dONLNd^a†mÿ)A Apple event °dONLNdjnlzº(wlManager to constrfl°dONLNd{nºzÃ)Puct ∫`°dONLNdnÃz$)Apple events. The fi䆰dONLNdìn%z>)Yrst str⁄†°dONLNdön>zU)uctur`Ä°dONLNdünVzÿ)e described is the descriptor rf¿°dONLNdænÿzÍ)Çecor€ °dONLNd¬nÍzÚ)d,v‡°dONLNdƒnÛzı)     °dONLNd≈{láî(Ñl
  7490. a data str< °dONLNdœ{ïá¨))uctur¬°dONLNd‘{¨á‘)
  7491. e of type r@°dONLNdfi{’á˘))AEDescp°dONLNd‰{˘á˛)$. †°dONLNdÊ{˛áG)Applications ma ¿°dONLNdı{GáT)Iy a/‡°dONLNd¯{Tá‹) ccess the data in an individual °dONLNdàlîü(ël descriptor rfl@°dONLNd$àüî±)3ecorS†°dONLNd(à≤î«)d dir∏Ä°dONLNd-à«î$)ectly if it is not part onÄ°dONLNdFà%îO)^
  7492. f another z‡°dONLNdPàOîV)*AB °dONLNdQàWî‘)pple Event Manager data str‡°dONLNdlà‘îÎ)}ucturk¿°dONLNdqàÏîÛ)e.µ`°dONLNdsàÛîı) °dONLNduöl¶o(£lIfiÄ°dONLNdvöo¶Ô)n some cases it is convenient ¬ °dONLNdîö¶)Åfor the ˝ °dONLNdúö¶´)!Apple Event Manager to describe dæÄ°dONLNdΩö¨¶’)ù
  7493. escriptor °dONLNd«ßl≥o(∞lrE°dONLNd»ßp≥Ç)ecorπ`°dONLNdÃßÇ≥¡)ds by data typ⁄†°dONLNd⁄ß¡≥ )?es·@°dONLNd‹ß ≥Z)    # that indicate their contents; thusdONLNdˇß[≥b)ë, i~°dONLNdßc≥Ç)t also dw°dONLNd
  7494. ßÉ≥ç) efiM`°dONLNdßé≥¿) nes data str·Ä°dONLNdß¿≥◊)2ucturg`°dONLNdßÿ≥„)es °dONLNd!¥l¿§(Ωlsuch as type `°dONLNd.¥•¿Û)9AEAddressDesc[ °dONLNd;¥Û¿¯)N, [ °dONLNd=¥¯¿4)
  7495. AEDescListW`°dONLNdG¥4¿L)<, and ƒÄ°dONLNdM¥L¿|)AERecord¡Ä°dONLNdU¥|¿ß)0
  7496. , which arX‡°dONLNd_¥®¿fi),e descriptor °dONLNdl¡lÕo( lrE°dONLNdm¡pÕÇ)ecorπ`°dONLNdq¡ÇÕ›)ds used to hold addr;°dONLNdÖ¡fiÕ)\ esses, list’`°dONLNdê¡Õ)(s of oQ@°dONLNdñ¡Õe)ther descriptor rÄ°dONLNdß¡fÕx)Hecort‡°dONLNd´¡xÕö)ds, and ‹`°dONLNd≥¡öÕ“)" Apple event °dONLNdøŒl⁄¶(◊lparameters, r°dONLNdÃŒß⁄ÿ); espectivelyL°dONLNd◊Œ◊⁄z)0&. These and most of the other data strÏ¿°dONLNd˝Œz⁄ë)£ucturr†°dONLNdŒí⁄Ë)es described in this °dONLNd€lÁñ(‰l
  7497. section ar≠Ä°dONLNd!€ñÁ÷)*e formally defiY °dONLNd0€◊Á)Aned as data strâ°dONLNd?€Á.)@uctur‡°dONLNdD€/Á[) es of type ¸ °dONLNdO€[Á),AEDesc˘‡°dONLNdU€Á¶)$
  7498. ; they dif¿°dONLNd_€ßÁÁ)(fer only in the °dONLNdoËlÙ„(Òlpurposes for which they arw°dONLNdâË„Ù)we used.
  7499. *¯4*¯ l¯
  7500. ˇ·ˇ‚7^ °dONLNdël“(lDescriptor Recordsˇˇˇˇˇˇ‘@(Ò3
  7501. °dONLNd•l%°("l Descriptor rÄ¿°dONLNd±°%≥)5ecorı °dONLNdµ≥%»)ds ar퇰dONLNd∫…%])"e the building blocks used by the _ °dONLNd‹]%Á)îApple Event Manager to constr€°dONLNd˘Á%˜)äuct °dONLNd˝&l2(/l'Apple event attributes and parameters. fl°dONLNd    $&2")ØA†°dONLNd    %&#2%) ô†°dONLNd    &&%2r)descriptor record °dONLNd    7&s2ß)N is a data strÛ†°dONLNd    E&ß2æ)4ucturyÄ°dONLNd    J&ø2Á)
  7502. e of type °dONLNd    T3l?ê(<lAEDesc}¿°dONLNd    Z3ê?©)$D; it consists of a handle to data and a descriptor type that identifz@°dONLNd    û3©?È(<©ies the type of °dONLNd    Æ@lL(Ilthe data to which the handle rÿ†°dONLNd    Ã@L)Ñefers.°dONLNd    ”Wlc¿(`lTYPE AEDesc = °dONLNd    ‚elqr*R†°dONLNd    „erqê)ECORD°dONLNd    Ûe2q§)¿{descriptor record}°dONLNd
  7503. s~ÿ(|~descriptorType:°dONLNd
  7504. sÍ )l    DescType;°dONLNd
  7505. *s2z)H {type of dat{Ä°dONLNd
  7506. 6szÜ)Ha}°dONLNd
  7507. :Å~çΔ(ä~ dataHandle: °dONLNd
  7508. LÅÍç)lHandle°dONLNd
  7509. TÅç)$;°dONLNd
  7510. WÅ2çÜ)${handle to datz¿°dONLNd
  7511. eÅÜçí)Ta}°dONLNd
  7512. hèlõr(òlE†°dONLNd
  7513. ièrõÑ)ND;ˇd~@ˇ ˇˇˇˇ@
  7514. ˇ·ˇ‚7^
  7515. 4H\, Palatino&e.3+ä"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@äIntroduction to •)8 Apple Events4⁄ä˙(‡äAbout ‡) Apple Events
  7516. , (‡3-13
  7517. ˇˇˇˇˇˇˇˇ440lòÄ.B0oMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""B0oB0o$””””””””””””””””””””””””””””””òÄ
  7518. 60@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""60@60@˜˜˜˜˜˜˜˜˜˜˜˜˜
  7519. ˛ˇ˛ˇˇ ˇˇ˛ˇˇ     ˇˇˇ˙ˇ
  7520. ˛ˇˇˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜
  7521. 454+?òÄ
  7522. 56+@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""56+@56+@$˜˛˙ˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  7523. ˛ˇ˛ˇˇ˛¸ˇˇ˚ˇ˛˙ˇˇ˝˛ˇ˛
  7524. ˛ˇ˛ˇˇ
  7525. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  7526. ˛ˇ˛ˇˇ
  7527. ˛ˇ˛ˇˇ˛˙ˇ˜˝˝ˇˇ˛ˇ˚˝ˇ¸˛¸ˇˇ˜˝˛ˇ˛
  7528. ˛ˇ˛ˇˇ
  7529. ˛ˇ˛ˇˇ˝ˇˇ˛˜˝¸ˇ
  7530. ˛ˇ˛ˇˇ˛¸ˇˇ˜˝˛ˇ˛
  7531. ˛ˇ˛ˇˇ
  7532. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˜˝¸ˇ
  7533. ˛ˇ˛ˇˇ˝˛ˇ˛
  7534. ˛ˇ˛ˇˇ
  7535. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  7536. ˛ˇ˛ˇˇ
  7537. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  7538. ˛ˇ˛ˇˇ
  7539. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  7540. ˛ˇˇˇˇ
  7541. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  7542. ˛ˇˇˇ
  7543. ˛ˇˇˇ
  7544. ˛ˇˇˇ
  7545. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  7546. ˛ˇˇˇˇ
  7547. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  7548. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  7549. ˛ˇˇˇˇ
  7550. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähŒ(eäIf a descriptor r놰dONLNd\Œh‡)Decor°dONLNd\·h;)d exists separately fr–Ä°dONLNd+\;he)Z    om other  °dONLNd4\fhÎ)+Apple Event Manager data strl °dONLNdP\Îh)ÖucturÚ°dONLNdU\h)es, °dONLNdYiäu“(räit is possible to r`†°dONLNdli“u©)H2etrieve the data associated with its handle by der°dONLNdûi™u∫)ÿefer≈ °dONLNd¢i∫u )encing the handle °dONLNd¥väǶ(ätwice. ›@°dONLNdªv¶Ç˙)After a descriptor rV@°dONLNdœv˚Ç)Uecor †°dONLNd”vÇï)d has been added to any other }`°dONLNdÒvïÇ)àApple Event Manager data °dONLNd
  7551. Éäèï(åästrfi°dONLNdÉïè¨) ucturc‡°dONLNdÉ≠èÙ)e, you must use √ °dONLNd"ÉÙè\)GApple Event Manager r∑°dONLNd7É\è«)houtines to extract data fr? °dONLNdQÉ»èÈ)lom the °dONLNdXêäúΩ(ôä descriptor rfl@°dONLNddêΩúœ)3ecorS†°dONLNdhê–úÿ)d.°dONLNdk¢äÆù(´äThe ª¿°dONLNdo¢ùÆ·)descriptor typeP†°dONLNd~¢‚Æ)E     is a strT°dONLNdá¢Æ)ucturŸ‡°dONLNdå¢Æ@)
  7552. e of type ,
  7553. Courierä °dONLNdñ¢AÆq))DescTypeá °dONLNdû¢qÆı)0 , which in turn is of data type °dONLNdæØ䪥(∏äResType}`°dONLNd≈Ø¥ª¯)*—that is, a fouré`°dONLNd’دªw)D-character code. Constants arCÄ°dONLNdÚØxª)Ä!e usually used in place of these °dONLNdºä»ú(≈äfourÄ°dONLNdºù»)-character codes when r°dONLNd.º»“)i0eferring to descriptor types. Descriptor types rπ†°dONLNd^º“»‡)ÃeprJ`°dONLNdaº·»˙)esent °dONLNdg…ä’Ò(“ävarious data types. Her”@°dONLNd~…Ò’)ge ar·‡°dONLNdÇ…’)=e some of the major descriptor type constants, their values, °dONLNdø÷䂶(fläand th‡°dONLNd≈÷ß‚⁄) e kinds of d—@°dONLNd—÷⁄‚fl)3a—@°dONLNd“÷fl‚")ta they identify@°dONLNd‚÷"‚$)C.°dONLNdR’ä·ë(fiä>For a complete list of the basic descriptor types used by the π°dONLNdê’ë·Ú(fiëApple Event Manager™Ä°dONLNd£’Ú·)a, see °dONLNd©‚äÓê(ÎäTµ¿°dONLNd™‚èÓŸ)able 4-2 on page °dONLNdª‚ŸÓ·)J4-8‡°dONLNdΩ‚‚ÓÏ)    578‡°dONLNdø‚ÏÓÓ)
  7554. .°dONLNd¡Ùä¢(˝äFigurR¿°dONLNdΔÙ¢∂)e 3-5@°dONLNdÀÙ∂ò)6 illustrates the logical arrangement of a descriptor r‡@°dONLNdÙò™)‚ecorT†°dONLNdÙ´)d with a descriptor °dONLNdä´(
  7555. ätype of ʆ°dONLNd!´€)!typeChar&@°dONLNd)€)0, which specifif¿°dONLNd8X)?es that the dat°dONLNdGXe)>a h–`°dONLNdJeÑ)andle r¥Ä°dONLNdQÑî)eferé@°dONLNdUï´)s to aÉ °dONLNd[¨)n unterminated strin ‡°dONLNdo)\g °dONLNdqäΔ(ä(in this case, t°dONLNdÅΔ6)<he text “Summary of SaleΩ¿°dONLNdô6E)ps”).
  7556. <HM4=HM"=H]
  7557. ˇ·ˇ‚7^    °dONLNdû2ä=¥(:ä
  7558. Figure 3-5°dONLNd©2Ã=“)BA0°dONLNd™2“=) descriptor recorÄ°dONLNdª2=7)Ad whose P°dONLNd√27=K)$data °dONLNd»2K=ë)handle refers to a †°dONLNd⁄2ë=‡)Fn unterminated striné@°dONLNdÓ2‡=Â)Og°dONLNd‰Ôä˙À(˜äDescriptor type°dONLNdÙÔ˛˙)tV¸/°dONLNdıÔ˙)alue°dONLNd˙Ô6˙g)3 DescriptionÕ`°dONLNdÔg˙Ü)1 of data
  7559. °dONLNd˝ä    Ã(ä typeBoolean°dONLNd˝˛    ")t'bool'°dONLNd"˝6    S)81-byte v†°dONLNd)˝T    ç) Boolean valuÄ°dONLNd5˝é    í):e°dONLNd8ä∫(ätypeChar°dONLNdA˛")t'TEXT'°dONLNdH6ä)8Unterminated strinxÄ°dONLNdZãê)Ug°dONLNd]ä)‰(&ätypeLongInteger°dONLNdm˛)")t'long'°dONLNdt6)l)832-bit intege$¿°dONLNdÅm)p)7r°dONLNdÑ-ä9Í(6ätypeShortInteger°dONLNdï-˛9")t'shor'°dONLNdú-69l)816-bit intege$¿°dONLNd©-m9p)7r°dONLNd¨=äIÿ(FätypeMagnitude°dONLNd∫=˛I")t'magn'°dONLNd¡=6Iö)8Unsigned 32-bit intege®†°dONLNd◊=öIù)dr°dONLNd⁄MäYΔ(Vä
  7560. typeAEList°dONLNdÂM˛Y")t'list'°dONLNdÏM6Yá)8List of descriptor r, °dONLNdMàYö)Recor†Ä°dONLNdMöY†)dº@°dONLNdM†Y§)s°dONLNd]äi“(fä typeAERecord°dONLNd]˛i")t'reco'°dONLNd]6iu)8List of keyworF@°dONLNd*]viõ)@d-specifi$°dONLNd3]úi‹)&ed descriptor rˆ°dONLNdB]‹iÓ)@ecor]°dONLNdF]Ôiı)dx¿°dONLNdG]ıi˘)s°dONLNdJmäyfi(vätypeAppleEvent°dONLNdYm˛y")t'aevt'°dONLNd`m6yr)8Apple event r¿°dONLNdmmsyÖ)=ecorÑ °dONLNdqmÖyã)d°dONLNdt}äâfi(ÜätypeEnumerated°dONLNdÉ}˛â")t'enum'°dONLNdä}6â})8Enumerated dat
  7561. `°dONLNdò}~âÉ)Ha°dONLNdõçäô∫(ñätypeType°dONLNd§ç˛ô")t'type'°dONLNd´ç6ôJ)8FourP¿°dONLNdØçKôâ)-character cod…@°dONLNdΩçâôê)>e °dONLNd¡ùä©¥(¶ätypeFSS°dONLNd…ù˛©)t'fss ~ °dONLNdŒù©")'°dONLNd–ù6©Ü)File system specifi¿°dONLNd„ùá©ú)Qcatio@°dONLNdËùú©°)n°dONLNdÎ≠äπÃ(∂ä typeKeyword°dONLNd˜≠˛π")t'keyw'°dONLNd˛≠6πê)8Apple event keyworƒ °dONLNd≠êπñ)Zd°dONLNdΩä…∫(ΔätypeNull°dONLNdΩ˛…")t'null'°dONLNd#Ω6…h)8
  7562. Nonexisten
  7563. ¿°dONLNd-Ωi…t)3t dˇ°dONLNd0Ωt…|) at+@°dONLNd2Ω}…ç)    a (h–Ä°dONLNd6Ωç…•)andleo†°dONLNd;Ω¶…Ï) whose value is ò‡°dONLNdKΩÏ…˛)FNILó¿°dONLNdNΩ˛…))
  7564. Lü4Mü
  7565. Mâü4LàMâò@@˜@˜MâçÄ¡¡?‰ˇfl?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡ò@@Ę@ĘçâÕÄ?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡?‰ˇÄ‡‰ˇÄ‡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  7566. p0‡»    ê I«
  7567. 0Ä     ¿»
  7568. 0‡  »
  7569. IG  »
  7570. âDB@»
  7571. ü‡¯yÄ»¡¡¡¡¡-˙¿ÄIJ@Ç@>Ä˝ÄÄ` Ï,    H    ˛Ä˛@Ç@˝Ä˛Ä Î/+BÙlÅÄ ';ï≈eëíŒuYÉóYltÖóV„ê-Ñw≈z÷≈»·˝≠ºÌ/+c,ëG@
  7572. XT∫äÇ*©j°E*(j¥•B*©(VåöäçSJïB&»Ì/+Ö%ìÄ@ÁÖÇtI$)LüâLHL•+Çs»‚HîÖìâbS:A‚D»Ì/+«"ÑÄ"Åπ•ïE“,*] ~x_ÕnE#P˘á'ë4fl¢¿ti∞Ì/+Ö≈°«g~I    :"64í9Õ‘PïIπƒ<Ò¬ ©•§ïc§IqÌ ˘ ÚÛàÌ ˘ ÚÛàÌ¿˘ ÚÛpÌ¡¡(«`8 $¿˛ @`@@¿ Ê'"X†   ˝ @@ Ê($bT¿ÒYiItMà    ≠≠£/E∞fi»ËüDÿ‰)HÇ:[wÊ($Rï@&¢¢˜©*§¶à‘◊&•RJ–IY*JhJw©Cä≠(Ê($åñ@$«$•2D…$à$îïd»îíêQ&KDíHí    %3Ñ…GÊ($Ö$@I‰G [_ÌIÑi!!…Έ’0$⁄*Œ^‘ò‘JZUaÊ($≈¥‰iC≈1í%Hâë))iD§â"4ík$àêà3±ëœàÚNÊ˝˛Bı¯B·˝˛Bı¯B·
  7573. ˘BÎB·ò@Ä¿˜Ä¿˜ÕâÄ¡¡ˇ @¿@#„0◊R ˝     % @$◊RGıóDÿyƒÅ%*Óu' –HW8r%ÿíÃ"*JhäJ›P*PpíÍ@•^ÄŸ§[¬LíHpúäIé)R‡@ùL9.‰ÄŸ6p‰~‘ò R¬*vÄañ    hâÿ§_DTàêÛŒá1åú4[q±dq∑vÿı˚Äÿı˚Äÿı˚Äÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¡‡˛ćÕ@1˛Ä@Õ 1JD@-e# ¿v0Œ 3ΩJ@VƉïöPŒ I)ú@î§≠9íÄŒ äR–#©    9¢&∞Œ ùåéIF-§DŒ˛ Ã˛ Ã ˛…¡¡ƒ;Ä8‡@÷HHÄ
  7574. @@÷IxàûMùlDÑÍ'Xê
  7575. QeÂn◊Rê±d¶©4§Öe©PrÑäJê◊ц¢e$ %%‰")+†ñxííé◊á∞íôI€MI<":B0&‹’◊≈!…8ânHãÈËw*Q‚4ñÈâ◊¸D˛˛—¸D˛˛P—
  7576. ¸8˙`œ¡¡ ˇ    R       RGıó%Ç  íÃ"*R  §[¬Lí  6p‰~§  §_DTDL ¡¡¡¡¡¡¡ò@¿˜¿˜âMÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜MâçÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘçâÕÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜ÕâÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜â?Ä¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜MâçÄ¡¡„3fl‰fl Âfl„ć‰fl„ć Âfl‰fl Âfl„ć‰fl„ć ˛è¯Ìflÿ0ålÌfl
  7577.  flˇ>˝√œÌfi‡Ôfl
  7578. €˜õ˜„Ão˝∞Óć
  7579. fi˝õ∑loÄÔfl
  7580. ÛˇüΩÊo˘¸Óć ˛∞Ífl ˝0Ífl Âfl„ć
  7581. Áˇ¿flˆÛ@ć ˆÛ@flˆÛ@fl ˆÛ@flˆÛ@ćˆÛ@flˆÛ@ć ¿˚˝Ģ@fl ˝Ģ@fl &;w>«<d7„¢·6˙@fl/d‘ôÉ2î`ìò˙@ć(TôÇ≤Äîó‚îê˙@fl«s◊Å‹t·ù€¸˙@ć ˝ê˛Ę@fl˝˛9¿˜@fl ˆÛ@flˆÛ@ćˆÛ@flˆÛ@ć
  7582.  Áˇ¿flˆÛ@fl ˆÛ@flˆÛ@ćˆÛ@flˆÛ@ć ˆÛ@fl¿˘˘`@fl   ˙鸿 (@fl&|Ä˚ëæÙFˆû#á(@ć/>˙ ïj„Hé$L@fl)2˙"ïk"HR'√@ć «Ä˚<}j˜àûè˘û@flˆ˚˙@fl ˆ˚8˙@flˆÛ@ćˆÛ@flˆÛ@ć ˆÛ@flˆÛ@flò@@Ę@ĘçâÕÄ
  7583.  Áˇ¿fl
  7584. ÙÒć‰fl„ć Âfl‰fl Âfl„ć‰fl„ć Âfl‰fl Âfl ‰Ãć‰Ufl¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  7585. p0‡»    ê I«
  7586. 0Ä     ¿»
  7587. 0‡  »
  7588. IG  »
  7589. âDB@»
  7590. ü‡¯yÄ»¡¡¡¡¡-˙¿ÄIJ@Ç@>Ä˝ÄÄ` Ï,    H    ˛Ä˛@Ç@˝Ä˛Ä Î/+BÙlÅÄ ';ï≈eëíŒuYÉóYltÖóV„ê-Ñw≈z÷≈»·˝≠ºÌ/+c,ëG@
  7591. XT∫äÇ*©j°E*(j¥•B*©(VåöäçSJïB&»Ì/+Ö%ìÄ@ÁÖÇtI$)LüâLHL•+Çs»‚HîÖìâbS:A‚D»Ì/+«"ÑÄ"Åπ•ïE“,*] ~x_ÕnE#P˘á'ë4fl¢¿ti∞Ì/+Ö≈°«g~I    :"64í9Õ‘PïIπƒ<Ò¬ ©•§ïc§IqÌ ˘ ÚÛàÌ ˘ ÚÛàÌ¿˘ ÚÛpÌ¡¡(«`8 $¿˛ @`@@¿ Ê'"X†   ˝ @@ Ê($bT¿ÒYiItMà    ≠≠£/E∞fi»ËüDÿ‰)HÇ:[wÊ($Rï@&¢¢˜©*§¶à‘◊&•RJ–IY*JhJw©Cä≠(Ê($åñ@$«$•2D…$à$îïd»îíêQ&KDíHí    %3Ñ…GÊ($Ö$@I‰G [_ÌIÑi!!…Έ’0$⁄*Œ^‘ò‘JZUaÊ($≈¥‰iC≈1í%Hâë))iD§â"4ík$àêà3±ëœàÚNÊ˝˛Bı¯B·˝˛Bı¯B·
  7592. ˘BÎB·ò@Ä¿˜Ä¿˜ÕâÄ¡¡ˇ @¿@#„0◊R ˝     % @$◊RGıóDÿyƒÅ%*Óu' –HW8r%ÿíÃ"*JhäJ›P*PpíÍ@•^ÄŸ§[¬LíHpúäIé)R‡@ùL9.‰ÄŸ6p‰~‘ò R¬*vÄañ    hâÿ§_DTàêÛŒá1åú4[q±dq∑vÿı˚Äÿı˚Äÿı˚Äÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¡‡˛ćÕ@1˛Ä@Õ 1JD@-e# ¿v0Œ 3ΩJ@VƉïöPŒ I)ú@î§≠9íÄŒ äR–#©    9¢&∞Œ ùåéIF-§DŒ˛ Ã˛ Ã ˛…¡¡ƒ;Ä8‡@÷HHÄ
  7593. @@÷IxàûMùlDÑÍ'Xê
  7594. QeÂn◊Rê±d¶©4§Öe©PrÑäJê◊ц¢e$ %%‰")+†ñxííé◊á∞íôI€MI<":B0&‹’◊≈!…8ânHãÈËw*Q‚4ñÈâ◊¸D˛˛—¸D˛˛P—
  7595. ¸8˙`œ¡¡ ˇ    R       RGıó%Ç  íÃ"*R  §[¬Lí  6p‰~§  §_DTDL ¡¡¡¡¡¡¡ò@¿˜¿˜âMÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜MâçÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘçâÕÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜ÕâÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜â?Ä¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜?âÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘâøÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜øâˇÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜ˇâ?Ä¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜?âÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘâøÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜øâˇÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜ˇâ1Ä¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜?âÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘâøÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜øâˇÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜ˇâ?Ä¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜?âÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘâøÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜øâˇÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜ˇâ1Ä¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ˇ?‚@ˇ ˇˇˇˇ@
  7596. ˇ·ˇ‚7^
  7597. 4*\¯, Palatino&e.3+l"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@lIntroduction to •)8 Apple Events4⁄*˙¯
  7598. (‡*3-14    )BAbout ‡) Apple Events4^*¿¯
  7599. °dONLNd\lhÑ(elFigurR¿°dONLNd\Ñhò)e 3-6@°dONLNd
  7600. \òhz)6 illustrates the logical arrangement of a descriptor r‡@°dONLNd@\zhå)‚ecorT†°dONLNdD\çh„)d with a descriptor °dONLNdXiluç(rltype of ,
  7601. Courierʆ°dONLNd`içuΩ)!typeType„†°dONLNdhiΩu¸)0, which specifi$ °dONLNdwi˝u;)@es that the dat<`°dONLNdÜi;uH)>a hç¿°dONLNdâiHug)andle rq‡°dONLNdêiguw)eferK†°dONLNdîixué)s to a@Ä°dONLNdöièu§) fourV°dONLNdüi§u‚)-character codŒÄ°dONLNd≠i‚uÈ)>e °dONLNdØvlÇr(l(iº@°dONLNd±vrÇö)
  7602. n this cast°dONLNdªvõÇ•))e t°dONLNdæv¶Ç⁄) he constant Â@°dONLNd v⁄Ç4)4kCoreEventClassfl†°dONLNdŸv4Ç|)Z, whose value is à‡°dONLNdÍv}Ç°)I'aevt'܆°dONLNdv°Çµ)$). ThÆ°dONLNdıvµÇÓ)is descriptor °dONLNdÉlèo(ålrE°dONLNdÉpèÇ)ecorπ`°dONLNdÉÇèŸ)d can be used in an æ@°dONLNdÉŸèm)W"Apple event attribute that identifi∞@°dONLNd?Énèµ)ïes the event clas˜ °dONLNdPɵèø)Gs f°dONLNdSÉ¿èfi) or any °dONLNdZêlúü(ôl
  7603. Apple evenà`°dONLNddêüú–)3 t in the Cor3`°dONLNdpê—úÚ)2    e suite. 
  7604. æ*œ¯4ø*œ¯"ø*]
  7605. ˇ·ˇ‚7^    °dONLNdz¥løñ(ºl
  7606. Figure 3-6°dONLNdÖ¥Æø¥)BA0°dONLNdÜ¥¥øÙ) descriptor recorÄ°dONLNdó¥ıøs)Ad whose data handle refers to e †°dONLNd∂¥søØ)~vent class data
  7607. °dONLNd«=lIà(FlEvery Ø°dONLNdÕ=àI) Apple event includes an attribut∑‡°dONLNdÌ=IQ)èe specifying tQ °dONLNd˚=RIt);he addrh†°dONLNd=tI´)"ess of the tar⁄`°dONLNd=´IÒ)7get application. °dONLNd!JlVs(SlA∫†°dONLNd"JsV©) descriptor rô‡°dONLNd/J©Vª)6ecor@°dONLNd3JºV])%d that contains an application’s addry`°dONLNdXJ]V†)°ess is called an ⁄ °dONLNdiJ†V¬)Caddress’¿°dONLNdpJ√V≈)# U¿°dONLNdqJΔVÙ)
  7608. descriptork‡°dONLNd{JÙVˆ). °dONLNd|Wlcã(`lrecord.°dONLNdÑnlzÑ*TYPE°dONLNdänêz)$AEAddressDesc = AEDesc;°dONLNd´nDzÊ)¥{address descriptor record}°dONLNd«Ülíî(èlThe addr∏@°dONLNdœÜîí—)(ess in an addrÄ°dONLNd›Ü“í)>ess descriptor r&`°dONLNdÌÜí')Cecorö¿°dONLNdÒÜ'íj)d can be specifi7Ä°dONLNdÜkí})Ded aú‡°dONLNdÜ}íË)s one of these four basic °dONLNdìlü8(úl.types (or as any other descriptor type you defiƆ°dONLNdNì8üä)Ãne that can be coerß°dONLNdaìäüƒ)Rced to one of °dONLNdo†l¨Ç(©lthesed°dONLNdt†É¨Ö) ‰°dONLNdu†Ö¨¢)types):°dONLNd\l˙(l"Like several of the other data str÷¿°dONLNd~˙)éuctur\†°dONLNdÉ.)es defi’`°dONLNdä._) ned by the °‡°dONLNdï_Ô)1Apple Event Manager for use in °dONLNd¥l(‰(%lApple event attributes and °dONLNdœÂ(w)yApple event parameters, an addr˜†°dONLNdÓv(π)ëess descriptor rÄ°dONLNd˛∫(Ã)Decor釰dONLNdÃ(fi)d is °dONLNd)l5⁄(2lidentical to a descriptor r9†°dONLNd")€5Ì)oecorÆ°dONLNd&)Ì5,)d of data type éÄ°dONLNd5)-5Q)@AEDescå@°dONLNd;)Q5à)$; the only difR`°dONLNdI)â5ï)8fer4‡°dONLNdL)ï5Ô) ence is that the data °dONLNdb6lBù(?l for an addr    ‡°dONLNdm6ûB·)2ess descriptor r,¿°dONLNd}6·BÛ)Cecor° °dONLNdÅ6ÛBø).d must always consist of an application’s addrQ °dONLNdØ6¿B“)Õess. î¿°dONLNd¥6“B‘) ¿°dONLNdµ6’B◊)     °dONLNd}πlƒ≠(¡lDescriptor type°dONLNdçπ
  7609. ƒ)ûV¸/°dONLNdéπƒ!)alue°dONLNdìπBƒs)3 Description
  7610. °dONLNd†«l”“(–ltypeApplSignature°dONLNd≤«
  7611. ”.)û'sign'°dONLNdπ«B”ù)8Application signaturÄ°dONLNdÕ«û”¢)\e°dONLNd–◊l„∫(‡ltypeSessionID°dONLNdfi◊
  7612. „.)û'ssid'°dONLNdÂ◊B„i)8    Session rw†°dONLNdÓ◊i„y)'efer#¿°dONLNdÚ◊z„≥) ence number°dONLNdˇÁlÛ¥(l typeTargetID°dONLNd Á
  7613. Û.)û'targ'°dONLNdÁBÛH)8Tµ¿°dONLNdÁGÛO)arz¿°dONLNdÁPÛq)    get ID rˆ†°dONLNdÁqÛÉ)!ecork°dONLNd"ÁÑÛä)d°dONLNd%˜lˆ(ltypeProcessSerialNumber°dONLNd=˜
  7614. .)û'psn '°dONLNdD˜BK)8PrN†°dONLNdF˜L¢)
  7615. ocess serial number
  7616. Œl&¯4œl%¯4ÕkŒlò@@˜@˜Œlc¡¡?Êˇ˛fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fiò@@Ę@ĘlNc?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi?¡fi¡fi¡¡¡¡¡¡¡¡¡¡
  7617. G¡¿cÄ»    B@Äî«    ¬Å«
  7618. √ÄÅÄ»
  7619. $9Ä»    $A)«    É‡Δ«¡¡¡¡¡) Ë ˝¯˛@8ÇË)  $˝P˛@ÇË+' —≤0úÓWñFK9’dr\Qe±“][é@∫[‡—{Éó(È+'å≤E0)aRÍ*™§PU™Ö®°™“°J≠ARƒ*PÈ+'ñN›HKûLJ    —$ê•2~%1!2îÆ    œ#â#ì…Ç$ªâLêÈ+'à"àZÊñTH∞©t-˘·5∏@çB¬˜àã~È+'áúm˘$d$Ëàÿ“HÁ7QBU&ÁÛ«Å»ÚÅ%w‘†ÈĢÄÚfiĢÄÚPfi¯ÄÚ fi¡¡'¡Ä‡Ätê˝Ä    p Ä    pÄÊ'âbÄ@Ä ÄÄ˝  Ä     ÄÊ($âSw≈e•$e—6 &∂¥våΩ¿;{#¢}cê•"Èm‹Ê($JUöäãfi§™íö SS\öïI+@M$Ud©)°(fi•*¥†Ê($2Yìíî…$í íRUì"RJ@IDô-I"H$îŒO%Ê($ë'ë)mµ&§Ñá'Ø€T¿ìh´9{RcPE)hTMÑÊ($”ë•ΔHï"$D§••í$à“HM¨í"B ŒΔG>#…8Ê˝ ı˘·˝ ı˘·ò@Ä¿˜Ä¿˜Nléc ˙Ï·¡¡¸Ä     cå0¿◊HÄ˝ $îÅ»@◊I÷]aÁî´π‘úÉDâ\·»îÿK0à©)¢)(wu@T©A«©ïzÿëo    2I!¬p)&8•KÅ    !0‰ªíÿŸ√ë˚R`d@#)K©⁄âBX%¢$ÿë}R"Cœ:Δ2p—mΔΔyëΔ›ÿÿı@¸˛ ÿı@¸˛ ÿı@¸˛ ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¡ @Ä8ÄÕ
  7620. @ƒÃ ≈)µîè+ÿ¿Œ Œı)ZªíTi@Œ $¶qRí¥‰JÕ )K@é§$Êàö¿Œ v28q%¥xFëŒ@˛ ÄÃ@˛ Äà @˛ …¡¡¿C¿4ӇĒ A 
  7621. D@)’%‚"y6u±®Dùb@)E˝óï∏◊JB≈íö§“íPyñ•@I )*@◊Çâîì(îî#êà§ÆÄRY‚JJ8◊¬Je'm5$pàÈ¿õpt{T◊á$‚%π"/ß°‹©Gà“[§R$p◊˝˛@˛ —˝˛@@— ¸‡˚Äœ¡¡ ¸Ä0  HÄH$  I÷\ñD  K0à©H8D  ëo    2HD  Ÿ√ë˙êDH  ë}Q90 ¡¡¡¡¡¡ò@¿˜¿˜élŒc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜Œlc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘlNc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜Nléc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜él¿c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜Œlc¡¡Â32fiÂfi Êfi¡Âfi¡ ÊfiÂfi Êfi¡Âfi¡ ˛è¯Ófiÿ0ålÓfi
  7622.  flˇ>˝√œÌfi‡fi
  7623. €˜õ˜„Ão˝∞Ã
  7624. fi˝õ∑loÄfi
  7625. ÛˇüΩÊo˘¸à˛∞Îfi ˝0Îfi Êfi¡
  7626. ˡ¿fiˆÙ@› ˆÙ@fiˆÙ@fi ˆÙ@fiˆÙ@›ˆÙ@fiˆÙ@› ¿˚Ù@fi ˝˘@fi &;w>«<d€Ò’oŒ˚@fi/d‘ôÉ2
  7627. J$)1˚@›(TôÇ≤Ä*K‰)?˚@fi«s◊Å‹tƒpŒΔ˚@› ˝ê˛@˙@fi˝˛‡sÄ˚@fi ˆÙ@fiˆÙ@›ˆÙ@fiˆÙ@›
  7628.  ˡ¿fiˆÙ@fi ˆÙ@fiˆÙ@›ˆÙ@fi¿˘ ˙@›   ˙Ä  ˙@fi&|Ä˚Ñ∑q¶w˚@fi />˙Ú¸¢oÃ˚@fi)2˙ÉD¢)3˚@›«Ä˚Ú<ëÁÓ˚@fiˆÙ@› ˆÙ@fiˆ@¯@fi ˆp˚Ä@fiˆêx¿xÄ@›ˆñã∂r[wûàÑ8Ë@fiˆòÑXã
  7629. äHÄéaà@› ˆîåP˙J˙Iàíh@fiˆ∂sº7ƒ7fsÔÛ»@fiò@@Ę@ĘlNc ˆ@¯@fiˆ@¯@›ˆÙ@fiˆÙ@› ˆÙ@fiˆÙ@fi
  7630.  ˡ¿fiÙœÂfi¡ ÊfiÂfi Êfi¡Âfi¡ ÊfiÂfi Êfi ÂÃfiÂUfi¡¡¡¡¡¡¡¡¡¡
  7631. G¡¿cÄ»    B@Äî«    ¬Å«
  7632. √ÄÅÄ»
  7633. $9Ä»    $A)«    É‡Δ«¡¡¡¡¡) Ë ˝¯˛@8ÇË)  $˝P˛@ÇË+' —≤0úÓWñFK9’dr\Qe±“][é@∫[‡—{Éó(È+'å≤E0)aRÍ*™§PU™Ö®°™“°J≠ARƒ*PÈ+'ñN›HKûLJ    —$ê•2~%1!2îÆ    œ#â#ì…Ç$ªâLêÈ+'à"àZÊñTH∞©t-˘·5∏@çB¬˜àã~È+'áúm˘$d$Ëàÿ“HÁ7QBU&ÁÛ«Å»ÚÅ%w‘†ÈĢÄÚfiĢÄÚPfi¯ÄÚ fi¡¡'¡Ä‡Ätê˝Ä    p Ä    pÄÊ'âbÄ@Ä ÄÄ˝  Ä     ÄÊ($âSw≈e•$e—6 &∂¥våΩ¿;{#¢}cê•"Èm‹Ê($JUöäãfi§™íö SS\öïI+@M$Ud©)°(fi•*¥†Ê($2Yìíî…$í íRUì"RJ@IDô-I"H$îŒO%Ê($ë'ë)mµ&§Ñá'Ø€T¿ìh´9{RcPE)hTMÑÊ($”ë•ΔHï"$D§••í$à“HM¨í"B ŒΔG>#…8Ê˝ ı˘·˝ ı˘·ò@Ä¿˜Ä¿˜Nléc ˙Ï·¡¡¸Ä     cå0¿◊HÄ˝ $îÅ»@◊I÷]aÁî´π‘úÉDâ\·»îÿK0à©)¢)(wu@T©A«©ïzÿëo    2I!¬p)&8•KÅ    !0‰ªíÿŸ√ë˚R`d@#)K©⁄âBX%¢$ÿë}R"Cœ:Δ2p—mΔΔyëΔ›ÿÿı@¸˛ ÿı@¸˛ ÿı@¸˛ ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¡ @Ä8ÄÕ
  7634. @ƒÃ ≈)µîè+ÿ¿Œ Œı)ZªíTi@Œ $¶qRí¥‰JÕ )K@é§$Êàö¿Œ v28q%¥xFëŒ@˛ ÄÃ@˛ Äà @˛ …¡¡¿C¿4ӇĒ A 
  7635. D@)’%‚"y6u±®Dùb@)E˝óï∏◊JB≈íö§“íPyñ•@I )*@◊Çâîì(îî#êà§ÆÄRY‚JJ8◊¬Je'm5$pàÈ¿õpt{T◊á$‚%π"/ß°‹©Gà“[§R$p◊˝˛@˛ —˝˛@@— ¸‡˚Äœ¡¡ ¸Ä0  HÄH$  I÷\ñD  K0à©H8D  ëo    2HD  Ÿ√ë˙êDH  ë}Q90 ¡¡¡¡¡¡ò@¿˜¿˜élŒc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜Œlc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘlNc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜Nléc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜él¿c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜¿lc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ęl@c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜@lÄc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜Äl¿c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜¿lc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ęl@c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜@lÄc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜Äl≤c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜¿lc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ęl@c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜@lÄc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜Äl¿c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜¿lc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ęl@c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜@lÄc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜Äl≤c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ˇ<J@ˇ ˇˇˇˇ@
  7636. ˇ·ˇ‚7^
  7637. 4H\, Palatino&e.3+ä"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@äIntroduction to •)8 Apple Events4⁄ä˙(‡äAbout ‡) Apple Events
  7638. , (‡3-15
  7639. ˇˇˇˇˇˇˇˇ440lòÄ.B0oMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""B0oB0o$””””””””””””””””””””””””””””””òÄ
  7640. 60@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""60@60@˜˜˜˜˜˜˜˜˜˜˜˜˜
  7641. ˛ˇ˛ˇˇ ˇˇ˛ˇˇ     ˇˇˇ˙ˇ
  7642. ˛ˇˇˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜
  7643. 454+?òÄ
  7644. 56+@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""56+@56+@$˜˛˙ˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  7645. ˛ˇ˛ˇˇ˛¸ˇˇ˚ˇ˛˙ˇˇ˝˛ˇ˛
  7646. ˛ˇ˛ˇˇ
  7647. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  7648. ˛ˇ˛ˇˇ
  7649. ˛ˇ˛ˇˇ˛˙ˇ˜˝˝ˇˇ˛ˇ˚˝ˇ¸˛¸ˇˇ˜˝˛ˇ˛
  7650. ˛ˇ˛ˇˇ
  7651. ˛ˇ˛ˇˇ˝ˇˇ˛˜˝¸ˇ
  7652. ˛ˇ˛ˇˇ˛¸ˇˇ˜˝˛ˇ˛
  7653. ˛ˇ˛ˇˇ
  7654. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˜˝¸ˇ
  7655. ˛ˇ˛ˇˇ˝˛ˇ˛
  7656. ˛ˇ˛ˇˇ
  7657. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  7658. ˛ˇ˛ˇˇ
  7659. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  7660. ˛ˇ˛ˇˇ
  7661. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  7662. ˛ˇˇˇˇ
  7663. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  7664. ˛ˇˇˇ
  7665. ˛ˇˇˇ
  7666. ˛ˇˇˇ
  7667. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  7668. ˛ˇˇˇˇ
  7669. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  7670. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  7671. ˛ˇˇˇˇ
  7672. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  7673. jHp4jHp käk
  7674. ˇ·ˇ‚7^ °dONLNd\äj‡(fäKeyword-Specifi,¿°dONLNd\·jX)Wed Descriptor Recordsˇˇˇˇˇˇ‘@(f3
  7675. °dONLNd&pä|≥(yä
  7676. After the ¿°dONLNd0p¥|À)*<Apple Event Manager has assembled the necessary descriptor r–@°dONLNdlpÀ|›(yÀecorD†°dONLNdppfi|)
  7677. ds as the °dONLNdz}äâ(Üä attributes and parameters of an /°dONLNdö}âˆ)ç1Apple event, your application cannot examine the °dONLNdÀääñÕ(ìäcontents of the \@°dONLNd€äÕñ)CApple event dir °dONLNdÍäñ&)Eectly» °dONLNdÔä&ñø)#. Instead, your application must us0†°dONLNdä¿ñ«)öe ‡°dONLNdä«ñŒ)A„ °dONLNdäŒñ) pple Event °dONLNd óä£∏(†ä    Manager rW°dONLNd)ó∏£Í). outines to rS@°dONLNd5óÍ£∫)2-equest each attribute and parameter by keywor °dONLNdbóª£Δ)—d. 5‡°dONLNdeóΔ£Ù) Keywordsfi‡°dONLNdmóÙ£ˇ). ar#‡°dONLNdpó£) e °dONLNdr§ä∞(≠äarbitrary names used by the ц°dONLNdé§∞)~8Apple Event Manager to keep track of various descriptor °dONLNdΔ±äΩç(∫ärE°dONLNd«±éΩ†)ecorπ`°dONLNdÀ±†Ω¬)ds. The ,
  7678. CourierM‡°dONLNd”±√Ω˘)#    AEKeywordJÄ°dONLNd‹±˘ΩB)6 data type is defi]`°dONLNdÓ±BΩ{)Ined as a fourf†°dONLNd˚±{Ω¿)9-character code.°dONLNd »ä‘¢(—äTYPE°dONLNd»Æ‘í)$&AEKeyword = PACKED ARRAY[1..4] OF Charq¿°dONLNd8»í‘û)‰; q°dONLNdG»û‘˛) {keyword for a }°dONLNdg÷ò‚∞(flò { d~Ä°dONLNdk÷∞‚Ï)
  7679. escriptor z¿°dONLNdu÷Ï‚)<record}°dONLNd}Óä˙¡(˜ä Constants arÛ°dONLNdâÓ¡˙9)7e typically used for keywor߆°dONLNd§Ó:˙Z)yds. Her‡`°dONLNd´ÓZ˙ø) e is a list of the keywor?†°dONLNdƒÓ¿˙)fd constants for °dONLNd‘˚äÔ(äApple event attributes:@°dONLNdˇˇ)f °dONLNdD^äjõ(gäHer`°dONLNdG^õj)e is a list of the keyworø@°dONLNd`^jç)ed constants for commonly used µÄ°dONLNd~^çj˙)çApple event parameters:    °dONLNdÏä÷(äAttribute keywordw¿°dONLNd˛"()òVÛÔ°dONLNdˇ'9)alueuÄ°dONLNdZã)3 Description
  7680. °dONLNd"ä.‰(+äkeyAddressAttr w¿°dONLNd!"".F)ò'addr'uÄ°dONLNd("Z.q)8Addr9@°dONLNd,"r.ô)
  7681. ess of tarM†°dONLNd6"ô.£)'ge¶`°dONLNd8"£.)
  7682. t or client application¶ °dONLNdO".)^ & °dONLNdP".) °dONLNdS2ä>ˆ(;äkeyEventClassAttr w¿°dONLNdf2">F)ò'evcl'uÄ°dONLNdm2Z>ò)8Event class of “Ä°dONLNd|2ò>Œ)> Apple event@°dONLNdá2œ>—)7 °dONLNdäBäNfi(KäkeyEventIDAttrw¿°dONLNdôB"NF)ò'evid'uÄ°dONLNd†BZNè)8 Event ID of †°dONLNd¨BèN≈)5 Apple eventf`°dONLNd∑B≈N«)6 °dONLNd∫Rä^ˆ([äkeyEventSourceAttrw¿°dONLNdÕR"^F)ò'esrc'uÄ°dONLNd‘RZ^t)8Natur“‡°dONLNdŸRt^™)e of the sourA‡°dONLNdÊR´^Ë)7ce application°dONLNdˆbän(käkeyInteractLevelAttrw¿°dONLNd b"nF)ò'inte'uÄ°dONLNdbZn»)8Settings for allowing the ™†°dONLNd,b»n)n Apple Event uÄ°dONLNd8mZy(vZ)Manager to bring a server application to uÄ°dONLNdaxZÑw* the fora@°dONLNdhxwÑÖ)egr°dONLNdkxÖÑñ)ounÕ°dONLNdnxñÑ‘)d, if necessaryY‡°dONLNd}x‘Ñ)>, to interact uÄ°dONLNdãÉZèî(åZwith the user¶`°dONLNdòÉîèñ): °dONLNdõìäü(úäkeyMissedKeywordAttrw¿°dONLNd∞ì"üF)ò'miss'uÄ°dONLNd∑ìZü})8Keywor°‡°dONLNdΩì}üö)#d for fiÜ`°dONLNd≈ìõü¨)rst r=`°dONLNd ì≠üƒ)equirT†°dONLNdœìƒü)ed parameter uÄ°dONLNd‹ûZ™](ßZr:Ä°dONLNd›û^™¢)emaining in an áÄ°dONLNdÏû¢™ÿ)D Apple event“@°dONLNd˜ûÿ™⁄)6 °dONLNd˙Æä∫(∑äkeyOptionalKeywordAttrw¿°dONLNdÆ"∫F)ò'optk'uÄ°dONLNdÆZ∫ô)8List of keywor;¿°dONLNd&Æö∫)@ds for parameters of the uÄ°dONLNd?πZ≈€(¬ZApple event that should be tr˛ °dONLNd\π€≈)Å    eated as uÄ°dONLNdeƒZ–´(ÕZoptional by the tar¬†°dONLNdxƒ´–Ï)Qget application°dONLNdâ‘ä‡(›äkeyOriginalAddressAttrw¿°dONLNd†‘"‡F)ò'from'uÄ°dONLNdß‘Z‡q)8Addr9@°dONLNd´‘r‡≈)ess of original sourΔ†°dONLNdø‘≈‡‹)Sce of kÄ°dONLNd≈‘‹‡)
  7683. Apple evens‡°dONLNdœ‘‡)3t uÄ°dONLNd—flZΑ(ËZif the event has been forwar/°dONLNdÌfl’Î){ded (available uÄ°dONLNd¸ÍZˆı(ÛZ%only in version 1.01 or later versionZ@°dONLNd!͈ˆ)ús of‡†°dONLNd%͈) uÄ°dONLNd&ıZj(˛Zthe tÄ°dONLNd*ıj—)Apple Event Manager) ˜@°dONLNd?ı—”)g °dONLNdBäÍ(äkeyReturnIDAttr w¿°dONLNdS"F)ò'rtid'uÄ°dONLNdZZõ)8Return ID for r`°dONLNdiú±)Beply |@°dONLNdn±È) Apple event °dONLNd|ä!fi(äkeyTimeoutAttrw¿°dONLNdã"!F)ò'timo'uÄ°dONLNdíZ!ö)8Length of time`‡°dONLNd†õ!ù)A,‡‡°dONLNd°ù!µ) in tic5†°dONLNd®∂!»)ks, tD °dONLNd≠»!)hat the client uÄ°dONLNdº Z,û()Zwill wait for a rà`°dONLNdÕ û,À)D eply or a rx¿°dONLNdÿ À,È)-esult frJ °dONLNd‡ Í, )om the uÄ°dONLNdÁ+Z7u(4Zserver—@°dONLNdÌ+u7w) °dONLNd;äG(DäkeyTransactionIDAttrw¿°dONLNd;"GF)ò'tran'uÄ°dONLNd ;ZG`)8T∞@°dONLNd;_G˛)&ransaction ID identifying a series of uÄ°dONLNd3FZRî(OZ Apple events˝@°dONLNd?FîRñ):     °dONLNdñwäÇ›(äParameter keywordz`°dONLNd®w¯Dz)nVˆè°dONLNd©w˝Ç)aluex °dONLNdÆw0Ça)3 Description
  7684. °dONLNdªÖäë‰(éäkeyDirectObjectz`°dONLNdÀÖ¯ë)n'----'x °dONLNd“Ö0ë>)8Dir‚¿°dONLNd’Ö>ëz)ect parameterp°dONLNd‚Ö{ë})= °dONLNdÂïä°fi(ûäkeyErrorNumberz`°dONLNdÙﯰ)n'errn'x °dONLNd˚ï0°>)8ErrKÄ°dONLNd˛ï>°ú)or number parameter°dONLNd•ä±fi(ÆäkeyErrorStringz`°dONLNd"•¯±)n'errs'x °dONLNd)•0±>)8ErrKÄ°dONLNd,•>±ì)or string parameterˇF§@ˇ ˇˇˇˇ@
  7685. ˇ·ˇ‚7^
  7686. 4*\¯, Palatino&e.3+l"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@lIntroduction to •)8 Apple Events4⁄*˙¯
  7687. (‡*3-16    )BAbout ‡) Apple Events4^*¿¯
  7688. °dONLNd\lh(elThe ª¿°dONLNd\h)%Apple Event Registry: Standard Suites©Ä°dONLNd)\h/)ù defi†°dONLNd.\0hí)nes additional keyworʇ°dONLNdC\íh’)bd constants for °dONLNdSiluá(rlApple˝Ä°dONLNdXiáuâ) }Ä°dONLNdYiäuV)-event parameters that can be used with specifiÏÄ°dONLNdáiVu\)Ãc ~`°dONLNdâi]uú)Apple events. °dONLNdò{lá(ÑlThe ]`°dONLNdú{á2)%Apple Event Manager associates keywor¿°dONLNd¡{3ás)¥ds with specifi0¿°dONLNd–{sá≠)@c descriptor rÄ@°dONLNdfi{≠áø):ecorÙ†°dONLNd‚{øáŸ)ds by °dONLNdËàlîù(ël means of a u`°dONLNdÛàûîÁ)2keyword-specifi¬`°dONLNdàÁîB)Ied descriptor record÷†°dONLNdàBîD)[,V†°dONLNdàEîL) a÷†°dONLNdàLîo)     data strí¿°dONLNd"àpîá)$uctur†°dONLNd'ààî∞)
  7689. e of type ,
  7690. Courier»‡°dONLNd1à∞îÊ)(    AEKeyDesc≈Ä°dONLNd:àÊîË)6 °dONLNd;ïl°Ÿ(ûlthat consists of a keywor±¿°dONLNdT0)md and a descriptor rô‡°dONLNdhï0°B)Wecor@°dONLNdlïC°N)d. °dONLNdp¨l∏Ñ(µlTYPE°dONLNdv¨ê∏ÿ)$ AEKeyDesc = {Ä°dONLNdɨÿ∏∞)H${keyword-specified descriptor recordn°dONLNdߨ∞∏∂)ÿ}°dONLNd©∫lΔê(√lRECORD°dONLNd±»~‘Æ+descKey:°dONLNdæ»ÿ‘)Z
  7691. AEKeyword;°dONLNdÕ»2‘h)Z    {keyword}°dONLNdÿ÷~‚Δ(fl~ descContent:°dONLNdÈ÷ÿ‚)ZAEDesc;°dONLNdı÷2‚§)Z{descriptor record}°dONLNd    ‰lÑ(ÌlEND;°dONLNd¸lÑ*FigurR¿°dONLNd¸Ñò)e 3-7@°dONLNd¸òÒ) illustrates a keyword‡°dONLNd-¸Ú)Zd-specifiB†°dONLNd6¸X)&ed descriptor r@°dONLNdE¸Yk)Aecor{†°dONLNdI¸kº)d with the keywor¡@°dONLNdZ¸ºƒ)Qd °dONLNd\    l“(lkeyEventClassAttry†°dONLNdm    “)f —the keyworP`°dONLNdx    G)<d that identif∞Ä°dONLNdÜ    G÷)9#ies an event class attribute. The fÎ`°dONLNd©    ÷Ë)èigur/°dONLNd≠    È)e °dONLNdØl"€(lRshows the logical arrangement of the event class attribute for the Open Documents °dONLNd#l/Ü*event M@°dONLNd#á/≤)    shown in ≥@°dONLNd#≤/ )+FigurÜ°dONLNd# /)e 3-3 on page E@°dONLNd##/)=3-ô °dONLNd%#/)10ô °dONLNd'#/d)
  7692. . The descriptor r4 °dONLNd9#e/w)Lecor®Ä°dONLNd=#w/ä)d in ~°dONLNdB#ã/£)FigurP¿°dONLNdG#£/∑)e 3-7Ó@°dONLNdL#∑/ˆ) is identical to °dONLNd]0l<u(9lthì¿°dONLNd_0u<á)    e on$@°dONLNdc0à<í)e iV@°dONLNdf0í<ö)
  7693. n ߆°dONLNdh0ö<≤)Figurz`°dONLNdm0≤<Δ)e 3-6‡°dONLNdr0«<(); its descriptor type is \Ä°dONLNdã0(<X)atypeTypeYÄ°dONLNdì0X<Ì)0#, and the data to which its handle °dONLNd∂=lIo(FlrE°dONLNd∑=pIä)efers iƒ °dONLNdæ=äI¶)dentifi≤`°dONLNd≈=ßI)es the event class as s@°dONLNd€=I[)ZkCoreEventClassm†°dONLNdÍ=[I`)Z.     °dONLNdÌallñ(il
  7694. Figure 3-7°dONLNd¯aÆl¥)BA0°dONLNd˘a¥lÙ) keyword-specifiÇ`°dONLNd    aÙlÀ)@9ed descriptor record for the event class attribute of an 
  7695. u*ܯ4v*ܯ
  7696. ˇ·ˇ‚7^°dONLNdBkÆvƒ(sÆOpenÇê°dONLNdFkƒvΔ) ∞°dONLNdGk«v)Documents eveÖ–°dONLNdTkv )>nt
  7697. ,*3¯4,*2¯ -l-¯
  7698. ˇ·ˇ‚7^ °dONLNdXl,æ((lDescriptor Listsˇˇˇˇˇˇ‘@((Ò3
  7699. °dONLNdj2l>‘(;lWhen extracting data fr °dONLNdÅ2’>Û)iom an ¬†°dONLNdá2Ú>R)Apple event, you use »Ä°dONLNdú2R>Â)`Apple Event Manager functions t°dONLNdª2Ê>Ì)îo °dONLNdΩ?lKä(Hlcopy dí¿°dONLNd√?äKí)at’ °dONLNd≈?íK©)a to aç°dONLNdÀ?™Kª) buf¬°dONLNdœ?ªKÂ)
  7700. fer specifi¿@°dONLNd⁄?ÊK()+ed by a pointerØ°dONLNdÈ?(KH)B    , or to rî°dONLNdÚ?HKZ) eturô¿°dONLNdˆ?ZKo)n a d܇°dONLNd˚?pKù) escriptor r `°dONLNd?ùKØ)-ecor>¿°dONLNd
  7701. ?∞KÌ)d whose data °dONLNdLlXê(Ulhandle r5Ä°dONLNdLëX)%efers to a copy of the data,°dONLNd;LX")t or to re°dONLNdCL"Xè)eturn lists of descriptor rq‡°dONLNd^LèX°)mecorÊ@°dONLNdbL°XÕ) ds (called °dONLNdmYle≠(bldescriptor listsß`°dONLNd}Y≠e≤)A).{@°dONLNdY≥eµ) 
  7702. k*rß4l*rß"m*]
  7703. Öl¯4Ül¯
  7704. ál¯4Ükálò@@˜@˜ál«c¡¡?ŸˇÄÎ?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Îò@@Ę@Ę«lc?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿Î?Ÿˇ¿ÎŸˇ¿Î¡¡¡ò@Ä¿˜Ä¿˜lGc¡¡¡¡¡¡¡¡¡¡¡¡¡
  7705. >»
  7706.      »
  7707. @»
  7708. ê»
  7709.     !–ÒË»
  7710. "à»
  7711. 3¸> p»¡¡¡¡¡    Ä¿˛    GÅÄ@@ÿ         ˛    ÄÄ@ÿûã˛ 
  7712. IÍK8Í#]#Éìµ ‚∞Ÿ •îP‡@ π*§QUIU,R]E@Ÿ$¥‡@ S$êÈËäÈ    sÇââ@Ÿ!òËÅÄ"UH∞2ã”ã @¥“ ÄŸ18∏p‡ÄgÍhàŸÃtí}çøDåÑÄŸ˛D˚˛˝◊˛D˚˛P˝◊˛8˚˛ ˝◊¡¡#¸aÄ    ˛ÄÅ@Ä¿˛˛Ä‰#¸"    ˛Ä@  @ ˛˛Ä‰&"-,Á+dKn∏_ÌQAp[*-Ç"4uñ›¡tÌ¿‰&"™ëBT    ™)U§,@§ëk(¢†≠=VÑ%\ö´Jïtĉ%!DíBî<ry("Kπ)Iqƒ°))‰Ñ)ÖíÚQ«'•„&"$]"ƒ®pB¢l/xâÌ£QŸAÛ“âÑJ∑$DÿD*Mĉ%!#¢#dHN9HWqI"ap‚AR yÑE•<ìÉë…„¸Û@Ÿ¸Ù@Ÿ¸ÛÄŸ¡¡(˙ @Äp˛à àÄįÊ&Sà¸ÄÄÄHÊ)% RònVZRF^ãbkk#de…6flZ»∂9Ö) GK|‡Á($
  7713. b®    §®ΩÍJ§ï¢µ5e§™äöj%+*âZÅéıPqU©Ê)%¢»    )…)Lë)%"•%-)íL)IqR$ÇD¶‡Çy0‡Á)%ƒàmÚñ◊Ì™aHH:mù&ûJY◊ö¶5IKÄä¢x Á)%8ÊùHÒLdâI@‚JJ.Hï$åîDmi$" Ê2qÒQ¿Á˝˛Ĉ¯@‚˝˛Ĉ¯@‚ ˘ÄÏ@‚¡¡‡àÜ0`    å`ÿ
  7714. @IJ IH :R ÿ
  7715. Qe»∂9 IJªé®‰4BWp‰JŸò@¿˜¿˜GlácrÑäâZ!JÅ«wT©JÑÍÅJΩŸñxìR"ícÖ2\Lr]…Ÿ&‹ö¶$2î∞ÖZ–ñ—Ÿ4ñÈ$:{°Ãc'ìnl;fid„nÏŸı˙ÄŸı˙ÄŸı˙ÄŸ¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ¿ 8Õ   Õ )I¨§qXÃŒ w™à
  7716. ’‹¢†#TŒ     %7îï« "`Œ J\u!'d@DÏŒ 3±ìÉâ(≈√ƒdëŒ˛B˛Ã˛B˛Ã
  7717. ˛B˛…¡¡†yp¯÷        ˛ ÄP ê÷    .Àc≠êë9B$Î$í/¨π-¿ÿ
  7718. T,ï•&®ëBÉõTñQRí◊òL•)D»¢<ÑE%Ë"Œdë¿ÿ¸S*ki—#ÑGHå    ≥É#ı @ÿ8®9'M…!~uÂJxç"fi"¢#Äÿ¸Ä˛—¸Ä˛
  7719. —
  7720. ¸˙ œ¡¡    ‡ÄÅÄÀ    
  7721. @ÄB@À    
  7722. Qe≈`D@À    rÑääŃ@À    ñxìÄ$@À    &‹ï$ÄÀ 4ñÈ    À ¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜ál«c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę«lc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜lGc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜Glyc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜ál«c¡¡ÿ3Íÿ@Π¬ÿ¿Îÿ@Îÿ¿Î ¬ÿ@Π¬ÿ¿Îÿ@Îÿ¿Î ¬˛èÓ„@Î
  7723.  ÿ0 åxÿà flˇfi„œÒ€€Ω¿Â¿Î €˜è€ÛÃ{Ôfl˚`Â@Î fi˝èõÜlofi‰¿Î  ÛˇèûˆoÔÓÛ˘‡Œ˝ò˛‚@Π˛˛ Àÿ¿Îÿ@Îÿ¿Î     ‹ˇ‡È˜Á @Π˜"*Á" È˜Á ¿Î˜Á @Î ‹à†¿Î ˜Á ÈÄ0˝8¸Ó @Π">˛"2˝" *:"?¢"cÊ""sÆÚ" È!}Ô˜ˆ˝ Ïˇfl˛f˜˚ˇ~Û ¿Î!ˇˇü∞˝ ˇœÌÊyˇ˘å0Û @Πàõœøü∏¸à ûÀÃæçÓÓÿ΢Ω∏Ûà†¿Î ˇ6ˆˆ˝ ?}ü≥ˇ˚œ}Ô¸Á|Û È˙ÄÍ @Π""&˙"*"'¢Í" È˜Á ¿Î˜Á @Î ‹à†¿Î ˜Á È˜Á @Π    ‹ˇ‡È˜Á ¿Î˜Á @ΘÁ ¿Î ˜Á È˜Á @Π˜Á È˜Á ¿Î˜Á @ΘÁ ¿Î ˜Èˇ È˜@ˆÄı @Π˜@ˆÄı È˝@ˆÄı ¿Î˛@ˆÄı @ÎgmwÃlfŒÄ@ˆÄı ¿Î ¸ôK(^ôí@ˆÄı È!ÉâK(Pâí@Ä˚Äı @Îò@@Ę@Ę«lc& ~yq»NvéÄ@    ˝Ä ˙ È(˝@¸@    1€ª∂9„ Äyø9]º‡¸ ¿Î(˝@¸@    {&•LóÄÄ §ƒE¸ @Î$˜    @    @‚•Lî˛Ä$§¸E¸ ¿Î" ˜@;û∏¥„†ÄG‚`¸ È"˜@˝ IJÄD˚ @Π ˜@˝ Ä˛ÄŒ8˚ È˜@ˆÄı ¿Î˜@ˆÄı @Θ@ˆÄı ¿Î ˜@ˆÄı È˜@ˆÄı @Π˜Èˇ È˜@ˆÄı ¿Î˜@ˆÄı @Θ@ˆÄı ¿Î ˜@ˆÄı È˜@ˆÄı @Π˜@¯Ä<˙ È˜@    ˘Ä ˙ ¿Î ˜@    3‰˙Ä"Y‹iù¿¸ @Θ@    y˙Ä=}(õÛ˚ ¿Î ˜@    Iê˙Ä!°(äL¿¸ È ˜@8Ù˙Ä=$y˚ĸ @Π˜@ˆÄı È˜@ˆÄı ¿Î˜@ˆÄ¯ @Θ@ˆÄ˙` ¿Î ˜@ˆÄ$  È˜@ˆÄ%¢Ìúñ›Á¢!: @Π˜@ˆÄ&!"¬¢í #òb È˜@ˆÄ%#>íæíb$Ü ¿Î˜@ˆÄ-úÔÒŸú˚¸Ú @Θ@ˆÄ¯ ¿Î ˜@ˆÄ¯ È˜@ˆÄı @Π˜@ˆÄı È˜@ˆÄı ¿Î˜Èˇ @ΘÁ ¿Î ˜Á È˜Á @Π˜Á È˜Á ¿Î˜Á @Î ‹ˇ‡¿Î ¬ÿ@Π¬ÿ¿Îÿ@Îÿ¿Î ¬ÿ@Π¬ÿ¿Îÿ@Îÿ¿Î ¬ŸU@Ο3Í¡¡¡ò@Ä¿˜Ä¿˜lGc¡¡¡¡¡¡¡¡¡¡¡¡¡
  7724. >»
  7725.      »
  7726. @»
  7727. ê»
  7728.     !–ÒË»
  7729. "à»
  7730. 3¸> p»¡¡¡¡¡    Ä¿˛    GÅÄ@@ÿ         ˛    ÄÄ@ÿûã˛ 
  7731. IÍK8Í#]#Éìµ ‚∞Ÿ •îP‡@ π*§QUIU,R]E@Ÿ$¥‡@ S$êÈËäÈ    sÇââ@Ÿ!òËÅÄ"UH∞2ã”ã @¥“ ÄŸ18∏p‡ÄgÍhàŸÃtí}çøDåÑÄŸ˛D˚˛˝◊˛D˚˛P˝◊˛8˚˛ ˝◊¡¡#¸aÄ    ˛ÄÅ@Ä¿˛˛Ä‰#¸"    ˛Ä@  @ ˛˛Ä‰&"-,Á+dKn∏_ÌQAp[*-Ç"4uñ›¡tÌ¿‰&"™ëBT    ™)U§,@§ëk(¢†≠=VÑ%\ö´Jïtĉ%!DíBî<ry("Kπ)Iqƒ°))‰Ñ)ÖíÚQ«'•„&"$]"ƒ®pB¢l/xâÌ£QŸAÛ“âÑJ∑$DÿD*Mĉ%!#¢#dHN9HWqI"ap‚AR yÑE•<ìÉë…„¸Û@Ÿ¸Ù@Ÿ¸ÛÄŸ¡¡(˙ @Äp˛à àÄįÊ&Sà¸ÄÄÄHÊ)% RònVZRF^ãbkk#de…6flZ»∂9Ö) GK|‡Á($
  7732. b®    §®ΩÍJ§ï¢µ5e§™äöj%+*âZÅéıPqU©Ê)%¢»    )…)Lë)%"•%-)íL)IqR$ÇD¶‡Çy0‡Á)%ƒàmÚñ◊Ì™aHH:mù&ûJY◊ö¶5IKÄä¢x Á)%8ÊùHÒLdâI@‚JJ.Hï$åîDmi$" Ê2qÒQ¿Á˝˛Ĉ¯@‚˝˛Ĉ¯@‚ ˘ÄÏ@‚¡¡‡àÜ0`    å`ÿ
  7733. @IJ IH :R ÿ
  7734. Qe»∂9 IJªé®‰4BWp‰JŸò@¿˜¿˜GlácrÑäâZ!JÅ«wT©JÑÍÅJΩŸñxìR"ícÖ2\Lr]…Ÿ&‹ö¶$2î∞ÖZ–ñ—Ÿ4ñÈ$:{°Ãc'ìnl;fid„nÏŸı˙ÄŸı˙ÄŸı˙ÄŸ¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ¿ 8Õ   Õ )I¨§qXÃŒ w™à
  7735. ’‹¢†#TŒ     %7îï« "`Œ J\u!'d@DÏŒ 3±ìÉâ(≈√ƒdëŒ˛B˛Ã˛B˛Ã
  7736. ˛B˛…¡¡†yp¯÷        ˛ ÄP ê÷    .Àc≠êë9B$Î$í/¨π-¿ÿ
  7737. T,ï•&®ëBÉõTñQRí◊òL•)D»¢<ÑE%Ë"Œdë¿ÿ¸S*ki—#ÑGHå    ≥É#ı @ÿ8®9'M…!~uÂJxç"fi"¢#Äÿ¸Ä˛—¸Ä˛
  7738. —
  7739. ¸˙ œ¡¡    ‡ÄÅÄÀ    
  7740. @ÄB@À    
  7741. Qe≈`D@À    rÑääŃ@À    ñxìÄ$@À    &‹ï$ÄÀ 4ñÈ    À ¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜ál«c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę«lc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜lGc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜Glyc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜ylπc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ęπl˘c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜˘l9c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜9lyc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜ylπc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ęπl˘c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜˘l9c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜9lkc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜ylπc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ęπl˘c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜˘l9c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜9lyc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜ylπc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ęπl˘c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜˘l9c¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜9lkc¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ˇg@ˇ ˇˇˇˇ@
  7742. ˇ·ˇ‚7^
  7743. 4H\, Palatino&e.3+ä"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@äIntroduction to •)8 Apple Events4⁄ä˙(‡äAbout ‡) Apple Events
  7744. , (‡3-17
  7745. ˇˇˇˇˇˇˇˇ440lòÄ.B0oMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""B0oB0o$””””””””””””””””””””””””””””””òÄ
  7746. 60@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""60@60@˜˜˜˜˜˜˜˜˜˜˜˜˜
  7747. ˛ˇ˛ˇˇ ˇˇ˛ˇˇ     ˇˇˇ˙ˇ
  7748. ˛ˇˇˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜
  7749. 454+?òÄ
  7750. 56+@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""56+@56+@$˜˛˙ˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  7751. ˛ˇ˛ˇˇ˛¸ˇˇ˚ˇ˛˙ˇˇ˝˛ˇ˛
  7752. ˛ˇ˛ˇˇ
  7753. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  7754. ˛ˇ˛ˇˇ
  7755. ˛ˇ˛ˇˇ˛˙ˇ˜˝˝ˇˇ˛ˇ˚˝ˇ¸˛¸ˇˇ˜˝˛ˇ˛
  7756. ˛ˇ˛ˇˇ
  7757. ˛ˇ˛ˇˇ˝ˇˇ˛˜˝¸ˇ
  7758. ˛ˇ˛ˇˇ˛¸ˇˇ˜˝˛ˇ˛
  7759. ˛ˇ˛ˇˇ
  7760. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˜˝¸ˇ
  7761. ˛ˇ˛ˇˇ˝˛ˇ˛
  7762. ˛ˇ˛ˇˇ
  7763. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  7764. ˛ˇ˛ˇˇ
  7765. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  7766. ˛ˇ˛ˇˇ
  7767. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  7768. ˛ˇˇˇˇ
  7769. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  7770. ˛ˇˇˇ
  7771. ˛ˇˇˇ
  7772. ˛ˇˇˇ
  7773. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  7774. ˛ˇˇˇˇ
  7775. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  7776. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  7777. ˛ˇˇˇˇ
  7778. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\äh¢(eäAs prÀ`°dONLNd\¢h,) eviously noted, the descriptor r°dONLNd%\-h?)ãecort`°dONLNd)\?hÇ)d (of data type ,
  7779. Courier®¿°dONLNd9\Çh¶)CAEDesc¶Ä°dONLNd?\¶h)$) is the fundamental °dONLNdTiäuï(rästrfi°dONLNdWiïu¨) ucturc‡°dONLNd\i≠uø)e in à‡°dONLNdaiøu˜)IApple events, and it consists of a descriptor type and a handle to data. ◊Ä°dONLNd™i˜u˛(r˜A °dONLNd´iˇu) °dONLNd¨väÇ…(ädescriptor listÇ°dONLNdªv…Ç˝)? is a data strcÄ°dONLNd…v˛Ç)5ucturÈ`°dONLNdŒvÇ=)
  7780. e of type ô†°dONLNdÿv>Çz))
  7781. AEDescListdONLNd‚vzÇç)< defi°dONLNdÁvéÇÎ)ned by the data type °dONLNd¸ÉäèÆ(åäAEDesc}¿°dONLNdÉÆèc)$-—that is, a descriptor list is a descriptor rË@°dONLNd/Écèu)µecor\†°dONLNd3Évèÿ)d whose data handle r∞Ä°dONLNdHÉÿè)befers to a list °dONLNdXêäú‚(ôäof other descriptor rÓ °dONLNdmê‚úÙ)XecorbÄ°dONLNdqêıú˚)d~@°dONLNdrê˚úu)s (unless it is an empty list).°dONLNdíßä≥¢(∞äTYPE°dONLNdòßÆ≥&)$AEDescList = AEDesc;°dONLNdµßP≥¯)¢{list of descriptor records}°dONLNd“øäÀ€(»äLike several other ïÄ°dONLNdÂø€À`)QApple Event Manager data strÄ°dONLNdøaÀx)ÜucturÜ`°dONLNdøxÀ)(es, a descriptor list is identical to a °dONLNd.ÃäÿΩ(’ä descriptor rfl@°dONLNd:ÃΩÿœ)3ecorS†°dONLNd>Öÿ)d of data type 4 °dONLNdMÃÿ4)@AEDesc1‡°dONLNdSÃ4ÿk)$; the only dif¯°dONLNdaÃkÿw)7fer⁄Ä°dONLNddÃwÿ) &ence is that the data in a descriptor °dONLNdäŸäÂp(‚ä8list must always consist of a list of other descriptor rô†°dONLNd¬ŸpÂÇ)Êecor°dONLNdΔŸÉÂí)ds. °dONLNdÀÎ䘢(ÙäFigurR¿°dONLNd–΢˜∂)e 3-8@°dONLNd’Î∂˜›)G illustrates the logical arrangement of the descriptor list that specifi°dONLNdÎfi˜(Ùfi
  7782. es the dir∫ °dONLNd'Θ)(ect °dONLNd+¯äk(ä/parameter of the Open Documents event shown in |Ä°dONLNdZ¯lÑ)‚FigurO@°dONLNd_¯Ñ¿)e 3-3 on page Ä°dONLNdm¯¡…)=3-b`°dONLNdo¯…”)10b`°dONLNdq¯”Ì)
  7783. . This °dONLNdxäO(ä2descriptor list consists of a list of descriptor rE`°dONLNd™Pb)Δecorπ¿°dONLNdÆb¿)ds that contain alias rÓ†°dONLNd≈¿“)^ecorc°dONLNd…”Î)ds to °dONLNdœäê(äfiå¿°dONLNd—êº)
  7784. lenames. (>†°dONLNd€Ω)-See the chapter “Ax†°dONLNdÌZ)Rlias Manager” in R °dONLNd˛[†)LInside Macintosh4 °dONLNd°∏)F: Files°dONLNdπ¯) for a detailed °dONLNd%ä+‰((ädescription of alias r}Ä°dONLNd;‰+ˆ)ZecorÒ‡°dONLNd?ˆ+)ds.)
  7785. MH^4NH^"NH]
  7786. ˇ·ˇ‚7^    °dONLNdDCäN¥(Kä
  7787. Figure 3-8°dONLNdOCÃN“)BA0°dONLNdPC“NT)& descriptor list for a list of aliases
  7788. °dONLNdx9äEÁ(BäThe descriptor list in _‡°dONLNdè9ËE)^Figur2†°dONLNdî9E)e 3-8– °dONLNdô9E ) pr@°dONLNdú9!Eü)ovides the data for a keywor.†°dONLNd∏9üEƒ)~d-specifi `°dONLNd¡9≈E)&ed descriptor °dONLNdœFäRç(OärE°dONLNd–FéR†)ecorπ`°dONLNd‘F†R≤)d. K@°dONLNdÿF≥Rœ)eyworÄ°dONLNd›FœRÙ)d-specififl@°dONLNdÊFÙR4)%ed descriptor r£‡°dONLNdıF5RG)Aecor@°dONLNd˘FHRd)ds for Œ†°dONLNdFcR)&Apple event parameters can in turn be °dONLNd&Sä_–(\äcombined in an k†°dONLNd5S—_)G
  7789. AE record,1°dONLNd?S_©)0) which is a descriptor list of data type W‡°dONLNdhS©_”)®AERecorU@°dONLNdoS”_Ÿ)*dT‡°dONLNdpSŸ_€).°dONLNdrjäv¢(säTYPE°dONLNdxjÆv2)$AERecord = AEDescList;°dONLNdòjbv
  7790. )¥{list of keyword-specified }°dONLNd¡xbч*{ descriptor records}
  7791. ]ä"4^ä!
  7792. ^ä"4]á^àò@@ˆ@ˆ^àû~¡¡¡ŸˇÄΟˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿Îò@@Ĉ@Ĉûàfi~Ÿˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿Îò@Ä¿ˆÄ¿ˆfià~Ÿˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿ÎŸˇ¿Îò@¿ˆ¿ˆà^~Ÿˇ¿Î¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  7793. #‡‡3¿»
  7794. ! @H@»
  7795. a@àÄ»    a¿@â«    íéâ«     àí«    ?¡b«¡¡¡¡¡Ù  0:¿ÄÿêÄ  Ä ÿÖËŸÄ`rs¥ÆK¸r∞QO¡pYìÄ€ΔY"é`•ÖE‘§%@°Pdž©,,⁄
  7796. K'Èë.xHô$$)A"è°2KÛÄ€éD    hç-H68JÅ„√ÖA˚x¿Ä€ ãCé9∑‰à»à%–DÅBùARW?⁄@˙˝@˝@◊@˙˛@˛@◊Ä˙˝Ä˝Ä◊¡¡(臿p@:HIJ@Ä8¿ÄÄ8Ä@Ê'D±@ @@ @˝@ÄÄ@Ê($ƒ©Ä;‚≤“í2Ëõ[Z;F^ã`Ωë—>â±» Rët∂ÓÊ($•*ÄMEEÔRUIM)©ÆMJ§ï†&í*≤Tî–î ÔRáZPÊ($,ÄIéIJdâíII)*…ë)% $¢Lñâ$ë$Jg'íéÊ($
  7797. HÄì»èî∂ø⁄ì“BCì◊Ì™`I¥UúΩ©1®"&¬Ê($ãi»“áäc$Jë"RR“âIDi$&÷I!gc#ü‰úÊ˝˛Ñı¯Ñ·˝˛Ñı¯Ñ·
  7798. ˘ÑÎÑ·¡¡˛@Ä 1ÄÄFå` ◊§@˝ J@Äíê ◊§èÎ.â∞ÛâJU‹ÍNA†íïsá"PŸ%òDTî—î;∫†*T†·~§
  7799. UËŸH∑Ñô$ê·8ìR•¿Å$$√íÓHŸl·»˝©02 î•ÑTÌ¡%)`ñàêŸHæà©!Áùc8h∂„còΔGw`Ÿı ˚˛ÄŸı ˚˛ÄŸı ˚˛ÄŸ¡ò@@ˆ@ˆ^àû~¡¡¡¡¡¡¡¡¡¡¡¡¡  ¿¿Õ  ÄbÄÕ bîàÄZ GïÄÏ`Œ gzîÄ≠]…*4†Œ íS8Å)IZr%Õ •†GRsDM`Œ ;8íåZ<#HàŒ ˛@à˛@à  ˛…¡¡‡!‡àwp?¿Ä÷ê ê" ÄÄ÷íÒ<õ:ÿâ    ‘"N± ¢˛À ‹◊•!b…MRiI
  7800. (<ÀR†$    ï ◊    AD IîJJ»DRW@),Ò%%◊a%2ì∂öí8xDtÑ`M∏:=™◊äCíq‹ë”–ÓT£ƒi-“)8◊¸à˛ ˛—¸à˛ ˛†—
  7801. ¸p˙¿œ¡¡ ˛@   §@$  §èÎ.K"  %òDT§"  H∑Ñô$"  l·»˝H"$  Hæà®àò ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ĉ@Ĉûàfi~¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿ˆÄ¿ˆfià~¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Úˆ¿ÚˆàP~¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@ˆ@ˆ^àû~¡¡¡ŸUͬÿ¿ÎŸ@Îÿ¿Î¬Ÿ@άÿ¿ÎŸ@Îÿ¿Î¬˝1ˇå‰@Î Ä1çÄÄŒ ˇ„€‹y˝π˝ç¸Â¿Î ~Ò˚~yçˇ˜èÿÂ@Î fl±ÛpÕç‡qåx¿Î ÒÛfiÕˇ?flˇ‹Œ ˝3fi@νc«ÿ¿ÎŸ@Îÿ¿Î    ‹ˇȘÁ@ΘÁȘÁ¿Î˜Á@ΘÁ¿Î˜ÁȘÁ@ΘÁȘÁ¿Î8˚˚@Ó@Î$IJœ∏Ô¿Î%雜±œ=ød꡸ÔÈ'Ÿ5&`ú§¢¶CÔ@Î&&`¨†§æ‰í@“ÔÈ9‹ı√†w Gøø˜åÔ¿Î˛$˛DÍ@βD˛ŒÍ¿Î˜ÁȘÁ@ΘÁȘÁ¿Î˜Á@ΘÁ¿Î˜ÁȘÁ@ΘÁÈ ‹ˇ¿Î˜Á@ΘÁ¿Î˜ÁȘÁ@ΘÁȘÄaÄ0˝ ٿΘ    ¡Ä`˛ Ù@Î8˘øüÁª˘ˇˇsÛΩ˝¯ı¿Î$˙˚3ÕˇÌΩ˘„˛ÁÔ¿ıÈ!%ü ˚è3Õ‡·Ω˘„ΔgÏ`ı@Îò@@Ĉ@Ĉûàfi~'œÄ˚˚û«øΩøc{˝øÿıÈ&LÄ˚˙ Ô¿Î9«†˚˙ Ô@ΘÁ¿Î˜ÁȘÁ@Î˜Èˇ¯È˜˜Ù¿Î˜˜Ù@Θ˜Ù¿Î˜˜ÙȘ˜Ù@Θ˜ÙȘp˚˝Ç˙¿Î!˜H˝0Ä˙@Î$˜Kªücû2oŒÜ‡¸¿Î"˜O≤jL¡ôx)1(Ç9ĸÈ$˜L*L¡Y@    )?8ÇH`¸@Î"˜sπÎá@Ó:ΔoÔø¿¸È˜˛H˛˜¿Î ˜˛à˛sį@Θ˜Ù¿Î˜˜ÙȘ˜Ù@Θ˜ÙȘ˜Ù¿Î˜Èˇ¯@Θ˜Ù¿Î˜˜ÙȘ˜Ù@Θ˜ÙȘ˜Ù¿Î˜˜Ù@Θ˜`˛ ˝¿Î˜˜
  7802. @˛@    ˝È˜˜
  7803. f9±õ8˚7C@Θp˘oazfHf|æßÄÈ"˜H˙iB&HfD¶§¿Î#˜K>@˚gq9⁄8Z<û£Ä@ΘOü˙ٿΘLô˙ÙȘsè@˚Ù@Θ˜
  7804.   Ä ¸È˜˜    ¸¿Î˜˜¶ê=,≥¸@Θ˜©P2≤œê¸¿Î˜˜i`2“ƒ¸È˜˜&D2åªê¸@Θ˜¸ ¸È˜˜¸ ¸¿Î˜˜Ù@Θ˜Ù¿Î˜Èˇ¯È˜Á@ΘÁȘÁ¿Î˜Á@ΘÁ¿Î˜ÁȘÁ@Î˜Èˇ¯È˜˜Ù¿Î˜˜Ù@Θ˜Ù¿Îò@Ä¿ˆÄ¿ˆfià~˜˜ÙȘ˜Ù@Θ˜ÙȘp˚˝Ç˙¿Î!˜H˝0Ä˙@Î$˜Kªücû2oŒÜ‡¸¿Î"˜O≤jL¡ôx)1(Ç9ĸÈ$˜L*L¡Y@    )?8ÇH`¸@Î"˜sπÎá@Ó:ΔoÔø¿¸È˜˛H˛˜¿Î ˜˛à˛sį@Θ˜Ù¿Î˜˜ÙȘ˜Ù@Θ˜ÙȘ˜Ù¿Î˜Èˇ¯@Θ˜Ù¿Î˜˜ÙȘ˜Ù@Θ˜ÙȘ˜`˛ ˝¿Î˜˜
  7805. @˛@    ˝@Θ˜
  7806. f9±õ8˚7C¿Î˜˜oazfHf|æßÄȘ˜iB&HfD¶§@Θp˘gq9⁄8Z<û£ÄȘH˙ٿΘK>@˚Ù@ΘOü˙ٿΘLô˙    ¿ Ä ¸È!˜sè@˚       ¸@Θ˜&`=,≥¸È˜˜/ê2≤œê¸¿Î˜˜(Ä2“ƒ¸@Θ˜«t2åªê¸¿Î˜˜¸ ¸È˜˜¸ ¸@Θ˜ÙȘ˜Ù¿Î˜˜Ù@Î˜Èˇ¯¿Î˜ˆÛȘÁ@ΘÁȘÁ¿Î˜Á@ΘÁ¿Î˜ÁȘÁ@ΘÁÈ ‹ˇ¿ÎŸ@Îÿ¿Î¬Ÿ@άÿ¿ÎŸ@Îÿ¿Î¬Ÿ@ά ŸÃ¿Îò@¿ˆ¿ˆà^~ŸU@Ρ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  7807. #‡‡3¿»
  7808. ! @H@»
  7809. a@àÄ»    a¿@â«    íéâ«     àí«    ?¡b«¡¡¡¡¡Ù  0:¿ÄÿêÄ  Ä ÿÖËŸÄ`rs¥ÆK¸r∞QO¡pYìÄ€ΔY"é`•ÖE‘§%@°Pdž©,,⁄
  7810. K'Èë.xHô$$)A"è°2KÛÄ€éD    hç-H68JÅ„√ÖA˚x¿Ä€ ãCé9∑‰à»à%–DÅBùARW?⁄@˙˝@˝@◊@˙˛@˛@◊Ä˙˝Ä˝Ä◊¡¡(臿p@:HIJ@Ä8¿ÄÄ8Ä@Ê'D±@ @@ @˝@ÄÄ@Ê($ƒ©Ä;‚≤“í2Ëõ[Z;F^ã`Ωë—>â±» Rët∂ÓÊ($•*ÄMEEÔRUIM)©ÆMJ§ï†&í*≤Tî–î ÔRáZPÊ($,ÄIéIJdâíII)*…ë)% $¢Lñâ$ë$Jg'íéÊ($
  7811. HÄì»èî∂ø⁄ì“BCì◊Ì™`I¥UúΩ©1®"&¬Ê($ãi»“áäc$Jë"RR“âIDi$&÷I!gc#ü‰úÊ˝˛Ñı¯Ñ·˝˛Ñı¯Ñ·
  7812. ˘ÑÎÑ·¡¡˛@Ä 1ÄÄFå` ◊§@˝ J@Äíê ◊§èÎ.â∞ÛâJU‹ÍNA†íïsá"PŸ%òDTî—î;∫†*T†·~§
  7813. UËŸH∑Ñô$ê·8ìR•¿Å$$√íÓHŸl·»˝©02 î•ÑTÌ¡%)`ñàêŸHæà©!Áùc8h∂„còΔGw`Ÿı ˚˛ÄŸı ˚˛ÄŸı ˚˛ÄŸ¡ò@@ˆ@ˆ^àû~¡¡¡¡¡¡¡¡¡¡¡¡¡  ¿¿Õ  ÄbÄÕ bîàÄZ GïÄÏ`Œ gzîÄ≠]…*4†Œ íS8Å)IZr%Õ •†GRsDM`Œ ;8íåZ<#HàŒ ˛@à˛@à  ˛…¡¡‡!‡àwp?¿Ä÷ê ê" ÄÄ÷íÒ<õ:ÿâ    ‘"N± ¢˛À ‹◊•!b…MRiI
  7814. (<ÀR†$    ï ◊    AD IîJJ»DRW@),Ò%%◊a%2ì∂öí8xDtÑ`M∏:=™◊äCíq‹ë”–ÓT£ƒi-“)8◊¸à˛ ˛—¸à˛ ˛†—
  7815. ¸p˙¿œ¡¡ ˛@   §@$  §èÎ.K"  %òDT§"  H∑Ñô$"  l·»˝H"$  Hæà®àò ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ĉ@Ĉûàfi~¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿ˆÄ¿ˆfià~¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Úˆ¿ÚˆàP~¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@ˆ@ˆPàê~¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ĉ@Ĉêà–~¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿ˆÄ¿ˆ–à~¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿ˆ¿ˆàP~¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@ˆ@ˆPàê~¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ĉ@Ĉêà–~¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿ˆÄ¿ˆ–à~¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Úˆ¿ÚˆàB~¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@ˆ@ˆPàê~¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ĉ@Ĉêà–~¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿ˆÄ¿ˆ–à~¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿ˆ¿ˆàP~¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@ˆ@ˆPàê~¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ĉ@Ĉêà–~¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿ˆÄ¿ˆ–à~¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Úˆ¿ÚˆàB~¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ˇ*(@ˇ ˇˇˇˇ@
  7816. ˇ·ˇ‚7^
  7817. 4*\¯, Palatino&e.3+l"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@lIntroduction to •)8 Apple Events4⁄*˙¯
  7818. (‡*3-18    )BAbout ‡) Apple Events4^*¿¯
  7819. °dONLNd\lh-(el.The handle for a descriptor list of data type ,
  7820. Courier`°dONLNd.\.hX)¬AERecor¿°dONLNd5\Xh^)*d`°dONLNd6\^hd) rY`°dONLNd8\dh©)efers to a list of °dONLNdKiluç(rlkeywor˘`°dONLNdQiçu≤)!d-specifi◊ °dONLNdZi≥uÛ)&ed descriptor rõ¿°dONLNdiiÙu)Aecor °dONLNdmiu!)ds tha¸†°dONLNdsi!uÉ)t can be used to constrH`°dONLNdäiÑuî)cuct #¿°dONLNdéiîuõ)AΰdONLNdèiõuÃ) pple event °dONLNdövlÇô(l    parameter°dONLNd£vödž).s.Œ°dONLNd•v†Çµ) The +`°dONLNd™v∂Ç$)Apple Event Manager pr!`°dONLNd¿v$ÇG)novides r凰dONLNd»vGlj)#$outines that allow your application °dONLNdÏÉlèw(ålto ∑‡°dONLNdÔÉwè) crÌ °dONLNdÒÉèì)eate ‰`°dONLNdˆÉìèß)AE r `°dONLNd˙É®è∫)ecorÄ¿°dONLNd˛É∫è)ds and extract data frÄ°dONLNdÉèe)^om them when crã°dONLNd#Éeèí)M eating or r°dONLNd.Éìèœ).esponding to °dONLNd;êlúâ(ôlApple }Ä°dONLNdAêäú´)events. °dONLNdJ¢lÆ|(´lAn :@°dONLNdM¢|Æê)AE rb@°dONLNdQ¢êÆ¢)ecor÷†°dONLNdU¢¢Æ)d has the descriptor type †°dONLNdo¢Æ[)q typeAERecord °dONLNd{¢[Æ¢)H and can be coerÄ°dONLNd㢢Ƈ)Gced to several °dONLNdöØlª“(∏lother descriptor types. [†°dONLNd≤Ø“ª‚)fAn t@°dONLNdµØ‚ª9)Apple event record®°dONLNd«Ø9ªq)W, which is difJ °dONLNd’Ørª~)9fer,†°dONLNdÿØ~ªï) ent fr¢‡°dONLNdfiØïª≥)om an _`°dONLNd‰Ø≥ª«)AE rá`°dONLNdËØ«ªŸ)ecor˚¿°dONLNdÏØŸª‰)d, °dONLNdÔºl»s(≈lis•`°dONLNdÒºs»u) %`°dONLNdÚºv»{)a%`°dONLNdÛº{»2),nother special descriptor list of data type 5 °dONLNdº2»n)∑
  7821. AppleEvent1`°dONLNd)ºn»…)< and descriptor type °dONLNd>…l’∫(“ltypeAppleEven{ °dONLNdK…∫’¿)Ntz¿°dONLNdL…¿’¬).°dONLNdN‡lÏÑ(ÈlTYPE°dONLNdT‡êÏ)$AppleEvent = AERecord;°dONLNdt‡DÏŒ)¥{list of attributes andw`°dONLNd凌Ï⁄)ä }°dONLNdõÓD˙Ï(˜D{ parameters necessary for }°dONLNdƒ¸D™*{ an Apple event}°dONLNd÷l |(lAn :@°dONLNdŸ| ∏)Apple event r °dONLNdÊ∏  )<ecor>`°dONLNdÍÀ )d describes a full-flb`°dONLNdˇ <)Tedged ›‡°dONLNd< o)
  7822. Apple evenÊ@°dONLNdo œ)3t. Like the data for an °dONLNd'!l-y(*lAEc°dONLNd)!z-|) „°dONLNd*!|-)r®°dONLNd+!Ä-í)ecor`°dONLNd/!ì-‡)d, the data for an ¢†°dONLNdB!‡-)MApple event r2`°dONLNdO!-/)=ecor¶¿°dONLNdS!/-¨)d consists of a list of keywor∑†°dONLNdq!¨-—)}d-specifiï`°dONLNdz!“-fl)&ed °dONLNd}.l:ü(7l descriptor rfl@°dONLNdâ.ü:±)3ecorS†°dONLNdç.≤:Ó)ds. Unlike an ·Ä°dONLNdõ.Ó:)<AE r    Ä°dONLNdü.:)ecor}‡°dONLNd£.:b)d, the data for an  °dONLNd∂.c:ü)NApple event r쇰dONLNd√.ü:±)<ecor@°dONLNd«.≤:È)d is divided °dONLNd‘;lG’(DlTinto two parts, one for attributes and one for parameters. This division within the ¢†°dONLNd(;’GÚ(D’Apple °dONLNd.HlTä(Qlevent r@°dONLNd5HãTù)ecor܆°dONLNd9HùT’)d allows the {†°dONLNdFH’T≠)8.Apple Event Manager to distinguish between an Ó‡°dONLNdtH≠TÏ)ÿApple event’s °dONLNdÇUlaÔ(^lattributes and its parameters. °dONLNd¢glss*D=@°dONLNd£gts¥)escriptor lists, ÍÄ°dONLNd¥g≥s«)?AE rÄ°dONLNd∏g»s⁄)ecor܇°dONLNdºg⁄s¸)ds, and Ó`°dONLNdƒg¸s8)"Apple event r~ °dONLNd—g9sK)=ecorÚÄ°dONLNd’gKs`)ds arê@°dONLNd⁄gas©)e all descriptor r⇰dONLNdÏg©sª)Hecor˛@°dONLNdgªsÊ)    ds whose °dONLNd˘tlÄï(}l    handles rrÄ°dONLNdtïÄB))+efer to a nested list of other descriptor rB °dONLNd-tCÄU)Æecor∂Ä°dONLNd1tUÄÍ)"ds. The data associated with each °dONLNdSÅlçƒ(äldata type may be orj@°dONLNdfŃçˆ)X ganized difB‡°dONLNdqňç)2fer%`°dONLNdtÅçm) ently and is used by the L°dONLNdçÅmç—)kApple Event Manager °dONLNd°élöx(ólfor<°dONLNd§éyö{) º°dONLNd•é{öá)difÊ`°dONLNd®éáöì) fer»‡°dONLNd´éìö«) ent purpose†`°dONLNd∂é»ö⁄)5s. In@°dONLNdªé€ö)
  7823.  each caseè`°dONLNd≈éö)+,`°dONLNdΔé    ö ) è`°dONLNd«é ö1)howeverú°dONLNdŒé1ö6)&, ú°dONLNd–é6öÖ)the data is identifiSÄ°dONLNd‰éÜö‹)Ped by a handle in a °dONLNd¯õlßü(§l descriptor rfl@°dONLNdõüß±)3ecorS†°dONLNdõ≤ßN)#d. This means that you can pass an EÄ°dONLNd+õNßä)úApple event r’@°dONLNd8õäßú)<ecorI†°dONLNd<õùß√)    d to any °dONLNdE®l¥á(±lApple˝Ä°dONLNdJ®á¥â) }Ä°dONLNdK®ä¥<)'Event Manager function that expects an 3‡°dONLNdr®<¥P)≤AE r[‡°dONLNdv®P¥b)ecor–@°dONLNdz®b¥ï) d. Similarly@°dONLNdܮ勒)3, you can pass Ú`°dONLNdﮑ¥Ò)?Apple °dONLNdõµl¡ä(ælevent r@°dONLNd¢µã¡ù)ecor܆°dONLNd¶µù¡Ω)ds and n °dONLNd≠µΩ¡—) AE rñ °dONLNd±µ—¡„)ecor
  7824. Ä°dONLNdµµ‰¡™)0ds, as well as descriptor lists and descriptor r¬`°dONLNdµ™¡º)Δecor6¿°dONLNdÈµΩ¡Í) ds, to any °dONLNdÙ¬lŒ2(Àl+Apple Event Manager functions that expect r‡°dONLNd¬3ŒE)«ecorz@°dONLNd#¬EŒâ)ds of data type ó¿°dONLNd3¬âŒ≠)DAEDescïÄ°dONLNd9¬≠ŒØ)$.°dONLNd;‘l‡v(›lW°dONLNd<‘v‡æ)
  7825. hen you use the „@°dONLNdL‘æ‡*)HAECreateAppleEvent‹Ä°dONLNd^‘*‡f)l function, the i¿°dONLNdm‘g‡”)=Apple Event Manager crÕ‡°dONLNdÉ‘”‡Î)leates °dONLNdâ·lÌy(Ílan s°dONLNdå·y̵)Apple event r¿°dONLNdô·∂Ì»)=ecorw °dONLNdù·»Ì[)#d containing the attributes for an “‡°dONLNd¿·[Ìœ)ìApple event’s event class, °dONLNd€Ól˙Ñ(˜leventÕ@°dONLNd‡ÓÑ˙Ü) M@°dONLNd·Óá˙£)ID, tarp`°dONLNdËÓ£˙»)get addrà°dONLNdÓ»˙fi)%ess, rꆰdONLNdˆÓfi˙_)eturn ID, and transaction ID. °dONLNdÓ`˙f)ÇYƒÄ°dONLNdÓe˙ö) ou then use @°dONLNd!Óõ˙’)6 Apple Event °dONLNd-˚l‰(lManager functions such as  °dONLNdG˚Â9)yAEPutParamDesc¿°dONLNdU˚9N)T and ‡°dONLNdZ˚Oª)AEPutAttributeDesc °dONLNdl˚ª”)l to ad‘¿°dONLNdr˚”Á)d or °dONLNdwlì(lmodify a0†°dONLNdîœ)(ttributes and U@°dONLNdçœÌ);to add D†°dONLNdîÓ4)any necessary pw‡°dONLNd£4})Farameters to the ˙†°dONLNd¥}≥)I Apple eventE`°dONLNdø¥π)7. °dONLNd¬l&Ñ(#lFigurR¿°dONLNd«Ñ&ò)e 3-9@°dONLNdÃò&,)  shows an example of a complete ∏¿°dONLNdÏ,&ï)îApple event—a data strø†°dONLNd    ï&¨)iucturEÄ°dONLNd    ≠&’)
  7826. e of type °dONLNd    'l3®(0l
  7827. AppleEvent|@°dONLNd    '®3 )< containing a list of keyworã@°dONLNd    7' 3C)xd-specifĆ°dONLNd    ?'C3Ü)#ied descriptor r-†°dONLNd    O'á3ô)Decor¢°dONLNd    S'ô3‰)ds that name the °dONLNd    d4l@(=l;attributes and parameters of an Open Documents event. The fi4†°dONLNd    †4Ä@è(=Ägur臰dONLNd    £4è@È)e includes the event °dONLNd    ∏AlM◊(Jlclass attribute shown in ≥ °dONLNd    —A◊MÔ)kFigurÖ‡°dONLNd    ÷AÔM)e 3-7#`°dONLNd    €AMï)" and the descriptor list shown in >@°dONLNd    ˝AïM≠)ëFigur°dONLNd
  7828. A≠M¡)e 3-8ÆÄ°dONLNd
  7829. A¡M„), which °dONLNd
  7830. NlZ•(Wlforms the dirÛÄ°dONLNd
  7831. N•Z)9ect parameter—the keyworWÄ°dONLNd
  7832. 4NZC)yd-specifi5@°dONLNd
  7833. =NDZÑ)&ed descriptor r˘‡°dONLNd
  7834. LNÑZñ)@ecorn@°dONLNd
  7835. PNóZË)d with the keywor≥‡°dONLNd
  7836. aNËZ)Qd °dONLNd
  7837. c[lgΔ(dlkeyDirectObjectz`°dONLNd
  7838. r[ΔgÚ)Z . The entir@‡°dONLNd
  7839. }[Ûg˝)-e fƇ°dONLNd
  7840. Ä[˝g)
  7841. igurÚÄ°dONLNd
  7842. Ñ[g()e corrŸÄ°dONLNd
  7843. ä[(gı)*esponds to the Open Documents event shown °dONLNd
  7844. ¥hltw(qlin π¿°dONLNd
  7845. ∑hwtè) FiguråÄ°dONLNd
  7846. ºhètÀ)e 3-3 on page K¿°dONLNd
  7847.  hÃt‘)=3-ü†°dONLNd
  7848. Ãh‘tfi)10ü†°dONLNd
  7849. Œhfit‡)
  7850. .°dONLNd
  7851. –zlÜr(ÉlT†¿°dONLNd
  7852. —zrÜ–)he next two sections, ˆ °dONLNd
  7853. Áz–Ü)^“Responding to ±‡°dONLNd
  7854. ˆzÜX)HApple Events”ã¿°dONLNd zYÜn)A and x‡°dONLNd zoÜ)“CrT‡°dONLNd zÜ◊)eating and Sending ˜‡°dONLNd z÷ÜÛ)WApple °dONLNd $álìë(êlEvents,”‹`°dONLNd ,áëìù)% pr#Ä°dONLNd /áûì≈)Covide a quick overview of the steps your application must take to rr‡°dONLNd rá≈ìÛ(ê≈
  7855. espond to °dONLNd |îl†ñ(ùl    and send Ä°dONLNd Öîó†—)+ Apple eventsä@°dONLNd ëî—†”):.ˇÉú@ˇ ˇˇˇˇ@
  7856. ˇ·ˇ‚7^
  7857. 4H\, Palatino&e.3+ä"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@äIntroduction to •)8 Apple Events4⁄ä˙(‡äAbout ‡) Apple Events
  7858. , (‡3-19
  7859. ˇˇˇˇˇˇˇˇ440lòÄ.B0oMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""B0oB0o$””””””””””””””””””””””””””””””òÄ
  7860. 60@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""60@60@˜˜˜˜˜˜˜˜˜˜˜˜˜
  7861. ˛ˇ˛ˇˇ ˇˇ˛ˇˇ     ˇˇˇ˙ˇ
  7862. ˛ˇˇˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜
  7863. 454+?òÄ
  7864. 56+@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""56+@56+@$˜˛˙ˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  7865. ˛ˇ˛ˇˇ˛¸ˇˇ˚ˇ˛˙ˇˇ˝˛ˇ˛
  7866. ˛ˇ˛ˇˇ
  7867. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  7868. ˛ˇ˛ˇˇ
  7869. ˛ˇ˛ˇˇ˛˙ˇ˜˝˝ˇˇ˛ˇ˚˝ˇ¸˛¸ˇˇ˜˝˛ˇ˛
  7870. ˛ˇ˛ˇˇ
  7871. ˛ˇ˛ˇˇ˝ˇˇ˛˜˝¸ˇ
  7872. ˛ˇ˛ˇˇ˛¸ˇˇ˜˝˛ˇ˛
  7873. ˛ˇ˛ˇˇ
  7874. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˜˝¸ˇ
  7875. ˛ˇ˛ˇˇ˝˛ˇ˛
  7876. ˛ˇ˛ˇˇ
  7877. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  7878. ˛ˇ˛ˇˇ
  7879. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  7880. ˛ˇ˛ˇˇ
  7881. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  7882. ˛ˇˇˇˇ
  7883. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  7884. ˛ˇˇˇ
  7885. ˛ˇˇˇ
  7886. ˛ˇˇˇ
  7887. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  7888. ˛ˇˇˇˇ
  7889. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  7890. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  7891. ˛ˇˇˇˇ
  7892. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  7893. gHw4gHw"hH]
  7894. ˇ·ˇ‚7^    °dONLNd\äg¥(dä
  7895. Figure 3-9°dONLNd \Ãgê)B.Data structures within an Open Documents event
  7896. wº4wº
  7897. xâº4wàxâò@@˜@˜xâ∏Ä¡¡?“ˇÒ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚò@@Ę@Ę∏â¯Ä?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚò@Ä¿˜Ä¿˜¯â8Ä?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚò@¿˜¿˜8âxÄ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚò@@˜@˜xâ∏Ä?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚò@@Ę@Ę∏â¯Ä?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚò@Ä¿˜Ä¿˜¯â8Ä?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚò@¿Ú˜¿Ú˜8âjÄ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚò@@˜@˜xâ∏Ä¡¡—3Ò“Ò ”Ò—ÄÚ“Ò—ÄÚ ”Ò“Ò ”Ò—ÄÚ“ÒIJ 0|€ÄÚ  ¡Ä¿ 0` fiÒ ˚Ò˜Ó∑~›fifiÒ  ˝¯flønˇ„ˇÏfiÒ Ìÿ›∏3n¸c±Ï›ÄÚ Ω¯˝Ô3∑ˇÓfiÒ˝ÄfŸÄÚ ˛Äf⁄Ò“Ò ”Òÿˇ¿˝ÄÚıÂ@˛ÒıÂ@˝ÄÚ ıÂ@˛ÒıÂ@˛Ò 8˘˙ÄÓ@˛Ò%$@¸˛    @ÄÄ|ÄÚ@˝ÄÚ'
  7898. $Œ⁄ÔòÁòIJ˛    Û~8fixá'gy‡Ú@˛Ò&    %˘2ñPf|˝˛    AIEI$à±H§ÄÚ@˝ÄÚ&     %ñPV`˝˛    II}…$è•O§êÚ@˛Ò'
  7899. 8¸Ú„ê;úIJ˛    0én;„|Év`Ú@˛Ò ˝Ä¸˝à Ì@˛Ò˝Ä"¸˛úpÌ@˝ÄÚıÂ@˛ÒıÂ@˝ÄÚ ÿˇ¿˛ÒıÂ@˛Ò ıÂ@˛ÒıÂ@˝ÄÚıÂ@˛Òp˜Â@˝ÄÚ  H¯˛Ñ ˛Ò@˛Ò%Iæ ˘˛ÄÑ˛ı@˛Ò& Kfl¯˛ѸŒoÔ'„åÁÕö3χ˜@˛Ò&JY¯˛Öâ$ÙÕˆôÎ’y˘Ä˜@˝ÄÚ'qœ ˘˛Ñi$îÕÅíô*UAà`˜@˛Ò#ı˛ıƒƒrO˜óÈ’8˘¿˜@˝ÄÚ ııÚ@˛ÒııÚ@˛Ò ıÂ@˛ÒıÂ@˝ÄÚÿˇ¿˛Ò
  7900. ÛćÄÚ ”ÒÙ‰˛Ò ”Ò
  7901. ıfiÄÚı‚@Ò—ÄÚ  ˆ`flÒ    ’Òò@@Ę@Ę∏â¯Ä ˜‡ˇÒˆ·˛ÄÚˆ·Òˆ·˛ÄÚ ˜·Òˆ·Ò ˜·Òˆ·˛ÄÚˆ·Òˆ Ä¿Ï˛ÄÚ ˜ Ä¿¿0ÌÒˆ ∑wù˚¸˜ˇ˜ˇÌÒ ˜ˇ˚7ø¯{€fløÄÓÒˆ Ï{1ÏÀ€flºÌ˛ÄÚˆ«˚üø¯{˚ÛøÄÓÒˆ·˛ÄÚ ˜·Òˆ·Ò ˜¡ÒˆĈÚ˛ÄÚˆĈÚÒˆıàòÚàê˛ÄÚ ˜ĈÚÒˆĈÚÒ& ˜
  7902. ¢""n""#¢˝"2"":¸".˚"0Ò*ˆ
  7903. ÄxÄ˝?cΔqå˛ÄÚ)ˆ
  7904. Äs∑ø∞˝˜¯ˇ˛˛fÒÁ˚ˇ¸Ò)ˆ˛àˇfl¸˝¸àòààù˚fiˇ˚Óé˚Ô˘åËàê˛ÄÚ+ ˜
  7905. Än¸˝Ä˝Éÿ6nfÿ√yΩ‡Ò)ˆ
  7906. Äo›∑∑∞˝?˘ø3ˇªœœ¸Á¯Ò! ˜¢˛".˙"2˛"#¢˜"0Ò ˆIJ˙˛Ę˛ÄÚˆĈÚÒˆıàòÚàê˛ÄÚ ˜ĈÚÒˆ¡Ò ˜ÄÊÒˆÄÊ˛ÄÚˆÄÊÒˆáÁˇ¯˛ÄÚ ˜шÛÒˆшÛÒ ˜шÛÒˆшÛ˛ÄÚˆшÛÒˆÑp˚Û˛ÄÚ& ˜
  7907. ÑH˝¯˘Ò'ˆÑKªücû2=∑úƸp˚Ò) ˜ÑO≤jL¡ôx¢b"íà˚Ò(ˆÑL*L¡Y@¢~"í¯˚˛ÄÚ'ˆÑsπÎá@Ó: Cåq0˚Ò&ˆÑ˝H˛˛B˙˛ÄÚ' ˜Ñ˝à˛«8˙ÒˆшÛÒ ˜шÛÒˆшÛ˛ÄÚˆшÛÒˆáÁˇ¯˛ÄÚ ˜шÛÒˆшÛÒ ˜шÛÒˆшÛ˛ÄÚˆш˘Òˆш˘˛ÄÚò@Ä¿˜Ä¿˜¯â8Ä! ˜ш,Ó4Œ‡˚ÒˆшæîM˘Ä˚Ò$ ˜Ñp˘–îE&`˚Ò$ˆÑH˙éí<˝¿˚˛ÄÚˆÑK>@˚ÛÒˆÑOü˙Û˛ÄÚ" ˜ÑLô˙¯Ò#ˆÑsè@˚˙
  7908. `Ò$ ˜ш¯ Ò#ˆш‚vŒNŒÛ— á˛ÄÚ"ˆш ãbëI!Ã1Ò#ˆш¢äJüI1"C˛ÄÚ$ ˜ш‹wܢÏŒ˘˛yÒˆш¯Ò ˜ш¯ÒˆшÛ˛ÄÚˆшÛÒˆшÛ˛ÄÚ ˜шÛÒˆшÛÒ ˜áÁˇ¯ÒˆÄÊ˛ÄÚˆÄÊÒˆÄÊ˛ÄÚ ˜ÄÊÒˆ¡Ò ˜·Òˆ·˛ÄÚˆ·Òˆ·˛ÄÚ ˜·Òˆ·Ò ˜·Òˆ·˛ÄÚˆ·Òˆ    >?xͲÄÚ ˜
  7909. 0=ÄxÎÒˆ ?nÔ=ûˇ˛ˇ‡ÏÒ ˜ 1ˇˆ=è{{˜ÏÒˆ 1ÿˆ=õ{{˜ÄÏ˛ÄÚˆ ?è˜?~wÏÒˆ·˛ÄÚ ˜·Òˆ·Ò ˜¡ÒˆĈÚ˛ÄÚˆĈÚÒˆıàòÚàê˛ÄÚ ˜ĈÚÒ ˆ
  7910. ÄnÄ˝8ıÒ* ˜
  7911. ¢""z""#¢˝" 2"":"?""cˇs.˝"0Ò*ˆ
  7912. Äs∑ø∞˝ ˜¯ˇ˛˘çˇfl¸˛˛ÄÚ)ˆ
  7913. Äfl¸˝Ä˝ ˚fi˚aç˚ `˛Ò)ˆ˛àÓù¸˝¸à òààüãÿæõÌç˚Ì˲àê˛ÄÚ+ ˜
  7914. Äo›∑∑∞˝ ?˘ø3ˇªfl˝«¯˛ÒˆIJ ˙˛ĘÒ! ˜¢˛":˙"2˛"'¢˜"0ÒˆĈÚ˛ÄÚˆĈÚÒˆıàòÚàê˛ÄÚ ˜ĈÚÒˆ¡Ò ˜ÄÊÒˆÄÊ˛ÄÚò@¿˜¿˜8âxĈÄÊÒˆáÁˇ¯˛ÄÚ ˜шÛÒˆшÛÒ ˜шÛÒˆшÛ˛ÄÚˆÑp˚ÛÒ%ˆ
  7915. ÑH˝¯˘˛ÄÚ) ˜ÑKªücû2=∑úƸp˚Ò'ˆÑO≤jL¡ôx¢b"íà˚Ò) ˜ÑL*L¡Y@¢~"í¯˚Ò(ˆÑsπÎá@Ó: Cåq0˚˛ÄÚ%ˆÑ˝H˛˛B˙Ò&ˆÑ˝à˛«8˙˛ÄÚ ˜шÛÒˆшÛÒ ˜шÛÒˆшÛ˛ÄÚˆшÛÒˆáÁˇ¯˛ÄÚ ˜шÛÒˆшÛÒ ˜шÛÒˆшÛ˛ÄÚˆшÛÒˆш.˘˛ÄÚ ˜ш)˘Òˆш,Ó)˘Ò" ˜Ñp˘æî)˘Ò"ˆÑH˙–î)˘˛ÄÚ"ˆÑK>@˚éí.˘ÒˆÑOü˙Û˛ÄÚ ˜ÑLô˙ÛÒ ˆÑsè@˚˜Ò ˜ш˜Ò"ˆш˚Ä˝ ˛ÄÚ"ˆшÃL^wâq˚—fixËÒ#ˆшdIäIä)™)!à˛ÄÚ$ ˜шúLI˙Iä    ´È$hÒ"ˆшˆ˚é7~qÁ®›õ»Ò  ˜ш˙Òˆш˙˛ÄÚˆшÛÒˆшÛ˛ÄÚ ˜шÛÒˆшÛÒ ˜áÁˇ¯ÒˆÄÊ˛ÄÚˆÄÊÒˆÄÊ˛ÄÚ ˜ÄÊÒˆ¡Ò ˜·Òˆ·˛ÄÚˆ·Òˆ·˛ÄÚ ˜·Òˆ·Ò ˜·Òˆ·˛ÄÚˆ·Òˆ·˛ÄÚ ˜·Òˆ?˝ ‡ÔÒò@@˜@˜xâ∏Ä ˜ ` ```ÒˆÔÓˇ=ÔÔˇ‹ˇ˚ˇ˛ÄÚˆ ˇg∑ø∑Ó~?mÔflÄÒÒˆøxm∑øçÓ~omÔ‹˛ÄÚ ˜ ˝ÔwΩÔ˜ˇfi?˝˘flÄÒÒˆ˝`1ÄÈÒ ˜˛¿1ÄÈÒˆ·˛ÄÚˆ¡ÒˆıàòÚàê˛ÄÚ ˜ĈÚÒˆĈÚÒ ˜¢ˆ"2Ú"0Ò%ˆ
  7916. ÄnÄ˝8=‡˘˛ÄÚ(ˆ
  7917. ÄxÄ˝  `s ˝Ò*ˆ˛à˚øˇø∏˝à òààüˇ˛ˇˇ˘Ôˇfl¸˛àê˛ÄÚ+ ˜
  7918. Äfl¸˝Ä˝ ˚fiŒxˇÔ˚ `˛Ò)ˆ
  7919. Än¸˝Ä˝ ÉfiŒx¿√{m‡˛Ò+ ˜
  7920. ¢""oˇ∑∑≤˝" 2""?˚ø˛ÔˇÁ˙˛"0Ò ˆIJ ˙˛Ę˛ÄÚˆIJ˙˛ĘÒˆıàòÚàê˛ÄÚ ˜ĈÚÒˆĈÚÒ ˜¢ˆ"2Ú"0Òˆ¡˛ÄÚˆÄÊÒˆÄÊ˛ÄÚ ˜ÄÊÒˆáÁˇ¯Ò ˜шÛÒˆшÛ˛ÄÚˆшÛÒˆшÛ˛ÄÚ ˜шÛÒ!ˆÑp˚˙`¸Ò+ ˜
  7921. ÑH˝`!¿@Ò+ˆ!ÑKªücû2=∑ú7º" oÑÛ{p˛ÄÚ*ˆ$ÑO≤jL¡ôx¢bRR!ÑöNA,àÒ+ˆ!ÑL*L¡Y@¢~rR$DäRI(¯˛ÄÚ, ˜$ÑsπÎá@Ó: Cå€úˇüo0˛0Ò(ˆÑ˝H˛˛B˝Ò* ˜Ñ˝à˛
  7922. «8p˝ÒˆшÛ˛ÄÚˆшÛÒˆшÛ˛ÄÚ ˜шÛÒˆáÁˇ¯Ò ˜шÛÒˆшÛ˛ÄÚˆшÛÒˆшÛ˛ÄÚ ˜шÛÒ!ˆш>˝P ˛Ò$ ˜ш Ä@ ˛Ò#ˆш ŸÕÃÓVg7˛˛ÄÚ%ˆÑp˘     Ú^ûôYÛLò˛Ò'ˆÑH˙     2PíôXìLܲ˛ÄÚ) ˜ÑK>@˚ ÒŒNÓWq4ú˛Ò!ˆÑOü˙˝@à˙Ò$ ˜ÑLô˙˛Äà˙ÒˆÑsè@˚Û˛ÄÚ"ˆш˛" ˛˛Ò#ˆш˛"$fà˛˛ÄÚò@@Ę@Ę∏â¯Ä$ ˜ш ÔòÓDBç∏Ñ˛Ò"ˆш =3=ò@+≈D˛Ò$ ˜ш %3 f@>E|˛Ò#ˆш Ô‹@%‚˛˛ÄÚˆш˚ ˛˛Ò ˆш˚ ˛˛˛ÄÚ ˜шÛÒˆшÛÒ ˜шÛÒˆшÛ˛ÄÚˆáÁˇ¯ÒˆÄÊ˛ÄÚ ˜ÄÊÒˆÄÊÒ ˜ÄÊÒˆ¡˛ÄÚˆ·Òˆ·˛ÄÚ ˜·Òˆ·Ò ˜·Òˆ·˛ÄÚˆ·Òˆ·˛ÄÚ ˜Ä‚Ò ˆ‡0Ò ˜‡`Òˆ‡¿ÄÚˆ `ÂÄÒˆIJ¿Î˛ÄÚ ˜ 0üœ˜Áœ˝¿ÏÒˆ  ˜ç˛˜ˇˇÄÏÒ ˜ `~1çfl∑¯ÒÄÏ Òˆ ¿{flœ~˜ÔˇÄÏ˛ÄÚˆ¯¸ ÁÒˆ¸ Á˛ÄÚ ˜·Òˆ¡Ò ˜¢ˆ"2Ú"0ÒˆĈÚ˛ÄÚˆĈÚÒˆıàòÚàê˛ÄÚ ˜ĈÚÒ(ˆ
  7923. ÄnÄ˝80˛‡¿˝Ò+ ˜
  7924. ¢""z""#¢˝"2"":">""#/b"#¢""0Ò*ˆ
  7925. Äs∑ø∞˝˜˚w˛Ÿ˚œ{‡˛ÄÚ)ˆ
  7926. Äfl¸˝Ä˝˚€3?€ÏflŸÄÒ)ˆ˛àÓù¸˝¸àòààü〪∏À˘Ïÿ…∏ààê˛ÄÚ+ ˜
  7927. Äo›∑∑∞˝?˘æflyœ¯œ¯‡Ò#ˆIJ ˙˛ĸ¿˝Ò& ˜¢˛":˙"2˛"'¢˝"#¢˝"0ÒˆĈÚ˛ÄÚˆĈÚÒˆıàòÚàê˛ÄÚ ˜¡ÒˆÄÊÒ ˜ÄÊÒˆÄÊ˛ÄÚˆáÁˇ¯ÒˆшÛ˛ÄÚ ˜шÛÒˆшÛÒ ˜шÛÒˆшÛ˛ÄÚò@Ä¿˜Ä¿˜¯â8ĈшÛÒ!ˆÑp˚˙ ˚˛ÄÚ) ˜
  7928. ÑH˝    g¯¸Ò(ˆÑKªücû2=∑ú2Pafi¸Ò* ˜ÑO≤jL¡ôx¢bS#¸Ò)ˆÑL*L¡Y@¢~rR …¸˛ÄÚ(ˆÑsπÎá@Ó: Cåfl˛ˇÜ¸Ò#ˆÑ˝H˛˛B˜˛ÄÚ$ ˜Ñ˝à˛«˜ÒˆшÛÒ ˜шÛÒˆшÛ˛ÄÚˆáÁˇ¯ÒˆшÛ˛ÄÚ ˜шÛÒˆшÛÒ ˜шÛÒˆшÛ˛ÄÚ"ˆÑp˘!˚Ò%ˆÑH˙     ¸˛ÄÚ( ˜ÑK>@˚
  7929. !~7é››∞˝Ò%ˆÑOü˙
  7930. !ƒJ'Ÿ5*`˝Ò' ˜ÑLô˙
  7931. !4J&*`˝Ò'ˆÑsè@˚
  7932. =‚2‹ı≈†˝˛ÄÚˆш˙˚Òˆш˙˚˛ÄÚ ˜шÛÒˆш˝¯Ò ˜ш˝¯Òˆш337:˘˛ÄÚˆш'é`˘Òˆш$D©˘˛ÄÚ ˜ш#ª'r˘ÒˆшÛÒ ˜шÛÒˆшÛ˛ÄÚˆшÛÒˆшÛ˛ÄÚ ˜шÛÒˆáÁˇ¯Ò ˜ĘÒÒˆĘ@ÒP˛ÄÚˆĘ@ÒÒˆį˛ÄÚ ˜¡0Òˆ‚Ò ˜ˆ ÓÅÒˆ˜Ï˛ÄÚˆ˜ÄÏ    Òˆ·˛ÄÚ ˜¯Î@Òˆ˘ÍÒ ˜˘¿ÍÒˆ·˛ÄÚˆ˙ÈÒˆ˚Êˇ˛ÄÚ ˜˚ÊÒˆ˚ÊÒ ˜˚ÊÒˆ˚ÊÄÚˆ˚ÁˇÇÒˆ˚˜@ÚÇÄÚ ˜˚˜@ÚÇÒˆ˚˜@ÚÇÒò@¿Ú˜¿Ú˜8âjÄ ˜˚˜@ÚÇÒˆ˚˜@ÚÇÄÚˆ˚˜@ÚÇÒˆ˚@¸@˝¯ÇÄÚ" ˜˚ÄIJ@ ¬˜ÇÒ#ˆ˚ô€]ÛÛ@yø8bCÄ˙ÇÒ$ ˜˚ø&R  œÄ@ §ƒ¢Ê˘ÇÒ$ˆ˚†‚R 
  7933. Ã@$§¸‚    !Ä˙ÇÄÚ"ˆ˚û\rsê@Gøæˇ˘ÇÒˆ˚˝    @@DıÇÄÚ ˜˚˝    @@ŒıÇÒˆ˚˜@ÚÇÒ ˜˚˜@ÚÇÒˆ˚˜@ÚÇÄÚˆ˚ÁˇÇÒˆ˚˜@ÚÇÄÚ ˜˚˜@ÚÇÒˆ˚˜@ÚÇÒ ˜˚˜@ÚÇÒˆ˚˜@ÚÇÄÚˆ˚˜@IJ Ä˚ÇÒˆ˚˘@)˝!$˚ÇÄÚ% ˜˚    ˙ @)òÊΔl„Ït‹m ˛ÇÒ$ˆ˚    3‰˚ @9ΩÖÈô!ò5Ú˙û˛ÇÒ& ˜˚    y˚ @E§eô!ò5öê˛ÇÒ%ˆ˚    Iê˚ @EùƒÁh·h4Úzé˛ÇÄÚˆ˚8Ù˚@ÚÇÒˆ˚˜@ÚÇÄÚ ˜˚˜@ÚÇÒˆ˚˜@(ÄÄÄ˙ÇÒ ˜˚˜@,ÄÄÄ˙ÇÒˆ˚˜@Jö@Ù≤Ã@˙ÇÄÚˆ˚˜@J•@ À>@˙ÇÒˆ˚˜@I•ÄÀK@˙ÇÄÚ ˜˚˜@Hô 2Ó@˙ÇÒˆ˚˜@ ¸Ä˙ÇÒ ˜˚˜@ ¸Ä˙ÇÒˆ˚˜@ÚÇÄÚˆ˚˜@ÚÇÒˆ˚˜@ÚÇÄÚ ˜˚˜@ÚÇÒˆ˚ÁˇÇÒ ˜˚ÊÒˆ˚ÊÄÚˆ˚ÊÒˆ˚ÊÄÚ ˜˚ÊÒˆ˚ÊÒ ˜˚ÁˇÇÒˆ˚˜@ÚÇÄÚò@@˜@˜jâ™Ä?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚò@@Ę@Ę™âÍÄ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ?“ˇÄÚ“ˇÄÚ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡    G¡¿Δ«    B@Å)«    ¬Ç)«    √ÄÇ.«    $92«    $AR«    É·å«¡¡¡¡¡#Ë ¿ Ä@$ >˝@‚# $  Ä@˛$˛b˝@‚$  —≤"ÚèÌË⁄q’u≠ÇÿÅQl£¨[Á •æ‚$ å≤E%%ì%Y%ÄU&¶ÖhÅÍ¥!*‰‘≠H™‘‚$ ñNƒ)Ihã.p¶DƒâHÅO$!L,ï…á9<ò‚$ à"$Oo°ÀŒH´eÈèòΔîL"Uπ!¡!Q<‚$ áäJ!dãG‡“II
  7934. ê8c»|"-(Úéè(‚ ÄÔÄÿ ÄÔÄÿ
  7935. ÓÄÿ¡¡'¡Ä‡Ätê˝Ä    p Ä    pÄÊ'âbÄ@Ä ÄÄ˝  Ä     ÄÊ($âSw≈j•$≈—6 &ΩdvåΩ¿;{#¢}√ê•"Èm‹Ê($JUöäïfi•Jíö SV¨öïI+@M$Ud©+A(fi•*¥†Ê($2Yì§î $í íT•ì"RJ@IDô-JBH$îŒO%Ê($ë'ë=)nflµ&§â'Ø€T¿ìh´9{T√PE)hTMÑÊ($”ë•(ΔI"$D©E•í$à“HM¨í$Ç ŒΔG>#…8Ê˝ ı˘·˝ ı˘· ˙Ï·¡¡¸Ä     c å ÄÿHÄ˝ $îÅ@ÄÿI÷]¡Áî´π’ÉG ¡]√ë(ŸK0à©+B)(wu@U)A¿…C™*ÙŸëo    2JA¬p)&8¶KŘ·1…w$ŸŸ√ë˚T¿d@#)K´ZâDÇXKDHŸë}R$Éœ:Δ2p“mΔΔ9¡ìçª∞Ÿò@Ä¿˜Ä¿˜Íâ*Äı@˚˛@Ÿı@˚˛@Ÿı@˚˛@Ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¡ @Ä8ÄÕ
  7936. @ƒÃ ≈)µîè+ÿ¿Œ Œı)ZªíTi@Œ $¶qRí¥‰JÕ )K@é§$Êàö¿Œ v28q%¥xFëŒ@˛ ÄÃ@˛ Äà @˛ …¡¡¿C¿4ӇĒ A 
  7937. D@)’%‚"y6u±®Dùb@)E˝óï∏◊JB≈íö§“íPyñ•@I )*@◊Çâîì(îî#êà§ÆÄRY‚JJ8◊¬Je'm5$pàÈ¿õpt{T◊á$‚%π"/ß°‹©Gà“[§R$p◊˝˛@˛ —˝˛@@— ¸‡˚Äœ¡¡ ¸Ä0  HÄH$  I÷\ñD  K0à©H8D  ëo    2HD  Ÿ√ë˙êDH  ë}Q90 ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜*âjÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜jâ™Ä¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę™âÍÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜Íâ*Ä¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜*â\Ä¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜jâ™Äˆ˚˜@ÚÇÒˆ˚˜@ÚÇÄÚ ˜˚˜@ÚÇÒˆ˚˜@ÚÇÒ ˜˚˜@ÚÇÒˆ˚@¸@˝¯ÇÄÚ ˆ˚ÄIJ@ ¬˜ÇÒ$ˆ˚ô€]ÛÛ@yø8bCÄ˙ÇÄÚ$ ˜˚ø&R  œÄ@ §ƒ¢Ê˘ÇÒ#ˆ˚†‚R 
  7938. Ã@$§¸‚    !Ä˙ÇÒ$ ˜˚û\rsê@Gøæˇ˘ÇÒˆ˚˝    @@DıÇÄÚˆ˚˝    @@ŒıÇÒˆ˚˜@ÚÇÄÚ ˜˚˜@ÚÇÒˆ˚˜@ÚÇÒ ˜˚ÁˇÇÒˆ˚˜@ÚÇÄÚˆ˚˜@ÚÇÒˆ˚˜@ÚÇÄÚ ˜˚˜@ÚÇÒˆ˚˘@ÚÇÒ" ˜˚    ˙@IJ Ä˚ÇÒ!ˆ˚    3‰˚@)˝!$˚ÇÄÚ$ˆ˚    y˚ @)òÊΔl„Ït‹m ˛ÇÒ%ˆ˚    Iê˚ @9ΩÖÈô!ò5Ú˙û˛ÇÄÚ& ˜˚8Ù˚ @E§eô!ò5öê˛ÇÒ ˆ˚˜ @EùƒÁh·h4Úzé˛ÇÒ ˜˚˜@ÚÇÒˆ˚˜@ÚÇÄÚˆ˚˜@ÚÇÒˆ˚˜@'ÄÄ˙ÇÄÚ ˜˚˜@$ÄÄÄ˙ÇÒˆ˚˜@DôÄÙ≤Ã@˙ÇÒ ˜˚˜@Dæ@ À>@˙ÇÒˆ˚˜@D¢ÀK@˙ÇÄÚˆ˚˜@G– 2Ó@˙ÇÒˆ˚˜@ ¸Ä˙ÇÄÚ ˜˚˜@ ¸Ä˙ÇÒˆ˚˜@ÚÇÒ ˜˚˜@ÚÇÒˆ˚˜@ÚÇÄÚˆ˚˜@ÚÇÒˆ˚ÁˇÇÄÚ ˜˚ÊÒˆ˚ÊÒ ˜˚ÊÒˆ˚ÊÄÚˆ˚ÊÒˆ˚ÊÄÚ ˜˚Êˇ˛Òˆ·Ò ˜·Òˆ·˛ÄÚˆ·Òˆ·˛ÄÚ ˜·Ò ˆ‡ˇÒ ”Ò—ÄÚ“Ò—ÄÚ ”Ò“Òò@@Ę@Ę™âÍÄ ”Ò—ÄÚ“Ò “ÃÄÚ“3Ò¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡    G¡¿Δ«    B@Å)«    ¬Ç)«    √ÄÇ.«    $92«    $AR«    É·å«¡¡¡¡¡#Ë ¿ Ä@$ >˝@‚# $  Ä@˛$˛b˝@‚$  —≤"ÚèÌË⁄q’u≠ÇÿÅQl£¨[Á •æ‚$ å≤E%%ì%Y%ÄU&¶ÖhÅÍ¥!*‰‘≠H™‘‚$ ñNƒ)Ihã.p¶DƒâHÅO$!L,ï…á9<ò‚$ à"$Oo°ÀŒH´eÈèòΔîL"Uπ!¡!Q<‚$ áäJ!dãG‡“II
  7939. ê8c»|"-(Úéè(‚ ÄÔÄÿ ÄÔÄÿ
  7940. ÓÄÿ¡¡'¡Ä‡Ätê˝Ä    p Ä    pÄÊ'âbÄ@Ä ÄÄ˝  Ä     ÄÊ($âSw≈j•$≈—6 &ΩdvåΩ¿;{#¢}√ê•"Èm‹Ê($JUöäïfi•Jíö SV¨öïI+@M$Ud©+A(fi•*¥†Ê($2Yì§î $í íT•ì"RJ@IDô-JBH$îŒO%Ê($ë'ë=)nflµ&§â'Ø€T¿ìh´9{T√PE)hTMÑÊ($”ë•(ΔI"$D©E•í$à“HM¨í$Ç ŒΔG>#…8Ê˝ ı˘·˝ ı˘· ˙Ï·¡¡¸Ä     c å ÄÿHÄ˝ $îÅ@ÄÿI÷]¡Áî´π’ÉG ¡]√ë(ŸK0à©+B)(wu@U)A¿…C™*ÙŸëo    2JA¬p)&8¶KŘ·1…w$ŸŸ√ë˚T¿d@#)K´ZâDÇXKDHŸë}R$Éœ:Δ2p“mΔΔ9¡ìçª∞Ÿò@Ä¿˜Ä¿˜Íâ*Äı@˚˛@Ÿı@˚˛@Ÿı@˚˛@Ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¡ @Ä8ÄÕ
  7941. @ƒÃ ≈)µîè+ÿ¿Œ Œı)ZªíTi@Œ $¶qRí¥‰JÕ )K@é§$Êàö¿Œ v28q%¥xFëŒ@˛ ÄÃ@˛ Äà @˛ …¡¡¿C¿4ӇĒ A 
  7942. D@)’%‚"y6u±®Dùb@)E˝óï∏◊JB≈íö§“íPyñ•@I )*@◊Çâîì(îî#êà§ÆÄRY‚JJ8◊¬Je'm5$pàÈ¿õpt{T◊á$‚%π"/ß°‹©Gà“[§R$p◊˝˛@˛ —˝˛@@— ¸‡˚Äœ¡¡ ¸Ä0  HÄH$  I÷\ñD  K0à©H8D  ëo    2HD  Ÿ√ë˙êDH  ë}Q90 ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜*âjÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜jâ™Ä¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę™âÍÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜Íâ*Ä¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜*â\Ä¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ˇ∞@ˇ ˇˇˇˇ@
  7943. ˇ·ˇ‚7^
  7944. 4*\¯, Palatino&e.3+l"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@lIntroduction to •)8 Apple Events4⁄*˙¯
  7945. (‡*3-20    )BResponding to Ü)< Apple Events4^*¿¯
  7946. ^*x¯4^*x¯
  7947. à*ê¯4â*ꯠä*ä˛
  7948. ˇ·ˇ‚7^ˇˇ©ˇÆ°dONLNdu*àó(É*Responding to =Í°dONLNduóà¯)m Apple EventsˇˇˇˇˇˇU˛(É3
  7949. °dONLNdôl•s(¢lA∫†°dONLNdôs•¡) client application臰dONLNd0ô¬•Î)O
  7950.  typicallyú°dONLNd:ôΕ))
  7951.  uses the ¿°dONLNdDô•ä)(Apple Event Manager to crÅ¿°dONLNd]ôã•◊)xeate and send an ´@°dONLNdnô◊•Ù)LApple °dONLNdt¶l≤ä(Ølevent r@°dONLNd{¶ã≤&)$equesting a service or information. dONLNdü¶&≤-)õAœÄ°dONLNd†¶-≤Ö) server application r' °dONLNdµ¶Ü≤Ê)Yesponds by using the °dONLNd ≥løÂ(ºlApple Event Manager to pr≠‡°dONLNd„≥Âø)y
  7952. ocess the V@°dONLNdÌ≥øE)* Apple event°°dONLNd¯≥EøN)6, ej†°dONLNd˚≥Oøá)
  7953. xtract data frÒ‡°dONLNd    ≥áøË)8om the attributes and °dONLNd¿lê(…lparameters of the `°dONLNd1¿ºÃ)PApple event, an2Ä°dONLNd@¿Ã
  7954. )Fd Œ@°dONLNdB¿
  7955. ÃW)if necessary add rW†°dONLNdT¿XÃ∑)Nequested data to the r®@°dONLNdj¿∑ÃÁ)_ eply event °dONLNduÕlŸo(÷lrE°dONLNdvÕpŸ≥)eturned by the @°dONLNdÖÕ≥Ÿ)CApple Event Manager tàÄ°dONLNdöÕŸ¥)g%o the client application. The server H °dONLNdøÕµŸÿ)õusually °dONLNd«⁄lÊu(„lprG °dONLNd…⁄vÊõ)
  7956.     ovides it`°dONLNd“⁄úÊ∏)&s own dONLNdÿ⁄∏Ê)Apple event handler fñ†°dONLNdÌ⁄Êã)aor performing the action r@°dONLNd⁄åÊı)sequested by the client’s °dONLNd ÁlÛß(lApple event. °dONLNd.˘lç*As its fi¯¿°dONLNd7˘çÓ)!rst step in supporting M°dONLNdN˘Ôq)bApple events, your applicatio8†°dONLNdk˘rƒ)Én should support tN`°dONLNd}˘ƒ—)Rhe °dONLNdÄlo(lrE°dONLNdÅpá)equir\@°dONLNdÜáî)ed c@°dONLNdâî )Apple events sent by the Finder]°dONLNd® Õ)å'. If you plan to implement publish and °dONLNdœlK(l4subscribe capabilities, your application must also r˘`°dONLNdKâ)flespond to the †°dONLNdäÈ)?Apple events sent by °dONLNd& l,«()lthe Edition Manager√Ä°dONLNd9 Δ,À)Z. dONLNd; À,—)YV`°dONLNd< —,})(our application should also be able to r.@°dONLNdd },‹)¨espond to the standar‡`°dONLNdy ‹,‰)_d °dONLNd{-l9(6l'Apple events that other applications ar\@°dONLNd¢-9„)¨4e likely to send to it or that it can send to itselfô°dONLNd÷-„9Ë)À. °dONLNdÿ:lFr(ClT†¿°dONLNdŸ:rF¨)his section prG °dONLNdÁ:≠Ffl); ovides a qu‡°dONLNdÚ:‡FÊ)3;ick overview of the tasks your application must perform in °dONLNd-GlSo(PlrE°dONLNd.GpS¨)esponding to R¿°dONLNd;G¨SÈ)<Apple events.°dONLNdIYler(blTµ¿°dONLNdJYqe|)o rp@°dONLNdMY}e´)
  7957. espond to 5 °dONLNdWY´eL).#Apple events, your application must,Zapf Dingbats°dONLNd{olvq(uln
  7958. °dONLNd}lxx¨) set the appro†°dONLNdâl¨x”)4    opriate fl[°dONLNdìl‘x˝)( ags in its ,
  7959. Courier»†°dONLNdûl˝x))'»@°dONLNdülx)SIZEΔ¿°dONLNd£lx!)'Δ`°dONLNd§l!x') r `°dONLNd¶l(x@)esourS†°dONLNd´l@xI)ce°dONLNdÆÅlàq(áln
  7960. °dONLNd∞~xä{) t¬`°dONLNd±~{ä-)+est for high-level events in its event loop°dONLNd›ìlöq(ôln
  7961. °dONLNdflêxúÅ) prG °dONLNd·êÇúñ)
  7962. ovidg°dONLNdÂêñúù)e R@°dONLNdÁêùú)Apple event handlers fë°dONLNd˝êú)eor the x °dONLNdêúÜ)Apple events it supportÄ°dONLNdêáúã)is°dONLNd•l¨q(´ln
  7963. °dONLNd¢xÆô) use the k °dONLNd'¢öÆ)"AEInstallEventHandlerc@°dONLNd<¢Æw)~ function to install its º†°dONLNdU¢wÆ÷)_Apple event handlers°dONLNdj∑læq(Ωln
  7964. °dONLNdl¥x¿ô) use the k °dONLNdt¥ö¿ )"AEProcessAppleEventd°dONLNdᥠ¿K)r function to prq@°dONLNdñ¥K¿d)?ocess º@°dONLNdú¥d¿û) Apple events°dONLNd©≈l—É(ŒlBeforÛ¿°dONLNdÆ≈É—è)e yÃÄ°dONLNd±≈ê—Õ)our applicatio°@°dONLNdø≈Œ—Ï)>n can ry@°dONLNdΔ≈Ï—)
  7965. espond to > °dONLNd–≈—r).Apple events sent fr˘ °dONLNd‰≈r—Ü)Xom rᆰdONLNdË≈á—Ë)emote computers, the °dONLNd˝“lfiÃ(€lPuser of your application must allow network users to link to your application. Tο°dONLNdM“Àfiˆ(€À o do this, °dONLNdXfllÎ5(Ël/the user selects your application in the Finder5‡°dONLNdáfl5Îã)…, chooses Sharing fr †°dONLNdõflãÎ)Vom the File menu, and °dONLNd±Ïl¯≠(ılthen clicks the ´ °dONLNd¡Ï≠¯˘)AAllow Remote Pr´`°dONLNd–Ï˘¯P)Logram Linking checü†°dONLNd‚ÏQ¯\)Xkb∂`°dONLNd‰Ï\¯Ó) $ox. If the user has not yet started °dONLNd˘lu(lprG °dONLNd
  7966. ˘v&)
  7967. %ogram linking, the Sharing command ofÕ °dONLNd/˘&œ)∞'fers to display the Sharing Setup contr `°dONLNdV˘œÙ)©    ol panel °dONLNd_l„(lso that the user can start pr#Ä°dONLNd|‰Æ)x-ogram linking. The user must also authorize r`°dONLNd©ÆÙ) emote users for °dONLNdπlu(lprG °dONLNdªv )
  7968. !ogram linking by using the Users   °dONLNd‹ )ñ&“`°dONLNd›!) Gr∏Ä°dONLNd‡!P)
  7969. oups contr≤¿°dONLNdÍPÇ)/ ol panel. Pr‰¿°dONLNdˆÇ˜)2ogram linking and setting °dONLNd l,Ë()lup authenticated sessions ar3¿°dONLNd, È,k)}e described in the chapter “Pr °dONLNdJ l,¢)É ogram-to-Pr˘†°dONLNdU °,¿)5ogram °dONLNd[-l9¿(6lCommunications TJ°dONLNdk-¿9)Toolbox” in this book∑¿°dONLNd-9)Y.
  7970. ^*e¯4_*e¯ `l`¯
  7971. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNdÅOl^(ZlAccepting and ProcessinSÇ°dONLNdòO^)óg Û°dONLNdöO^=)
  7972. Apple E˝†°dONLNd°O=^])0ventsˇˇˇˇˇˇ€r)≥3
  7973. °dONLNd®elqr(nlTµ¿°dONLNd©eqq∫)o accept or send `°dONLNd∫eªq”)J@Apple events (or any other high-level events), you must set the °dONLNd˙rl~Ä({lapprI@°dONLNd˛rÅ~®)    opriate fl4†°dONLNd    r©~)(ags in your application’s t°dONLNd    "r~<)o'SIZE'q¿°dONLNd    (r<~B)$ r∂¿°dONLNd    *rB~Z)esourˇ°dONLNd    /rZ~‡)ce and include code to handle °dONLNd    Mlãd(àl9high-level events in your application’s main event loop. ˇm@@ˇ ˇˇˇˇ@
  7974. ˇ·ˇ‚7^
  7975. 4H\, Palatino&e.3+ä"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@äIntroduction to •)8 Apple Events4⁄ä˙(‡äResponding to Ü)< Apple Events
  7976. , (‡3-21
  7977. ˇˇˇˇˇˇˇˇ440lòÄ.B0oMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""B0oB0o$””””””””””””””””””””””””””””””òÄ
  7978. 60@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""60@60@˜˜˜˜˜˜˜˜˜˜˜˜˜
  7979. ˛ˇ˛ˇˇ ˇˇ˛ˇˇ     ˇˇˇ˙ˇ
  7980. ˛ˇˇˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜
  7981. 454+?òÄ
  7982. 56+@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""56+@56+@$˜˛˙ˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  7983. ˛ˇ˛ˇˇ˛¸ˇˇ˚ˇ˛˙ˇˇ˝˛ˇ˛
  7984. ˛ˇ˛ˇˇ
  7985. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  7986. ˛ˇ˛ˇˇ
  7987. ˛ˇ˛ˇˇ˛˙ˇ˜˝˝ˇˇ˛ˇ˚˝ˇ¸˛¸ˇˇ˜˝˛ˇ˛
  7988. ˛ˇ˛ˇˇ
  7989. ˛ˇ˛ˇˇ˝ˇˇ˛˜˝¸ˇ
  7990. ˛ˇ˛ˇˇ˛¸ˇˇ˜˝˛ˇ˛
  7991. ˛ˇ˛ˇˇ
  7992. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˜˝¸ˇ
  7993. ˛ˇ˛ˇˇ˝˛ˇ˛
  7994. ˛ˇ˛ˇˇ
  7995. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  7996. ˛ˇ˛ˇˇ
  7997. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  7998. ˛ˇ˛ˇˇ
  7999. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  8000. ˛ˇˇˇˇ
  8001. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  8002. ˛ˇˇˇ
  8003. ˛ˇˇˇ
  8004. ˛ˇˇˇ
  8005. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  8006. ˛ˇˇˇˇ
  8007. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  8008. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  8009. ˛ˇˇˇˇ
  8010. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähê(eäT∫¿°dONLNd\èh•)wo fl°dONLNd\¶h“) ags in the ,
  8011. Courier˜@°dONLNd\“hˆ),'SIZE'ı°dONLNd\ˆh¸)$ r:°dONLNd\˝h)esourÇ@°dONLNd\hΩ)%ce determine whether an application rÜ¿°dONLNdC\Ωh)®eceives high-level °dONLNdViäu´(räevents: ,Zapf Dingbats°dONLNd_äÜè*n
  8012. °dONLNda|ñà©) The ª¿°dONLNde|©à')isHighLevelEventAware≥‡°dONLNdz|'à/)~ fl@†°dONLNd}|0à€)    (ag must be set for your application to r≤†°dONLNd•|€à )´ eceive any °dONLNd∞àñî·(ëñhigh-level events†°dONLNd¡à‚î‰)L.°dONLNd√ùä§è(£än
  8013. °dONLNd≈öñ¶©) The ª¿°dONLNd…ö©¶-)localAndRemoteHLEvents≥Ä°dONLNdflö-¶5)Ñ fl@@°dONLNd‚ö6¶·)    (ag must be set for your application to r≤@°dONLNd
  8014. ö·¶˛)´eceive °dONLNd¶ñ≤ˇ(Øñhigh-level events sent fr5‡°dONLNd*¶≤•)j"om another computer on the network'¿°dONLNdL¶¶≤®)¶.°dONLNdN∑ä√ö(¿äAn :@°dONLNdQ∑ö√p)3Apple event (like all high-level events) is identifi%†°dONLNdÖ∑q√fi)◊ed by a message class of °dONLNdûƒä–‰(ÕäkHighLevelEventz`°dONLNd≠ƒ‰–)Z in the ëÄ°dONLNdµƒ–)whatê°dONLNdπƒ–) f4`°dONLNdªƒ –m)ield of the event r£Ä°dONLNdŒƒm–)Mecor‡°dONLNd“ƒÄ–ã)d. °dONLNd’ƒã–ë) YΔÄ°dONLNd÷ƒê–¿) ou test the +‡°dONLNd‚ƒ¡–Ÿ)1what*`°dONLNdʃŸ–fi) fŒ¿°dONLNd˃fi–¸)ield of °dONLNd—ä›ó(⁄äthe]`°dONLNdÛ—ò›ö) ›`°dONLNdÙ—ö›∏)event ro†°dONLNd˚—π›À)ecor‰°dONLNdˇ—À›/)d to determine whetheB`°dONLNd—0›C)er it c–°dONLNd—C›ï)ontains the value r—¿°dONLNd-—)ReprbÄ°dONLNd0—§›Ê)esented by the °dONLNd?fiä͉(ÁäkHighLevelEventz`°dONLNdNfi‰Í)Z constan@°dONLNdVfi    Í)%t; if yê°dONLNd]fiÍs)our application defø‡°dONLNdpfisÍ)T!ines any high-level events other °dONLNdëÎ䘆(Ùäthan Ü¿°dONLNdñΆ˜fl)Apple events, Ä°dONLNd§Î‡˜()@you should also ƒ@°dONLNd¥Î(˜J)H    test the -°dONLNdΩÎK˜u)#message*`°dONLNdƒÎu˜})* fi∑ °dONLNd«Î}˜«)eld of the event r=‡°dONLNdŸÎ»˜⁄)Kecor≤@°dONLNd›Î⁄˜Ì)d to °dONLNd‚¯ä≥(äBdetermine whether the high-level event is something other than an ê °dONLNd$¯≥(≥Apple event. If the °dONLNd8äF(ä+high-level event is not one that you’ve defi‡°dONLNddG)Ω/ned for your application, assume that it is an °dONLNdìä≈(äApple event.  ¿°dONLNd†≈Œ);(Yfl °dONLNd¢Œ”)    oT†°dONLNd£‘Â)u ar†¿°dONLNdßÂ?)e encouraged to use ¿†°dONLNdª?∫)ZApple events instead of defi¢`°dONLNd◊ªˇ)|ning your own °dONLNdÂä+0((ä%high-level events whenever possible.)°dONLNd 1ä=/*&After determining that an event is an ·Ä°dONLNd11/=å)•Apple event, use the `°dONLNdF1ç=ˇ)^AEProcessAppleEvent@°dONLNdY1ˇ=)r °dONLNdZ>äJ⁄(Gäfunction to let the πÄ°dONLNdn>⁄Jë)P(Apple Event Manager identify the event. ø‡°dONLNdñ>ëJ©)∑Figur톰dONLNdõ>©J¬)e 3-100 °dONLNd°>√J
  8015. ) shows how the °dONLNd∞KäW¶(TäSurfWP°dONLNdµK¶WZ)*riter application accepts and begins to prO`°dONLNdflKZWÄ)¥    ocess an ο°dONLNdËKÄW)&Apple event sent by the Finder®Ä°dONLNdKW
  8016. )à.
  8017. yHä4zHä"zH]
  8018. ˇ·ˇ‚7^    °dONLNdoäz∫(wä Figure 3-10°dONLNdoÃz†)B0Accepting and processing an Open Documents event
  8019. âHó4äHñ
  8020. äHó4âFäGò@@˜@˜äG >¡¡?œˇÄı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ıò@@Ę@Ę G
  8021. >?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?Ρ˝͡¿ı?Ρ˝͡¿ı?Ρ˛͡¿ı?ΡÄ͡¿ı?Ρ@͡¿ı?Ρ ͡¿ı?ΡÛ¸͡¿ı?Ρ    ¸͡¿ı?Ρ‡ ¿͡¿ı?Ρ¡0͡¿ı?ΡÄ»͡¿ı?Ρ͡¿ı?ΡÚ͡¿ı?ΡÅ©͡¿ı?ΡTè͡¿ı?Ρ"(è͡¿ı?ΡB è͡¿ı?ΡDè͡¿ı?ΡÑ    ͡¿ı?Ρà(á͡¿ı?Ρ4@͡¿ı?Ρ    j ͡¿ı?Ρ    U͡¿ı?ΡJà͡¿ı?ΡED͡¿ı?ΡB¢͡¿ı?ΡêAS͡¿ı?ΡH ¨è͡¿ı?Ρ( \è͡¿ı?Ρ0è͡¿ı?Ρè͡¿ı?Ρè͡¿ı?Ρ ͡¿ı?Ρ¿͡¿ı?Ρ˝͡¿ı?Ρ˝͡¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ıò@Ä¿˜Ä¿˜
  8022. GJ>?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ıò@¿˜¿˜JGä>?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ıò@@˜@˜äG >?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ı?œˇ¿ıœˇ¿ı¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  8023. »
  8024.     »
  8025. »
  8026. (»
  8027. êËr|»
  8028. ëÇ»
  8029. ˛8»¡¡¡¡¡'¿`ÄàIJ ˛‡˛˛ Â$ Äêr@IJÄ˚à˛˛ Â'#OEê@0Ã ≥ÖY;≠ºƒ
  8030. ã`àçbflp]-Â'#R (p$@1UzãR’¢™ƒ&»+DU°    W&•jÄ•V†Â'#íZp$@J#ìR$ô§«;ƒ»JD
  8031. y!
  8032. adÆLq…‰¿Â'#Ãt@à$ÄäÓ%úÃ=;    E\È∞|Δ4¢a≠…û
  8033. â‡Â'#ú\8psùŸú)-ÜB#˜IpTÅ√C·iGy@²"˙ "˝à⁄˛"˙ "˝à⁄˛˙ ˝p⁄¡¡( }†@8˛DÅD@¿|Ê&)䃸@@@Ä$Ê)%)L∑+-)#/E±µµë≤2‰õo≠ã‰[Ĭîê#•æpÁ)%1T“T^ı%RJ—Zö≤“UEM5ïïD≠    @«z®8™‘ÄÁ)%—dî‰î¶HîíëRíñîâäI&§∏â)A"SpA<òpÁ)%bD    6à˘Kkˆ’0é§$6øŒìO%,ÎÕSÇ$•¿EQ<Á)%sNç$x¶2D§â q%%$JâFJ"6¥àís8¯è(‡Á˝˛@ıĢ ‚˝˛@ıĢ ‚ò@@Ę@Ę G
  8034. > ˘@Ï ‚¡¡DÄÑ060ÿ @˝ "$Iÿ(ø≤‰[úêd]«TrÅ+∏r%Ÿ    9BED≠•@©+™T•    'u@•^Ä⁄
  8035. K<Iâ) Å˛˝1¬ô.–¶9.‰Ä⁄nèÕSíHíXB≠h !À    hâŸKtäàí=–Á9ìÉI∑6<Á2q∑vŸı˙@Ÿı˙@Ÿı˙@Ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ‡Õ Õ §Ñ÷R8¨ fŒ ;’DjÓQP™Œ íõÑ    JJ„ê0Œ •.:êì≤ "vŒÿ…¡ƒîb·‚2HÄœ ˛!˝Äà ˛!˝ÄÃ
  8036. ˛!˝Ä ¡¡˛–¯–ÇÄ@ê–óâ±÷»í?Ÿy,—* J“ìTña"íê—L
  8037. &Rî¢d"fi$§ê—~    )ï5¥Ë    ≥áGµ —Tìâ&‰êç"˙E" —
  8038. ¸@À
  8039. ¸@À¸Ä»¡¡    @¿¿À     @! À    (ø≤‚∞" À        9BEE@‚ À    
  8040. K<Iâ@ À    nè Å@À    KtäÑÄÂÄÀ¡¡¡¡¡¡ò@Ä¿˜Ä¿˜
  8041. GJ>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜JG|>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜äG >¡¡Œ3ÙŒ@ı ¬Œ¿ıŒ@ıŒ¿ı ¬Œ@ı ¬Œ¿ıŒ@ıŒ¿ı ¬˛3¯0fi@ı  ˙0‘˛É3∏˙<˜ænÔ·¿ı˛ÉzP˙<fiˇ?ˇˆ·@ı˛ãBP˙ffi¯1ÿˆ·¿ı s:H˙f˜ø蘑
  8042. ÛΔ›@ı ÙΔ–Œ¿ı ˛
  8043. ‘@ı˛@˝˜ˇ¿‰¿ı ‹Ífˆp˛˜`◊ÚöüYH˛˜`‰@ı
  8044.  2öâYH˜"`◊
  8045. ¸Íw6H˜`‰¿ıIJˇˆ>¸aˇˇ¯Á@ı IJàÎààÿ˛àéà·Á¿ı ˚êc˜p€›ÔúÔ‡a¿€˙–cfl¯fiwÔ˛˜¿a˛@Ë@ı ˚í"c˛z˛sÔÚˆba˛`€˙>˜¯ÛfiÔfi˜¿a˛ Ë¿ı˛
  8046. ˇˇ¯ˇ˛¿˙aˇˇ¸ Ë@ıÄ ˛ àà»˙à‡0Ë¿ı ˛˜`€ˇƒ˝˜`Ë@ı 0d˝˜ˇ‡€?˛$˝˜`Ë¿ı?˛$˝˜`Ë@ı?‡$˝˜`Ë¿ı ?‡$˝˜`€>$˝˜`Ë@ı >$˝˜`€>$˝˜`Ë¿ı $˝˜` Ë@ı ?Ä$˝˛` Ë¿ı  $˝¸`0€  $˝Δ“”0``Ë@ı ?ˇ‰˝È+4¯`¿€˝ -4@`‰¿ı˝ ÁE(”∏`‰@ı˝˜`¿Á¿ı ˝˜` ⁄?ƒ˝˜`åÂòÈ@ı ˝"˛`~ó–‹˝2¸`0öÈ¿ı!˝*…“”0`Œë–È@ıÄ ˝ +%+4¯`‰¿ı ˇˇ¯˝ '&-4@`◊˛Ä˝ "ƒE(”∏`‰@ıò@@Ę@Ę G
  8047. > Ä˝˜`
  8048.  ‹˛Ä˝˜`@È¿ı˛ˇˇ¯˝˜`› ÃʇÍ@ı˜˜`Û+>iêÍ¿ı ¯˜`3+iꛘ˜`˝ Ó&êÍ@ı ¯˜`Ÿ˛¯¸˜`Ê¿ı˛Ä¸˜`‰@ı˛ãúÿ˝˜`‰¿ı ˙e˝˜`◊˛äe˝˜`Ê@ı ä\˝˜ˇ‡Ä⁄˜˜ˇ‡@Á¿ı Í Á@ı Í۸˿ı
  8049.  Î    ¸€Í‡ ¿È@ı  Î¡0‹ÍĻȿıÍÈ@ıÍÚÈ¿ı  ÎÅ©‹ÍTÄÍ@ı  Î"(Ä›ÍB ÄÍ¿ıÍDÄÍ@ıÍÑ    È¿ı  Îà(á‹Í4@È@ı  Î    j ‹Í    UÈ¿ıÍJàÈ@ıÍEDÈ¿ı  ÎB¢‹ ÈêASÈ@ı  ÍH ¨Ä›È( \ÄÍ¿ıÈ0ÄÍ@ıÈÄÍ¿ı  ÍÄ› È Ë@ı     Í¿€Œ¿ıŒ@ıŒ¿ı ¬Í8í È@ı  ÎDí‹Í2_´Ø∞Í¿ıÍR≠'‡Í@ıÍFRm& Í¿ı  Î9“E#‡›Œ@ı ¬Œ¿ıŒ@ıŒ¿ı ¬Œ@ı ¬ ÚÓˇÒ¿ıÚÔÄÚ@ıÚÔÄÚ¿ıò@Ä¿˜Ä¿˜
  8050. GJ> ÛÔÄÂÚÔÄÚ@ı ÛÄ ÛÄÂÚ ÛÄÚ¿ıÚKs¶7ÙÄÚ@ıÚØ…)LÄıÄÚ¿ı Û4I)LÄıÄÂÚ£»¶7ÙÄÚ@ı Û˝ÙÄÂÚ˝ÙÄÚ¿ıÚÔÄÚ@ıÚÓˇÄÚ¿ı ÛÔÄÂÚÔÄÚ@ı ÛÔÄÂÚ˘ ¯ÄÚ¿ıÚ∞ÔÄį¸ÄÚ@ıÚôÄÌπÔü    ‡"à¸ÄÚ¿ı Û(ΔDîîúÄ"‡¸ÄÂÚ∫$Åı|îÄÙ§ê"ĸÄÚ@ı ÛoœÄb€ûfi`¿¸ÄÂÚÔÄÚ¿ıÚÔÄÚ@ıÚÔÄÚ¿ı Û`ĘÄÂÚ #∞é    ˙ÄÚ@ı Û -&6‰9∑ùùÁÄ˚ÄÂÚ 1‚LîD®à≈"í˚ÄÚ¿ıÚ )"Dî¸Øàï>í@˚ÄÚ@ıÚ oøΩflòC?ÚŸà˚ÄÚ¿ı Û˛ÛÄÂÚ˛8ÛÄÚ@ı ÛÔÄÂÚ˝@`˝ÄÄÚ¿ıÚ¿v!¿>ÄÄBÄÚ@ıÚ'$Δ¯á6‚≥Ω·€ºÒÄÚ¿ı Û(ºI§àï§RÅ"TRAÄÂÚ(§H§üïÚß“ë>W“IÄÚ@ı Û«w˜˜ÛoæAªa !ª1ÄÂÚ¸Ä˙ÄÄÚ¿ıÚ˝ÙÄÚ@ıÚÔÄÚ¿ı ÛÔÄÂÚÓˇÄÚ@ı  ÛÓˇÄÂŒ¿ıŒ@ıŒ¿ı ¬Œ@ı ¬Œ¿ıŒ@ı ÚÓˇÒ¿ı ÛÔÄÂÚÔÄÚ@ı ÛÔÄÂÚÔÄÚ¿ıÚÔÄÚ@ıÚIJ˛ÄÚ¿ı Û∞é    ÄÂÚπ&6‰9∑ùùÁàÊ‹˜àÄÚ@ı Û≈‚LîD®à≈"í    ¢JÄÂÚ≈"Dî¸Øàï>íIÚæJHÄÚ¿ıò@¿˜¿˜JGä>Ú;øΩflòC?ÚŸàa ÌàÄÚ@ıÚ˛˙˛ÄÚ¿ı Û˛8ÛÄÂÚÔÄÚ@ı ÛÔÄÂÚÓˇÄÚ¿ıÚÔÄÚ@ıÚÔÄÚ¿ı ÛÔÄÂÚ∞ÔÄ˚¸˛ÄÚ@ı ÛôÄÌπÔßq‡"D˛ÄÂÚ(ΔDîXò√ß"p˛ÄÚ¿ıÚ∫$Åı|îÅ_Ü4£"@˛ÄÚ@ıÚoœÄb€ S=„fi`‡˛ÄÚ¿ı Ûˆ˚ÄÂÚˆ˚ÄÚ@ı ÛÔÄÂÚ˛ ˛¿˛@¸ÄÚ¿ıÚ¿pOÄ¿¸ÄÚ@ıÚÎd∞fl ÌúD∂Áº@¸ÄÚ¿ı ÛUGë4°"FPA¸ÄÂÚUDë•ı>DïÚR@¸ÄÚ@ı Û‘鸲¸bˇàgmÒ˛ ÄÂÚÄÙÄÚ¿ıÚćÙÄÚ@ıÚÔÄÚ¿ı  Û˛ ˛¿˛@¸ĈˇÛ!Ú¿pOƸÄĘ@ı! ÛÎd∞fl ÌúD∂Áº ¸ÄĘÛ!ÚUGë4°"FPA¸ÄĘ¿ı!ÚUDë•ı>DïÚRê¸ÄĘ@ı#Ú‘鸲¸bˇàglÒ˛ ÄĘ¿ı  ÛÄÙ ÄÄx˛Û Úć٠ÄÄÄ(@ò˛@ı ÛÔü˛¿Ä+ù0D≥πõ9éÿÛÚÔê`Ä:Sxz˙Qoß”¿ı"Úø˘üùˆê0ÄFS@CBQl¶S@ı"Ú’$•
  8051.  êˆê0ÄGù8z:IK•Œ¿ı ÛëÊ8™¿ˆê`Ä˚ÛÚë$®ÚDêˆü˛¿Ä˚@ı Û;øÊü˘ˆÄÄĘÛÚÔÄĘ¿ıÚÔÄĘ@ıÚÔÄĘ¿ı Û¯˝˛AÄĘÛ!Ú3Ô˝¿AĈˇ¯@ı# Û$ÏÁ∏sçÔ‚vÁº#∂wû!ʡ¯ÛÚ)á1ƒΔîâP$TäH!ÄÚ¿ıÚ9$!|1úîâÚUÚR'‘˙I!ÄÚ@ıÚoÓxÁôÔ6Á>g»gl!à7f!ÄÚ¿ı Û˘Ñ¸˛AÄÂÚ˙Œ¯ÄÚ@ı ÛÔÄÂÚÔÄÚ¿ıÚÓˇÄÚ@ıÚÓˇÄÚ¿ı ¬Œ@ı ¬Œ¿ıŒ@ıŒ¿ı ¬Œ@ıò@@˜@˜äG > ¬Œ¿ıŒ@ıŒ¿ı ¬Œ@ı ¬Œ¿ıœU@ı œÃ¿ı¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  8052. »
  8053.     »
  8054. »
  8055. (»
  8056. êËr|»
  8057. ëÇ»
  8058. ˛8»¡¡¡¡¡'¿`ÄàIJ ˛‡˛˛ Â$ Äêr@IJÄ˚à˛˛ Â'#OEê@0Ã ≥ÖY;≠ºƒ
  8059. ã`àçbflp]-Â'#R (p$@1UzãR’¢™ƒ&»+DU°    W&•jÄ•V†Â'#íZp$@J#ìR$ô§«;ƒ»JD
  8060. y!
  8061. adÆLq…‰¿Â'#Ãt@à$ÄäÓ%úÃ=;    E\È∞|Δ4¢a≠…û
  8062. â‡Â'#ú\8psùŸú)-ÜB#˜IpTÅ√C·iGy@²"˙ "˝à⁄˛"˙ "˝à⁄˛˙ ˝p⁄¡¡( }†@8˛DÅD@¿|Ê&)䃸@@@Ä$Ê)%)L∑+-)#/E±µµë≤2‰õo≠ã‰[Ĭîê#•æpÁ)%1T“T^ı%RJ—Zö≤“UEM5ïïD≠    @«z®8™‘ÄÁ)%—dî‰î¶HîíëRíñîâäI&§∏â)A"SpA<òpÁ)%bD    6à˘Kkˆ’0é§$6øŒìO%,ÎÕSÇ$•¿EQ<Á)%sNç$x¶2D§â q%%$JâFJ"6¥àís8¯è(‡Á˝˛@ıĢ ‚˝˛@ıĢ ‚ò@@Ę@Ę G
  8063. > ˘@Ï ‚¡¡DÄÑ060ÿ @˝ "$Iÿ(ø≤‰[úêd]«TrÅ+∏r%Ÿ    9BED≠•@©+™T•    'u@•^Ä⁄
  8064. K<Iâ) Å˛˝1¬ô.–¶9.‰Ä⁄nèÕSíHíXB≠h !À    hâŸKtäàí=–Á9ìÉI∑6<Á2q∑vŸı˙@Ÿı˙@Ÿı˙@Ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ‡Õ Õ §Ñ÷R8¨ fŒ ;’DjÓQP™Œ íõÑ    JJ„ê0Œ •.:êì≤ "vŒÿ…¡ƒîb·‚2HÄœ ˛!˝Äà ˛!˝ÄÃ
  8065. ˛!˝Ä ¡¡˛–¯–ÇÄ@ê–óâ±÷»í?Ÿy,—* J“ìTña"íê—L
  8066. &Rî¢d"fi$§ê—~    )ï5¥Ë    ≥áGµ —Tìâ&‰êç"˙E" —
  8067. ¸@À
  8068. ¸@À¸Ä»¡¡    @¿¿À     @! À    (ø≤‚∞" À        9BEE@‚ À    
  8069. K<Iâ@ À    nè Å@À    KtäÑÄÂÄÀ¡¡¡¡¡¡ò@Ä¿˜Ä¿˜
  8070. GJ>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜JG|>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜|Gº>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘºG¸>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜¸G<>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜<G|>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜|Gº>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘºG¸>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜¸G<>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜<Gn>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜|Gº>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘºG¸>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜¸G<>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜<G|>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜|Gº>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘºG¸>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜¸G<>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜<Gn>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ˇP÷@ˇ ˇˇˇˇ@
  8071. ˇ·ˇ‚7^
  8072. 4*\¯, Palatino&e.3+l"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@lIntroduction to •)8 Apple Events4⁄*˙¯
  8073. (‡*3-22    )BResponding to Ü)< Apple Events4^*¿¯
  8074. °dONLNd\lh(elThe ,
  8075. Courierª¿°dONLNd\hÒ)AEProcessAppleEvent¥†°dONLNd\Òh!)r  function fiœ†°dONLNd#\!hN)0 rst identifiò@°dONLNd/\Ohj).es the ‡°dONLNd6\khÛ)Apple event by examining the °dONLNdSiluF(rl3data in the event class and event ID attributes. Th‡°dONLNdÜiGuQ)€e f≤`°dONLNdâiQuÁ)
  8076. $unction then uses that data to call °dONLNd≠vlÇ|(lthe °dONLNd±v|ÇC),Apple event handler that your application pr`°dONLNd›vCÇ∂)«ovides for that event. The b†°dONLNd¯v∂ÇÓ)s Apple event °dONLNdÉlè(ål&handler extracts the pertinent data frf@°dONLNd*Éè/)¢om the .¿°dONLNd1É/è©)!Apple event, performs the rß@°dONLNdLÉ©èÚ)zequested action, °dONLNd]êlúÉ(ôland r≤ °dONLNdbêÉú≠)
  8077. eturns a rã@°dONLNdlê≠úì)*7esult. For example, if the event has an event class of Â@°dONLNd£êìúÌ)ÊkCoreEventClassfl†°dONLNd≤êÌúÔ)Z °dONLNd≥ùl©¿(¶land an event ID of ‡°dONLNdΔù¿© )TkAEOpenDocuments͇°dONLNd÷ù ©5)`, the H@°dONLNd‹ù6©®)AEProcessAppleEventA °dONLNdÔù®©Ë)r function calls °dONLNdˇ™l∂n(≥l8your application’s handler for the Open Documents event.î¿°dONLNd7™n∂p(≥n °dONLNd9ºl»É(≈lBeforÛ¿°dONLNd>ºÉ»>)+e your application attempts to accept or prl@°dONLNdiº?»k)º
  8078. ocess any ó¿°dONLNdsºk»Ì),Apple events, it must use the °dONLNdë…l’Í(“lAEInstallEventHandlerx °dONLNd¶…Í’<)~ function to install È¿°dONLNdª…<’›)R$Apple event handlers. This function °dONLNdfl÷l‚œ(fllinstalls handlers in an Ú °dONLNd˜÷œ‚K)cApple event dispatch table ‚Ä°dONLNd÷L‚π)}for your application; the R¿°dONLNd,÷∫‚Ù)n Apple Event °dONLNd8„lÔ¯(ÏlManager uses this table to map AÄ°dONLNdW„¯Ô˜)å8Apple events to handlers in your application. When your °dONLNdèl¸q(˘la°dONLNdêq¸π)pplication calls t˜@°dONLNd¢π¸Δ)Hhe @°dONLNd•«¸9)AEProcessAppleEvent  °dONLNd∏9¸x)r function to pr`°dONLNd«x¸û)?    ocess an ¥¿°dONLNd–û¸È)&Apple event, the °dONLNd·˝l    …(lApple Event Manage<@°dONLNdÛ˝     Û)^
  8079. r checks t∏‡°dONLNd˝˝Û    ))he uÄ°dONLNd˝    Ù)8Apple event dispatch table and, if your application has °dONLNd8
  8080. l„(linstalled a handler for that  °dONLNdU
  8081. ‰.)xApple event, call뇰dONLNdf
  8082. .N)Js that hˆ`°dONLNdn
  8083. Nf) andleïÄ°dONLNds
  8084. gj)r ¿°dONLNdt
  8085. jl).J¿°dONLNdu
  8086. mo)  ¿°dONLNdv
  8087. oá)FigurùÄ°dONLNd{
  8088. áõ)e 3-1Æ`°dONLNdÄ
  8089. õ†)1Æ`°dONLNdÅ
  8090. †Á) shows how the °dONLNdêl#r( lflå¿°dONLNdír#§) ow of contr· °dONLNdù§#’)2 ol passes fr⁄†°dONLNd©’#M)1om your application to the ê@°dONLNdƒM#Ê)x Apple Event Manager and back to °dONLNd‰$l0∑(-lyour application.
  8091. R*c¯4S*c¯"S*]
  8092. ˇ·ˇ‚7^    °dONLNdˆHlSú*# Figure 3-11°dONLNdHÆS¿)BThe ê°dONLNdH¿S‹)CApple Event Manager calling the handler for an Open Documents event
  8093. bgǯ4chů
  8094. ckǯ4bjckò@@˜@˜ck£b¡¡?”ˇ¸Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?˘ˇ˛˝·ˇ˛Ò?˘ˇ˛˝·ˇ˛Ò?˘ˇ˛˛·ˇ˛Ò?˘ˇ˛˛·ˇ˛Ò?˘ˇ˛ Ä·ˇ˛Ò?˘ˇ˛ @·ˇ˛Ò?˘ˇ˛!Á¯·ˇ˛Ò?˘ˇ˛¯·ˇ˛Ò?˘ˇ˛ ¿Ä·ˇ˛Ò?˘ˇ˛Ç`·ˇ˛Ò?˘ˇ˛ê·ˇ˛Ò?˘ˇ˛·ˇ˛Ò?˘ˇ˛‰·ˇ˛Ò?˘ˇ˛!R·ˇ˛Ò?˘ˇ˛"©·ˇ˛Ò?˘ˇ˛DQ·ˇ˛Ò?˘ˇ˛ Ñ)·ˇ˛Ò?˘ˇ˛ à4·ˇ˛Ò?˘ˇ˛!"·ˇ˛Ò?˘ˇ˛!Q·ˇ˛Ò?˘ˇ˛"hÄ·ˇ˛Ò?˘ˇ˛‘@·ˇ˛Ò?˘ˇ˛ ™ ·ˇ˛Ò?˘ˇ˛ ï·ˇ˛Ò?˘ˇ˛ äà·ˇ˛Ò?˘ˇ˛ ÖD·ˇ˛Ò?˘ˇ˛ Ç¶·ˇ˛Ò?˘ˇ˛êAY·ˇ˛Ò?˘ˇ˛P@π·ˇ˛Ò?˘ˇ˛0 a·ˇ˛Ò?˘ˇ˛#·ˇ˛Ò?˘ˇ˛ ·ˇ˛Ò?˘ˇ˛@·ˇ˛Ò?˘ˇ˛Ä·ˇ˛Òò@@Ę@Ę£k„b?˘ˇ˛˝·ˇ˛Ò?˘ˇ˛˝·ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Òò@Ä¿˜Ä¿˜„k#b?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Òò@¿˜¿˜#kcb?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Òò@@˜@˜ck£b?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò?”ˇ˛Ò”ˇ˛Ò¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  8095. ¯p‡»    H 9«
  8096. @     ¿»
  8097. p  »
  8098. $áCê »
  8099. DàD@»
  8100. œ¯9Ä»¡¡¡¡¡1~Ñ– ¿|`˝?Äà¯`˛˛1$Éú    P Ä$†˝àPÄ1˛˛2."z,ÄÄÑ@bîê#•æ¬ÿæVR∂yÀ!e±—Y ¡l@®∂Fé±oú.ñ¯2.2ñQCņgz®8™‘Eid®*íöêçQ™“í†ï¥@ıZ´ìRµ R´P2.Dí”Äy¿íSpA<òIJe»D•ë    ·2îß •§@ßí%0≤W&‰Ú`2.Üc¢A•¿EQ<$OõŸ_∑¶aãÅ5¥A*ÃcJ&-V‰ÑOÖD2.ƒ‚·√Éú$„;8¯è(4Íí∏%%$·rU&„¡H1‰6ॣ 8r<†ò@@Ę@Ę£k„b˙ ˙D˛¸˝@Ê˙ ˙D˛¸˝@Ê˛‡˙ ˙8˝‡¸˝@Ê¡¡(cË08¿˛ 0 @‡ Ê'LP ˝@  Ê)%1J`πYiIz-à≠¨çëó$ÿ }ht_"ÿ‰§Å-ÛÄÁ($)ä†&í¢˜©*íVà
  8101. ‘’ñí™*h®î¨™%hJ;’A≈V§Ê)%Fã $ß$•2D§îàîLRH0•%ƒIHí    õÇ    ‰√ÄÁ)%C I¥G [_∂©Ñu! Èµ˛tò"y)g^jò‘%.*â‡ÄÁ($„öti#≈1í%$Iâ)(π"THí2Qµ§Dêà3ò…«ƒyGÊ˝˛Bı¯!·˝˛Bı¯!·
  8102. ˘BÎ!·¡¡Ä ¿@!Ä√Äÿ)˝     % @Ä$∏Äÿ)E˝ó"ÿt‰Å&*Ó:£ê–$â]√ë(ŸI *%hÖ*:=P
  8103. •(pG™*ÙŸRY‚LIHx\ )é…p@â1…w$Ÿõpt~jòê R¬k@a    XKDHŸ“[§TDêÈÓá1åúMπ±Ê9ìçª∞Ÿı˚˛@Ÿı˚˛@Ÿı˚˛@Ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¡p˛ćÕ  ÄÄ@Õ •$ ≤ë≈`[0Œ fi™ +WräÄçPŒ $î‹ JRWÄâÄŒ E)p‘Ñùë∞Œ ŒΔN$£íDŒ˛ Ã˛ Ã ˛…¡¡xxĉ¿8‡@÷$$@Ä
  8104. @@÷$∏DO-é∂BDÂì¨ê
  8105. Hæ≤‰∑◊)PX≤Vîö¢E
  8106. 2’PYDEJH◊B`Q2î•"àÚó†ã8IíG◊CIL©≠ßDå>"0&Œ è‘Å◊‚†‰úI7$Ö˘‘;ï)‚4ãxäàé◊¸"˛˛—¸"˛˛(—
  8107. ¸˙0œ¡ò@Ä¿˜Ä¿˜„k#b¡ Ä  )          )E˝óÅ  I **  RY‚LJë  õpt~Tí  “[§T$, ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜#kUb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜ck£b¡¡“30Ò“Ò ”Ò“Ò“Ò“Ò ”Ò“Ò ”Ò“Ò“Ò ˜¿fiÒ ¯ fiÒ˜åÂò‡Ò ˜~ó–‡Ò˜0ö‡Ò˜Œë–‡Ò“Ò ”Ò“Ò ˜
  8108.  ‡Ò ˆ@‡Ò¯ù Ãʇ·Ò¯”+>iê·Ò ˘S+iê·Ò¯› Ó&ê·Ò  ¯›Ò
  8109. ˜›Ò“Ò“Ò  ¯›Ò
  8110. ˜›Ò ¯ ÄfiÒ ˜ @fiÒ ˜!Á¯flÒ ˜¯flÒ ¯ ¿ćÒ˜Ç`‡Ò ¯ê‡Ò˜‡Ò˜‰‡Ò˜!R‡Ò ¯"©‡Ò˜DQ‡Ò ¯ Ñ)‡Ò˜ à4‡Ò˜!"‡Ò˜!Q‡Ò ¯"hćÒ˜‘@‡Ò ¯ ™ ˜Ïˇ‡Ò˜ ï˜Ï0Ò˜ äà˜Ï0Ò˜ ÖD˜Ï0Ò ¯ Ç¶˜Ï0ÒˆêAY˜Ï0Ò ˜P@π˜˚  ˘0Òˆ0 a˜˚PÄ&`˘0Òˆ#˜˚    W:`ânvf„9∞¸0Òˆ ˜˚    t¶ı˘%ØóÀ‡¸0Ò ˜@ˆ˚    å¶ÄÜâ%©î  ¸0ÒˆĈ˚    è:pÙy'ìπ‡¸0Òò@@Ę@Ę£k„b Í˚ ˚˚0ÒÈ˚ ˚p˚0Ò ÈÏ0Ò ÈÏ0Ò ÍÏ0Ò˜8í ˜Ï0Ò ¯Dí˜ÏˇÒ˜2_´Ø∞¯ÏˇÒ˜R≠'‡·Ò˜FRm& ·Ò ¯9“E#‡·Ò“Ò ”Ò“Ò“Ò“Ò ”Ò“Ò ”Ò“Ò“Ò“Ò ”Ò“Ò ”Ò“Ò“ÒÔˇ˛ËÒ ÔËÒ˘¸ ˛B˛?Ôˇ¸Ò# 3Ô˝ ¯ B˛ ÔÒ$$õ„‹8Êy‚Nn{¿G3wû"ˇ ÔÒ$%ábaâ$í"bQ%HíäH"≈‡ ÔÒ3=$    >o$í>Jü%Oî˙H"à∏ ˛@˛@˛Ò3 gÓ„ÃqŸ∏Ôå˘v‡C7g"Ä  ˛
  8111. @@B˛Ò-˙ Ä¸ ˛Bë ˛
  8112. ÁLY‹y˘üp˚ì˛Ò) ˙q¿¯˛& ˛îfi=}(õ'û~WÄÒ$ÔÇ ˛ î–!°(òÊLHfT˛Ò$Ô« ˛ÁN${π«»?ìÄÒÔI ˝Ñ¸ ˙Ò Ôa ˝Ñ¸ ˙ÒÔˇ˛1 ÔÒ Î# ÔÒÍ! ¿˘H0˛ÒÍ% Ä˚H0˛ÒÍ) %π¿˚    y∏Û`Ò Î! ◊‰Ä˚    KÂ7¿ÒÍ1 $Ä˚    Je4@Ò Î# —‰@˚    I‰Û¿ÒÍ! ÔÒÍ% ÔÒÍ) ÔÒ Î!?Ôˇ¸ÒÍ1 ˘¯Ò Î# ˘˛0˛ÒÍ! ‡˝    åÄxÒÍ% !ê˛€iœ»•«ÑÒÍ) !Êpìt7?©O91(¶(ÑÒ  Î! !üHî¶j|úâII3˶(¸ÒÍ1 !òHî¢jDì‹ùøΩ¸«y«ÑÒ Î# ÁH„Í<éÄ˚ÒÍ! Ä˚Ä˚ÒÍ% Ä˚¯ÒÍ) ˘¯Òò@Ä¿˜Ä¿˜„k#b Î!?Ôˇ¸ÒÍ1 ˘¯Ò Î# ˘˛0˛ÒÍ! @¸    åÄxÒÍ% DÄ€iœƒ•«ÑÒÍ) ‹‰ô•£;∏©O91'&(ÑÒ  Î! RD¶eW•`âII3‰&(ÒÍ1 RD¶%T%‹ùøΩ¸Œy«ÑÒ Î# R'›S§Ä˚ÒÍ! ˘Ä˚ÒÍ% ˘¯ÒÍ) ˘¯Ò Î!?Ôˇ¸ÒÍ1 ˘¯Ò Î# ˘¯ÒÍ! ˘¯ÒÍ% ˘¯ÒÍ) ˘¯Ò Î! ˘¯ÒÍ1 ˘¯Ò Î# ˘¯ÒÍ! ˘¯ÒÍ% ˘¯ÒÍ) ˘¯Ò Î!?Ôˇ¸ÒÍ1 ˘¯Ò Î# ˘¯ÒÍ! ˘¯ÒÍ% ˘¯ÒÍ) ˘¯Ò Î! ˘¯ÒÍ1 ˘¯Ò Î# ˘¯ÒÍ! ˘¯ÒÍ% ˘¯ÒÍ) ˘¯Ò Î!?Ôˇ¸Ò Í1ÏÒ Î#ÏÒ Í!ÏÒ Í%ÏÒ Í)ÏÒ Î!Òˇ˛ÒÍ1ÒÒ Î#ÄêÒÒÍ ¿–˘˙ÒÍ4p¿˛˛ÒÍü∞%-∏˜s=‚ñ›ÁÄÒ  Î1ΔE∞≈í"¬¢í˛ÒÍ%Eå7í>íæí@Ò  Î",ˇè8ÛyÌúÔçÒŸÄÒÍ¿˙Ä˙ÒÈ˙9¿˙ÒËÒÒ È–ÒÒËÒÒ ÈÒˇ˛ÒËÒÒÔˇ˛˛ÒÒÔ˛ÒÒ Ô@ÒÄÒÔ¿Ò?ÄÒ/ ˝ÿ˝Ä˝˛ˇ –
  8113.  (@p˝ˇÄÒ3c¿HºÄ¯˛ P2
  8114.  (Ä!H˛ˇˇ¸Òò@¿˜¿˜#kcb37¥â„»‰Rs¡ÒºÒNŒÛƒ˛DP j9úȱÛ!s8IöZªÇÄÒ3*ßúîIRåAJíIbëI ˛à–8 ˙'”+‡ !O§JfU>VÄÒ2 "§§î…ÙRå$KíIJüI$˛P"ö&S*  !L$JbU"QÇ˝Ò2*wNfl€~cºs¡Ó‹wΔ˘σˇˇ–z%“ȇ≤s§qù’O˝Ò$ @˙Ä@˝¿¯@˚˝Ò!¿¯8‡¸¿¯@˚˝ÒÔ@Ò˝ÒÔ˛Ò˝Ò Ôˇ˛˛˛ı˝ÒÔ˛Y‹ı˝Ò Ô˛=}(ı˝ÒÔ˛!°(ı˝Ò# ÄB¯˛$ı˝Ò# Dz¸˛Ò˝Ò$ ü±∫üôŒΔùœ¿˝˛Ò˝Ò#ezR±$ì)öü'¸˛Ò˝Ò$ eJç$ì(öë$¿˝˛Ò˝Ò$ì9 ∏òé«zè#Ä˝˛Ò˝ÒÔ˛Ò˝ÒÔ˛Ò˝Ò Ô˛Ò˝Ò†ı˛Ò˝Ò! ÄÄ˙˛Ò˝Ò"mπç‹Ã⁄Ê˚˛Òˇ˛˝Ò öÑ≥“ìÈı=Ù˚ËÒ öÑ≤ì)5!Ñ˚ËÒ  jɱŒ\ËıÙ˚ËÒ˙˜ËÒ ˙˜ËÒÔËÒ˛˝ ¸ËÒ
  8115. IJ˚ËÒ Ò∏3á3KFw<˝ËÒÀ‰¶IL ØJ2<˝ËÒ  $D¢ILJ®J2$˝ËÒq‰;ûG3∫ßI2˝ËÒ˛@ÛËÒ˛@ÛËÒ ÔËÒ˛@ ÙËÒ ˝ ÙËÒ‹ÏîıËÒ”2¥ıËÒS2hıËÒ     RÏHıËÒÔËÒ ÔËÒÔËÒ
  8116. ˛˝ËÒ
  8117.     ˛˝ËÒ     7-«.ogè73ú˝ËÒ{)#)ïîìŸ2zd˝ËÒ     C)#)Öîí2Jd˝ËÒ    9È"Èsdë‹Ò:\IJËÒÛIJËÒÛIJËÒ ÔËÒ˛¸ ¸ËÒ ˝˛˚ËÒ3π≥¥flûl?Æp˝ËÒzeJeÔÉ‘òc)ê˝ËÒJeJe,ò)ê˝ËÒ ;π3§Áë‘hq)p˝ËÒ˛ ˝˝ËÒò@@˜@˜ck£b ˛ ˝‡˝ËÒÔËÒÔËÒÔËÒ Ôˇ˛ËÒ“Ò ”Ò“Ò“Ò“Ò ”Ò“Ò ”Ò“Ò“Ò“Ò ”Ò“Ò ”Ò“Ò“Ò“Ò ”Ò“Ò ”Ò“Ò”UTÒ “ÃÒ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  8118. ¯p‡»    H 9«
  8119. @     ¿»
  8120. p  »
  8121. $áCê »
  8122. DàD@»
  8123. œ¯9Ä»¡¡¡¡¡1~Ñ– ¿|`˝?Äà¯`˛˛1$Éú    P Ä$†˝àPÄ1˛˛2."z,ÄÄÑ@bîê#•æ¬ÿæVR∂yÀ!e±—Y ¡l@®∂Fé±oú.ñ¯2.2ñQCņgz®8™‘Eid®*íöêçQ™“í†ï¥@ıZ´ìRµ R´P2.Dí”Äy¿íSpA<òIJe»D•ë    ·2îß •§@ßí%0≤W&‰Ú`2.Üc¢A•¿EQ<$OõŸ_∑¶aãÅ5¥A*ÃcJ&-V‰ÑOÖD2.ƒ‚·√Éú$„;8¯è(4Íí∏%%$·rU&„¡H1‰6ॣ 8r<†ò@@Ę@Ę£k„b˙ ˙D˛¸˝@Ê˙ ˙D˛¸˝@Ê˛‡˙ ˙8˝‡¸˝@Ê¡¡(cË08¿˛ 0 @‡ Ê'LP ˝@  Ê)%1J`πYiIz-à≠¨çëó$ÿ }ht_"ÿ‰§Å-ÛÄÁ($)ä†&í¢˜©*íVà
  8124. ‘’ñí™*h®î¨™%hJ;’A≈V§Ê)%Fã $ß$•2D§îàîLRH0•%ƒIHí    õÇ    ‰√ÄÁ)%C I¥G [_∂©Ñu! Èµ˛tò"y)g^jò‘%.*â‡ÄÁ($„öti#≈1í%$Iâ)(π"THí2Qµ§Dêà3ò…«ƒyGÊ˝˛Bı¯!·˝˛Bı¯!·
  8125. ˘BÎ!·¡¡Ä ¿@!Ä√Äÿ)˝     % @Ä$∏Äÿ)E˝ó"ÿt‰Å&*Ó:£ê–$â]√ë(ŸI *%hÖ*:=P
  8126. •(pG™*ÙŸRY‚LIHx\ )é…p@â1…w$Ÿõpt~jòê R¬k@a    XKDHŸ“[§TDêÈÓá1åúMπ±Ê9ìçª∞Ÿı˚˛@Ÿı˚˛@Ÿı˚˛@Ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¡p˛ćÕ  ÄÄ@Õ •$ ≤ë≈`[0Œ fi™ +WräÄçPŒ $î‹ JRWÄâÄŒ E)p‘Ñùë∞Œ ŒΔN$£íDŒ˛ Ã˛ Ã ˛…¡¡xxĉ¿8‡@÷$$@Ä
  8127. @@÷$∏DO-é∂BDÂì¨ê
  8128. Hæ≤‰∑◊)PX≤Vîö¢E
  8129. 2’PYDEJH◊B`Q2î•"àÚó†ã8IíG◊CIL©≠ßDå>"0&Œ è‘Å◊‚†‰úI7$Ö˘‘;ï)‚4ãxäàé◊¸"˛˛—¸"˛˛(—
  8130. ¸˙0œ¡ò@Ä¿˜Ä¿˜„k#b¡ Ä  )          )E˝óÅ  I **  RY‚LJë  õpt~Tí  “[§T$, ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜#kUb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜Ukïb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ęïk’b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜’kb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜kUb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜Ukïb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ęïk’b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜’kb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜kGb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜Ukïb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ęïk’b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜’kb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜kUb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜Ukïb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ęïk’b¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜’kb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜kGb¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ˇ=ò@ˇ ˇˇˇˇ@
  8131. ˇ·ˇ‚7^
  8132. 4H\, Palatino&e.3+ä"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@äIntroduction to •)8 Apple Events4⁄ä˙(‡äResponding to Ü)< Apple Events
  8133. , (‡3-23
  8134. ˇˇˇˇˇˇˇˇ440lòÄ.B0oMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""B0oB0o$””””””””””””””””””””””””””””””òÄ
  8135. 60@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""60@60@˜˜˜˜˜˜˜˜˜˜˜˜˜
  8136. ˛ˇ˛ˇˇ ˇˇ˛ˇˇ     ˇˇˇ˙ˇ
  8137. ˛ˇˇˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜
  8138. 454+?òÄ
  8139. 56+@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""56+@56+@$˜˛˙ˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  8140. ˛ˇ˛ˇˇ˛¸ˇˇ˚ˇ˛˙ˇˇ˝˛ˇ˛
  8141. ˛ˇ˛ˇˇ
  8142. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  8143. ˛ˇ˛ˇˇ
  8144. ˛ˇ˛ˇˇ˛˙ˇ˜˝˝ˇˇ˛ˇ˚˝ˇ¸˛¸ˇˇ˜˝˛ˇ˛
  8145. ˛ˇ˛ˇˇ
  8146. ˛ˇ˛ˇˇ˝ˇˇ˛˜˝¸ˇ
  8147. ˛ˇ˛ˇˇ˛¸ˇˇ˜˝˛ˇ˛
  8148. ˛ˇ˛ˇˇ
  8149. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˜˝¸ˇ
  8150. ˛ˇ˛ˇˇ˝˛ˇ˛
  8151. ˛ˇ˛ˇˇ
  8152. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  8153. ˛ˇ˛ˇˇ
  8154. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  8155. ˛ˇ˛ˇˇ
  8156. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  8157. ˛ˇˇˇˇ
  8158. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  8159. ˛ˇˇˇ
  8160. ˛ˇˇˇ
  8161. ˛ˇˇˇ
  8162. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  8163. ˛ˇˇˇˇ
  8164. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  8165. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  8166. ˛ˇˇˇˇ
  8167. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  8168. kHr4lHr mäm
  8169. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd\äk±(gäAbout [T°dONLNd\±k5)'Apple Event Handlersˇˇˇˇˇˇ€r(g3
  8170. °dONLNdrä~ê({äY@Ä°dONLNdrê~°)our —`°dONLNd!r°~ƒ)@Apple event handlers must generally perform the following tasks:,Zapf Dingbats°dONLNdbàäèè(éän
  8171. °dONLNddÖñë) extract the parameters anV†°dONLNd}Öë)pd aÚ`°dONLNdÄÖë3)ttributeχ°dONLNdàÖ4ëB)!s fr¬¿°dONLNdåÖBëV)om tŒ†°dONLNdêÖVëc)he ã@°dONLNdìÖcëô) Apple event°dONLNdüöä°è(†än
  8172. °dONLNd°óñ£Á) check that all the rS‡°dONLNdµóÁ£˛)Qequirk °dONLNd∫ó˛£ó)!ed parameters have been extracted°dONLNd‹¨ä≥è(≤än
  8173. °dONLNdfi©ñµ≈) locate any \@°dONLNdÈ©≈µ:)/Apple event objects specifi"@°dONLNd©;µé)ved by object specifi‹†°dONLNd©éµù)Ser r›‡°dONLNd©ùµØ)ecorR@°dONLNd ©∞µÿ)
  8174. ds in the c¿°dONLNd*©ÿµ)( Apple event °dONLNd6µñ¡«(æñ
  8175. parameters°dONLNdA ä—è(–än
  8176. °dONLNdC«ñ”p) 3if your application needs to interact with the user≈@°dONLNdv«o”ï)Ÿ
  8177. , use the ,
  8178. Courier∞`°dONLNdÄ«ñ”)'AEInteractWithUser©†°dONLNdí«”)l °dONLNdì”ñfl(‹ñfunction to bring it to the forW†°dONLNd≤”fl")~egru`°dONLNdµ”"fl9)ound°dONLNd∫ËäÔè(Óän
  8179. °dONLNdºÂñÒÓ) perform the action r“†°dONLNd–ÂÓÒ6)Xequested by the Ć°dONLNd‡Â6Òl)H Apple event°dONLNdÏ˙äè(än
  8180. °dONLNdÓ˜ñ5) %dispose of any copies of descriptor rË¿°dONLNd˜5G)üecor] °dONLNd˜H†)ds that have been crn¿°dONLNd+˜†∑)Xeated°dONLNd1 äè(än
  8181. °dONLNd3    ñ) add information to the rÕ °dONLNdK    )jeply 2°dONLNdP    [)Apple event if r~°dONLNd`    [Ç)Eequested°dONLNdiä&U(#ä.This section describes how your application’s t‡°dONLNdóU&⁄)ÀApple event handlers can use °dONLNd¥'ä3ó(0äthe]`°dONLNd∑'ò3ö) °dONLNd∏'ö3µ)Apple¸Ä°dONLNdΩ'µ3∑) |Ä°dONLNdæ'∏3Œ)=Event Manager to accomplish some of these tasks. The chapter °dONLNd˚4ä@ƒ(=ä “Responding‚@°dONLNd4ƒ@Δ): b@°dONLNd4«@œ)to °dONLNd    4–@“)     ;¿°dONLNd
  8182. 4“@U)Apple Events” in this book pr—`°dONLNd'4U@“)Éovides detailed information °dONLNdCAäM£(JäaboutΔ†°dONLNdHA£M•) F†°dONLNdIA¶M–)    handling X°dONLNdRA–Må)**Apple events and interacting with the usert@°dONLNd|AåMé)º.
  8183. kHr4lHr mäm
  8184. ˇ·ˇ‚7^ °dONLNd~^äl¬(hä Extracting ,¿°dONLNdâ^√l)9and Checking Dá@°dONLNdó^l")UatàÄ°dONLNdô^"l()
  8185. aˇˇˇˇˇˇ‘@)Ì3
  8186. °dONLNdúrä~ê({äY@Ä°dONLNdùrê~») ou must use G°dONLNd©r»~±)84Apple Event Manager functions to extract the data fr'@°dONLNd›r±~¡)Èom í`°dONLNd‡r¡~˜) Apple event› °dONLNdÎr˜~˝)6s.ö °dONLNdÌr˛~) °dONLNdÓäãê(àäY@Ä°dONLNdÔêãõ)ouΩ °dONLNdÒõãù)  = °dONLNdÚûã’)can also use I°dONLNdˇ’ãh)7Apple Event Manager functions tÖÄ°dONLNdhãñ)ì o extract d†°dONLNd)ñãû).at3°dONLNd+üã≠)    a frÀ‡°dONLNd/≠ã√)om d± °dONLNd3ƒãÒ) escriptor rÙ†°dONLNd>Òã)-ecori°dONLNdBã)ds, °dONLNdFåäò„(ïädescriptor lists, and ∂ °dONLNd\å„ò˜)YAE rfi °dONLNd`å˜ò    )ecorRÄ°dONLNddå
  8187. òZ)ds. Most of these r¿°dONLNdwå[òÜ)Q
  8188. outines arà°dONLNdÅåÜò)+e available in two forms‹°dONLNdôåò
  8189. )j: they °dONLNd†ôä•©(¢äeither rG°dONLNd®ô™•Ú) eturn a copy of t†‡°dONLNdπôÚ•)Hhe dat°dONLNdøô•7)
  8190. a in a buf¿°dONLNd…ô7•U))fer or rF°dONLNd—ôU•fi) eturn a copy of the descriptor r °dONLNdÒôfi•)âecoréÄ°dONLNdıô•)d for °dONLNd˚¶ä≤3(Øä(the data, including a copy of the data. °dONLNd$∏äƒê*T†¿°dONLNd%∏êƒÏ)Phe following list shows the main functions you can use to access the data of an °dONLNdu≈ä—•(ŒäApple˝Ä°dONLNdz≈•—ß) }Ä°dONLNd{≈®—Ω)evenà`°dONLNd≈Ω—¬)t:    °dONLNdÇfiäÈØ(ÊäFunction°dONLNdãfi
  8191. È;)Ä DescriptionÕ`°dONLNdˇˇ)1 
  8192. °dONLNd£Ïä¯ÿ(ıäAEGetParamPtr°dONLNd±Ï
  8193. ¯7)Ä
  8194. Uses a buf?‡°dONLNdªÏ8¯U).fer to rÇ°dONLNd√ÏU¯o)eturn $°dONLNd…Ïp¯û) a copy of t&¿°dONLNd‘Ïû¯).he data contained in an °dONLNdϘ
  8195. p(
  8196. Apple event parameter`°dONLNd˜pô)f
  8197. . Usually     †°dONLNd ˜ö†)*u¿°dONLNd ˜†)sed to extract data of fiy °dONLNd%˜)dxed °dONLNd)
  8198.  ( 
  8199. 8length or known maximum length; for example, to extract °dONLNda
  8200. * the r¢`°dONLNdfT)esult code fr懰dONLNdsTu)6om the ¿°dONLNdzu…)!keyErrorNumber‡Ä°dONLNdà…)T parameter of a °dONLNdò
  8201. $(!
  8202. rE°dONLNdô$#)eply ©‡°dONLNdû#$[) Apple event.°dONLNd¨(ä4fi(1äAEGetParamDesc°dONLNdª(
  8203. 4()ÄReturn °dONLNd¡()4Z) s a copy of ÇÄ°dONLNdÕ(Z4ù)1the descriptor r? °dONLNd›(û4∞)Decor≥Ä°dONLNd·(∞4)d or descriptor list for °dONLNd˙3
  8204. ?(<
  8205. an s°dONLNd˝3?})Apple event parameter`°dONLNd3}? )f". Usually used to extract data of °dONLNd4>
  8206. J(G
  8207. Avariable length; for example, to extract the descriptor list for °dONLNduI
  8208. UG* a list of alias rl@°dONLNdÜIGUY)=ecor‡†°dONLNdäIYUÇ)    ds specifi'Ä°dONLNdîIÉU∏)*ed in the dirÌ °dONLNd°I∏U)5ect parameter of the °dONLNd∂T
  8209. `t(]
  8210. Open Documents event.°dONLNdÕdäp(mäAEGetAttributePtr°dONLNdfld
  8211. p7)Ä
  8212. Uses a buf?‡°dONLNdÈd8pU).fer to rÇ°dONLNdÒdUpo)eturn $°dONLNd˜dppö)
  8213. a copy of ‰`°dONLNddöp)*the data contained in an °dONLNdo
  8214. {Ÿ(x
  8215. 0Apple event attribute. Used to extract data of fit‡°dONLNdKo⁄{)–xed length or °dONLNdYz
  8216. Ü(É
  8217. 4known maximum length; for example, to determine the °dONLNdçÖ
  8218. ë* sour˛†°dONLNdëÖëA)    ce of an Ù‡°dONLNdöÖAë„)$%Apple event by extracting the data frMÄ°dONLNdøÖ‰ë)£om the °dONLNdΔê
  8219. úv(ô
  8220. keyEventSourceAttry@°dONLNdÿêvú†)l  attribute.]°dONLNdÁü¯®+Ç    continuedˇ&@ˇ ˇˇˇˇ@
  8221. ˇ·ˇ‚7^
  8222. 4*\¯, Palatino&e.3+l"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@lIntroduction to •)8 Apple Events4⁄*˙¯
  8223. (‡*3-24    )BResponding to Ü)< Apple Events4^*¿¯
  8224. °dONLNdˆ`llr(ilY@Ä°dONLNd˜`rl))+ou can specify the descriptor type of the rC¿°dONLNd"`)l˜)∑3esulting data for these functions; if this type is °dONLNdUmlyx(vldif™`°dONLNdXmxyÑ) fer凰dONLNd[mÑyõ) ent fr °dONLNdamúyÄ)4om the descriptor type of the attribute or parameteræÄ°dONLNdïmyî)„, the ΩÄ°dONLNdõmîyŒ) Apple Event °dONLNdßzlÜ›(ÉlManager attempts to coerb °dONLNdøz›Ü))qce it to the specifi  °dONLNd”z)Üx)Led type. In the dir£ °dONLNdÊzxÜ“)Oect parameter of the °dONLNd˚álìÑ(êlOpen˘°dONLNdˇáÑìÜ) y°dONLNdááì])/Documents event, for example, each descriptor r†°dONLNd/á]ìo)÷ecorÙ°dONLNd3áoìÈ)d in the descriptor list is an °dONLNdRîl†Ü(ùlalias r“¿°dONLNdYî܆ò)ecorG °dONLNd]îô†’)d; each alias r@‡°dONLNdlî’†Á)<ecorµ@°dONLNdpîÁ† )d specifiø °dONLNdyî †å)%es a document to be opened. ¢Ä°dONLNdïî冉)ÄAs explained in the °dONLNd©°l≠•(™lchapter “Intry†°dONLNd∂°•≠9)9 oduction to File Management” of o`°dONLNd÷°:≠ö)ïInside Macintosh: Files,∂@°dONLNdÓ°ö≠ı)` all your application °dONLNdÆl∫À(∑lusually needs is the fi¯°dONLNdÆÀ∫)_le system specifi@°dONLNd,Æ∫4)Ication (,
  8225. Courier∑°dONLNd4Æ4∫X) FSSpec¥¿°dONLNd:ÆX∫a)$) rM†°dONLNd=Æb∫t)
  8226. ecor¬°dONLNdAÆt∫Ê)d of the document. When °dONLNdYªl«fl(ƒlyou extract the descriptor ]@°dONLNdtª‡«„)tr"@°dONLNduª‰«ˆ)ecorñ†°dONLNdyªˆ«˛)d 2`°dONLNd{ªˇ«)    frK@°dONLNd}ª«í)!om the descriptor list, you can rn‡°dONLNdûªí«’)åequest that the v‡°dONLNdƪ’«Ú)CApple °dONLNd¥»l‘∂(—lEvent Manager rv`°dONLNd√»∂‘f)J)eturn the data to your application as a fi?‡°dONLNdÌ»g‘Ø)±le system specifiI °dONLNd˛»Ø‘–)Hcation rp°dONLNd»–‘‚)!ecor‰`°dONLNd
  8227. »‚‘Í)d °dONLNd ’l·¡(filinstead of an alias r °dONLNd!’¬·‘)VecorÄ`°dONLNd%’‘·‹)d.°dONLNd(ÁlÛ„(lAfter extracting all known -@°dONLNdCÁ„ÛË)w:Apple event parameters, your handler should check that it °dONLNd}Ùlo(˝lrE°dONLNd~Ùp ))etrieved all the parameters that the sourØÄ°dONLNdßÙ Ö)∞ce application consider' °dONLNdæÙÜØ)f
  8228. ed to be rZ†°dONLNd»ÙØΔ))equirq‡°dONLNdÕÙΔ–)edW@°dONLNdœÙ—”) .◊@°dONLNd–Ù”’) W@°dONLNd—Ù÷‹)Tç°dONLNd“Ù€Ò)o do °dONLNd◊l≤(
  8229. lso, determine wD‡°dONLNdÊ≥‚)G hether the ç@°dONLNdÒ‚Z)/keyMissedKeywordAttrÖ¿°dONLNdZ•)x attribute exists. Iu¿°dONLNd¶¿)Lf so, yã@°dONLNd ¿ˆ) our handler °dONLNd,lí(l    has not r‹†°dONLNd5í⁄)&etrieved all the r °dONLNdG€Ú)Iequir#@°dONLNdLÚw)ed parameters, and it should rB†°dONLNdjw´)Ö eturn an errl`°dONLNdv´¥)4or °dONLNdx¥∂)    .°dONLNdz l,©()lAlthough the ˝‡°dONLNdá ©,H)=&Apple Event Registry: Standard Suites k†°dONLNd≠ I,Y)†defi]¿°dONLNd± Z,k)nes W`°dONLNdµ k,„)Apple event parameters as °dONLNdœ-l9ã(6leither rG°dONLNd◊-å9£) equir^@°dONLNd‹-£9ˆ)ed or optional, the |`°dONLNd-ˆ9ô)S"Apple Event Manager does not enforı¿°dONLNd    -ô9Δ)£
  8230. ce the defiˇ °dONLNd    -Δ9Ú)- nitions of °dONLNd    (:lFo(ClrE°dONLNd    ):pFá)equir\@°dONLNd    .:áF:))ed and optional events. Instead, the sour{@°dONLNd    W::Fñ)≥ce application specifi⁄ °dONLNd    m:ñFÙ)\es, when it sends the °dONLNd    ÉGlSß(Plevent, which A@°dONLNd    êGßS0);Apple event parameters the taræ¿°dONLNd    ÆG0SY)â
  8231. get can tr¢‡°dONLNd    ∏GYS§))eat as if they werz@°dONLNd     G§SÊ)Ke optional. For °dONLNd    ⁄Tl`~(]lmoréÄ°dONLNd    ›T~`F)-e information about optional parameters, see J°dONLNd
  8232.  
  8233. TG`˜)…'“Specifying Optional Parameters for an °dONLNd
  8234. 1alm´(jlApple Event,”ú‡°dONLNd
  8235. >a´m¯)? which begins on @°dONLNd
  8236. Oa˘m)Npage Ë °dONLNd
  8237. Tam)5-7<°dONLNd
  8238. Wam ).°dONLNd
  8239. Yslo(|lIfiÄ°dONLNd
  8240. Zso£)f any of the €@°dONLNd
  8241. gs£l)4,Apple event parameters include object specifi1 °dONLNd
  8242. îsm|) er r2`°dONLNd
  8243. òs|é)ecor¶¿°dONLNd
  8244. úséŸ)ds, your handler °dONLNd
  8245. ≠ÄlåÆ(âlshould use the z@°dONLNd
  8246. ºÄØåÂ)C    AEResolvev‡°dONLNd
  8247. ≈ÄÂå+)6 function, other l@°dONLNd
  8248. ÷Ä+åì)FApple Event Manager r` °dONLNd
  8249. ÎÄìå„)houtines, and your °dONLNd
  8250. ˝çlô»(ñlown application-defiö¿°dONLNd ç»ô“)\ne5¿°dONLNd ç”ô
  8251. ) d functions tfl °dONLNd  ç
  8252. ôP)7o locate the corr)Ä°dONLNd 1çQôÇ)G
  8253. esponding ˇ`°dONLNd ;çÅôÓ)0Apple event objects. For °dONLNd Töl¶~(£lmoréÄ°dONLNd Wö~¶“)e information abou¿°dONLNd iö”¶˛)U t locating U °dONLNd tö˛¶W)+Apple event objects,≠°dONLNd àöW¶b)Y se3†°dONLNd ãöc¶j) e }@°dONLNd çöj¶y)“Wí@°dONLNd èöx¶°)orking W≈¿°dONLNd óö°¶Î))ith Object Specifii@°dONLNd ©ö϶˜)Ker °dONLNd ¨ßl≥Ö(∞lRecor¢`°dONLNd ±ßÖ≥ñ)ds,”{ °dONLNd µßó≥‰) which begins on ÎÄ°dONLNd Δ߉≥˚)Mpage Δ`°dONLNd À߸≥)3-32@°dONLNd œß≥).°dONLNdvlÇÿ(lAEGetAttributeDesc°dONLNdvÏÇ
  8254. )ÄReturn °dONLNdv Ç<) s a copy of ÇÄ°dONLNd%v<Ç)1the descriptor r? °dONLNd5vÄÇí)Decor≥Ä°dONLNd9víÇ‚)d for an attribute. °dONLNdMÅÏç˘(äÏ>Used to extract data of variable length; for example, to make °dONLNdãåÏòQ* a copy of a descriptor r†°dONLNd£åRòd)fecorî°dONLNdßådò√)d containing the addr¿°dONLNdºåƒòÏ)`
  8255. ess of an °dONLNdΔóÏ£ (†Ï application.°dONLNd‘ßl≥¥(∞l AECountItems°dONLNd·ßÏ≥Ö)Ä"Returns the number of descriptor r8Ä°dONLNdßÜ≥ò)öecor¨‡°dONLNdßò≥˘)ds in a descriptor list. °dONLNd ≤Ïæÿ(ªÏ5Used, for example, to determine the number of alias r} °dONLNdU≤ÿæÍ)ÏecorÒÄ°dONLNdY≤Íæˆ)ds °dONLNd\ΩÏ…K(ΔÏfor documents specifi° °dONLNdqΩK…Ä)_ed in the dirf¿°dONLNd~ΩÅ…€)6ect parameter of the °dONLNdî»Ï‘V(—ÏOpen Documents event.°dONLNd´ÿl‰Æ(·l AEGetNthPtr°dONLNd∑ÿω)Ä
  8256. Uses a buf?‡°dONLNd¡ÿ‰7).fer to rÇ°dONLNd…ÿ7‰Q)eturn $°dONLNdœÿR‰|)
  8257. a copy of ‰`°dONLNdŸÿ|‰Ë)*the data for a descriptor °dONLNdÛ„ÏÔÔ(ÏÏrE°dONLNdÙ„Ô)ecorπ`°dONLNd¯„Ô)d c≈`°dONLNd˚„ÔÛ)7ontained in a descriptor list. Used to extract data of °dONLNd2ÓÏ˙Ú(˜Ïfiå¿°dONLNd4ÓÚ˙Ê)4xed length or known maximum length; for example, to °dONLNdh˘Ï(ÏextracÄ°dONLNdn˘ä)t the name and location of a d8@°dONLNdå˘ä≠)Éocumenî °dONLNdí˘≠∂)#t f™`°dONLNdï˘∂π)    ro`°dONLNdñ˘∫€)om the °dONLNdùÏG(Ïdescriptor list specifiXÄ°dONLNd¥H})\ed in the dir °dONLNd¡~ÿ)6ect parameter of the °dONLNd◊ÏT(ÏOpen Documents eventfi¿°dONLNdÎTV)h.°dONLNdÓl+¥((l AEGetNthDesc°dONLNd˚Ï+)Ä    Returns a¬ °dONLNd+-)* copyπ °dONLNd    .+0) 9 °dONLNd
  8258. 1+C)of a Ä°dONLNdD+w) descriptor ra¿°dONLNdw+â)3ecor÷ °dONLNdâ+ò)d frä¿°dONLNd#ô+Û)om a descriptor list. °dONLNd9*Ï6Ó(3Ï=Used to extract data of variable length; for example, to get °dONLNdv5ÏA/* the descriptor r<†°dONLNdÜ50AB)Decor±°dONLNdä5BA£)d containing an alias rm°dONLNd°5§A∂)becor·`°dONLNd•5∂A≈)d frñ°dONLNd©5ΔAˆ) om the list °dONLNdµ@ÏL(IÏspecifiÓ °dONLNdº@L=)ed in the dir≥¿°dONLNd…@>LË)6$ect parameter of the Open Documents °dONLNdÌKÏW(TÏevent.    °dONLNdˇˇ(plFunction°dONLNdˇˇ)Ä DescriptionÕ`°dONLNdˇˇ)1  (continued)ˇCû@ˇ ˇˇˇˇ@
  8259. ˇ·ˇ‚7^
  8260. 4H\, Palatino&e.3+ä"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@äIntroduction to •)8 Apple Events4⁄ä˙(‡äResponding to Ü)< Apple Events
  8261. , (‡3-25
  8262. ˇˇˇˇˇˇˇˇ440lòÄ.B0oMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""B0oB0o$””””””””””””””””””””””””””””””òÄ
  8263. 60@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""60@60@˜˜˜˜˜˜˜˜˜˜˜˜˜
  8264. ˛ˇ˛ˇˇ ˇˇ˛ˇˇ     ˇˇˇ˙ˇ
  8265. ˛ˇˇˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜
  8266. 454+?òÄ
  8267. 56+@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""56+@56+@$˜˛˙ˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  8268. ˛ˇ˛ˇˇ˛¸ˇˇ˚ˇ˛˙ˇˇ˝˛ˇ˛
  8269. ˛ˇ˛ˇˇ
  8270. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  8271. ˛ˇ˛ˇˇ
  8272. ˛ˇ˛ˇˇ˛˙ˇ˜˝˝ˇˇ˛ˇ˚˝ˇ¸˛¸ˇˇ˜˝˛ˇ˛
  8273. ˛ˇ˛ˇˇ
  8274. ˛ˇ˛ˇˇ˝ˇˇ˛˜˝¸ˇ
  8275. ˛ˇ˛ˇˇ˛¸ˇˇ˜˝˛ˇ˛
  8276. ˛ˇ˛ˇˇ
  8277. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˜˝¸ˇ
  8278. ˛ˇ˛ˇˇ˝˛ˇ˛
  8279. ˛ˇ˛ˇˇ
  8280. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  8281. ˛ˇ˛ˇˇ
  8282. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  8283. ˛ˇ˛ˇˇ
  8284. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  8285. ˛ˇˇˇˇ
  8286. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  8287. ˛ˇˇˇ
  8288. ˛ˇˇˇ
  8289. ˛ˇˇˇ
  8290. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  8291. ˛ˇˇˇˇ
  8292. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  8293. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  8294. ˛ˇˇˇˇ
  8295. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  8296. jHp4jHp käk
  8297. ˇ·ˇ‚7^ °dONLNd\äj–(fäInteracting W,@°dONLNd\—j)G ith the Userˇˇˇˇˇˇ‘@(f3
  8298. °dONLNdpä|È(yäPIn some cases, the server may need to interact with the user when it handles an ≤‡°dONLNdkpÈ|(yÈApple °dONLNdq}äâ (ÜäUevent. For example, your handler for the Print Documents event may need to display a °dONLNdΔääñF*,print options dialog box and get settings fr‡`°dONLNdÚäFñì)ºom the user beforg@°dONLNdäîñ)Ne printing. By specifying °dONLNdóä£ê(†äflå¿°dONLNdó꣺) ags to the ,
  8299. Couriern °dONLNd*óΩ£G)-AESetInteractionAllowedeÄ°dONLNdAóG£°)ä function, you can seG¿°dONLNdVó¢£≠)[t p @°dONLNdYóÆ£±) r—@°dONLNdZ󱣡)efer}`°dONLNd^ó¬£Ú) ences to all‡°dONLNdjóÛ£)1ow °dONLNdm§ä∞¢(≠äuser iË¿°dONLNds§¢∞+)nteraction with your applicatioQ†°dONLNdí§,∞G)än (a) o@@°dONLNdô§H∞ˇ))nly when your application is sending the °dONLNd¬±äΩ‡(∫äApple event to itselú`°dONLNd÷±‡ΩÎ)Vf, (D °dONLNd⁄±ÏΩ¸) b) o °dONLNdfi±˝Ω);nly when the client application is on the same computer as °dONLNdæä Õ(«äyour applicatio„‡°dONLNd(æÕ ›)Cn, o*¿°dONLNd,æfi ‰)r ù`°dONLNd.扠Ò)(c) 5`°dONLNd2æÚ ˛)<for any event sent by any client application on any computer±†°dONLNdnæ˝ («˝. In °dONLNdsÀä◊U(‘ä-addition, your handler should always use the ¯¿°dONLNd†ÀU◊¡)ÀAEInteractWithUserÚ°dONLNd≤À¡◊)l function beforfl‡°dONLNd¡À◊    )Ae °dONLNd√ÿ䉜(·äKdisplaying a dialog box or alert box or otherwise interacting with the user*`°dONLNdÿœ‰‘(·œ. *`°dONLNdÿ‘‰Á)The °dONLNdÂäÒˆ(ÓäAEInteractWithUsery@°dONLNd&ˆÒ)l< function determines whether user interaction can occur and °dONLNdbÚä˛∏(˚ä
  8300. takes appr°`°dONLNdlÚ∏˛S).#opriate action depending on the cir䇰dONLNdèÚS˛à)õ cumstances.°dONLNdõä@(ä+Both the client and server specify their pr≠Ä°dONLNdΔ@P)∂eferY†°dONLNd QÔ)'ences for user interaction: the client °dONLNdÒä¶(äspecifiÓ °dONLNd¯¶ƒ)Aes whether the server should be allowed to interact with the useri@°dONLNd9ƒÏ(ƒ
  8301. , and the °dONLNdCä*ß('äserver [¿°dONLNdJ®*ƒ)specifi…‡°dONLNdQƒ*Ì)    es when i|@°dONLNdZÓ*¯)*t a>†°dONLNd]˘* ) llow€‡°dONLNda *)s‡°dONLNdb*Ä) user interaction while pr=`°dONLNd|Ä*µ)o ocessing an "†°dONLNdàµ*Î)5 Apple eventm`°dONLNdìÎ*)6. °dONLNdï+ä7ï(4äThr °dONLNdó+ñ7ù) e ]`°dONLNdô+ù7˙)Apple Event Manage†°dONLNd´+˚7)^r does nuÄ°dONLNd≥+7.)#ot a≠`°dONLNd∑+.7)7llow a server application to interact with the user in °dONLNdÓ8äDç(AärE°dONLNdÔ8éD)"esponse to a client application’s N@°dONLNd8DO)é
  8302. Apple evenV†°dONLNd8ODó)3t unless at least tS†°dONLNd.8òD“)I wo conditionÕ°dONLNd:8“D·):s arO°dONLNd>8‚DÚ)e ml†°dONLNdA8ÚDˆ)e6@°dONLNdB8˜Dˇ)t: °dONLNdEEäQè(NäF °dONLNdFEêQ¨)irst, th}@°dONLNdNE¨Q-)e client application must set fd°dONLNdmE-Q:)Ålag€Ä°dONLNdpE:Q\)    s in the /†°dONLNdyE]Qc)#s/@°dONLNdzEcQç)endMode,†°dONLNdÅEçQ€)* parameter of the d`°dONLNdìE€Qˇ)NAESendb °dONLNdôEˇQ)$ °dONLNdöRä^©([äfunctioº‡°dONLNd°R©^¥)n iˆ†°dONLNd§R¥^Ã) ndica<`°dONLNd©RÕ^˙) ting that u$‡°dONLNd¥R˚^:).ser interaction8`°dONLNd√R:^l)?  is allowed.``°dONLNdœRl^)2% Second, the server application must °dONLNdÙ_äkü(häeithe`°dONLNd˘_†k™)r sø°dONLNd¸_™kÆ)
  8303. eà†°dONLNd˝_Øk»)t no u°dONLNd_…k)ser interaction prs†°dONLNd_k$)Kefer¿°dONLNd_%kÄ)ences, in which case 4†°dONLNd._ÄkÏ)[AEInteractWithUser-‡°dONLNd@_ÏkÓ)l °dONLNdAläx    (uäYassumes that only interaction with a client on the local computer is allowed; or it must °dONLNdöyäÖû*set flU¿°dONLNd†yüÖ©)ag‰‡°dONLNd¢y©Öæ)
  8304. s to t °dONLNd®yøÖÃ)he 7 °dONLNd´yÃÖV)AESetInteractionAllowed.Ä°dONLNd¬yVÖÄ)ä
  8305.  function <¿°dONLNdÃyÄÖØ)* indicating v °dONLNd◊yØÖ≤)/t∏Ä°dONLNdÿy≤Öº)ha⇰dONLNd⁄yΩÖ») t uS`°dONLNd›y…Ö) ser interactioïÄ°dONLNdÎyÖ)9nf‡°dONLNdÏyÖ
  8306. ) °dONLNdÌÜäíì(èäis %`°dONLNdÜîí∑)
  8307. allowed®°dONLNd˜Ü∑íº)#. °dONLNd˙òä§˙(°äIf these two conditions arT °dONLNdò˙§0)pe met and if ' °dONLNd!ò1§ù)7AEInteractWithUser `°dONLNd3òù§Á)l determines that n‡°dONLNdDòÁ§)J    both the °dONLNdM•ä±)(Æä%client and server applications allow ¯`°dONLNdr•)±h)üuser interactioA†°dONLNdÅ•i±w)@n uö °dONLNdÑ•w±∞)nder the currO‡°dONLNd땱±Ã):ent cir ‡°dONLNdò•Ã±˙)    cumstance†‡°dONLNd°•˚±)/s,]‡°dONLNd£•±) °dONLNd§≤äæê(ªäA†°dONLNd•≤êæ)EInteractWithUsey†°dONLNdµ≤æˆ)`ry@°dONLNd∂≤ˆæ˛) bć°dONLNd∏≤˛æä)!rings your application to the forR@°dONLNdŸ≤ãæô)çegrp°dONLNd‹≤ôæÂ)ound if it isn’t alrÓÄ°dONLNd≤Âæ)Leady in °dONLNd¯øäÀß(»äthe fork¿°dONLNdˇøßÀµ)egrâÄ°dONLNdøµÀ—)ound. ≈†°dONLNdø—À◊)YÜ °dONLNd    ø◊À)Jour application can then display its dialog box or alert box or otherwise °dONLNdSÃäÿË(’äinteract with the userfiÄ°dONLNdiÃÁÿˇ)]. The @°dONLNdoÃÿl)AEInteractWithUserÄ°dONLNdÅÃlÿÈ)l function brings your server °dONLNdûŸä·(‚äapplication to the fre°dONLNd≥Ÿ·Â)Wont either dir9`°dONLNd¡ŸÂ~):ectly or after the user r
  8308. Ä°dONLNd⁄ŸÂ–)desponds to a notifii °dONLNdÌŸ–ÂÒ)Qcation rê°dONLNdıŸÒÂ)!equestB‡°dONLNd˚ŸÂ).°dONLNd˝Îä˜(ÙäFor detailed information about◊ °dONLNd    Î˜()à howı°dONLNd    Î(˜*) u°dONLNd     Î+˜6)to ¨‡°dONLNd    #Î6˜O) specifb °dONLNd    )ÎP˜[)y fdONLNd    ,Î[˜ä) lags to the °dONLNd    8¯ä(äAESetInteractionAllowedw`°dONLNd    O¯;)ä     function†°dONLNd    X¯<x)( and how the †°dONLNd    e¯x‹)<Apple Event Manager °dONLNd    yäΩ(ä determines x`°dONLNd    Ñæ\)4$whether user interaction is allowed,˝°dONLNd    ®\†)û see the section °dONLNd    ∫äÀ(ä“Interacting Wù`°dONLNd    »À˛)A ith the Userz°dONLNd    ‘˛)3,”˙°dONLNd    ÷R) which begins on j`°dONLNd    ÁSj)Npage E@°dONLNd    Ïk})4-45ô °dONLNd    }).
  8309. <HC4=HC >ä>
  8310. ˇ·ˇ‚7^ °dONLNd    Ú/ä=(9äPerforming the Requested 4Ä°dONLNd
  8311. /=3)èActio‡Ä°dONLNd
  8312. /3=∑)n and Returning a Resultˇˇˇˇˇˇ‘@)‹3
  8313. °dONLNd
  8314. *CäOˆ(LäWhen your application rʆ°dONLNd
  8315. ACˆO5)lesponds to an 9‡°dONLNd
  8316. OC6OÛ)@*Apple event, it should perform the standarõ¿°dONLNd
  8317. yCÛO˚)Ωd °dONLNd
  8318. {Pä\´(Yäaction r¶‡°dONLNd
  8319. ÉP´\J)!#equested by that event. For examplej‡°dONLNd
  8320. ¶PK\ü)†, your application s] °dONLNd
  8321. ∫P†\¿)Uhould rÙ@°dONLNd
  8322. ¡P¿\˛) espond to the °dONLNd
  8323. œ]äiÔ(fäOpen Documents evenú`°dONLNd
  8324. ‚]Ôi,)et by opening t`°dONLNd
  8325. ]-iV)>    he specifiúÄ°dONLNd
  8326. ˙]Vi))*ed documents in titled windows just as if °dONLNd $jäv6(sä&the user had selected each document fry†°dONLNd Jj6v„)¨%om the Finder and then chosen Open fr˛@°dONLNd oj„v)≠om the °dONLNd vwäÉ∏(Ää
  8327. File menu.†°dONLNd Äwπɪ)/ ˇ&Ê@ˇ ˇˇˇˇ@
  8328. ˇ·ˇ‚7^
  8329. 4*\¯, Palatino&e.3+l"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@lIntroduction to •)8 Apple Events4⁄*˙¯
  8330. (‡*3-26    )BResponding to Ü)< Apple Events4^*¿¯
  8331. °dONLNd\lhà(elMany w`°dONLNd\àhB)*Apple events can ask your application to r?°dONLNd/\Ch–)ª"eturn data. For instance, if your °dONLNdQilu¯(rl!application is a spelling checkerà °dONLNdri¯uÓ)å:, the client application might expect your application to °dONLNd¨vlÇo(lrE°dONLNd≠vpÇE)2eturn data in the form of a list of misspelled worŒ°dONLNdflvEÇT)’ds. &¿°dONLNd„vUÇm)Figur˘Ä°dONLNdËvlÇ≠)e 3-14 on page ∏¿°dONLNd˜vÆÇ∂)B3- †°dONLNd˘v∑Ç¡)    38 †°dONLNd˚v¡ÇÈ)
  8332.      shows a °dONLNdÉlè€(ålUsimilar example: a Get Data event that asks the server application to locate a specifiÄÄ°dONLNdZÉ€è·(å€c °dONLNd\êlúÿ(ôlApple event object and rÕ°dONLNdtêÿúj)l#eturn the data associated with it. °dONLNdò¢lÆÿ(´lIf the client application r™°dONLNd≥¢ÿÆ)l equests a r^‡°dONLNdæ¢Æ)/eplyÜ`°dONLNd¬¢Æ.), the Ö`°dONLNd»¢.Æú)Apple Event Manager pr{`°dONLNdfi¢úÆØ)nepar  °dONLNd‚¢∞ÆΔ)es a r◊¿°dONLNdË¢ΔÆ€)eply °dONLNdÌØlªü(∏l
  8333. Apple evenà`°dONLNd˜ØüªØ)3t byaÄ°dONLNd˚Ø∞ª) passing a default rV†°dONLNdت)Teply ªÄ°dONLNdتñ)Apple event to your handler‚@°dONLNd/Øñªœ)}. If the client °dONLNd?ºl»Ã(≈lapplication does not rù°dONLNdUºÃ»ˆ)`
  8334. equest a r‡°dONLNd_º˜»
  8335. )+eply<`°dONLNdcº    »), the ;`°dONLNdiº»®)Apple Event Manager passes a Ì°dONLNdܺ®»Ì)änull descriptor °dONLNdñ…l’à(“lrecordb`°dONLNdú…â’Ó)—that is, a descriptor r= °dONLNd¥…Ó’)eecor±Ä°dONLNd∏…’*)
  8336. d of type ,
  8337. Courier≥‡°dONLNd¬…*’Z)*typeNull∞‡°dONLNd …Z’´)0 whose data handl⁄`°dONLNd€…´’Ô)Qe has the value °dONLNdÎ÷l‚r(fllN†°dONLNdÏ÷r‚~)IL~‡°dONLNdÓ÷~‚*) '—to your handler instead of a default r0@°dONLNd÷+‚@)≠eply ï °dONLNd÷@‚¥)Apple event. The default rÀ¿°dONLNd4÷¥‚…)teply 0†°dONLNd9÷ ‚Á)Apple °dONLNd?„lÔj(Ïl8event has no parameters when it is passed to your handleå@°dONLNdw„jÔm)˛r¡Ä°dONLNdx„mÔé), but yo@°dONLNdÄ„èÔ›)"ur handler can adQÄ°dONLNdë„›ÔÂ)Nd °dONLNdìl¸r(˘lpÇ °dONLNdîr¸£) arameters t`°dONLNdü§¸≤)2o it0†°dONLNd£≤¸d)+. If your application is a spelling checkerÈÄ°dONLNdŒc¸ )±, for example, you can r≤@°dONLNdÊÀ¸Ï)heturn a °dONLNdÓ˝l    À(llist of misspelled worc@°dONLNd˝À    )_ds in a parameter…`°dONLNd˝    E)L    . HoweverV°dONLNd˝E    Í).$, your handler should check whether °dONLNdB
  8338. lÄ(lthe r¢`°dONLNdG
  8339. Äï)eply @°dONLNdL
  8340. ñ)Apple event exists befor»†°dONLNdd
  8341. Í)j6e attempting to add any attributes or parameters to itb °dONLNdö
  8342. Î)Î. °dONLNdúl#©( lAny attempt tQ°dONLNd©™#“)>    o add an Ò°dONLNd≤“#…)(9Apple event attribute or parameter to a null descriptor ro¿°dONLNdΠ#‹)¯ecor‰ °dONLNdÔ‹#‰)d °dONLNdÒ$l0ù(-l generates a/`°dONLNd¸$û0≥)2n err°dONLNd$≥0º)or¨¿°dONLNd$ª0¿). °dONLNd6lB˜(?lWhen you extract a descriptor r1@°dONLNd%6¯B
  8343. )åecor•†°dONLNd)6
  8344. B>) d using the ´¿°dONLNd56>Bí)4AEGetParamDesc¶Ä°dONLNdC6íBó)T, °dONLNdEClOÿ(LlAEGetAttributeDescy@°dONLNdWCÿO›)l, y@°dONLNdYC›O%) AEGetNthDesct¿°dONLNdeC%O5)H, or \‡°dONLNdjC6O~) AEGetKeyDescX`°dONLNdvC~O∫)H function, the †°dONLNdÖC∫OÙ)< Apple Event °dONLNdëPl\û(Yl
  8345. Manager cr«@°dONLNdõPû\%)2 eates a copy of the descriptor r÷‡°dONLNdªP%\7)áecorK@°dONLNdøP8\Â)'d for you to use. When your handler is °dONLNdÊ]lir(flfiå¿°dONLNdË]ri)%nished using a copy of a descriptor rf‡°dONLNd]i%)°ecor€@°dONLNd]%i…)$d, you should dispose of it—and therT‡°dONLNd5] i‹)•eby °dONLNd9jlv`(sl6deallocate the memory used by its data—by calling the r@°dONLNdojavØ)ıAEDisposeDescm`°dONLNd|jØvŸ)N
  8346.  function.
  8347. Ñ*í¯4Ö*í¯    °dONLNdáÉlé(ãlNote
  8348. ˇ·ˇ‚7^
  8349. °dONLNdåêlúö*
  8350. Outputs frΔ‡°dONLNdñêöú˘).om functions such as `°dONLNd´ê˙ú<)` AEGetKeyPtr@°dONLNd∂ê<úo)B  and other r뇰dONLNd¬êoúë)3outines °dONLNd úl®»(•lwhose names end in A°dONLNd›ú…®·)]-Ptr?Ä°dONLNd·ú·® )
  8351.  use a bufÇ@°dONLNdÎú ®à)*fer rather than a descriptor rô`°dONLNd    úà®ö)}ecor¿°dONLNdúõ®Æ)d to °dONLNd®l¥o(±lrE°dONLNd®p¥+)+eturn data. Because these functions don’t ræ °dONLNd>®+¥B)ªequir’`°dONLNdC®B¥v)e the use of °dONLNdP¥l¿∫(ΩlAEDisposeDesc{ °dONLNd]¥∫¿€)N
  8352. , it is prí`°dONLNdg¥€¿ù)!.eferable to use them for any data that is not °dONLNdï¿lÃã(…lidentifiV†°dONLNdù¿åÃœ) ed by a handle.,Zapf Dingbats√@°dONLNd≠√‘À⁄)Hu
  8353. °dONLNdØ—l›r(⁄lY@Ä°dONLNd∞—r›É)our —`°dONLNd¥—É›j)4Apple event handler should always set its function r‡°dONLNdË—k›©)Ëesult either to @°dONLNd¯—™›»)?noErr`°dONLNd˝—»›€) if it °dONLNdfilÍŸ(Álsuccessfully handles the O†°dONLNdfiŸÍO)mApple event or to a nonzera@°dONLNd7fiOÍZ)vo r¿°dONLNd:fi[ͨ) esult code if an errÆ@°dONLNdNfi¨ÍŸ)Q or occurs. °dONLNdYÎl˜r(ÙlIf2`°dONLNd[Îs˜u) ≤`°dONLNd\Îu˜µ)your handler rÿ‡°dONLNdjε˜˘)@eturns a nonzer쇰dONLNdyÎ˙˜)Eo rN`°dONLNd|ΘG) esult code, the —°dONLNdåÎG˜ )AApple Event Manager adds a °dONLNd߯l¿(lkeyErrorNumberz¿°dONLNdµ¯¿)T parameter to the rf°dONLNd»¯')Reply  ‡°dONLNdÕ¯'∏) Apple event (unless you have alrh`°dONLNd̯π–)íeady °dONLNdÚlà(laddedú‡°dONLNd˜àä) ‡°dONLNd¯ãê)a‡°dONLNd˘êí) ú‡°dONLNd˙íÊ)keyErrorNumberó†°dONLNd    Êü)T* parameter). This parameter contains the r7†°dONLNd    2†‚)∫esult code that °dONLNd    Bl¨(lyour handler r¶Ä°dONLNd    P¨o)@,eturns. The client should check whether the Õ‡°dONLNd    |o√)√keyErrorNumber»†°dONLNd    ä√ı)T  parameter °dONLNd    ïl+k((l8exists to determine whether your handler performed the r‡°dONLNd    Õl+Ù((l equested action. In addition to °dONLNd    Ì,l8o(5lrE°dONLNd    Ó,p8§) eturning a r*°dONLNd    ˙,§8;)4#esult code, your handler can also r∞†°dONLNd
  8354. ,;8o)ó eturn an err⁄`°dONLNd
  8355. ),o8≤)4or string in the °dONLNd
  8356. :9lE¿(BlkeyErrorStringz¿°dONLNd
  8357. H9¿E)T parameter of the rwÄ°dONLNd
  8358. [9E')Reply ‹`°dONLNd
  8359. `9'EÌ)/Apple event. The client can use this string in °dONLNd
  8360. èFlRÜ(Olan errR†°dONLNd
  8361. ïFÜRË)or message to the user`°dONLNd
  8362. ´FËRÍ)b.°dONLNd
  8363. ≠Xldÿ(alIf the client application r™°dONLNd
  8364. »Xÿd)l equested a r@°dONLNd
  8365. ‘Xd!)6eply.¿°dONLNd
  8366. ÿX d5), the -¿°dONLNd
  8367. fiX5dù)Apple Event Manager r!†°dONLNd
  8368. ÛXùdœ)h eturns the rÿ °dONLNd
  8369. ˇXœd‰)2eply °dONLNd elqÓ(nlApple event, which is identifi °dONLNd "eÔqL)Éed by the event class íÄ°dONLNd 8eLq¶)]kCoreEventClass凰dONLNd Ge¶qÙ)Z and by the event °dONLNd Yrl~y({lID ¿°dONLNd \rz~∞)    kAEAnswer[°dONLNd erØ~)5. When the client has fifi@°dONLNd }r~b)dnished using the r; °dONLNd èrc~x)Peply †°dONLNd îrx~›)Apple event, it should °dONLNd ´lãΔ(àldispose of both the rº°dONLNd ¿ΔãÜ)Z*eply event and the original event—and theruÄ°dONLNd Íáãÿ)¡eby deallocate the °dONLNd ˝ålò(ïlmemory they use—by calling the a °dONLNd åòO)ïAEDisposeDesc\@°dONLNd )åOòé)N function. The «‡°dONLNd 8åéòÚ)?Apple Event Manager °dONLNd Lôl•í(¢l    takes car`°dONLNd Uôì•˙)'e of disposing both the Ó‡°dONLNd mô˘•Y)fApple event and the rI °dONLNd ÇôZ•o)aeply Æ°dONLNd áôo•„)Apple event after a server ˇÇ<@ˇ ˇˇˇˇ@
  8370. ˇ·ˇ‚7^
  8371. 4H\, Palatino&e.3+ä"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@äIntroduction to •)8 Apple Events4⁄ä˙(‡äResponding to Ü)< Apple Events
  8372. , (‡3-27
  8373. ˇˇˇˇˇˇˇˇ440lòÄ.B0oMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""B0oB0o$””””””””””””””””””””””””””””””òÄ
  8374. 60@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""60@60@˜˜˜˜˜˜˜˜˜˜˜˜˜
  8375. ˛ˇ˛ˇˇ ˇˇ˛ˇˇ     ˇˇˇ˙ˇ
  8376. ˛ˇˇˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜
  8377. 454+?òÄ
  8378. 56+@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""56+@56+@$˜˛˙ˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  8379. ˛ˇ˛ˇˇ˛¸ˇˇ˚ˇ˛˙ˇˇ˝˛ˇ˛
  8380. ˛ˇ˛ˇˇ
  8381. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  8382. ˛ˇ˛ˇˇ
  8383. ˛ˇ˛ˇˇ˛˙ˇ˜˝˝ˇˇ˛ˇ˚˝ˇ¸˛¸ˇˇ˜˝˛ˇ˛
  8384. ˛ˇ˛ˇˇ
  8385. ˛ˇ˛ˇˇ˝ˇˇ˛˜˝¸ˇ
  8386. ˛ˇ˛ˇˇ˛¸ˇˇ˜˝˛ˇ˛
  8387. ˛ˇ˛ˇˇ
  8388. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˜˝¸ˇ
  8389. ˛ˇ˛ˇˇ˝˛ˇ˛
  8390. ˛ˇ˛ˇˇ
  8391. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  8392. ˛ˇ˛ˇˇ
  8393. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  8394. ˛ˇ˛ˇˇ
  8395. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  8396. ˛ˇˇˇˇ
  8397. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  8398. ˛ˇˇˇ
  8399. ˛ˇˇˇ
  8400. ˛ˇˇˇ
  8401. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  8402. ˛ˇˇˇˇ
  8403. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  8404. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  8405. ˛ˇˇˇˇ
  8406. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähÓ(eäapplication’s handler rc@°dONLNd\Óh)d
  8407. eturns to ,
  8408. Courier/@°dONLNd!\hä)*AEProcessAppleEvent( °dONLNd4\äh)r, but a server application is °dONLNdRiäuç(rärE°dONLNdSiéu) esponsible for disposing of any 9¿°dONLNdsiut)åApple event data str@†°dONLNdáituã)ZucturΔÄ°dONLNdåiãuß)es it cr- °dONLNdîi®u
  8409. )eates while extracting °dONLNd´väÇß(ädata frw°dONLNd≤vßÇ»)om the ?Ä°dONLNdπv»Ç)! Apple event.°dONLNdΔàäî¢(ëäFigurR¿°dONLNdÀà¢îª)e 3-12@°dONLNd—àªî) shows the entir@°dONLNd·àî)Fe pr°dONLNdÂàî;)
  8410. ocess of r∏¿°dONLNdÔà;îÑ)(esponding to an ‡°dONLNdˇàÖî¿)JApple event. 
  8411. ∂H«4∑H«"∑H]
  8412. ˇ·ˇ‚7^    °dONLNd¨ä∑∫(¥ä Figure 3-12°dONLNd¨Ã∑s)B%Responding to an Open Documents event°dONLNd>¨t∑v)® é °dONLNd?¨v∑x) 
  8413. ΔDπ4«Eπ
  8414. «Eπ4ΔD«Eò@@˘@˘«E>¡¡…ˇ¯˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚ò@@Ģ@ĢEG>…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚Êˇ˝Èˇ¸˚Êˇ˝Èˇ¸˚Êˇ˛Èˇ¸˚ÊˇÄÈˇ¸˚Êˇ@Èˇ¸˚Êˇ Èˇ¸˚ÊˇÛ¸Èˇ¸˚Êˇ    ¸Èˇ¸˚Êˇ‡ ¿Èˇ¸˚Êˇ¡0Èˇ¸˚ÊˇÄ»Èˇ¸˚ÊˇÈˇ¸˚ÊˇÚÈˇ¸˚ÊˇÅ©Èˇ¸˚ÊˇTèÈˇ¸˚Êˇ"(èÈˇ¸˚ÊˇB èÈˇ¸˚ÊˇDèÈˇ¸˚ÊˇÑ    Èˇ¸˚Êˇà(áÈˇ¸˚Êˇ4@Èˇ¸˚Êˇ    j Èˇ¸˚Êˇ    UÈˇ¸˚ÊˇJàÈˇ¸˚ÊˇEDÈˇ¸˚ÊˇB¢Èˇ¸˚ÊˇêASÈˇ¸˚ÊˇH ¨èÈˇ¸˚Êˇ( \èÈˇ¸˚Êˇ0èÈˇ¸˚ÊˇèÈˇ¸˚ÊˇèÈˇ¸˚Êˇ Èˇ¸˚Êˇ¿Èˇ¸˚Êˇ˝Èˇ¸˚Êˇ˝Èˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚ò@Ä¿˘Ä¿˘GEá>…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚ò@¿˘¿˘áE«>…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚ò@@˘@˘«E>…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚ò@@Ģ@ĢEG>…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚ò@Ä¿˘Ä¿˘GEá>…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚ò@¿Ú˘¿Ú˘áEπ>…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚…ˇ¸˚¡¡¡ò@@˘@˘«E>¡¡…30˚…˚¬» ˚…˚» ˚¬…˚¬» ˚…˚Ò¿˛`fi ˚Û‡˛`◊ÛÔ{·œÓpfi˚ÛÌÔÛÔˇ`◊ÚÌÔÉè`fi ˚Û?{ÒÊˇpfi˚ Ò `⁄ ˚    Ú `”…˚
  8415. ı˜ˇ˛ŸÙį‡ ˚ıį‡˚ Ù˜àä‡ ˚ ıįŸıć˝`‡˚ı¢&2"/¢˛"b"ŸÙ Ä?wπœ¯Ó· ˚¯Ä=ˇçÔo˝ˇ~    ¯‚˚˜¸àéΩœçÔè˝èÔäÄ„ ˚¯ÄÔè9Á¸ˇ~‡‹¯Ä ˙<„˚¯p ¢".˘"Ä›¯¿į‡‡‰ ˚˘į>0‰˚¯0˜ˇ˛¿‰ ˚˘p‡Ä¯|›˘¿8¿Ä¯ÄÂ˚˙ćįćfi˘Äį˛‡8 ˚˙8˛Ä¯˛8Â˚˘`8˛Ä¯˛Ê ˚˚¿`˛Ä¯˛¯fl˚¿˛Ä¯˛¿hÊ˚˚˝
  8416. Ä¿ Ä˝p fl˙ ˝Ä  ˝˝Ê ˚ ˚08˝
  8417. Ä&`=l≥˝Ê˚˙``˝
  8418. Ä/ê3RœÄ˝Ê ˚˚¿¿˝
  8419. Ä(Ä3Rƒ˝fl!¸ÅÄ˝
  8420. Ä«t2åªÄ˝ÅÊ˚¸¸Ä¯¸ˇfl˚¸Ä¯¸Ê ˚¸ ¸Ä¯‡˚˚¸
  8421. Ä  Ä‡ ˚¸0¸Ä  ˝Ÿ¸ ‡¸
  8422. Ķ∞=l≥‡˚¸ĸ
  8423. Ä©†3RœÄŸ˚˚
  8424. Äi†3Rƒ‡ ˚ı
  8425. Ä&D2åªÄ‡˚Ùį‡ ˚ ıįŸıį‡˚ò@@Ģ@ĢEG>‘@˙į˝‡fl0@˙į˝ ˚‹‡˙į˝Ã÷ÿË˚Ú@˙į¸æïË ˚5@˙į˝0ï·‘Ú`˙į˝ŒàË˚ ıįŸÙį‡ ˚ıį‡˚˛(Ä˙˜ˇ˛¸
  8426. `Ë ˚ È@·s©ªô¿Ì‹ÍnÊpÈ˚ jM• ÏröìiH‚ j5• Ì≤öçiHÈ ˚Û©›ô Ï¸ÍwfHÈ˚BËÄÊ ˚ BËÄflBËÄÊ˚¬» ˚ ÊÂ˚ ÂÄÊ ˚ˇˇ‡Î@fl 0ΠÊ˚ÎÛ¸‡ˇˇêΠ   ¸Á ˚    ˇê· ¿Ë˚    êΡ0Ë ˚    ÄêÎÄ»·    ÄêÎË˚    xêÎÚ·    xêÎÅ©Ë ˚    xêÎTÄÈ˚    xêÎ"(ÄÈ ˚    ~êÎB Ä‚    ~êÎDÄÈ˚    ÄêÎÑ    ·ˇˇêÎà(áË ˚Î4@Ë˚Π   j Ë ˚Π   U·ÎJàË˚ˇÎED·ÎB¢Ë ˚ÍêASË˚ÍH ¨ÄÈ ˚ 0Í( \Ä‚ˇˇ‡Í0ÄÈ˚ ÍÄ‚ ÍÄÈ ˚ Í Á˚ˇˇ‡Í¿Á ˚¬…˚¬» ˚Ê<“$Ë˚Â@ZË ˚ Ê9;€Øò‚‡Í1['–È˚ÍE1%&‚.;0Î8Ò%'–È ˚ÈO†Œ˚)L Œ ˚ò@Ä¿˘Ä¿˘GEá>    );†«…˚¬» ˚…˚» ˚¬…˚ Ûˇ‡„˛Ę Í ˚¿˜ Í˚˛ `˜ Í ˚0˜ „0˜ Ù Í˚88˜ Ù „˛ ˜[w&gı Í ˚ ˜W )îĈ Í˚˛ ˜TJ)îĈ Í ˚ ˜#À&gı „ ˜˝ı Í˚ ˜˝ı „˛ ˜˝ı Í ˚ ˜ Í˚˛ ˜ˇ‡Í ˚ ˜ „ ˜ Í˚ ˜˘ ˘ „ ˛ ˜0ˇ˛Ä¯˝ Í ˚! ˜)    Õªœüq‡"à˝ Í˚ ˛ ˜8Ã%E$î∏Ä"‡˝ Í ˚ ˜D)Â}$ÄÙ»ê"Ä˝ „! ˜oflÇ≥û¸`¿˝ Í˚ ˜ „˛ ˜ Í ˚ ˜ Í˚˛ ˜`˛0¯ Í ˚ ˜ #0˚ „ ˜ -,?ƒ;gùπÔ˚ Í˚ ˜ 9‰E$EHê≈D„˛ ˜ )$E$˝Oêï|îĸ Í ˚  ˜ g??øêÇ}Ú€¸ Í˚˛ ˜˛Ù Í ˚ ˜˛8Ù „ ˜ Í˚ ˜˝Ä¿˛˛  „!˛ ˜¿ÃG      Í ˚" ˜.IèÚ€àñ›Ô̪œ Í˚!˛ ˜1xëJTH¬¢î    E$ Í ˚ ˜1HëJ_W»íæîâı}$ê „" ˜ŒœÔÔƒ!?Ò    €B≥ Í˚ ˜˝˙˛  „˛ ˜˝ı Í ˚ ˜ Í˚˛ ˜ Í ˚ ˜ˇ‡„  Õ˚ Δ ˛ Õ ˚  Õ˚ ˛ Õ ˚ Δ  Õ˚ Δ ˛ Õ ˚ò@¿˘¿˘áE«> ˜ˇ‡Í˚˛ ˜ Í ˚ ˜ „ ˜ Í˚ ˜ „˛ ˜ Í ˚" ˜˛0˛˛ Í˚$˛ ˜0 ÌˇÄ ˚$ ˜    9,?ƒ;gùπÔÌùÁà Ì¿˙% ˜    E‰E$EHê≈Dî    "í Ì¿˚$ ˜    E$E$˝Oêï|îâı>íH Ì¿˙$˛ ˜;??øêÇ}Ú€B    Ÿà Ì¿ ˚! ˜˛˙˛ Ì¿˚$˛ ˜˛8Ù ¸ D˘¿ ˚  ˜ ¸ l˘¿˙$ ˜ ¸    w&∂ÓlÓ„≥¸¿˚# ˜ˇ‡¸    LØØîl94˙¸¿˙#˛ ˜ ¸    Ã®®îTŸ‘¬¸¿ ˚$ ˜ ¸    ˜'GñTys∫¸¿˚˛ ˜ ˚D˙ĸ¿ ˚) ˜0ˇ˛˚¯ ˚D˚˚¿˙) ˜)    Õªœß~‡"à ˚DÙ¿˚$ ˜8Ã%E$X†á#"‡ Ì¿˙$˛ ˜D)Â}$Å_úy#"Ä Ì¿ ˚% ˜oflÇ≥R(ßû@¿ Ì¿˚˛ ˜ˆ¸ Ìˇ¿ ˚ ˜ˆ¸ Ìˇ¿˙ ˜ Í˚ ˜˛ ˛¿˛@˝ „ ˛ ˜ÄpOÄ¿˝ Í ˚! ˜Îi1˜!Õ∏DÏÔ<@˝ Í˚ ˛ ˜UO$¢%DF)êB˝ Í ˚ ˜UI$ßÂ|D©Ùí@˝ „" ˜‘ô˝Ó¸ÇˇêNÕÚ@ Í˚ ˜Ä ı „˛ ˜Ä¿ı Í ˚ ˜ Í˚˛ ˜˝Ä`˛˝ Í ˚ ˜˛
  8427. f#Ä|ÑIJ „( ˜[%á˘l‚%∑=‡Ä˛ ˇ˚% ˜™<à•©0®íÅ˛ ¯&˛ ˜™$à•/©Ú$Øíñ˝  ˚( ˜§gÁ˜‚O¸B;gà@ ˚-˛ ˜Ĉ D˛ ˚* ˜ı ÄD˛¯( ˜ ùÀ[wnw‹>t¿˚% ˜ ì/èW &˘M‡¯.˛ ˜;?{?ü‡˜ S,TJ&ŸkM˛ ˚/ ˜U)&! ˜ ]Àá#Àn;Út‡˚(˛ ˜Ï9RĘ ˛¸˙ ˚& ˜))‚ ˜ ˛¸˙¯) ˜;?g/˚‡˜ ˛¸˙˚# ˜ ˛ ¸ ˛¯%˛ ˜ ˛Ä ¸ ˛ ˚& ˜ ˛ãnp¸    Ó<ÿ˚-˛ ˜˘ ˝Ä ˛˙˘ ¸    9M ˚1 ˜3¸˛¿@ġ‡˛äâ ¸ŸM¯4 ˜)3ß=«=kDrwfiÒ∑˜â<˛Ùy0¸    y<˚% ˜9úÿΔ(G5§ã)A"®     "'¯'˛ ˜E0à√Á8•$˙WÈI>Ø IÄ ˚( ˜o˘Á<ä]πfl'»ù±BÌâDDÄ˚!˛ ˜˙!¸Äˇ»¿ˇ ˚  ˜˙sĢ p@˘˘¯# ˜ @˘`˛ÿ˛˚ò@@˘@˘«E>% ˜ `‡˛
  8428.  ò√0Hx¯'˛ ˜ˇ‡ $ê˛ =Ì<ۻ˕œ ˚# ‰ `Bʇì4¥gvZ©ÓLI¶1˚"˛ ‰†BüêîÙÙØ8©2L…¯¶0 ˚! ‰ $òêÑ≠˝”?Ô~Gyœ˘  ‰     Áê„;™t∂˚˚ ‰
  8429.  Ä˚p˚˘˛ ‰ Ä˚˘ ˚ ‰ `Ä˚˘˚˛ ‰†ˇ ˚ ‰ ˘˘˘ ‰     ˘`˛ÿ˛˚! ‰
  8430.  8@G˛ ò√0Hx˘"˛ ‰ $DÄ=Ì<Û»‰•œ ˚# ‰ `%‹‰ô•£;‡Z©ÓLI&1˚"˛ ‰†9RD¶eW•8©2L…Ù&0 ˚! ‰ !RD¶%T%–˝”?Ô~Nyœ˘  ‰     !Rg›S•‡˚˚ ‰
  8431.  ˘p˚˘˛ ‰ ˘˘ ˚ ‰ `˘˘˚˛ ‰†ˇ ˚ ‰ ˘˘˘ ‰     ˘˘˚ ‰
  8432.  ˘˘˘˛ ‰ ˘˘ ˚ ‰ `˘˘˚˛ ‰†˘˘ ˚ ‰ ˘˘˘ ‰     ˘˘˚ ‰
  8433.  ˘˘˘˛ ‰ ˘˘ ˚ ‰ `˘˘˚˛ ‰†ˇ ˚ ‰ ˘˘˘ ‰     ˘˘˚ ‰
  8434.  ˘˘˘˛ ‰ ˘˘ ˚ ‰ `˘˘˚˛ ‰†˘˘ ˚ ‰ ˘˘˘ ‰     ˘˘˚ ‰
  8435.  ˘˘˘˛ ‰ ˘˘ ˚ ‰ `˘˘˚˛ ‰†ˇ ˚ ‰ Ó˘ ‰     Ó˚ ‰
  8436.  Ó˘˛ ‰ Ó ˚ ‰ `Ó˚˛ ‰†Ó ˚ ‰ Ó˘ ‰     Ó˚ ‰
  8437.  Ó˘˛ ‰ Òˇ¸ ˚ ‰ `Ò˚˛ ‰†Ò ˚ ‰ 0Ò˘ ‰˘Ä˚˚! ‰.˛ÄÄ|˛˘"˛ ‰ˆâNéy«9Zhé'g{¿ ˚( ?˘ˇ‡ÓDGåsQä(AÕ4ë1H•˛˚'˛  ˘0ÓàâÑIBÉÁ:)$ü%O•  ˚ò@@Ģ@ĢEG>%  ˘0̇flÁéxäSn;‰|Çv¿˘#      ˝0Ì?ˆ˙ ˙˚!  300Ï˙p˙˘˛  ˛û0ÏÒ ˚  DA0ÏÒ˚˛  ˛Dû0ÏÒˇ¸ ˚  ˘0ÏÒ˘ ?˘ˇÏÒ˚  ˙ 0ˇ‡Ò˘˛#˘ˇ˛0,Ò ˚"˘0<Ò˚,˛#fl¯¸˜ˇ0?˛ˇ 0(Ä¿0¿˛@ ˚;#–¯P@ÄÙø0˛∞˛˛`˛`H(Ä¿H ˛@ê˘=!#–¯V`LÃ≥Ùø01Ü`êx0 >—˛á(Ósëÿáç¡&ihŒ¯ˇê˚;7#–¯v`LÃ≥˜ø0⁄yÁêË•œ    œ+Z#ì∑{ƒ¢""#Å®ìLfiÉ0Ü_!)ôUÈ|ˇ˘<˛6#–¯V`LÃ≥Ù?0S‹òë¶1‰π≠$X®•¿N®ùL–É0JQ!)âU    t?Ä ˚=!#fl¯VdLÃ≥˜ˇ0Rdô믶0    $≈)'“Ø•$g˛ˇ3®óKŒÇ–3è!ΔwTÈxÄ˚-˛#¯ˇ0;¶fi¸Gyœ˛ÌŒ˘>Bvƒ<˘˙˛ ˚("˙0 ˚˝<˘˙˜)"˙s0‡˘ú¸,˘˙˛˚"˙[0 ˛ ı˜!˛"˙fl0 ˛ ı˛ ˚%" ˝S0ˇ‡kgpı˛˚$˛"÷ ˝s0 ˙Ù†ı˛ ˚""&,IJ0 äцı˜%"÷2˝ˇ0 tt∞ı˛˚+"62˝0˛x˛ Ò˜/˛"÷,IJ0˛@ê˛ ˛ Ò˛ ˚,"˙0˛
  8438. Bøç‘‹Œs4¥g|˛ Ò˛˚6˛"˙0Äy“ïÈ$îÙÙæ˛
  8439.  Jĸ˛ ˚3"˙0¿APï©$Ñ∫˛
  8440.  Rĸ˜<"˝0˛
  8441. zôŒ‘Ãs;™tº˛ ?ˆ{ù«õºÓcçœl«û77˛˚+"∫%µÀ(0 ‚#RG)æ‘…ÚS"˘"ôKLј.˛ "∫"k.®0 ÄòR[)¢…“S$â"ôCLÑ˛ ˚/"∫&k6®0 DGRO'û€…bM/x¬y;4Ñ˛˚-˛ "T´Œê0˛ ˛¸ ã˛Ò˛ ˚*"0˛@˛¸ Ò˜/" 0˛    Û4lnÁn–›∞˝ Ò˛˚5"‡˛    d™%^îë√©Î‡˝
  8442.  0     Ä˚˜;˛ "    àÀ    )˛    d™%PÑñÕ©
  8443.  ˝   Ä3˛ ˚<"ÕNéبàp˛    c*Nv„«®Ì‡˝  `ÿ”pÁ8≥∂ñ¥vöfiévIJ˚3˛"5Hñ§§â)ˇˇ¿˙Ģ †ΩÛ 9H‰T√ZãVMIã@˛ ˚0"ÕHéüFE @˙Ģ  °≥ ŸHß‘íäMI˙˜1"˚@@˙Ģ      úœ8w9ë    ˜ºw∫=^'IJ˚/"˙""@0˛˛˝ 
  8444.  ˛˛˘˜.˛"˙@H˛˛˝  ˙8˘˛ ˚,"˙ˇ¿áç¡∏‹öZπq¿  `Ò˛˚7˛"˙ÄÜ_#Õ2&fU>QH` †˝¿Ä ˛D˛ ˚4"˙¿JQ"5&bU"QI†  ˝¿ÄP˛D˜9"˙0˛"3è!‹Úù’YH‡      Ó|—üc±ÒÜŒ¨W:`÷Œ‰˛˚+"˙0˛Ù 
  8445.  ìF´œ¡HÀ≈È®t¶ÒıÈD˜.˛"˙0˛Ù  ùZ™ AH     ®å¶Å    D˛ ˚/"˙0˛Ù  `ÁN©œ¡∞…ƒÓêè:pËÈd˛˚/˛ "‡õ0˛ı †Ä˙ ˛˛ ˚+"Ü¿*dÅ0˝ı  Ä˙  ˛˜2"⁄†§Å0˛ñÁ4†˜      Ä˙ ˛˛˚2"Z† $Å0˛∂ôM†˜ 
  8446.  H˛ÄIJ@˜5˛ "Áñ†?€0˛VôJ†˜  P˛ÄIJ@(˛ ˚6"0˛Jó2@˜  `{3•çÛÉ7ùΔgV+ù0˛˚-˛" ˝0 †R|ßfi¸Çzô$Ù‘:Sx˛ ˚)"¸0 `RD¶ƒÇBô$Ñ‘FS@˜/"B˛€0 1@R;ùÃ˚í;y$wHGù8˛˚9"∫˛)$Å0˛p˛ê ˇ‚¿˛Ä˛˜9˛"R˛§Å0˛H˛ê IJÄ˚˛ ˚ò@Ä¿˘Ä¿˘GEá>6"≤˛
  8447. dÅ0˛IºÓ<Òπ∏liªú‡DEʲ˚3˛"˛=õ0Äs‘… Zd^˘ê” àã˛ ı˛ ˚."¸0¿J… dPŸìS ˛ ı˜0"˙0˛I€……Ÿ§Ngô“‰ˇkgpı˛˚%"¯˛õ0Û
  8448.  ˙Ù†ı˜%˛ " @*dÅ0 äцı˛ ˚&"⁄†§Å0 tt∞ı˛˚.˛ "† $Å0˛à˛ @˛˝ Ò˛ ˚*"†?€0˛˝@˛˝ Ò˜."¸0˛ªùÕùƯ Û1øq¿ Ò˛˚)"˚ˇ·˛ê”*S#|§£’J@ Ò˜+˛"˙0˛ìS*S-`§£UJ@ Ò˛ ˚0"ÓrÄ0˛ë›…ù'|é£!ùI¿ Òˇ¸˛˚&˛ "Q%Ä*§Åˇ0˝Ä˝@ Í ˚!"Q"ħÅs0˝˚Ä „!"Q%Ä
  8449. §ÅS0˝˜ Í˚"N(‡?fl0 „˛"¸€ Í ˚"˙sˇ‡Í˚˛"˙÷ ˚
  8450. #¯ˇœ"˙Û÷˚"˙õœ˛"˙õ÷ ˚"˙˚÷˚˛"˙{÷ ˚"˙œ#¯ˇ÷˚
  8451. !¯ˇœ ˛ Õ ˚  Õ˚ ˛ Õ ˚  ‹Ï ‹xÛ˚ ›»Ï˛ › Û ˚ ›8Û˚˛ fi‡Û ˚ fiÏ fi8Û˚ fip‡Ï˛ fl¿ÄÛ ˚ ¿Ä0ˆÚ˚˛ Ò‡Ä0ˆ88Ú ˚ ÒÁΩÔw8˜‡‡Î Òʘ˘ˇˇ∞˜Ò˚ Òʘ¡è«∞˜Ͳ Ò7Ω¯ˆ∏˜Ò ˚ 0ÙÄÄÒ˚˛ 0Ù¯ ˚ ‚ÄÈ ‚¯Ä˚ ˆÚˇ¯Ä˲ ˆÚ¯Ô ˚ ˆÚÄÓ˚˛  ˆÒà0|Ó ˚ ˆ˚0˚w¿Ê8ˆ˚0˚\Ì˚˜ˇ¸
  8452. ˚";wø¢¸"(¿Â˛ˆ˚˛˜Ä¸    ÄÏ ˚ˆ˚Δ˜˚    Î˚˛¿˜˚àõˇª˚àâÅÎ ˚˛p˜˙˚Ô„˛˜ˇ¸˙˚8Í˚ò@¿Ú˘¿Ú˘áEπ>Ú
  8453. Ú"(„ÒÚ Í ˚ÚÚÈ˚ÒÚˇ¯È ˚ ÚÚ‚ÚÚÈ˚ ÚÚ‚ÒÚÈ ˚ÚÚÈ˚Ò ˚Ä˝È ˚Ú    ÄòÄ˝‚ÚªdÈßh›ÙÁ4;ü4gÿÈ˚ÚEF4ÿ¥¥™òö$—™Û‚Ò}D†à†î™üê'V™ÉÈ ˚Ú êè˘Áy”΂<9”™sÈ˚ÒÄ˙ ˝È ˚ÚÄ˙ ˝‚Ú˜ ˝È˚Ú ˙@˝‚ÒÄt˚È ˚ÚªdÈßhè4œs∑hgÿÈ˚ÒEF4ÿ¥dD¢H·‘ÛÈ ˚Ú}D†à†êD¢Kf‘É‚Ú êè˘Áy„=˛fiq„‘sÈ˚ÚÄ˚@˝‚ÒÄ˚@˝È ˚Ú˜@˝È˚ÒÚÈ ˚ ÚÚ‚ÚÚÈ˚ ÚÚ‚ÒÚÈ ˚ÚÚÈ˚ÒÚˇ¯È ˚¬…˚¬» ˚…˚» ˚¬…˚¬» ˚…˚ »Ã˚…30˚¡¡¡ò@@˘@˘πE˘>¡¡¡¡¡¡¡¡    Ü«        à«    ê«    $«    ê‰q:«    ëA"«    ˛Éú«¡¡¡¡¡ †`    Äx˛– ˛˛fi Äê:@$˛@1˛˛fi /F»@DùE±÷fi9ÿ@—lÜçb€∏]-∏fi 2…pÄYc™“ìdÖh@Í¥)Kñ•i@•Vêfi RY8Sù2î¢d$âH@œ$JP¥ÆJ9…‰†fi lr àJU5¥ÿ5òcîLZñÈõ    
  8454. â∞fi \Zp;¿Â˘â&‰∏"
  8455. êc»mπGíp‰y fi"˚˛D˝Ä‘"˚˛D˝Ä‘˚˛8˝Ä‘¡¡$Ĭ0f◊  ˝ ô◊$YtMáúH2 ÆÁRr ë+ú9ÄŸ    ,¬"§¶à§†Tï’R•ru RØ@Ÿ
  8456. Eº$…$á    ¿ˇ~ò‚ï.>$&ór@Ÿ gGÌIÅë$I,"ßh    (K¥DÄŸEÙEHâ<sú…√E∑œ28€ªÿˆ˙@ÿˆ˙@ÿˆ˙@ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¡( ‡¿p :DIJ Ä8`@Ä8¿@Ê'$±@  @ @˝ Ä@@Ê($$©Ä;r≤“í2‰õ [Y#.â∞ΩêËæI±» Rë:[ÓÊ($)*ÄM%EÔRUEM©´-%Tî–&í)YTT–î ÔRÉä≠PÊ($…,ÄINIJdâäI%))iHô$ê$¢JKà§ë$Jg…éÊ($IHÄShèî∂øŒìÍBA”k˝©0)¥RŒºÈ1®"î¥U¬Ê($_È»ÚGäc$JâRQrD©$y$#kHë!gc#èàÚúÊ˝˛Ñı¯Ñ·ò@@Ģ@Ģ˘E9>˝˛Ñı¯Ñ·
  8457. ˘ÑÎÑ·¡¡
  8458. ‡Ã
  8459. à §D÷R<¨cÕ ;‘§jÓIP    •Õ íôƒ    JJ”ê    (Õ •-:êìö 
  8460. kÕ ÿ»·ƒîb—·D@Œ !˝ÄÀ !˝ÄÀ
  8461. !˝Ä…¡¡˛–¯ÄœÅÄ@PÄœóà≟÷ƒR/Ï∏¨–) JjìJVPëQP–J
  8462. &RL¢R¢œbP–{    )îù¥‘ÛÉ£Ú†–Rìàñ‰à颛"° –
  8463. ˝@ 
  8464. ˝@ ˝Ä«¡¡  ¿`     ê  $YrX!      ,¬"• · 
  8465. Eº$…   gGÍA   EÙED@‰¿ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˘Ä¿˘9Ey>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˘¿˘yEπ>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˘@˘πE˘>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ģ@Ģ˘E9>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˘Ä¿˘9Ey>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˘¿Ú˘yE´>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˘@˘πE˘>¡¡¡¡¡¡¡¡    Ü«        à«    ê«    $«    ê‰q:«    ëA"«    ˛Éú«¡¡¡¡¡ †`    Äx˛– ˛˛fi Äê:@$˛@1˛˛fi /F»@DùE±÷fi9ÿ@—lÜçb€∏]-∏fi 2…pÄYc™“ìdÖh@Í¥)Kñ•i@•Vêfi RY8Sù2î¢d$âH@œ$JP¥ÆJ9…‰†fi lr àJU5¥ÿ5òcîLZñÈõ    
  8466. â∞fi \Zp;¿Â˘â&‰∏"
  8467. êc»mπGíp‰y fi"˚˛D˝Ä‘"˚˛D˝Ä‘˚˛8˝Ä‘¡¡$Ĭ0f◊  ˝ ô◊$YtMáúH2 ÆÁRr ë+ú9ÄŸ    ,¬"§¶à§†Tï’R•ru RØ@Ÿ
  8468. Eº$…$á    ¿ˇ~ò‚ï.>$&ór@Ÿ gGÌIÅë$I,"ßh    (K¥DÄŸEÙEHâ<sú…√E∑œ28€ªÿˆ˙@ÿˆ˙@ÿˆ˙@ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¡( ‡¿p :DIJ Ä8`@Ä8¿@Ê'$±@  @ @˝ Ä@@Ê($$©Ä;r≤“í2‰õ [Y#.â∞ΩêËæI±» Rë:[ÓÊ($)*ÄM%EÔRUEM©´-%Tî–&í)YTT–î ÔRÉä≠PÊ($…,ÄINIJdâäI%))iHô$ê$¢JKà§ë$Jg…éÊ($IHÄShèî∂øŒìÍBA”k˝©0)¥RŒºÈ1®"î¥U¬Ê($_È»ÚGäc$JâRQrD©$y$#kHë!gc#èàÚúÊ˝˛Ñı¯Ñ·ò@@Ģ@Ģ˘E9>˝˛Ñı¯Ñ·
  8469. ˘ÑÎÑ·¡¡
  8470. ‡Ã
  8471. à §D÷R<¨cÕ ;‘§jÓIP    •Õ íôƒ    JJ”ê    (Õ •-:êìö 
  8472. kÕ ÿ»·ƒîb—·D@Œ !˝ÄÀ !˝ÄÀ
  8473. !˝Ä…¡¡˛–¯ÄœÅÄ@PÄœóà≟÷ƒR/Ï∏¨–) JjìJVPëQP–J
  8474. &RL¢R¢œbP–{    )îù¥‘ÛÉ£Ú†–Rìàñ‰à颛"° –
  8475. ˝@ 
  8476. ˝@ ˝Ä«¡¡  ¿`     ê  $YrX!      ,¬"• · 
  8477. Eº$…   gGÍA   EÙED@‰¿ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˘Ä¿˘9Ey>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˘¿˘yEπ>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˘@˘πE˘>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ģ@Ģ˘E9>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˘Ä¿˘9Ey>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˘¿Ú˘yE´>¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ˇ¸@ˇ ˇˇˇˇ@
  8478. ˇ·ˇ‚7^
  8479. 4*\¯, Palatino&e.3+l"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@lIntroduction to •)8 Apple Events4⁄*˙¯
  8480. (‡*3-28    )BCreating and Sending â)Y Apple Events4^*¿¯
  8481. °dONLNd\lh…(elWhen your handler r퇰dONLNd\…hÛ)]
  8482. eturns a rl°dONLNd\Ûh=)*esult code to the ¶Ä°dONLNd/\=hû)JApple Event Managerò°dONLNdB\ûh‘)a , you have fiÒ¿°dONLNdO\‘hÙ)6nished °dONLNdViluá(rlyour r√`°dONLNd\iáu)$esponse to the client application’s ™°dONLNdÄiuV)ó Apple event.
  8483. |*ó¯4}*ó¯
  8484. ß*د4®*د ©*©˛
  8485. ˇ·ˇ‚7^ˇˇ©ˇÆ°dONLNdéî*ß<(¢*CrJ9°dONLNdêî<ßÀ)eating and Sending ‚{°dONLNd£î ß÷)éAΔ+°dONLNd§î◊ß+) pple EventsˇˇˇˇˇˇU˛(¢3
  8486. °dONLNd±∏lƒr(¡lY@Ä°dONLNd≤∏rƒ€)our application can use W†°dONLNd ∏€ƒ')iApple events to r\@°dONLNd€∏'ƒ∂)L!equest services or information frJ@°dONLNd¸∏∂ƒ‡)è    om other °dONLNd≈l—ù(Œl application6‡°dONLNd≈û—⁄)2Js, send information to other applications, or trigger actions within your °dONLNdZ“lfi≠(€lapplication. Fo;Ä°dONLNdi“ÆfiÈ)Br example, yo- °dONLNdv“Ífiˆ)<u c$Ä°dONLNdy“˜fi)an u‡°dONLNd|“fi3) use the cor ¿°dONLNdá“4fi;)0e ˜°dONLNdâ“:fiß)Apple event Get Data to ¶`°dONLNd°“®fi´)nrk`°dONLNd¢“¨fiÁ)equest specifi `°dONLNd∞“ËfiÓ)<c °dONLNd≤fllÎâ(Ëldata frw°dONLNdπflâÎ*)"om another application’s documents    Ä°dONLNd€fl+ÎX)¢ . Similarly$¿°dONLNdÊflWΨ),, you can use other g°dONLNd˙fl¨Î≥)UA.@°dONLNd˚fl¥Î‚)
  8487. pple event±¿°dONLNdfl‚ÎÛ).s to °dONLNd
  8488. Ïl¯o(ılrE°dONLNd Ïp¯â)equesµÄ°dONLNdÏ⯪) t services—v†°dONLNdϺ¯Ô)3Hfor example, asking a spell-checking application to check the text in a °dONLNdc˘l£(l document crÔ@°dONLNdn˘£N)7'eated by your application. Consult the ÷¿°dONLNdï˘OÎ)¨%Apple Event Registry: Standard SuitesƒÄ°dONLNd∫˘ÏÓ)ù °dONLNdªl#(l*for the format and function of the standar?`°dONLNdÂ$,)∏d |¿°dONLNdÁ,|)Apple events that Z†°dONLNd˘}©)Q    you want — °dONLNd©Ï),your applicatio5°dONLNdÌı)Dn °dONLNdl{(lto sÙ‡°dONLNd{ã)end´†°dONLNdåë). °dONLNd%l1r(.lTµ¿°dONLNd%q1_)3o communicate with another application by sending aÍ`°dONLNdQ%_1g)Ón ›`°dONLNdS%g1π)Apple event, your °dONLNde2l>ù(;l application6‡°dONLNdp2û>†)2 ∂‡°dONLNdq2†>∂)must,Zapf Dingbats°dONLNdvHlOq(Nln
  8489. °dONLNdxExQ¨) set the appro†°dONLNdÑE¨Q”)4    opriate fl[°dONLNdéE‘Q˝)( ags in its ,
  8490. Courier»†°dONLNdôE˝Q))'»@°dONLNdöEQ)SIZEΔ¿°dONLNdûEQ!)'Δ`°dONLNdüE!Q') r `°dONLNd°E(Q@)esourS†°dONLNd¶E@QI)ce°dONLNd©Zlaq(`ln
  8491. °dONLNd´WxcÄ) crµ@°dONLNd≠WÄc°)eate an ˝‡°dONLNdµW°cŸ)! Apple event »†°dONLNd¡W⁄c›)9r熰dONLNd¬Wfic)ecor°dONLNdΔWÒc˘)d ù¿°dONLNd»W˘c6)by calling the õ¿°dONLNd◊W7c£)>AECreateAppleEventï°dONLNdÈW£c )l     function°dONLNdÛllsq(rln
  8492. °dONLNdıixuâ) use Ø`°dONLNd˘iâuÔ)NApple Event Manager functions to add parameters and any additional attributes °dONLNdGuxÅì(~xto the ∂‡°dONLNdNuìÅ…) Apple event°dONLNdZälëq(êln
  8493. °dONLNd\áxìö)     call the û`°dONLNdeáöìæ)"AESendú °dONLNdkáæì)$ function to send the U°dONLNdÅáìQ)] Apple event°dONLNdçúl£q(¢ln
  8494. °dONLNdèôx•) %dispose of any copies of descriptor rË¿°dONLNd¥ô•))üecor] °dONLNd∏ô*•~)ds that you have cré@°dONLNdÀô~•ï)Teated°dONLNd—Ælµq(¥ln
  8495. °dONLNd”´x∑≠) handle the r퇰dONLNdfl´≠∑¬)5eply ˜¿°dONLNd‰´¬∑1)Apple event (if necessary£@°dONLNd˝´2∑5)p)°dONLNdˇºl»î(≈lCThe sections that follow describe how your application can use the ~`°dONLNdBºî»Œ(≈î Apple Event °dONLNdN…l’Q(“l2Manager to accomplish these tasks. The chapter “Crfi¿°dONLNdÄ…Q’©)Âeating and Sending Å¿°dONLNdì…©’˜)XApple Events” in °dONLNd§÷l‚°(fll this book prÇ°dONLNd∞÷°‚B)5$ovides detailed information about crΩ†°dONLNd‘÷B‚ò)°eating and sending ]‡°dONLNdÁ÷ô‚÷)WApple events.°dONLNdıËlÙr(ÒlTµ¿°dONLNdˆËqÙ3)/o act as a server for your application, the tarÆ°dONLNd%Ë3Ù‰)¬(get application must support high-level °dONLNdMıl»(˛levents and must be rÅ¿°dONLNdaı»≈)\8unning. The server can be your own application, another °dONLNdôl§( lapplication rïÄ°dONLNd¶§˜)8unning on the userÍ@°dONLNd∏¯,)T ’s computerr¿°dONLNd√,Ç)4, or an application r¡¿°dONLNdÿÇÈ)Vunning on another userP°dONLNdÓÎÙ)i’s °dONLNdÒl(l#computer connected to the network. °dONLNd!l-r*Y@Ä°dONLNd!r-Á)Tour application should also allow the user to choose among the various applications °dONLNdj.l:Ÿ(7lavailable as servers. The B °dONLNdÑ.⁄:)n
  8496. PPCBrowser>`°dONLNdé.:´)<$ function allows users to select taré¿°dONLNd≤.´:Û)ïget applications °dONLNd√;lG¨(DlEon their own computers or on computers connected to the network. The ∞ °dONLNd;¨GË(D¨
  8497. PPCBrowser¨`°dONLNd;ËGÍ)< °dONLNdHlTù(Ql function pr’`°dONLNdHùT„)1esents a standar'‡°dONLNd.H‰Tx)G#d user interface for choosing a tar°dONLNdQHxTˆ)îget application, much as the °dONLNdnUlaé(^lStandar¥@°dONLNduUéa⁄)"d File Package pr¢`°dONLNdÜU⁄a")Lovides a standar˙`°dONLNdñU"aÿ)H)d user interface for opening and saving fi °dONLNd¿UŸaÈ)∑les. °dONLNd≈bln¿(klSee the chapter “Pr¡`°dONLNdÿb¿nˆ)T ogram-to-Pr∫‡°dONLNd„bˆnj)6ogram Communications T– °dONLNd˘binÛ)s!oolbox” in this book for details °dONLNd    ol{•(xlon using the ±@°dONLNd    'o•{·)9
  8498. PPCBrowser≠Ä°dONLNd    1o·{ )<
  8499.  function.ˇA@ˇ ˇˇˇˇ@
  8500. ˇ·ˇ‚7^
  8501. 4H\, Palatino&e.3+ä"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@äIntroduction to •)8 Apple Events4⁄ä˙(‡äCreating and Sending â)Y Apple Events
  8502. , (‡3-29
  8503. ˇˇˇˇˇˇˇˇ440lòÄ.B0oMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""B0oB0o$””””””””””””””””””””””””””””””òÄ
  8504. 60@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""60@60@˜˜˜˜˜˜˜˜˜˜˜˜˜
  8505. ˛ˇ˛ˇˇ ˇˇ˛ˇˇ     ˇˇˇ˙ˇ
  8506. ˛ˇˇˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜
  8507. 454+?òÄ
  8508. 56+@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""56+@56+@$˜˛˙ˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  8509. ˛ˇ˛ˇˇ˛¸ˇˇ˚ˇ˛˙ˇˇ˝˛ˇ˛
  8510. ˛ˇ˛ˇˇ
  8511. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  8512. ˛ˇ˛ˇˇ
  8513. ˛ˇ˛ˇˇ˛˙ˇ˜˝˝ˇˇ˛ˇ˚˝ˇ¸˛¸ˇˇ˜˝˛ˇ˛
  8514. ˛ˇ˛ˇˇ
  8515. ˛ˇ˛ˇˇ˝ˇˇ˛˜˝¸ˇ
  8516. ˛ˇ˛ˇˇ˛¸ˇˇ˜˝˛ˇ˛
  8517. ˛ˇ˛ˇˇ
  8518. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˜˝¸ˇ
  8519. ˛ˇ˛ˇˇ˝˛ˇ˛
  8520. ˛ˇ˛ˇˇ
  8521. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  8522. ˛ˇ˛ˇˇ
  8523. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  8524. ˛ˇ˛ˇˇ
  8525. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  8526. ˛ˇˇˇˇ
  8527. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  8528. ˛ˇˇˇ
  8529. ˛ˇˇˇ
  8530. ˛ˇˇˇ
  8531. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  8532. ˛ˇˇˇˇ
  8533. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  8534. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  8535. ˛ˇˇˇˇ
  8536. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\äh(eä#If the server application is on a r”†°dONLNd#\h)é7emote computer on a network, the user of that computer °dONLNdZiäu«(rämust allow pr>‡°dONLNdgi»u)>Logram linking to the server application. The user of the server application °dONLNd≥väÇ}(ä9does this by selecting the application icon in the Finder @°dONLNdÏv|Ç◊)Ú, choosing Sharing fr‚@°dONLNdv◊ǯ)[om the °dONLNdÉäèú(åäFile )Ä°dONLNdÉùè)menu, then clicking the ÷†°dONLNd%ÉèR)iAllow Remote Pr÷‡°dONLNd4ÉRè)L(ogram Linking checkbox. If the user has °dONLNd\êäú÷(ôänot yet started prÖ@°dONLNdnê÷úÜ)L%ogram linking, the Sharing command of @°dONLNdìêáúÿ)±fers to display the °dONLNdßùä©Æ(¶äSharing L†°dONLNdØùØ©·)% Setup contr‡ °dONLNd∫ù·©~)2&ol panel so that the user can start prg°dONLNd‡ù©)ûogram linking. The user must °dONLNd˝™ä∂Œ(≥äalso authorize r‡°dONLNd™œ∂)Eemote users for prtÄ°dONLNd™∂ )P%ogram linking by using the Users & Gr‡°dONLNdD™ ∂˘)´
  8537. oups contr‡ °dONLNdN™˘∂)/ol °dONLNdQ∑ä√±(¿ä    panel. Pr‘ °dONLNdZ∑±√¢)'6ogram linking and setting up authenticated sessions ar醰dONLNdê∑£√Û)Úe described in the °dONLNd£ƒä–º(Õä chapter “Pr°dONLNdÆƒΩ–Û)3 ogram-to-Pr
  8538. Ä°dONLNdπƒÛ–g)6ogram Communications T¿°dONLNdœƒf–¡)soolbox” in this book.
  8539. ıH¸4ˆH¸ ˜ä˜
  8540. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNdÂÊäıì(ÒäCwé°dONLNdÊÊîı‘)
  8541. reating an J(°dONLNdÒÊ‘ıÔ)@ApplΩÄ°dONLNdıÊÔı
  8542. )e Ev0ÿ°dONLNd˘Ê ı)ent9‚°dONLNd¸ÊıN) Recordˇˇˇˇˇˇ€r)3
  8543. °dONLNd¸ä≠(äUse the ,
  8544. Courier+@°dONLNd¸Æ)$AECreateAppleEvent$Ä°dONLNd¸W)l function to crü‡°dONLNd.¸Wx)=eate an ËÄ°dONLNd6¸x¥)!Apple event rx@°dONLNdC¸µ«)=ecorφ°dONLNdG¸«ˇ)d. Using the °dONLNdT    äí(äarE°dONLNdV    ì)    guments you pass to the f¿°dONLNdn    m)nAECreateAppleEvent`°dONLNdÄ    m©)l function, the Ì@°dONLNdè    ©)<Apple Event Manager °dONLNd£ä"•(äconstrï °dONLNd©•"Î)ucts the data str•`°dONLNd∫Î")Fuctur+@°dONLNdø"Ô)8es describing the event class, the event ID, and the tarÖÄ°dONLNd˜Ô"ˇ)Ïget °dONLNd˚#ä/ü(,äaddr|Ä°dONLNdˇ#ü/Ù)ess attributes of an 4°dONLNd#Ù/)UCApple event. The event class and event ID, of course, identify the °dONLNdW0ä<B(9ä*particular event you wish to send. The tar`°dONLNdÅ0C<h)πget addr°dONLNdâ0h<ó)% ess identifiπ@°dONLNdï0ó<´)/es thS†°dONLNdö0¨<·) e intended rzÄ°dONLNd¶0·<)5 ecipient of °dONLNd≤=äIç(Fät¬`°dONLNd≥=çIö)he °dONLNd∂=öI–) Apple event…¿°dONLNd¡=–I“)6.°dONLNd√Oä[ê(XäY@Ä°dONLNdƒOê[R)-ou can specify two other attributes with the ˇÄ°dONLNdÒOR[æ)¬AECreateAppleEvent¯¿°dONLNdOæ[˙)l function: the °dONLNd\ähç(eärE°dONLNd\éh°)eplyà@°dONLNd\°h£) @°dONLNd\§h>)$ID and the transaction ID. For the r… °dONLNd<\>hı)ö+eply ID attribute, you usually specify the °dONLNdgiäu(räkAutoGenerateReturnIDx °dONLNd|iuM)~ constant to the W†°dONLNdçiNu∫)FAECreateAppleEventP‡°dONLNdüi∫u¸)l function. This °dONLNdØväÇ (äconstant ensurÓ`°dONLNdΩv Ǣ)@ es that the J °dONLNd…v˙Ç∑)0(Apple Event Manager generates a unique r °dONLNdÒv∏ǡ)æeturn ID for the °dONLNdÉäèç(åärE°dONLNdÉéè£)eply ©‡°dONLNdÉ£èfl)Apple event r9†°dONLNdɇè )=
  8545. eturned frè°dONLNdÉ èH),om the serverT@°dONLNd,ÉHèÊ)<&. For the transaction ID attribute, yoi°dONLNdRÉÊèÙ)ûu u˜@°dONLNdUÉÙè)sually °dONLNd\êäúº(ôä specify the °¿°dONLNdhêºú")2kAnyTransactionIDõ`°dONLNdyê"úΩ)f% constant, which indicates that this `°dONLNdûêΩú¯)õApple event i °dONLNd´ê˘ú)<s not °dONLNd±ùä©è(¶äoıÄ°dONLNd≤ùè©Í)ne of a series of inter@°dONLNd…ùΩ)\
  8546. dependent ≥Ä°dONLNd”ù©V)1 Apple events;@°dONLNdflùW©Y);.
  8547. ŒH’4œH’ –ä–
  8548. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd·øäŒ∏( äAdding 7Ç°dONLNdËø∏Œ). Apple Event "J°dONLNdÙøŒ§)MAttributes and Parametersˇˇˇˇˇˇ€r( 3
  8549. °dONLNd⁄äÊù(„äThe ]`°dONLNd⁄ùÊŸ)Apple event rÌ °dONLNd ⁄ŸÊÎ)<ecoraÄ°dONLNd$⁄Ïʸ)d cr2Ä°dONLNd(⁄˝Ê>)eated with the ‘`°dONLNd7⁄>Ê™)AAECreateAppleEventÕ†°dONLNdI⁄™Ê˝)l function serves as ø°dONLNd]⁄˛Ê)Ta °dONLNd_ÁäÛ¡(ä foundation fÉ °dONLNdkÁ¡Û›)7or the j@°dONLNdrÁ›Ûd)Apple event you want to send.W °dONLNdèÁeÛú)à Descriptor r◊‡°dONLNdúÁúÛÆ)7ecorL@°dONLNd†ÁØÛ)ds and descriptor lists °dONLNd∏Ùäí(˝äarE°dONLNd∫Ùì¯)    e the building blocks fr͇°dONLNd“Ù¯a)eom which the complete †°dONLNdËÙbû)jApple event r`°dONLNdıÙü±)=ecorÉ¿°dONLNd˘Ù±fi) d is constr⁄°dONLNdÙfi)-ucted. TƇ°dONLNd Ù)#o °dONLNdäí(
  8550. äcrµ@°dONLNdíŸ)eate descriptor rj °dONLNd!⁄Ï)HecorfiÄ°dONLNd%Ï)Dds and descriptor lists and add items to a descriptor list, use the °dONLNdiä‚(äfollowing functions:    °dONLNd~'ä2Ø*Function°dONLNdá'Ê2)\ Description
  8551. °dONLNdî5äA“(>ä AECreateDesc°dONLNd°5ÊAÏ)\Tµ¿°dONLNd¢5ÎA)Dakes a descriptor type and a pointer to data and converts them into °dONLNdÊ@ÊL!(IÊa descriptor r_@°dONLNdÙ@!L3);ecor”†°dONLNd¯@3L9)d°dONLNd˚Pä\“(Yä AECreateList°dONLNd    PÊ\Ò)\Cr\°dONLNd    
  8552. PÒ\Å) "eates an empty descriptor list or %`°dONLNd    ,PÅ\ï)êAE rM`°dONLNd    0Pï\ß)ecor¡¿°dONLNd    4Pß\Ø)d.°dONLNd    8`äl∫(iäAEPutPtr°dONLNd    A`ÊlÏ)\Tµ¿°dONLNd    B`Îl˛)?akes a descriptor type and a pointer to data and adds the data °dONLNd    ÅkÊwÓ(tÊto7‡°dONLNd    ÉkÔwÒ)     ∑‡°dONLNd    ÑkÒwˆ)a∑‡°dONLNd    Ökˆw¯) 7‡°dONLNd    Ük˘w)!descriptor list as a descriptor r>Ä°dONLNd    ßkwë)Üecor≤‡°dONLNd    ´këw˚)d; used, for example, to °dONLNd    ƒvÊǘ(Êadd∑Ä°dONLNd    «v˜Ǣ) 7Ä°dONLNd    »v˙Çr)to a descriptor list a numbe◊Ä°dONLNd    ‰vrÇ~)xr uQ@°dONLNd    ÁvÇı)sed as the parameter of an [`°dONLNd
  8553. vıÇ)vApple °dONLNd
  8554. ÅÊç(äÊevent r@°dONLNd
  8555. Åçl)equesting a calculation.°dONLNd
  8556. )ëäù¿(öä    AEPutDesc°dONLNd
  8557. 3ëÊù;)\Adds a descriptor r°dONLNd
  8558. Fë<ùN)Vecorè`°dONLNd
  8559. JëNùˇ)+d to a descriptor list; used, for example, °dONLNd
  8560. uúÊ®Ó(•Êto7‡°dONLNd
  8561. wúÔ®Ò)     ∑‡°dONLNd
  8562. xúÒ®~)#add to a descriptor list an alias r5¿°dONLNd
  8563. õú®ë)éecor™ °dONLNd
  8564. üúë®ü)d uM°dONLNd
  8565. ¢ú†®⁄)sed as the dir“‡°dONLNd
  8566. ∞ú⁄®Ë):ect °dONLNd
  8567. ¥ßÊ≥.(∞Êparameter of an Õ`°dONLNd
  8568. ƒß.≥j)HApple event r] °dONLNd
  8569. —ßk≥û)= equesting fi†°dONLNd
  8570. ›ßû≥Ê)3le manipulation.ˇ%¯@ˇ ˇˇˇˇ@
  8571. ˇ·ˇ‚7^
  8572. 4*\¯, Palatino&e.3+l"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@lIntroduction to •)8 Apple Events4⁄*˙¯
  8573. (‡*3-30    )BCreating and Sending â)Y Apple Events4^*¿¯
  8574. °dONLNd\lhr(elTµ¿°dONLNd\qh†) o add the rÖ °dONLNd \°hï)06emaining attributes and parameters necessary for your ƒ†°dONLNdB\ïhÈ)ÙApple event to the °dONLNdUilu®(rlApple event r¿°dONLNdbi©uª)=ecorÑ °dONLNdfiªu—)d, yo§Ä°dONLNdki—uÒ)u can uÙ`°dONLNdriÒuE) se these additional zÄ°dONLNdÜiFu’)UApple Event Manager functions:°dONLNd& l÷s(”lAG@°dONLNd' t÷ˆ)pple event parameters for corÄ°dONLNdD ˆ÷h)Çe events and functional-arP°dONLNd^ i÷…)sea events can include °dONLNdt◊l„Ø(‡ldescriptions of     `°dONLNdÑ◊∞„h)D+Apple event objects in special descriptor rƒ°dONLNdØ◊h„z)∏ecor8`°dONLNd≥◊{„›)ds called object specifiu¿°dONLNdÀ◊›„Ë)ber °dONLNdŒ‰lo(ÌlrE°dONLNdœ‰pÇ)ecorπ`°dONLNd”‰Ç )$ds. For an overview of object specifiȆ°dONLNd¯‰ /)ûer r͇°dONLNd¸‰/A)ecor_@°dONLNd‰Ba)ds, see @°dONLNd‰bq) “W@°dONLNd
  8575. ‰pô)orking WP¿°dONLNd‰ô„))ith Object SpecifiÙ@°dONLNd$‰„Ó)Jer °dONLNd'Òl˝Ö(˙lRecor¢`°dONLNd,ÒÖ˝ñ)ds,”{ °dONLNd0Òó˝‰) which begins on ÎÄ°dONLNdAÒ‰˝˚)Mpage Δ`°dONLNdFÒ¸˝)3-32@°dONLNdJÒ˝).
  8576. "*)¯4#*)¯ $l$¯
  8577. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNdLl"µ(l Sending an Â°dONLNdW¥"ê)H"Apple Event and Handling the Replyˇˇˇˇˇˇ€r(3
  8578. °dONLNd{)l5B(2l1After you add all the attributes and parameters rB¿°dONLNd¨)C5Z)◊equirZ°dONLNd±)Z5Ü) ed for the ˙`°dONLNdº)Ü5„),Apple event, use the ,
  8579. Courier°dONLNd—6lBê(?lAESend}¿°dONLNd◊6êBÌ)$ function to send the 6†°dONLNdÌ6ÌB;)]Apple event. The ^¿°dONLNd˛6;B≈)NApple Event Manager uses the °dONLNdClOÖ(LlEvent`°dONLNd CÜOà) ü`°dONLNd!CàOı)Manager to transmit the ™`°dONLNd9CıOõ)m&Apple event to the server application.°dONLNd`Ula(^lThe ª¿°dONLNddUa£)AESendπÄ°dONLNdjU£a—)$  function rå¿°dONLNduU—aË).equir§°dONLNdzUËa])es that you specify whethe @°dONLNdîU^aj)vr y"°dONLNdóUjaˆ)  our application should wait for °dONLNd∑blnw(kla r≈°dONLNd∫bwnî) eply fr° °dONLNd¡bînÃ) om the serve1 °dONLNdÕbÕn–)9rf`°dONLNdŒb–n“).Ê`°dONLNdœb“n^)! If you specify that you want a rzÄ°dONLNdb_nr)çeply¢°dONLNdÙbqnÜ), the °°dONLNd˙bÜnÍ)Apple Event Manager °dONLNd    ol{u(xlprG °dONLNd    ov{â)
  8580. epar◊‡°dONLNd    oâ{ü)es a r£Ä°dONLNd    o†{µ)eply `°dONLNd    o∂{®)7Apple event for your application by passing a default r–@°dONLNd    Vo®{Ω)Úeply 5 °dONLNd    [oæ{ˆ) Apple event °dONLNd    g|là¢(Ölto the server≥†°dONLNd    t|¢à∫)6. The ë°dONLNd    z|∫à")Apple Event Manager rч°dONLNd    è|"àr)heturns any nonzer†`°dONLNd    †|rà})Po rZ‡°dONLNd    £|~à¥) esult code frw`°dONLNd    ∞|¥à’)6om the °dONLNd    ∑âlïá(ílserverô °dONLNd    Ωâàï—)’s handler in the ó†°dONLNd    œâ“ï&)JkeyErrorNumberí`°dONLNd    ›â&ïx)T parameter of the rè °dONLNd    âxïç)Reply Ù°dONLNd    ıâçï»)Apple event. °dONLNd
  8581. ñl¢|(ülThe;¿°dONLNd
  8582. ñ}¢) ª¿°dONLNd
  8583. ñ¢≤) server can r °dONLNd
  8584. ñ≥¢Á)4 eturn an errG‡°dONLNd
  8585. ñÁ¢*)4or string in the °dONLNd
  8586. /ñ+¢)DkeyErrorString¸¿°dONLNd
  8587. =ñ~¢–)S parameter of the r˘Ä°dONLNd
  8588. Pñ–¢Â)Reply °dONLNd
  8589. U£lØ$(¨l*Apple event. The server can also use the rn‡°dONLNd
  8590. £$Ø9)∏eply ”¿°dONLNd
  8591. Ñ£9ØÄ)Apple event to rõ`°dONLNd
  8592. î£ÅØ◊)Heturn any data you °dONLNd
  8593. ß∞lºo(πlrE°dONLNd
  8594. ®∞pºÔ)equested—for example, the r∂°dONLNd
  8595. √∞Ôº>)esults of a numeriΔ°dONLNd
  8596. ’∞>ºI)Oc c&Ä°dONLNd
  8597. ÿ∞JºÍ) &alculation or a list of misspelled wor´†°dONLNd
  8598. ˛∞ͺˆ)†ds.    °dONLNd•Çlçë(älFunctiony@°dONLNdÆÇÏç)Ä Description
  8599. °dONLNdªêlú∫(ôlAEPutParamPtry@°dONLNd…êÏúÚ)ÄTØ°dONLNd êÒú0)akes a keyworæ °dONLNd◊ê0úÌ)?,d, descriptor type, and pointer to data and y@°dONLNdõÏßB(§Ïadds the data to an ‘ °dONLNdõBß~)VApple event rc‡°dONLNd$õßë)=ecorÿ@°dONLNd(õëßÛ)d as a parameter with y@°dONLNd>¶Ï≤(ØÏ
  8600. the specifiD¿°dONLNdI¶≤H)-    ed keywor#Ä°dONLNdR¶H≤W)/d (rÿ °dONLNdV¶W≤Á) eplacing any existing parameter y@°dONLNdv±ÏΩN(∫Ïwith the same keywor}¿°dONLNdä±NΩÕ)bd); used, for example, to put y@°dONLNd®ºÏ»Ü(≈Ï"numbers into the parameters of an °dONLNd ºá»È)õApple event that asks y@°dONLNd‡«Ï”Ü(–Ï$the server to perform a calculation.°dONLNd◊l„¿(‡lAEPutParamDescy@°dONLNd◊Ï„Ú)ÄTØ°dONLNd◊Ò„0)akes a keyworæ °dONLNd#◊0„á)?d and a descriptor r¶@°dONLNd7◊á„ô)Wecor†°dONLNd;◊ö„fi)d and adds the y@°dONLNdJ‚ÏÓ(ÎÏ descriptor rÿÄ°dONLNdV‚Ó1)3ecorL‡°dONLNdZ‚2ÓS)d to an Ä°dONLNdb‚SÓè)!Apple event r£@°dONLNdo‚èÓ°)<ecor†°dONLNds‚¢ÓÌ)d as a parameter y@°dONLNdÑÌÏ˘/(ˆÏwith the specifi‡°dONLNdîÌ0˘_)D    ed keyworˆ†°dONLNdùÌ^˘m).d (r´@°dONLNd°Ìn˘Õ)eplacing any existing y@°dONLNd∑¯Ï~(Ïparameter with the same keyworé¿°dONLNd’¯~Î)íd); used, for example, to y@°dONLNdÔÏò( Ï*place a descriptor list containing alias r÷‡°dONLNdò™)¨ecorK@°dONLNd´‹) ds into the y@°dONLNd)ϯ(ÏdirB`°dONLNd,˘P)ect parameter of an å°dONLNd@P†)WApple event that rÒ‡°dONLNdR†Ù)Pequests a server to y@°dONLNdfÏ%'("Ï manipulate fië`°dONLNds'%5);les.°dONLNdy)l5“(2lAEPutAttributePtry@°dONLNdã)Ï5Ú)ÄTØ°dONLNdå)Ò50)akes a keyworæ °dONLNdô)05Ì)?,d, descriptor type, and pointer to data and y@°dONLNd≈4Ï@G(=Ïadds the descriptor r*`°dONLNd⁄4H@Z)\ecorû¿°dONLNdfi4Z@{)d to an e`°dONLNdÊ4{@∑)!Apple event rı °dONLNdÛ4∑@…)<ecoriÄ°dONLNd˜4 @fi)d as y@°dONLNd¸?ÏKˆ(HÏanJ†°dONLNd˛?˜K˘)   †°dONLNdˇ?˘Ke)attribute with the specifi„¿°dONLNd?eKî)l    ed keywor¬Ä°dONLNd"?îK£)/d (rw °dONLNd&?§Kfi)eplacing any y@°dONLNd3JÏVõ(SÏ'existing attribute with the same keywor °dONLNdZJúV”)∞d); used, for y@°dONLNdhUÏaL(^Ïexample, to change th+°dONLNd}UMaõ)ae transaction ID o+ °dONLNdèUõaÆ)Nf an Ú°dONLNdîU≠aÂ) Apple event y@°dONLNd†`ÏlÔ(iÏr>@°dONLNd°`l)ecor≤†°dONLNd•`lv)d that is waiting to be sent8°dONLNd¡`wl|)u. °dONLNd≈pl|ÿ(ylAEPutAttributeDescy@°dONLNdÿpÏ|Ú)ÄTØ°dONLNdŸpÒ|0)akes a keyworæ °dONLNdÊp0|á)?d and a descriptor r¶@°dONLNd˙pá|ô)Wecor†°dONLNd˛pö|Õ) d and adds y@°dONLNd    {Ïá˘(ÑÏtheV†°dONLNd {˙á¸) ÷†°dONLNd{¸á/) descriptor r5‡°dONLNd{0áB)4ecor™@°dONLNd{Bác)d to an p‡°dONLNd%{cáü)!Apple event r†°dONLNd2{†á≤)=ecoru°dONLNd6{≤á”)d as an y@°dONLNd>ÜÏíX(èÏattribute with the specifií`°dONLNdXÜXíá)l    ed keyworq °dONLNdaÜáíñ)/d (r%¿°dONLNdeÜóí—)eplacing any y@°dONLNdrëÏù(öÏexisting °dONLNdzëù)# ú °dONLNd{ëùõ)attribute with the same keywor °dONLNdôëúù”)ãd); used, for y@°dONLNdßúÏ®%(•Ïexample, to rÄ°dONLNd¥ú%®á)9eplace the descriptor r °dONLNdÀúà®ö)cecorèÄ°dONLNdœúö®Ê)d used for the taruÄ°dONLNd·úÊ®ˆ)Lget y@°dONLNdÂßÏ≥(∞Ïaddru¿°dONLNdÈß≥Q)ess attribute in an ‡†°dONLNd˝ßQ≥ç)PApple event rp`°dONLNd
  8601. ßé≥†)=ecor‰¿°dONLNd߆≥‰)d waiting to be y@°dONLNd≤Ïæ(ªÏsent.ˇB2@ˇ ˇˇˇˇ@
  8602. ˇ·ˇ‚7^
  8603. 4H\, Palatino&e.3+ä"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@äIntroduction to •)8 Apple Events4⁄ä˙(‡äCreating and Sending â)Y Apple Events
  8604. , (‡3-31
  8605. ˇˇˇˇˇˇˇˇ440lòÄ.B0oMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""B0oB0o$””””””””””””””””””””””””””””””òÄ
  8606. 60@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""60@60@˜˜˜˜˜˜˜˜˜˜˜˜˜
  8607. ˛ˇ˛ˇˇ ˇˇ˛ˇˇ     ˇˇˇ˙ˇ
  8608. ˛ˇˇˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜
  8609. 454+?òÄ
  8610. 56+@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""56+@56+@$˜˛˙ˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  8611. ˛ˇ˛ˇˇ˛¸ˇˇ˚ˇ˛˙ˇˇ˝˛ˇ˛
  8612. ˛ˇ˛ˇˇ
  8613. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  8614. ˛ˇ˛ˇˇ
  8615. ˛ˇ˛ˇˇ˛˙ˇ˜˝˝ˇˇ˛ˇ˚˝ˇ¸˛¸ˇˇ˜˝˛ˇ˛
  8616. ˛ˇ˛ˇˇ
  8617. ˛ˇ˛ˇˇ˝ˇˇ˛˜˝¸ˇ
  8618. ˛ˇ˛ˇˇ˛¸ˇˇ˜˝˛ˇ˛
  8619. ˛ˇ˛ˇˇ
  8620. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˜˝¸ˇ
  8621. ˛ˇ˛ˇˇ˝˛ˇ˛
  8622. ˛ˇ˛ˇˇ
  8623. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  8624. ˛ˇ˛ˇˇ
  8625. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  8626. ˛ˇ˛ˇˇ
  8627. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  8628. ˛ˇˇˇˇ
  8629. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  8630. ˛ˇˇˇ
  8631. ˛ˇˇˇ
  8632. ˛ˇˇˇ
  8633. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  8634. ˛ˇˇˇˇ
  8635. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  8636. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  8637. ˛ˇˇˇˇ
  8638. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähê(eäY@Ä°dONLNd\êhs)3ou specify how your application should wait for a rfÄ°dONLNd4\shÓ)„eply by using one of these fl °dONLNdQ\Ôh )|ags in °dONLNdXiäuö(räthe ,
  8639. Courier›`°dONLNd\iöu )sendMode⁄`°dONLNddi u)0 parameter of the  °dONLNdviu=)OAESend‡°dONLNd|i=ug)$
  8640.  function:°dONLNdΩ
  8641. äÿ(äIf you specify the _‡°dONLNd–
  8642. Ÿ!)O kAEWaitReply[`°dONLNd‹
  8643. !))H flË °dONLNdfl
  8644. )C)ag, yo{‡°dONLNdÂ
  8645. Ds)
  8646. u should p@°dONLNdÔ
  8647. tw)0rŸ@°dONLNd
  8648. wÚ)ovide an idle function. This °dONLNdä#‹( äfunction should pr‰Ä°dONLNd‹#
  8649. )REocess any non-high-level events that occur while your application is °dONLNdd$ä0»(-äwaiting for a rK†°dONLNds$…0‹)?eplys °dONLNdw$€0‡). EÄ°dONLNdy$‡0Ê)Y°dONLNdz$Ê0˚)@ou supply a pointer to your idle function as a parameter to the °dONLNd∫1ä=Æ(:äAESend}¿°dONLNd¿1Æ=c)$* function. So that your application can prU`°dONLNdÍ1c=ñ)µ ocess other e‡°dONLNdˆ1ñ=)3Apple events while it is °dONLNd>äJ»(Gäwaiting for a rK†°dONLNd>…J‹)?eplys °dONLNd">€Ju)$, you can also specify an optional fiOÄ°dONLNdG>vJ )õlter function to the ⁄°dONLNd\> JÓ)TAESend◊¿°dONLNdb>ÓJ)$ °dONLNdcKäW±(Tä    function.°dONLNdm]äiÿ*If you specify the _‡°dONLNdÄ]Ÿi)O
  8650. kAENoReply\ °dONLNdä]i)< flˇ°dONLNdç]i@)    ag, the rö`°dONLNdñ]AiV)$eply ˇ@°dONLNdõ]Viò)Apple event prë °dONLNd©]ôi¨)Cepar!‡°dONLNd≠]≠iÿ)
  8651. ed by the °dONLNd∑]ÿi)+ Apple Event °dONLNd√jäv•(säBManager for the server application consists of a null descriptor r®¿°dONLNdj•v∑(s•ecor °dONLNd    j∏v¿)d.°dONLNd |äà™(ÖäIf your “`°dONLNd|™à¸) Apple event may rE@°dONLNd%|˝à)Sequir\Ä°dONLNd*|àÈ)3e the user to interact with the server application °dONLNd]âäïö(íä(for臰dONLNdaâöïú) ‡°dONLNdbâùï)example, to specify print or fiÏ@°dONLNdÅâï€)Å)le options), you can communicate your useº¿°dONLNd™â‹ïÂ)ær i¿°dONLNd≠âÊï)
  8652. nteraction °dONLNd∏ñä¢ì(üäprG °dONLNd∫ñ)
  8653. eferÛ@°dONLNdæñ§¢-) ences to the server by specifyinã°dONLNdfiñ.¢i)äg additional f∏`°dONLNdÏñi¢ò); lags in the Ñ°dONLNd¯ñô¢…)0sendModeÅ°dONLNdñ…¢)0 parameter of °dONLNd£äØö(¨äthe ›`°dONLNd£öØæ)AESend€ °dONLNd£æØfl)$ functioò°dONLNd £‡Ø)"
  8654. n. These fl∏Ä°dONLNd+£Ø=)- ags specifyI°dONLNd6£>Ø@)1 …°dONLNd7£@Øú)the conditions, if anyë@°dONLNdM£úØ
  8655. )\, under which the server °dONLNdf∞äºÎ(πäSapplication can interact with the user and, if interaction is allowed, whether the °dONLNdπΩä…•*server€¿°dONLNdøΩ•…ß) [¿°dONLNd¿Ω®…)should come dir7`°dONLNdœΩ…/)Hectly to the forŒ¿°dONLNdflΩ/…=)?egrÏÄ°dONLNd‚Ω=…ó)ound or post a notifi3¿°dONLNd˜Ωò…π)[cation rZ†°dONLNdˇΩπ…ÿ)!equest.°dONLNdœä€ (ÿäThe server application specifi<Ä°dONLNd%œ €D)Çes its own pr臰dONLNd2œD€T)8efer<°dONLNd6œU€æ)ences for user interactioS °dONLNdOœæ€À)in b, °dONLNdRœÃ€)y specifying °dONLNd_‹äËê(Âäflå¿°dONLNda‹ê˺) ags to the n °dONLNdl‹ΩËG)-AESetInteractionAllowedeÄ°dONLNdÉ‹GË“)ä! function, as described in the pri†°dONLNd§‹“Ë)ãevious section. °dONLNd¥Èäı|(Úä9The interaction of the client and server applications’ prf@°dONLNdÌÈ|ıå)Úefer`°dONLNdÒÈçı)ences is explained in detail i‡ °dONLNdÈı){n °dONLNdˆäÀ(ˇä“Interacting Wù`°dONLNdˆÀ˛)A ith the Userz°dONLNd+ˆ˛)3,”˙°dONLNd-ˆR) which begins on j`°dONLNd>ˆSj)Npage E@°dONLNdCˆk})4-45ô °dONLNdGˆ}).°dONLNdIä€(äAfter you send an  @°dONLNd[‹p)R"Apple event, your application is rv†°dONLNd}pÈ)îesponsible for disposing of °dONLNdôä!ó(äthe]`°dONLNdúò!ö) °dONLNdùö!÷)Apple event r¿°dONLNd™◊!È)=ecorÉ °dONLNdÆÈ!)
  8656. d—and therÆ`°dONLNd∏!ô)5eby deallocating the memorÌ°dONLNd“ô!…){ y its data u… °dONLNdfi !Ó)1ses—by °dONLNdÂ"ä.ß(+äcalling    ‡°dONLNdÏ"®.™) ⇰dONLNdÌ"™.∑)theg@°dONLNd"∏.∫) Á@°dONLNdÒ"∫.)AEDisposeDesc‚`°dONLNd˛".Y)N function. If you crd°dONLNd    "Z.¥)Reate one descriptor r©`°dONLNd    '"¥.Δ)Zecor¿°dONLNd    +"«.
  8657. )d and add it to °dONLNd    ;/ä;¨(8äanotherŸÄ°dONLNd    B/´;Ω)!, the∂‡°dONLNd    G/æ;¿) ÿÄ°dONLNd    H/¿;ù)/Apple Event Manager adds a copy of the newly cr8`°dONLNd    w/û; )fieated one to the existing °dONLNd    ë<äHï(EäonΔ‡°dONLNd    ì<ïH°) e aÄ°dONLNd    ñ<¢H≠)nd˝†°dONLNd    ò<≠HØ)  }†°dONLNd    ô<∞Ha)(also makes a copy of the associated dataÓ°dONLNd    ¡<aHk)±. F} °dONLNd    ƒ<lHÙ) or example, you might use the °dONLNd    ‚IäU“(Rä AECreateDesc{Ä°dONLNd    ÓI“U)H function to crˆ‡°dONLNd    ˝IU^)=eate a descriptor r+¿°dONLNd
  8658. I_Uq)Pecor† °dONLNd
  8659. IqU)d that you wish to add to an Ö¿°dONLNd
  8660. 1IU)Apple °dONLNd
  8661. 7Väb˘(_äevent. When you use the 0Ä°dONLNd
  8662. OV˙bN)pAEPutParamDesc+@°dONLNd
  8663. ]VNb˚)T( function, it adds a copy of your newly °dONLNd
  8664. Öcäoí(läcrµ@°dONLNd
  8665. ácíofl)eated descriptor rÖ‡°dONLNd
  8666. ôc‡oÚ)Necor˙@°dONLNd
  8667. ùcÚoJ)d, including its dataZ°dONLNd
  8668. ≤cKoì)Y, as a parameter ®°dONLNd
  8669. √cìo–)Hto an existing ı¿°dONLNd
  8670. “c–o)=
  8671. Apple even˛ °dONLNd
  8672. ‹co)3t.¿Ä°dONLNd
  8673. fic    o ) °dONLNd
  8674. flpä|h(yä1When you no longer need the original descriptor rx`°dONLNd ph|z)fiecorÏ¿°dONLNd pz|À)d, you should call °dONLNd '}äâÿ(ÜäAEDisposeDesc{ °dONLNd 4}ÿâ)N  to disposeÚ`°dONLNd ?}â    )/ r`°dONLNd @}
  8675. â)of it.    °dONLNdáÇäçú(ääFlag°dONLNdåÇÏç)b Description
  8676. °dONLNdôêäúΔ(ôä
  8677. kAENoReply°dONLNd§êÏúÚ)bY@Ä°dONLNd•êÚúÑ)!our application does not want a r∑Ä°dONLNdΔêÑúô)íeply `°dONLNdÀêöú“) Apple event.°dONLNdŸ†ä¨ÿ(©äkAEQueueReply°dONLNdÁ†Ï¨Ú)bY@Ä°dONLNdˆڨ`)our application wants a r”`°dONLNd†`¨u)neply 8@°dONLNd†v¨≈)Apple event; the r•`°dONLNd†≈¨ )Oeply appears in °dONLNd(´Ï∑˛(¥Ï>your event queue as soon as the server has the opportunity to °dONLNdf∂Ϭı* prG °dONLNdh∂ˆ¬')
  8678. ocess and r"†°dONLNds∂'¬l)1espond to your e‡°dONLNdÇ∂l¬§)E Apple event.°dONLNdêΔä““(œä kAEWaitReply°dONLNdùΔÏ“Ú)bY@Ä°dONLNdûΔÚ“`)our application wants a r”`°dONLNd∑Δ`“u)neply 8@°dONLNdºΔv“)#Apple event and is willing to give °dONLNdfl—Ï›(⁄Ï    up the pr-¿°dONLNdË—›õ))ocessor while waiting for the r+°dONLNd—õ›)Üeply; for example, if the °dONLNd!‹ÏË(ÂÏ@server application is on the same computer as your application, °dONLNdaÁÏÛo* your application yields the pr\°dONLNdÁoÛÒ)Éocessor to allow the server to °dONLNdûÚÏ˛Ô(˚ÏrE°dONLNdüÚ˛5)espond to your à@°dONLNdÆÚ5˛m)E Apple event.ˇ*b@ˇ ˇˇˇˇ@
  8679. ˇ·ˇ‚7^
  8680. 4*\¯, Palatino&e.3+l"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@lIntroduction to •)8 Apple Events4⁄*˙¯
  8681. (‡*3-32    )BW’ê)orking WT¿)$ith Object Specifiÿ )C
  8682. er Records4^*¿¯
  8683. °dONLNd\lhr(elY@Ä°dONLNd\rhY)6our application should dispose of all the descriptor r ‡°dONLNd7\Zhl)ËecorÄ@°dONLNd;\lhï)
  8684. ds that arÙ °dONLNdE\ïh§))e crs°dONLNdI\•h∂)eateH†°dONLNdM\∑hfl)
  8685. d for the °dONLNdWilu (rlpurposes of adding p°dONLNdkiÀuQ)_arameters and attributes to an û`°dONLNdäiQuå)ÜApple event. ªÄ°dONLNdóiåuí);Y|°dONLNdòiíuÔ)ou normally dispose °dONLNd¨vlÇé(lof your È`°dONLNd¥véÇÎ)"Apple event and its rŒ°dONLNd…vÎÇ/)]eply after you r¥Ä°dONLNdŸv/ÇX)D
  8686. eceive a r’@°dONLNd„vXÇv))esult fr¶†°dONLNdÎvwÇò)om the ,
  8687. CourierÕÄ°dONLNdÚvòǺ)!AESendÀ@°dONLNd¯vºÇË)$  function. °dONLNdÉlèr(ålY@Ä°dONLNdÉrè
  8688. )#ou should dispose of these even if Ä °dONLNd'É
  8689. è.)òAESend}‡°dONLNd-É.è4)$ r¬‡°dONLNd/É4èl)eturns an err)†°dONLNd<Émè|)9or r÷¿°dONLNd@É|èñ)esult. °dONLNdHïl°o(ûlIfiÄ°dONLNdIïo°∫)f you specify the _‡°dONLNd[練)L kAEWaitReply[`°dONLNdgï° )H flË °dONLNdjï °.)    ag, the rô†°dONLNdsï/°D)$eply ˛Ä°dONLNdxïD°ä)Apple event is r3†°dONLNdàïã°Û)Geturned in a parameter °dONLNdü¢lƱ(´lyou pass to the ù °dONLNdØ¢±Æ’)EAESendö‡°dONLNdµ¢’ÆP)$ function. If you specify the     °dONLNd”¢QÆü)|kAEQueueReply °dONLNd‡¢üÆß)N flꇰdONLNd„¢ßÆœ)
  8690. ag to the 5@°dONLNdÌ¢–ÆÙ))AESend3°dONLNdÛ¢Ùƈ)$ °dONLNdÙØlª™(∏lfunction, the r∞†°dONLNdØ™ªø)>eply Ä°dONLNdØ¿ª)Apple event is rJ†°dONLNdتÃ)F/eturned in the event queue. In this case, the r(`°dONLNdGØê·)Δeply °dONLNdLºl»s(≈lis•`°dONLNdNºs»u) %`°dONLNdOºv»ï)identifi¸°dONLNdWºï»Ú)ed by the event class u`°dONLNdmºÛ»M)^kCoreEventClasso¿°dONLNd|ºM»õ)Z and the event ID #@°dONLNdéºú»Ã)OkAEAnswe @°dONLNdñºû“)0rbÄ°dONLNdóº—»÷). °dONLNdô…l’r(“lY@Ä°dONLNdö…r’w)o∂°dONLNdõ…w’Ä)urØ¿°dONLNdù…Å’É)
  8691.  /¿°dONLNdû…Ñ’¬)application pr-¿°dONLNd¨…¬’Ë)>    ocesses r¢¿°dONLNdµ…Ë’)&
  8692. eply event≥@°dONLNdø…’).s iX†°dONLNd¬… ’õ)
  8693. n its event queue in the sam¡¿°dONLNdfi…õ’∫){e way t≥‡°dONLNdÂ…ª’È)  hat server °dONLNd÷l‚Æ(fllapplications prª°dONLNdˇ÷Æ‚«)Bocess °dONLNd÷»‚˛) Apple eventP¿°dONLNd÷˛‚)6s. °dONLNdËlÙr(ÒlY@Ä°dONLNdËrÙÏ)our application should checÒ@°dONLNd0ËÏÙL)zk for the existence of t‘`°dONLNdHËMÙZ)ahe Ô`°dONLNdKËZÙÆ)keyErrorNumberÍ °dONLNdYËÆÙÎ)T parameter of °dONLNdgılÄ(˛lthe r¢`°dONLNdlıÄï)eply @°dONLNdqıñÚ)Apple event to ensurÆ°dONLNdÖıÚÅ)\!e that the server performed the r›°dONLNd¶ıÅ≈)èequested action◊ °dONLNdµıΔ÷)E. Th…@°dONLNdπı◊fi)e °dONLNdªlá( lserver€¿°dONLNd¡áò) canù`°dONLNd≈ôõ) `°dONLNdΔú∞)also 8@°dONLNdÀ∞≥)r˝@°dONLNdÃ≥≈)etur°dONLNd–ΔÏ)
  8694. n, in the kÄ°dONLNd⁄ÏÚ)&kk °dONLNd€Ú@)eyErrorStringf@°dONLNdË@l)N     parameteц°dONLNdÒlo),rπ‡°dONLNdÚoì)    , any err†°dONLNd˚î˜)%or messages you need °dONLNdl…(lto display to the user ‡°dONLNd&» )\.°dONLNd(!l-ˇ(*l Whenever a server application prÚ@°dONLNdH!ˇ-8)ìovides an errk`°dONLNdU!9-´):or string, it should also pr™@°dONLNdq!´-‡)r ovide an errÊ`°dONLNd}!‡-Î)5or °dONLNdÄ.l:é(7lnumber≥°dONLNdÜ.é:º)"    . However?†°dONLNdè.º:ı).J, you can’t count on all server applications to do so. The absence of the °dONLNdŸ;lG¿(DlkeyErrorNumberz¿°dONLNdÁ;¿Gâ)T- parameter doesn’t necessarily mean that theráÄ°dONLNd;âGΔ)…e won’t an errÀ@°dONLNd";ΔGÓ)=
  8695. or string °dONLNd,HlTu(QlprG °dONLNd.HvT≥)
  8696. ovided in the cÄ°dONLNd<H≥T)=keyErrorString^@°dONLNdJHT7)T
  8697.  parameter±‡°dONLNdTH6T;)/. SÄ°dONLNdVH;TB)Aé °dONLNdWHBTΔ) client application should therdONLNdvHΔT◊)Ñeforχ°dONLNdzH◊Tfi)e °dONLNd|UlaΩ(^lcheck for both the 4‡°dONLNdèUæa)RkeyErrorNumber/†°dONLNdùUa')T and ¿°dONLNd¢U(a|)keyErrorStringÄ°dONLNd∞U|a…)T parameters befor≈ °dONLNd¡U…a–)Me °dONLNd√bln«(klassuming that no errº@°dONLNd◊b«n)[or has occurrGÄ°dONLNd‰bn):ed. If _@°dONLNdÎbn%)a s@°dONLNdÓb&np) tring has been pr€‡°dONLNdˇbpn—)Jovided without an err≈‡°dONLNdb—n‹)aor °dONLNdol{é(xlnumber≥°dONLNdoé{≠)", an errÖ†°dONLNd%o≠{Ê)or has occurr‡°dONLNd2oÁ{Ò):edˆ@°dONLNd4oÒ{ˆ)
  8698. . °dONLNd7Ålç∑(älAfter extracting t˛‡°dONLNdIÅ∑ç')Khe information it needs frV@°dONLNdcÅ(çM)qom the rB °dONLNdkÅMç{)%
  8699. eply eventR†°dONLNduÅ{ç¿)., your handler sÒ °dONLNdÖÅ¿ç‹)Ehould °dONLNdãélöØ(óldispose of the r+ °dONLNdõé∞ö)Deply by calling the Ï`°dONLNdØéöQ)SAEDisposeDescÁÄ°dONLNdºéQö•)N function. Similarlyë°dONLNd–é•ö‹)T , when your °dONLNd‹õlßfl(§lhandler no longer needs d}¿°dONLNdıõ‡ß)t escriptor r¡@°dONLNdõß)-ecor5†°dONLNdõ ß&)dQ`°dONLNdõ&ßy)s it has extracted frü†°dONLNdõyßç)Som t´Ä°dONLNdõçßû)he rãÄ°dONLNd"õûß´)epl?†°dONLNd%õ¨ß±)y≥°dONLNd&õ∞ß¡), it sö¿°dONLNd,õ¬ß÷)houl— °dONLNd0õ÷ß)d call °dONLNd7®l¥∫(±lAEDisposeDesc{ °dONLNdD®∫¥Õ)N to dN¿°dONLNdI®Œ¥Ò)ispose oÁ‡°dONLNdQ®Ò¥)#f them.°dONLNdY∫lΔ¿(√lThe next section prq`°dONLNdl∫¿Δe)T$ovides an overview of the way a sour|°dONLNdê∫eΔƒ)•ce application identifiC`°dONLNdß∫≈Δ–)`es k†°dONLNd™∫–ΔÌ) Apple °dONLNd∞«l”†(–l event object`°dONLNdº«°”˘)5s supported by a tarP¿°dONLNd–«˘”=)Xget application.¢¿°dONLNd‡«=”e)D
  8700.  If you ar•‡°dONLNdÍ«e”Ë)(e starting by supporting only °dONLNd‘l‡ö(›l
  8701. the Requir¢†°dONLNd‘ö‡‚).ed suite and the ,†°dONLNd#‘„‡ù)I(Apple events sent by the Edition Manager©°dONLNdK‘ú‡Î)π, you can skip the °dONLNd^·lÌ≠(Ílnext section an?‡°dONLNdm·Æ̺)Bd gj¿°dONLNdp·ºÌ–)o dir)`°dONLNdu·—ÌÛ)    ectly to ’°dONLNd~·ÛÌ&)" “About the a‡°dONLNdâ·'Ìà)4Apple Event ManagerS`°dONLNdú·àÌè)a,””`°dONLNdû·èÌ‹) which begins on °dONLNdØÓl˙É(˜lpage Z‡°dONLNd¥ÓÑ˙ñ)3-48Æ¿°dONLNd∏Óñ˙õ). 
  8702. *¯4*¯
  8703. ,*4¯4-*4¯ .*.˛
  8704. ˇ·ˇ‚7^ˇˇ©ˇÆ°dONLNdº*,:('*WõÇ°dONLNdΩ9,})orking Wˆ≠°dONLNd≈|,†)Cith OD/°dONLNd °,ı)% bject Specifi!®°dONLNd◊ˆ,1)Uer RecorE°dONLNdfl1,A);dsˇˇˇˇˇˇU˛)ø3
  8705. °dONLNd„=lI¡(FlMost of the standarB`°dONLNdˆ=¬I )Vd ¿°dONLNd¯= IF)Apple events allow the sourÄ¿°dONLNd    =FIï)|ce application to rn`°dONLNd    &=ïI•)Oeferä¿°dONLNd    *=•I¬), in an ∑Ä°dONLNd    2=¬Ifl)Apple °dONLNd    8JlV¥(Slevent parameter ‡°dONLNd    GJ¥Vƒ)H, to ˙`°dONLNd    LJ√VX)"Apple event objects within the tarC‡°dONLNd    nJYVÏ)ñ"get application or its documents. °dONLNd    êWlc(`lThe ]`°dONLNd    îWca)1Apple Event Manager allows applications to constrß`°dONLNd    ≈Wac£)‚uct and interprÕ¿°dONLNd    ‘W£c»)B    et such r$Ä°dONLNd    ›W…cŸ)&efer–†°dONLNd    ·WŸcÛ)ences °dONLNd    ÁdlpÃ(mlby means of a standar=†°dONLNd    ¸dÕpÛ)a    d classifi° °dONLNd
  8706. dÛpA)&cation system for I¿°dONLNd
  8707. dAp»)NApple event objects. This systeŒ@°dONLNd
  8708. 7d»p’)ám, °dONLNd
  8709. :ql}r(zldõ¿°dONLNd
  8710. ;qr}ê)escribe>‡°dONLNd
  8711. Bqë}Œ)d in detail in t    °dONLNd
  8712. Rqœ}‹)>he $°dONLNd
  8713. Uq‹}{)&Apple Event Registry: Standard Suites,ë¿°dONLNd
  8714. {q{}Ä)ü i˙ °dONLNd
  8715. }qÄ}Ã)s summarized in `°dONLNd
  8716. çqÕ}Â)M“The °dONLNd
  8717. í~läå(álClassifiÓÄ°dONLNd
  8718. ö~åä¥) 
  8719. cation of ;`°dONLNd
  8720. §~µä))Apple Event Objects,”K¿°dONLNd
  8721. π~äd)b which begins on º °dONLNd
  8722.  ~dä{)Mpage ó°dONLNd
  8723. œ~|äé)3-39͇°dONLNd
  8724. ”~éäì). åÄ°dONLNd
  8725. ’~ìäö)A« °dONLNd
  8726. ÷~öäÈ) description in an °dONLNd
  8727. Èãló.(îl,Apple event parameter that uses this classifi}Ä°dONLNd ã/ó‰)√*cation system takes the form of an object °dONLNd @òl§à(°lspecifiÓ °dONLNd Gòà§ó)er rÔ`°dONLNd Kòó§©)ecorc¿°dONLNd Oò™§≤)d.ˇC@ˇ ˇˇˇˇ@
  8728. ˇ·ˇ‚7^
  8729. 4H\, Palatino&e.3+ä"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@äIntroduction to •)8 Apple Events4⁄ä˙(‡äW’ê)orking WT¿)$ith Object Specifiÿ )C
  8730. er Records
  8731. , (‡3-33
  8732. ˇˇˇˇˇˇˇˇ440lòÄ.B0oMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""B0oB0o$””””””””””””””””””””””””””””””òÄ
  8733. 60@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""60@60@˜˜˜˜˜˜˜˜˜˜˜˜˜
  8734. ˛ˇ˛ˇˇ ˇˇ˛ˇˇ     ˇˇˇ˙ˇ
  8735. ˛ˇˇˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜
  8736. 454+?òÄ
  8737. 56+@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""56+@56+@$˜˛˙ˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  8738. ˛ˇ˛ˇˇ˛¸ˇˇ˚ˇ˛˙ˇˇ˝˛ˇ˛
  8739. ˛ˇ˛ˇˇ
  8740. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  8741. ˛ˇ˛ˇˇ
  8742. ˛ˇ˛ˇˇ˛˙ˇ˜˝˝ˇˇ˛ˇ˚˝ˇ¸˛¸ˇˇ˜˝˛ˇ˛
  8743. ˛ˇ˛ˇˇ
  8744. ˛ˇ˛ˇˇ˝ˇˇ˛˜˝¸ˇ
  8745. ˛ˇ˛ˇˇ˛¸ˇˇ˜˝˛ˇ˛
  8746. ˛ˇ˛ˇˇ
  8747. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˜˝¸ˇ
  8748. ˛ˇ˛ˇˇ˝˛ˇ˛
  8749. ˛ˇ˛ˇˇ
  8750. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  8751. ˛ˇ˛ˇˇ
  8752. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  8753. ˛ˇ˛ˇˇ
  8754. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  8755. ˛ˇˇˇˇ
  8756. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  8757. ˛ˇˇˇ
  8758. ˛ˇˇˇ
  8759. ˛ˇˇˇ
  8760. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  8761. ˛ˇˇˇˇ
  8762. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  8763. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  8764. ˛ˇˇˇˇ
  8765. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähö(eäAn ò†°dONLNd\öh’)object specifiG`°dONLNd\÷h˛)<    er recordç`°dONLNd\˛hE)( is a descriptor rí°dONLNd,\EhW)Gecor`°dONLNd0\Xh±)d of descriptor type ,
  8766. Courier°dONLNdEiäu¸(rätypeObjectSpecifierx‡°dONLNdXi¸uØ)r* that describes the location of one or mor8Ä°dONLNdÇi∞u∑)¥e #¿°dONLNdÑi∑u)Apple event objects: °dONLNdôvälj(äfor example, the tablF °dONLNdÆvÂÇÒ)[e “è¿°dONLNd±vÒÇ) =Summary of Sales” in the document “Sales Report,” or the thir#@°dONLNdÓvÇ(d °dONLNdÉäèç(åärE°dONLNdÒÉéè    )ow in that table, or the last r†°dONLNdÉ
  8767. èe)|ow of the column “T3@°dONLNd#Édèå)Z    otals.” Wɇ°dONLNd,ÉåèΔ)(ith the aid of °dONLNd;êäúœ(ôäapplication-defi|‡°dONLNdKê–ú!)Fned functions, the ˝‡°dONLNd^ê!ú˝)Q/Apple Event Manager can conduct a step-by-step °dONLNdçùä©õ(¶äsearK†°dONLNdëùú©¿)ch accor(@°dONLNdôù¿©)$ding to such instrb@°dONLNd´ù©Ä)Muctions in an object specifiQ†°dONLNd«ùÅ©ê)ter rR‡°dONLNdÀùê©¢)ecor«@°dONLNdœù¢©Ÿ)d, locating fi… °dONLNd›ùŸ©˜)7rst the °dONLNd™ä∂®(≥äCdocument, then the table, then other objects, and so on until the r8°dONLNd(™©∂(≥©equested object has °dONLNd<∑ä√¡(¿ä been identifi¬‡°dONLNdI∑¡√Œ)7ed.(@°dONLNdL∑œ√ ) Object specifiÇ°dONLNd[∑ √)=er rŒ °dONLNd_∑√-)ecorBÄ°dONLNdc∑.√)0ds can specify many combinations of identifying °dONLNdìƒä–((Õä%characteristics that cannot be specifi‡°dONLNdπƒ)–“)ü'ed using one of the simple data types. °dONLNd·÷ä‚–(fläThis section intrA °dONLNdÚ÷—‚+)Goduces object specifi醰dONLNd÷+‚:)Zer r臰dONLNd ÷:‚L)ecor@°dONLNd÷M‚á)ds and the or‚°dONLNd÷Ü‚Ú)9ganization of their data. Œ¿°dONLNd6÷Ú‚¯)lYè@°dONLNd7÷¯‚)ou °dONLNd:„äÔ±(Ïä    need to r}@°dONLNdC„±Ôâ)'3ead this section (a) if you plan to support the Cor    Ä°dONLNdv„äÔ)Ÿe suite or any of the standar¨Ä°dONLNdì„Ô )zd °dONLNdïä¸√(˘äfunctional-arèÄ°dONLNd¢√¸    )9Kea suites and (b) if you want to make your application scriptable—that is, °dONLNdÌ˝ä    Ω(ä capable of r∫`°dONLNd˘˝Ω    £)35esponding to scripts written in a scripting language.
  8768. H%4H%°dONLNd/ä ©(äIMPORTç°dONLNd5© π)ANT
  8769. ˇ·ˇ‚7^
  8770. °dONLNd9#ä/“(,äAn object specifiV‡°dONLNdJ#”/‚)Ier rX °dONLNdN#‚/Ù)ecorÃÄ°dONLNdR#Ù/)    d identifi>‡°dONLNd\#/Y))es one or morL†°dONLNdi#Y/`)<e 7‡°dONLNdk#`/π)Apple event objects °dONLNd/ä;≥(8äEamong many; it contains a description of each object, not the object °dONLNdƒ;äG§* itself. è@°dONLNdÃ;§G´)AVÄ°dONLNdÕ;¨G¥)n IÄ°dONLNdœ;¥Gä)0Apple event object described by an object specifie`°dONLNd;äGô)÷er rf†°dONLNd;ôG´)ecor€°dONLNd;´G≥)d °dONLNd
  8771. GäS§(PäBexists only in the server application’s document or in the server °dONLNdLSä_–* application itsel–†°dONLNd]S–_’)Ff.,Zapf Dingbats§Ä°dONLNd`V€^‚) s
  8772. °dONLNdbdäpë(mäA∫†°dONLNdcdëp) client application cannot r¿°dONLNddp4)v etrieve an ≥@°dONLNdäd4pê)-Apple event object frÁ°dONLNdüdêp˙)\om a server application °dONLNd∑qä}˘(zäXunless the server application can accurately locate it. Thus, to locate characters of a °dONLNd~ää¶*specifiÓ °dONLNd~¶ä√)c colorW@°dONLNd~√äŸ)B, a server application must be able to identify a single characterL`°dONLNd_~⁄ä    (á⁄’s color; to °dONLNdlãäó(îä]locate a character in a cell, a server application must be able to locate both the table and °dONLNd…ò䧴*    the cell.°dONLNd”™ä∂ë*A∫†°dONLNd‘™ë∂¸) client application can cr¿°dONLNdÓ™˝∂J)leate object specifi†°dONLNd™J∂Y)Mer r‡°dONLNd™Y∂k)ecorê@°dONLNd    ™k∂§)ds for use as ë`°dONLNd™§∂‹)9 Apple event °dONLNd#∑ä√æ(¿ä parameters.Œ°dONLNd.∑æ√¿)4 N°dONLNd/∑¡√R) Scripting components can also crï@°dONLNdO∑R√ü)ëeate object specifi© °dONLNdb∑ü√Æ)Mer r™`°dONLNdf∑Æ√¿)ecor¿°dONLNdj∑¡√Ÿ)ds as V °dONLNdp∑Ÿ√ˆ)Apple °dONLNdvƒä–¢(ÕäeventÕ@°dONLNd{ƒ¢–§) M@°dONLNd|ƒ•–÷)
  8773. parameters@°dONLNd܃◊–Ÿ)2 õ@°dONLNdჟ–¯)for the ÷@°dONLNd胯– )@Apple events they generate in the course of executing a script. °dONLNdœ—ä›ë(⁄äAG@°dONLNd–—í›î) :†°dONLNd——î›˝)server application that rË`°dONLNdÍ—˝›,)i eceives an Ù °dONLNdı—,›‹)/'Apple event containing an object specifiJ†°dONLNd—››Ï)±er rK‡°dONLNd!—Ï›˛)ecor¿@°dONLNd%—˛›)d °dONLNd'fiäÍØ(Áäshould rT °dONLNd/fiØÍ)%esolve the object specifiƒ °dONLNdHfiÍ%)ger r≈`°dONLNdLfi%Í7)ecor9¿°dONLNdPfi8Íò)d—that is, locate the rÕÄ°dONLNdgfiòͬ)`    equested á`°dONLNdpfi¬Í˙)* Apple event °dONLNd|Î䘮(Ùäobjectsç °dONLNdÉή˜≠). °dONLNdܽ䠠  ê(äTµ¿°dONLNdá˝è    ö)o rp@°dONLNdä˝õ    ÷) espond to cor>@°dONLNdó˝◊    *)<e and functional-arÄ°dONLNd™˝+    7)Tea Ô¿°dONLNd≠˝6    v) Apple events rºÄ°dONLNdª˝w    
  8774. )A!eceived by your application, you °dONLNd‹
  8775. ä®(ämust fig@°dONLNd„
  8776. ©«)rst defiK`°dONLNdÎ
  8777. »˜) ne a hierar!`°dONLNdˆ
  8778. ˜)/chy of ] °dONLNd˝
  8779. )7Apple event objects for your application that you want °dONLNd    4ä#∂( äFother applications or scripting languages to be able to describe. The 3¿°dONLNd    z∂#( ∂Apple event objects °dONLNd    é$ä0Õ(-äJfor your application should be based as closely as possible on the standar´@°dONLNd    ÿ$Õ0(-Õd object classes °dONLNd    È1ä=’(:ädescribed by the Œ¿°dONLNd    ˙1’=t)K&Apple Event Registry: Standard Suites.<Ä°dONLNd
  8780.  1u=w)† ^ °dONLNd
  8781. !1w=
  8782. ) After you have decided which of °dONLNd
  8783. A>äJª(Gä the standar‡°dONLNd
  8784. L>ºJƒ)2d L@°dONLNd
  8785. N>ƒJÓ)CApple event objects make sense for your application, you can write °dONLNd
  8786. ëKäW–(TäMfunctions that locate objects on the basis of information in an object specifie°dONLNd
  8787. flK—W‡(T—er rf@°dONLNd
  8788. „K‡WÚ)ecor⁄†°dONLNd
  8789. ÁKÚW¯)dˆ`°dONLNd
  8790. ËK¯W). IT‡°dONLNd
  8791. ÎKW)    f °dONLNd
  8792. ÌXädA(aä(you want your application to send specifi≈Ä°dONLNd XAdG)∑c W`°dONLNd XHd)-Apple events to other applications, you must °dONLNd Eeäq(nä also write functions that can crÒ °dONLNd eeq^)áeate object specifi°dONLNd xe_qn)Ner r@°dONLNd |enqÄ)ecorz†°dONLNd ÄeÄqÿ)ds and add them to LJ°dONLNd ìeÿqı)XApple °dONLNd ôrä~´({äevents. ‹†°dONLNd °r´~±)!Yù °dONLNd ¢r±~J)#our application does not need to crQ‡°dONLNd ≈rK~ò)öeate object specifie¿°dONLNd ÿrò~ß)Mer rg°dONLNd ‹rß~π)ecor€`°dONLNd ‡rπ~⁄)ds in or(`°dONLNd Ër€~)"
  8793. der to be °dONLNd Úäã≠(àäscriptab‘`°dONLNd ˙≠ã‚)# le. However°dONLNd „ã˚)6, to w°‡°dONLNd ˚ãÑ)!rite functions that can help the p`°dONLNd ,ÑãÏ)âApple Event Manager rd@°dONLNd AÏã)hesolvo°dONLNd Fã
  8794. )e °dONLNd Håäò¬(ïäobject specifi>@°dONLNd Vå√ò“)9er r?Ä°dONLNd Zå“ò‰)ecor≥‡°dONLNd ^å‰òz) ds, you need to know how they arM°dONLNd ~å{òù)óe constr´¿°dONLNd Üåùò∏)"ucted. ‡°dONLNd åå∏ò∫) ˇ≤@ˇ ˇˇˇˇ@
  8795. ˇ·ˇ‚7^
  8796. 4*\¯, Palatino&e.3+l"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@lIntroduction to •)8 Apple Events4⁄*˙¯
  8797. (‡*3-34    )BW’ê)orking WT¿)$ith Object Specifiÿ )C
  8798. er Records4^*¿¯
  8799. °dONLNd\lhñ(el    “Finding O °dONLNd    \ñh¯)*Apple Event Objects,”_Ä°dONLNd\¯hE)b which begins on œ‡°dONLNd/\Eh\)Mpage ™¿°dONLNd4\]ho)3-46˛†°dONLNd8\oh}), pr≈¿°dONLNd<\~hÚ)ovides an overview of the °dONLNdViluë(rlway the  °dONLNd^iëuá)%3Apple Event Manager works with your application-defim†°dONLNdíiàuÓ)˜ned functions to locate °dONLNd™vlÇ|(lthe °dONLNdÆv|ÇS)1Apple event objects described in an object specifiz‡°dONLNd‡vTÇc)ÿer r| °dONLNd‰vcÇu)ecorÄ°dONLNdËvuÇÍ)d. The chapter “Resolving °dONLNdÉlèä(åland Cr… °dONLNdÉäè„)eating Object Specifi≈`°dONLNdɉè)Zer Recor$°dONLNd%É    èÍ)%4ds” in this book describes in detail how to support °dONLNdYêlú§(ôlobject specifi>@°dONLNdgê•ú¥)9er r?Ä°dONLNdkê¥úΔ)ecor≥‡°dONLNdoêΔúa)&ds as a server or client application. 
  8800. ¡*»¯4¬*»¯ √l√¯
  8801. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNdñ≤l¡u(ΩlDwé°dONLNdó≤v¡€)
  8802. ata Structures Wué°dONLNdß≤‹¡`)fithin an Object Specifiø°dONLNdæ≤`¡ú)Ñ    er Recordˇˇˇˇˇˇ€r)ê3
  8803. °dONLNd…»l‘r(—lT†¿°dONLNd »r‘w)hr °dONLNdÀ»x‘Ñ)e o1@°dONLNdŒ»Ö‘à)rˆ@°dONLNdœ»à‘ )ganization of the data for an o∏Ä°dONLNdÓ»‘@)Ö bject specifi@°dONLNd˚»A‘P)4er rÄ°dONLNdˇ»P‘b)ecorv‡°dONLNd»b‘fl)d is nearly identical to that oc °dONLNd"»‡‘ˆ)~f the °dONLNd(’l·ñ(fil
  8804. data for aö °dONLNd2’ñ·û)*n ç °dONLNd4’û·≤)AE rµ °dONLNd8’≤·ƒ)ecor)Ä°dONLNd<’≈·À)dE@°dONLNd=’À·–). ʇ°dONLNd?’œ·÷)AÆ °dONLNd@’◊·)n object specifiΩ¿°dONLNdP’·')Aer rø°dONLNdT’'·9)ecor3`°dONLNdX’:·_)
  8805. d is a strRÄ°dONLNdb’_·v)%ucturÿ`°dONLNdg’v·¥)e of data type ,
  8806. Courierf¿°dONLNdv’µ·Ÿ)?AEDescdÄ°dONLNd|’Ÿ·€)$ °dONLNd}‚lÓÉ(ÎlwhosZ‡°dONLNdÅ‚ÑÓÈ)e data handle usually rc@°dONLNdò‚ÈÓ)e
  8807. efers to fÖ¿°dONLNd¢‚ÓB)&
  8808. our keyworÓ`°dONLNd¨‚BÓg)3d-specifià°dONLNdµ‚hÓ®)&ed descriptor rê¿°dONLNdƒ‚©Óª)Aecor °dONLNd»‚ºÓ¬)d ‡°dONLNd…‚¬Ó»)s °dONLNdÀÔl˚Õ(¯ldescribing one or mor≈@°dONLNd‡ÔÕ˚‘)ae ∞Ä°dONLNd‚Ô‘˚&)Apple event objectK`°dONLNdÙÔ'˚0)Ss. *°dONLNd˜Ô0˚=)    An¬†°dONLNd˘Ô=˚?) ‰@°dONLNd˙Ô?˚S)AE r @°dONLNd˛ÔT˚f)ecorĆ°dONLNdÔf˚ã)
  8809. d is a strü¿°dONLNd Ôã˚¢)%uctur%†°dONLNdÔ£˚·)e of data type °dONLNd ¸lú(lAERecord}°dONLNd(¸úÃ)0
  8810.  whose dat†°dONLNd2¸Ã¯)0
  8811. a handle rµ °dONLNd<¸¯ ),
  8812. efers to o˘@°dONLNdF¸ K)(    ne or mor
  8813. ‡°dONLNdO¸LS),e ˆ °dONLNdQ¸Rº)Apple event parameters釰dONLNdg¸Ωø)k.°dONLNdil∂(lThe four keyworx@°dONLNdx∂€)Jd-specifiV°dONLNdÅ‹)&ed descriptor r†°dONLNdê/)Aecorè°dONLNdî/ë)ds for an object specifi≥`°dONLNd¨ë†)ber r¥†°dONLNd∞†≤)ecor)°dONLNd¥≥≈)d prㇰdONLNd∏≈‡)ovide °dONLNdæl'”($linformation about the r§`°dONLNd’”'˝)g    equested ^@°dONLNdfi˝'w)*Apple event object or object1`°dONLNd˙x'~){s.°dONLNd–∂l¬#(øl*For example, the data for an object specifi¯¿°dONLNd˚∂#¬2)∑er r˙°dONLNdˇ∂2¬D)ecorn`°dONLNd∂E¬P)d iÚÄ°dONLNd∂P¬f) denti‘°dONLNd ∂g¬Ö)fying a‡°dONLNd∂ܬÙ) table named “Summary °dONLNd(√lœ3(Ãl+of Sales” in a document named “Sales ReportI†°dONLNdS√4œ?)»” c9‡°dONLNdV√@œY) onsist%Ä°dONLNd\√Zœ^)sbÄ°dONLNd]√^œ¢) of four keyworË`°dONLNdl√¢œ«)Dd-specifiΔ °dONLNdu√»œ’)&ed °dONLNdx–l‹ü(Ÿl descriptor rfl@°dONLNdÑ–ü‹±)3ecorS†°dONLNdà–≤‹‹)
  8814. ds that pr…†°dONLNdí–‹‹l)* ovide the following information:,Zapf Dingbats°dONLNd≥ÊlÌq(Ïln
  8815. °dONLNdµ„xÔç) the oR‡°dONLNd∫„éÔø)bject class Ifi†°dONLNd«„øÔ›)1D for aW‡°dONLNdŒ„fiÔÒ) tablä@°dONLNd”„ÒÔı)e°dONLNd’¯lˇq(˛ln
  8816. °dONLNd◊ıx’) another object specifi’ °dONLNdÌı’‰)]er r÷`°dONLNdÒı‰ˆ)ecorJ¿°dONLNdıı˜6)d identifying tû†°dONLNdı6—)?"he document “Sales Report” as the °dONLNd&x‘(
  8817. xcontainer for the tablª@°dONLNd<‘ÿ)\e°dONLNd>lq(ln
  8818. °dONLNd@x}) a°dONLNdA}ê)> key form constant indicating that the key data contains a nam䆰dONLNdêî(êe°dONLNdÅ(l/q(.ln
  8819. °dONLNdÉ%x1a) 5key data that consists of the string “Summary of Sale¬`°dONLNd∏%a1j)Ès”    °dONLNd˝4l?ë(<lKeyword°dONLNd4Ê?7)zDescription of data
  8820. °dONLNdBlN“(KlkeyAEDesiredClass°dONLNd,BÊN˙)zFourP¿°dONLNd0B˚Nø).-character code indicating the object class ID°dONLNd`Rl^¿([lkeyAEContainer°dONLNdoRÊ^Ì)zA∫†°dONLNdpRÌ^C) description of the c≥°dONLNdÖRD^è)Wontainer for the rꆰdONLNdóRè^œ)Kequested objec6†°dONLNd•R–^ÿ)At, °dONLNd®]Êi•(fÊ,usually in the form of another object specifi¿°dONLNd’]•i¥)øer rÚ°dONLNdŸ]¥iΔ)ecorf`°dONLNd›]«iÕ)d°dONLNd‡mly¥(vl keyAEKeyForm°dONLNdÌmÊy˙)zFourP¿°dONLNdÒm˚yˆ)9-character code for the key form, which indicates how to °dONLNd*xÊÑ(ÅÊinterprˇÄ°dONLNd1xÑD)et the key data°dONLNdBàlî¥(ël keyAEKeyData°dONLNdOàÊîè)z'Key data, used to distinguish the desirQ¿°dONLNdvàêîù)™ed X¿°dONLNdyàùîÚ)Apple event object °dONLNdåìÊüÌ(úÊfrò‡°dONLNdéìÌü’)6om other objects of the same object class in the same °dONLNdƒûÊ™(ßÊ    containerˇ=0@ˇ ˇˇˇˇ@
  8821. ˇ·ˇ‚7^
  8822. 4H\, Palatino&e.3+ä"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@äIntroduction to •)8 Apple Events4⁄ä˙(‡äW’ê)orking WT¿)$ith Object Specifiÿ )C
  8823. er Records
  8824. , (‡3-35
  8825. ˇˇˇˇˇˇˇˇ440lòÄ.B0oMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""B0oB0o$””””””””””””””””””””””””””””””òÄ
  8826. 60@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""60@60@˜˜˜˜˜˜˜˜˜˜˜˜˜
  8827. ˛ˇ˛ˇˇ ˇˇ˛ˇˇ     ˇˇˇ˙ˇ
  8828. ˛ˇˇˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜
  8829. 454+?òÄ
  8830. 56+@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""56+@56+@$˜˛˙ˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  8831. ˛ˇ˛ˇˇ˛¸ˇˇ˚ˇ˛˙ˇˇ˝˛ˇ˛
  8832. ˛ˇ˛ˇˇ
  8833. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  8834. ˛ˇ˛ˇˇ
  8835. ˛ˇ˛ˇˇ˛˙ˇ˜˝˝ˇˇ˛ˇ˚˝ˇ¸˛¸ˇˇ˜˝˛ˇ˛
  8836. ˛ˇ˛ˇˇ
  8837. ˛ˇ˛ˇˇ˝ˇˇ˛˜˝¸ˇ
  8838. ˛ˇ˛ˇˇ˛¸ˇˇ˜˝˛ˇ˛
  8839. ˛ˇ˛ˇˇ
  8840. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˜˝¸ˇ
  8841. ˛ˇ˛ˇˇ˝˛ˇ˛
  8842. ˛ˇ˛ˇˇ
  8843. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  8844. ˛ˇ˛ˇˇ
  8845. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  8846. ˛ˇ˛ˇˇ
  8847. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  8848. ˛ˇˇˇˇ
  8849. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  8850. ˛ˇˇˇ
  8851. ˛ˇˇˇ
  8852. ˛ˇˇˇ
  8853. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  8854. ˛ˇˇˇˇ
  8855. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  8856. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  8857. ˛ˇˇˇˇ
  8858. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähù(eäThe ª¿°dONLNd\ùhfl)object class IDZ¿°dONLNd\‡h˛)C specifiH‡°dONLNd\ˇh)es the ŒÄ°dONLNd"\h)Apple event object class to which the object belongs. °dONLNdXiäuö(räAn :@°dONLNd[iöuO)+Apple event object class is a category for -`°dONLNdÜiOuœ)µApple event objects that shar.¿°dONLNd£iœu÷)Äe °dONLNd•väǶ(äspecifiÓ °dONLNd¨v¶Ç¨)c fi`°dONLNdÆv≠Ç)characteristics (see £°dONLNd√vÇX)U“Apple Events and  †°dONLNd’vYLJ)WApple Event Objects” on page Ω¿°dONLNdÚv‡ÇÌ)á3-6†°dONLNdıvÓÇ    )). The °dONLNd¸Éäè)(åä'characteristics of each object class ar‹‡°dONLNd#É)èf)üe listed in the s °dONLNd3Égè)>&Apple Event Registry: Standard Suites.‡‡°dONLNdYÉè)ü °dONLNdZêäúÊ(ôäFor example, the Cor Ä°dONLNdnêÁú)] e suite defi¿°dONLNdzêúÛ)01nes object classes for documents, paragraphs, wora†°dONLNd´êÛú)‹ds, °dONLNdØùä©—(¶äwindows, and fl/‡°dONLNdæù“©7)Hoating windows. The fi/ °dONLNd‘ù8©g)f
  8859. rst keyworöÄ°dONLNdfiùg©å)/d-specifix@°dONLNdÁùç©Õ)&ed descriptor r<‡°dONLNdˆùŒ©‡)Aecor±@°dONLNd˙ù‡©)d in an °dONLNd™ä∂¬(≥äobject specifi>@°dONLNd™√∂“)9er r?Ä°dONLNd™“∂‰)ecor≥‡°dONLNd™‰∂)d uses a four/‡°dONLNd%™∂)9:-character code or a constant to specify the object class °dONLNd_∑ä√(¿äID. The object class for worG¿°dONLNd{∑√â)xds, for example, can be identifi¿`°dONLNdõ∑â√)á!ed by either the object class ID ,
  8860. Courier°dONLNdºƒä–ê(Õä'†°dONLNdΩƒê–®)cwor~ °dONLNd¡ƒ®–Æ)'}¿°dONLNd¬ƒÆ–Ù) or the constant Ä°dONLNd”ƒı–)GcWord †°dONLNdÿƒ–). 
  8861. fiHÏ4flHÏ    °dONLNd€›äËù(ÂäNote
  8862. ˇ·ˇ‚7^
  8863. °dONLNd‡Íäˆ˛*The object class ID identifi–‡°dONLNd¸Í˛ˆf)tes the object class of an î°dONLNdÍfˆª)hApple event object °dONLNd)ˆä(ˇädescribed in an object specifi$°dONLNdGˆ    )er r%@°dONLNdKˆ*)ecorô†°dONLNdOˆ*L)d, wherl`°dONLNdVˆLÕ)"eas the event class and event °dONLNdtä ( äID identify an ;†°dONLNdÉ )@ Apple event.,Zapf Dingbats`°dONLNdê)>u
  8864. °dONLNdíäù(äThe ª¿°dONLNdñù«)    container~°dONLNdü»Á)+ for an -°dONLNdßÁç)&Apple event object is usually another P‡°dONLNdÕçˆ)¶Apple event object. For °dONLNd ä,å()ä7example, the container for a document might be a window{¿°dONLNd å,Ô()å, and the container for °dONLNd4-ä9+(6ä%characters, delimited items, or a wory`°dONLNdY-+9ì)°d might be another worÓ°dONLNdo-ì9Ï)hd, a paragraph, or a °dONLNdÑ:äFÙ(Cädocument. The containeÚ†°dONLNdö:ÙF˝)jr iM†°dONLNdù:˛F$)
  8865.     s identifi·@°dONLNdß:$Fí)&ed by the second keywor†°dONLNdæ:ìF∏)od-specifiÎ`°dONLNd«:∏F¯)%ed descriptor r∞°dONLNd÷:˘F )Aecor$`°dONLNd⁄: F)d °dONLNd‹GäS€(Päin an object specifi…`°dONLNdG€SÍ)Qer r †°dONLNdÙGÍS¸)ecor?°dONLNd¯G˝SL)d; usually this is a‰`°dONLNd GLS§)Onother object specifi9Ä°dONLNd!G•S¥)Yer r:¿°dONLNd%G¥SΔ)ecorØ °dONLNd)GΔSÃ)d ‡°dONLNd*GÃS). The container °dONLNd:Tä`é(]äc@°dONLNd;Té`ß)an alsg°dONLNdAT®`Ÿ) o be specifiõ‡°dONLNdMTŸ`¯)1ed by aò°dONLNdTT˘`C)  null descriptor r†Ä°dONLNdfTC`U)Jecor‡°dONLNdjTV`),d, which indicates a default container or a °dONLNdñaäm¡(jäcontainer alr‡°dONLNd£a¬m)8eady known to the Δ†°dONLNdµamw)TApple Event Manager∏ °dONLNd»awmy)a.°dONLNd sä–(|äThe descriptor r°dONLNd⁄s—„)Gecorè`°dONLNdfis„Î)d + °dONLNd‡sÏ=)    in an object specifitÄ°dONLNdÙs=L)Qer ru¿°dONLNd¯sL^)ecorÍ °dONLNd¸s^f)d Ö‡°dONLNd˛sgu)    thaô†°dONLNdsuö)    t identifi2†°dONLNd sõ≥)&es an ¨@°dONLNds≥Î) Apple event °dONLNdÄäå≠(âä    object’s ‘`°dONLNd&Ä≠å›)# container c4 °dONLNd1Äfiå)1    an in tur˚`°dONLNd:Äå!)%n use a⁄Ä°dONLNdAÄ"åz)nother object specifi/†°dONLNdVÄ{åä)Yer r0‡°dONLNdZÄäåú)ecor•@°dONLNd^ÄúåÂ)d to identify the °dONLNdpçäô≥(ñä    container¨‡°dONLNdyç¥ôÊ)* ’s container„@°dONLNdÖçÊôË)2,c@°dONLNdÜçÈô@) and so on until the ¥`°dONLNdõç@ôè)WApple event objec ‡°dONLNd¨çêôò)Pt i∑†°dONLNdØçòô“)s fully specifi†°dONLNdæç”ô‚);ed. °dONLNd¬öä¶ò(£äForw@°dONLNd≈öô¶õ) ˜@°dONLNdΔöõ¶ )example, an object specifiÅ@°dONLNd‡ö ¶)qer rÇÄ°dONLNd‰ö¶-)ecorˆ‡°dONLNdËö-¶8)d i{°dONLNdÎö9¶O) denti\Ä°dONLNdöP¶n)fying a`°dONLNd˜öo¶Ò) paragraph might specify the °dONLNdßä≥a(∞ä0paragraph’s container with another object specifif°dONLNdEßb≥q)ÿer rg@°dONLNdIßq≥É)ecor€†°dONLNdMßÉ≥ø)d that identifi$ °dONLNd\ß¿≥„)=es a pagº°dONLNddß„≥)#e. That °dONLNdl¥ä¿¬(Ωäobject specifi>@°dONLNdz¥√¿“)9er r?Ä°dONLNd~¥“¿‰)ecor≥‡°dONLNdÇ¥‰¿ )    d might i@°dONLNd㥿"))n tur§¿°dONLNdê¥"¿.)n s3 °dONLNdì¥/¿D)pecif´`°dONLNdò¥D¿)y the page’s cg@°dONLNd¶¥Ä¿ˇ)<ontainer with another object °dONLNd√¡äÕ¶( äspecifiÓ °dONLNd ¡¶Õµ)er rÔ`°dONLNdŒ¡µÕ«)ecorc¿°dONLNd“¡»Õ”)d iÁ‡°dONLNd’¡”ÕÈ) denti…`°dONLNd⁄¡ÍÕ)fying au@°dONLNd·¡    Õ⁄)0 document. The ability to nest one object specifiû@°dONLNd¡⁄ÕÈ)—er rüÄ°dONLNd¡ÈÕ˚)ecor‡°dONLNd¡¸Õ)d °dONLNdŒä⁄«(◊äwithin anothe1 °dONLNd)Œ»⁄—)>r iå °dONLNd,Œ—⁄Ë)    @n this way makes it possible to identify elements such as “the fi†Ä°dONLNdmŒË⁄˘(◊Ërst rWÄ°dONLNdrŒ˙⁄)ow in °dONLNdx€äÁ (‰äthe table nameH`°dONLNdÜ€ÀÁ€)Ad ‘SΠ°dONLNd䀀Á)ummary of SalÄ°dONLNdó€Á.)Bes’ iC¿°dONLNdú€.Áé)n the document nameõÄ°dONLNdØ€éÁû)`d ‘S>@°dONLNd≥€üÁÕ)
  8866. ales Reporè °dONLNdΩ€ÕÁ›).t.’” ˇ"H@ˇ ˇˇˇˇ@
  8867. ˇ·ˇ‚7^
  8868. 4*\¯, Palatino&e.3+l"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@lIntroduction to •)8 Apple Events4⁄*˙¯
  8869. (‡*3-36    )BW’ê)orking WT¿)$ith Object Specifiÿ )C
  8870. er Records4^*¿¯
  8871. °dONLNd\lh(elThe ª¿°dONLNd\h®)key form †°dONLNd \©hæ)* and ¿°dONLNd\øhÂ)key data®@°dONLNd\ÂhB)& distinguish the desirü†°dONLNd/\BhO)]ed ¶†°dONLNd2\Oh´)Apple event object fr⁄`°dONLNdG\´h’)\    om other  °dONLNdP\÷hÛ)+Apple °dONLNdVilu‹(rlUevent objects of the same object class. The key form describes the form the key data °dONLNd´vlÇ´*takes. The thirU°dONLNd∫v´Ç’)?d keyworj °dONLNd¬v’Ç˙)*d-specifiG‡°dONLNdÀv˚Ç;)&ed descriptor r Ä°dONLNd⁄v<ÇN)Aecorć°dONLNdfivNÇß)d in an object specifif°dONLNdÙv®Ç∑)Zer rg@°dONLNd¯v∑Ç…)ecor€†°dONLNd¸v…ÇÙ)
  8872. d usually °dONLNdÉlèà(ålspecifiÓ °dONLNdÉàè@))es the key form with one of seven standar`°dONLNd6É@èt)∏ d constants:°dONLNd◊Yles(blA∫†°dONLNdÿYse´) key form of ,
  8873. Courier˚‡°dONLNdÂY´eˇ)8formPropertyIDˆ†°dONLNdÛYˇeÑ)T indicates key data that specifi¯°dONLNdYÑe†)Öes a pr≈¿°dONLNdY°eæ)opertyØ`°dONLNd YΩe¬). Q°dONLNd"Y¬e…)AㆰdONLNd#Y…eÀ)  †°dONLNd$YÃeÛ)property|Ä°dONLNd,YÛeı)' °dONLNd-flrÑ(olof an º`°dONLNd3fÑr)Apple event object is a specifij¿°dONLNdRfrÿ)É3c characteristic of that object that can be identifiÌ¿°dONLNdÜfÿrÚ)—ed by °dONLNdåsl∫(|la constant. The prM °dONLNdûsª‚)ODoperties associated with the object class for documents include the °dONLNd‚ÄlåÚ(âlname of the document and a flI†°dONLNdˇÄÛå‹)á1ag indicating whether the document has been modifi¿Ä°dONLNd1Ä‹åÈ)Èed °dONLNd4çlô‹(ñlsince the last save. The pr%Ä°dONLNdOç›ôÆ)q1operties associated with the object class for worõ`°dONLNdÄçÆôfi)— ds include °dONLNdãöl¶Ç(£lcolor¯‡°dONLNdêöŶ˜), font, point size, and style.°dONLNdبl∏Ñ(µlFigurR¿°dONLNd¥¨Ñ∏ù)e 3-13@°dONLNd∫¨ù∏Ÿ) shows the str√Ä°dONLNd»¨⁄∏Ò)=ucturI`°dONLNdÕ¨Ú∏˛)e oÄ°dONLNd–¨ˇ∏e)f a typical object specifiØ@°dONLNdͨe∏t)fer r∞Ä°dONLNdÓ¨t∏Ü)ecor$‡°dONLNdÚ¨á∏ï)d: fîÄ°dONLNdˆ¨ï∏¶)our °dONLNd˙πl≈ç(¬lkeywor˘`°dONLNdπç≈≤)!d-specifi◊ °dONLNd    π≥≈Û)&ed descriptor rõ¿°dONLNdπÙ≈)Aecor °dONLNdπ≈ª)+ds that specify the class ID, the container^†°dONLNdGπ∫≈·)≥
  8874. , the key °dONLNdQΔl“((œl)form, and the key data. These four keyworü`°dONLNdzΔ(“M)ºd-specifi} °dONLNdÉΔN“é)&ed descriptor rA¿°dONLNdíΔè“°)Aecor∂ °dONLNdñΔ°“∂)ds arS‡°dONLNdõΔ∑“Û)e the data for °dONLNd™”lflß(‹la descriptor r_@°dONLNd∏”ßflπ);ecor”†°dONLNdº”πflƒ)d (√@°dONLNdø”≈flÈ) AEDesc¡°dONLNd≈”Èfl?)$) of descriptor type ï¿°dONLNd⁄”@fl≤)WtypeObjectSpecifier—@°dONLNdÌ”±flæ)q. N  °dONLNd”øflfl)ote the °dONLNd¯‡lÏ(Èl&similarities between the object specifi¡`°dONLNd‡Ï)§er r¬†°dONLNd#‡Ï1)ecor7°dONLNd'‡2Ïf) d shown in 8¿°dONLNd2‡fÏ~)4Figur Ä°dONLNd7‡~Ïó)e 3-13©°dONLNd=‡óÏΩ)     and the ï °dONLNdF‡ΩÏı)& Apple event °dONLNdRÌl˘o(ˆlrE°dONLNdSÌp˘Ç)ecorπ`°dONLNdWÌǢ∂) d shown in ª °dONLNdbÌ∂˘Œ)4Figur燰dONLNdgÌŒ˘
  8875. )e 3-9 on page M °dONLNduÌ ˘)=3-°°dONLNdwÌ˘)19°°dONLNdyÌ˘E)
  8876.  
  8877. . Like an p‡°dONLNdÉÌE˘Å)(Apple event r†°dONLNdêÌǢî)=ecoru°dONLNdîÌ)d or an ·°dONLNdú̵˘…)!AE r‡°dONLNd†Ì ˘‹)ecorà@°dONLNd§Ì‹˘Ù)d, an °dONLNd™˙l§(lobject specifi>@°dONLNd∏˙•¥)9er r?Ä°dONLNdº˙¥Δ)ecor≥‡°dONLNd¿˙ΔC)d consists of a list of keyworƒ¿°dONLNdfi˙Ch)}d-specifi¢Ä°dONLNdÁ˙i©)&ed descriptor rg °dONLNdˆ˙™º)Aecor€Ä°dONLNd˙˙º»)ds.¥@°dONLNd˝˙…À) °dONLNdˇ lÑ(lFigurR¿°dONLNd Ñù)e 3-13@°dONLNd
  8878.  ùŸ) shows the str√Ä°dONLNd ⁄Ò)=ucturI`°dONLNd Úd)e of a simple object specifiH °dONLNd9 et)ser rI`°dONLNd= tÜ)ecorΩ¿°dONLNdA Üæ)d that specifiù¿°dONLNdO øÌ)9 es the key °dONLNdZl%Ñ("lform ê°dONLNd_Ñ%ÿ)formPropertyIDä¿°dONLNdmÿ%›)T, ä¿°dONLNdo›%)formNameá¿°dONLNdw%)0, or o‡°dONLNd|%ñ)formAbsolutePositionh`°dONLNdêñ%“)x. For detailed °dONLNdü&l2⁄(/linformation about the str=`°dONLNd∏&€2Ú)ouctur√@°dONLNdΩ&Ú2=)e of object specifiÄ°dONLNd–&>2M)Ler r¿°dONLNd‘&M2_)ecorä °dONLNdÿ&_2›)ds that specify the other key °dONLNdˆ3l?!(<l(forms, see the chapter “Resolving and Crá¿°dONLNd    3!?z)µeating Object SpecifiÑ°dONLNd    33{?ü)Zer Recor‚†°dONLNd    ;3ü?È)$ds” in this book.     °dONLNdCú*ßP(§*Key form°dONLNdLú∂ߺ)åV¸/°dONLNdMúªßÕ)alue}¿°dONLNdRúÓßT)3Corresponding key data
  8879. °dONLNdj™*∂~(≥*formPropertyID°dONLNdy™∂∂º)å'†°dONLNdz™º∂‘)prop~ °dONLNd~™‘∂⁄)'}¿°dONLNdÄ™Ó∂˜)PrL`°dONLNdÇ™¯∂x)
  8880. operty ID for an element’s prs@°dONLNdü™x∂ï)Äoperty°dONLNdß∫*ΔZ(√*formName°dONLNd∞∫∂Δº)å'†°dONLNd±∫ºΔ‘)name~ °dONLNdµ∫‘Δ⁄)'}¿°dONLNd∑∫ÓΔ4)Element’s name°dONLNd« *÷r(”* formUniqueID°dONLNd‘ ∂÷º)å'†°dONLNd’ º÷‘)ID  ~ °dONLNdŸ ‘÷⁄)'}¿°dONLNd€ Ó÷ı)A∏`°dONLNd‹ ı÷p) value that uniquely identifiÊ¿°dONLNd˘ p÷—){es an object within its }¿°dONLNd’Ó·3(fiÓcontainer or acr䆰dONLNd!’3·Ç)Eoss an application°dONLNd5Â*Ò¢(Ó*formAbsolutePosition°dONLNdJÂ∂Òº)å'†°dONLNdKºґ)indx~ °dONLNdO‘Ò⁄)'}¿°dONLNdQÂÓÒ%) An integer où°dONLNd]Â%ÒI)7    r other cE`°dONLNdfÂJÒÒ)%'onstant indicating the position of one }¿°dONLNdçÓ¸ (˘Óor mort`°dONLNdì ¸L)e elements in r¶¿°dONLNd¢L¸·)@#elation to the beginning or end of }¿°dONLNd≈˚Ó.(Ótheir container°dONLNd÷ *¢(*formRelativePosition°dONLNdÎ ∂º)å'†°dONLNdÏ º‘)rele~ °dONLNd ‘⁄)'}¿°dONLNdÚ Óı)A∏`°dONLNdÛ ıO) constant that specifiF‡°dONLNd     P∫)[es the element just befor¿°dONLNd" ªÂ)k e or after }¿°dONLNd-Ó"'(Óthe container°dONLNd<&*2Z(/*formTest°dONLNdE&∂2º)å'†°dONLNdF&º2‘)test~ °dONLNdJ&‘2⁄)'}¿°dONLNdL&Ó2#) Descriptor r~Ä°dONLNdX&#25)5ecorÚ‡°dONLNd\&52ã)ds that specify a tes/ °dONLNdq&å2è)Wt°dONLNdt6*B`(?*    formRange°dONLNd~6∂Bº)å'†°dONLNd6ºB‘)rang~ °dONLNdÉ6‘B⁄)'}¿°dONLNdÖ6ÓB#) Descriptor r~Ä°dONLNdë6#B5)5ecorÚ‡°dONLNdï65Bà)ds that specify a gr:@°dONLNd©6âB“)Toup of elements }¿°dONLNdπAÓMm(JÓbetween two other elements ˇw⁄@ˇ ˇˇˇˇ@
  8881. ˇ·ˇ‚7^
  8882. 4H\, Palatino&e.3+ä"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@äIntroduction to •)8 Apple Events4⁄ä˙(‡äW’ê)orking WT¿)$ith Object Specifiÿ )C
  8883. er Records
  8884. , (‡3-37
  8885. ˇˇˇˇˇˇˇˇ440lòÄ.B0oMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""B0oB0o$””””””””””””””””””””””””””””””òÄ
  8886. 60@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""60@60@˜˜˜˜˜˜˜˜˜˜˜˜˜
  8887. ˛ˇ˛ˇˇ ˇˇ˛ˇˇ     ˇˇˇ˙ˇ
  8888. ˛ˇˇˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜
  8889. 454+?òÄ
  8890. 56+@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""56+@56+@$˜˛˙ˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  8891. ˛ˇ˛ˇˇ˛¸ˇˇ˚ˇ˛˙ˇˇ˝˛ˇ˛
  8892. ˛ˇ˛ˇˇ
  8893. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  8894. ˛ˇ˛ˇˇ
  8895. ˛ˇ˛ˇˇ˛˙ˇ˜˝˝ˇˇ˛ˇ˚˝ˇ¸˛¸ˇˇ˜˝˛ˇ˛
  8896. ˛ˇ˛ˇˇ
  8897. ˛ˇ˛ˇˇ˝ˇˇ˛˜˝¸ˇ
  8898. ˛ˇ˛ˇˇ˛¸ˇˇ˜˝˛ˇ˛
  8899. ˛ˇ˛ˇˇ
  8900. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˜˝¸ˇ
  8901. ˛ˇ˛ˇˇ˝˛ˇ˛
  8902. ˛ˇ˛ˇˇ
  8903. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  8904. ˛ˇ˛ˇˇ
  8905. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  8906. ˛ˇ˛ˇˇ
  8907. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  8908. ˛ˇˇˇˇ
  8909. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  8910. ˛ˇˇˇ
  8911. ˛ˇˇˇ
  8912. ˛ˇˇˇ
  8913. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  8914. ˛ˇˇˇˇ
  8915. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  8916. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  8917. ˛ˇˇˇˇ
  8918. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  8919. gHw4gHw"hH]
  8920. ˇ·ˇ‚7^    °dONLNd\äg∫(dä Figure 3-13°dONLNd \Ãg%)BData structures within Å0°dONLNd#\%gN)Y
  8921. a simple oÇ°dONLNd-\Ng})) bject specifiÑ °dONLNd:\}g†)/    er record
  8922. wä∫4wä∫4vàwâò@@˜@˜wâ∑Ä¡¡?”ˇ˛Ò?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒò@@Ę@Ę∑â˜Ä?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒò@Ä¿˜Ä¿˜˜â7Ä?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒò@¿˜¿˜7âwÄ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒò@@˜@˜wâ∑Ä?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒò@@Ę@Ę∑â˜Ä?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒò@Ä¿˜Ä¿˜˜â7Ä?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒò@¿Ú˜¿Ú˜7âiÄ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒò@@˜@˜wâ∑Ä¡¡“32Ò“Ò ”Ò¡“Ò¡ ”Ò“Ò ”Ò¡“Ò ‡˛  ∞`ÿ€Ò
  8923. ø˛=Ω«ü€ü¿›Ò
  8924.  ∑Ô∑Áòflˇ`›Ò    Ω˚7 ÿfiÀ
  8925. Áˇ=ÏflÛ˝‡›Ò˝0« ˛0ÿÒ“Ò ”Ò    ÿˇ˛ÌÙ Ê˛ÒÙ ÊÌ Ù Ê˛ÒÙ Ê˛Ò Ù Ê˛ÒĢ ¸Ÿ »ÙÌ%ÄÄ˚ ÄÛ˛Ò&
  8926. ±€πˆ9„ ˝ mÁ"Á˜ë„ûcÿv¿ˆÌ)
  8927.  ˚&§ÃóÄ˝ (ò¢ë# îb!ãı˛Ò(    ¿‚§Ã®ü¢ë?bó‡!˙ı˛Ò*
  8928.  ;û∏t„†˝ „· Òº·û˚˛7Ĉ˛Ò˝ ĸ ˛Ä˛ÄÒÌ#˝ Ä¸ ˛q¿¿Ò˛ÒÙ ÊÌ Ù Ê˛Ò ◊ˇ˛Ò Ù Ê˛ÒÙ ÊÌÙ Ê˛ÒÙ ÊÌ ˆ °˛ ÄÒ˛Ò    ˜  ` @ÅÒ˛Ò!     g»¯  ycsÒöÊ√õ‡Ú˛Ò    Û‡¯  eÙ¶KÊoÑΩÚÌ!    ì ¯  eÑ! "hÑ•êÚ˛Òq˯  πsóqfigÉúÚÌ Ù ˛@Ì˛ÒÙ ˛@Ì˛Ò Ù Ê˛ÒÙ ÊÌÙ Ê˛Ò◊ˇÌ ”Ò“Ò Ù‰Ò¡ Ù‚ÄÒ¡ ”Ò Ù‚Òò@@Ę@Ę∑â˜Ä ”Ò
  8929. ı‡@ ı‡ˇ¿Ò
  8930. ı‡@ ˆ‡@Ò ı‡@Ò ˆ‡@Ò
  8931. ı‡@ ı‡@Ò
  8932. ı‡@ ˆ‰ˇ@Òı˜Ô@Ò ˆ˜"*Ô"0@Òı˜Ô@ı˜Ô@Òı‰àê@ ˆ˜Ô@Ò"ı    ¿˛¸0<˘@Ò& ˆ""/˛":˛"*#"#ø˙˛"/Ê˘"0@Ò&ı    vÔ~˛ˇ˚ÿoœwÔ~f˜Ä¸@'ı    ˚ˇŒÿ˛øÛfioˇ3ŒyˇÄ¸@Ò$ı    ààçÀæŒÿ˝à ã¯˚ÿÓéªòŒÓÿÎ˚àê@( ˆ    ˚∂~~˛ ˇgˇ˚˛œˇœ}Ô˚@Òı˛ĸ`Ú@Ò ˆ˛"#˚"*"#‚Ú"0@Òı˜Ô@ı˜Ô@Òı‰àê@ ˆ‰ˇ@Òı‰@Ò ˆ‰@Òı‰@ı?Êˇ¯@Òı ¯@ ˆ ¯@Òı ¯@Ò ˆ ¯@Òı Ä˝@ı      >Ù@Ò ı     c∂ÛÏyÊ@∑„™flúˆ@# ˆ     ˆL…ò)üîHRbˆ@Ò!ı     Åƒ…ò%òTó»R~ˆ@Ò# ˆ w<ËÁ@à·ú#åˆ@Òı ˝
  8933. @ÄÄ"ı@ı ˝
  8934. @Ä9¿Áı@Òı ¯@ ˆ ¯@Òı ¯@Ò ˆ ¯@Òı ¯@ı?Êˇ¯@Òı ¯@ ˆ ¯@Òı ¯@Ò ˆ ¯@Òı ¯@ı ¯@Òı ¯@ ˆ ¯@Òı ¯@Ò ˆ ˙† Äı@Òı     ˚`
  8935. @ı@ı     gƒ¸&;ä@ı@Òı     Û‡¸/f
  8936. @ı@ò@Ä¿˜Ä¿˜˜â7Ä  ˆ     ì ¸iä@ı@Òı q‰¸ßw Äı@Ò ˆ ¯@Òı ¯@ı ¯@Òı ¯@ ˆ ¯@Òı ¯@Ò ˆ ¯@Òı ¯@ı ¯@Òı ¯@ ˆ ¯@Òı?Êˇ¯@Ò ˆ‰@Òı‰@ı‰@Òı‰@ ˆ‰@Òı‰ˇ@Ò ˆ‡@Ò
  8937. ı‡@ ı‡@Ò
  8938. ı‡@ ˆ‡@Ò ı‡@Ò ˆ‡@Ò
  8939. ı‡@ı‰ˇ@Òı‰àê@ ˆ˜Ô@Òı˜Ô@Ò ˆ˜"*Ô"0@Òı˜Ô@ı    ¿˛Ô@Òıààè˛àò˝àè˚àé˜àê@# ˆ    vÔ~˛øx`ˆ@Ò%ı    ˚ˇŒÿ˛ ˇ˚ÿœ˛ˇé˚flÄ˙@Ò& ˆ    ""/„æÓ˙˛"
  8940. *#øÛ˛Ê{cÊoÓ˘"0@Ò#ı    ˚∂~~˛
  8941. ÛÿŒ{nΔn ˘@"ı˛ĸ
  8942. ˇgˇ{ˇªÔˇˇ˘@Òı˛àã¯àËÚàê@ ˆ˜‡Ú@Òı˜Ô@Ò ˆ˜"*Ô"0@Òı‰ˇ@ı˜Ô@Òı‰@ ˆ‰@Òı‰@Ò ˆ?Êˇ¯@Òı ¯@ı ¯@Òı ¯@ ˆ ¯@Òı ¯@Ò& ˆ Ä˝˝¿Ä˝ d¸@Ò&ı      @˛Ä¸@)ı     c∂ÛÏyÊ@∑„¢súàÛèaÏs`˛@Ò(ı     ˆL…ò)üîbH¢äLQ ÑâIJ@* ˆ     Åƒ…ò%òTó‚HæÇQO– Ñ˘˝@Ò)ı w<ËÁ@à·úåyûqè˘ˇ3¿˛@Ò% ˆ ˝@ÄÄÄ@˘@Ò"ı ˝
  8943. @Ä9¿˛‡˘@ò@¿˜¿˜7âwÄı ¯@Òı ¯@ ˆ ¯@Òı ¯@Ò ˆ?Êˇ¯@Òı ¯@ı ¯@Òı ¯@ ˆ ¯@Òı ¯@Ò ˆ ¯@Òı ¯@ı ¯@Òı ¯@" ˆ ˙—˛@˘@Ò"ı     ˚
  8944. 0  @Ä˙@Ò% ˆ     gƒ¸
  8945. =3q˘çsaŸ˙@Ò"ı     Û‡¸
  8946. 3|£'”7¬|¯˙@#ı     ì ¸
  8947. 3D Ê4Bd»˙@Ò"ı q‰¸
  8948. ›;ìπœ3¡‹x˙@ ˆ ¯ ı@Òı ¯ ı@Ò ˆ ¯@Òı ¯@ı ¯@Òı ¯@ ˆ ¯@Òı ¯@Ò ˆ ¯@Òı ¯@ı ¯@Òı?Êˇ¯@ ˆ‰@Òı‰@Ò ˆÛˆÄ@Òı‰@ı‰ˇ@Ò
  8949. ı‡@ ˆÒ@ˆ˝@Ò ı‡@Ò ˆ‡@ÒıÚıIJ@ ı‡@Ò
  8950. ı‡@ ˆ‡@ÒıÚ@Ù˛@Ò ˆ‡@Ò
  8951. ı‡@ıÛÛ˛@Òı‰˛@ ˆ‡@Ò ı‡@Ò ˆÛÚˇ@ÒıÛ@Ú@ıÛ@˛ˆ@ÒıÛNà´∏ààõ∏˘àê@ ˆÛ    C∂≤+;{<ñ;Ä˚@ÒıÛB{3/Ò'Ãw˙@Ò ˆÛ    c≥{≥{Û;øˇ¢˚"0@ÒıÛ@Û@ıÛ@Ú@ÒıÛÚˇ@ ˆÛ@Ú@ÒıÛ@Ú@Òò@@˜@˜wâ∑Ä ˆÛ@Ú@ÒıÛ@Ú@ıÛ@Ú@ÒıÛ@Ú@ ˆÛ@Ú@ÒıÛ@Ú@Ò ˆÛÚˇ@ÒıÛ@Ú@ıÛ@Ú@ÒıÛ@Ú@ ˆÛ@Ú@ÒıÛ@Ú@Ò ˆÛ@Ú@ÒıÛ@Ú@ıÛ@Ú@ÒıÛÚˇ@ ˆ‡@Ò ı‡@Ò ˆ‡@Ò
  8952. ı‡@ıÛÚˇ@ÒıÛHÚàê@ ˆÛ@˝˜@ÒıÛF#∞ˆ@Ò ˆÛc∂≤k3„3z˘"0@ÒıÛB{3D™1/†˘@ıÛC±{ª)˚´p˘@ÒıÛHéÛàê@ ˆÛ@Ú@ÒıÛÚˇ@Ò ˆÛ@Ú@ÒıÛ@Ú@ıÛ@Ú@ÒıÛ@Ú@ ˆÛ@Ú@ÒıÛ@Ú@Ò ˆÛ@Ú@ÒıÛ@Ú@ıÛÚˇ@ÒıÛ@Ú@ ˆÛ@Ú@ÒıÛ@Ú@Ò ˆÛ@Ú@ÒıÛ@Ú@ıÛ@Ú@ÒıÛ@Ú@ ˆÛ@Ú@ÒıÛÚˇ@Ò ˆ‡@Ò
  8953. ı‡@ ı‡@Ò
  8954. ı‡@ ˆÛÚˇ@ÒıÛ@Ú@Ò ˆÛbÚ"0@ÒıÛF#òĘ@ıÛC∂≤3j7‡¯@ÒıÛJ˚ªøª ¯¯àê@ ˆÛC±{´7P¯@ÒıÛ@`ˆ@Ò ˆÛbÚ"0@ÒıÛÚˇ@ıÛ@Ú@ÒıÛ@Ú@ò@@Ę@Ę∑â˜Ä ˆÛ@Ú@ÒıÛ@Ú@Ò ˆÛ@Ú@ÒıÛ@Ú@ıÛ@Ú@ÒıÛ@Ú@ ˆÛÚˇ@ÒıÛ@Ú@Ò ˆÛ@Ú@ÒıÛ@Ú@ıÛ@Ú@ÒıÛ@Ú@ ˆÛ@Ú@ÒıÛ@Ú@Ò ˆÛ@Ú@ÒıÛÚˇ@ ı‡@Ò
  8955. ı‡@ ˆ‡@Ò ı‡@Ò ˆÛÚˇ@ÒıÛ@Ú@ıÛ@Ú@ÒıÛNà´òãä˜àê@ ˆÛC∂≤3j„‡¯@ÒıÛB{37≤≤0¯@Ò ˆÛc≥{´3{˙¯"0@ÒıÛ@`ˆ@ıÛ@Ú@ÒıÛÚˇ@ ˆÛ@Ú@ÒıÛ@Ú@Ò ˆÛ@Ú@ÒıÛ@Ú@ıÛ@Ú@ÒıÛ@Ú@ ˆÛ@Ú@ÒıÛ@Ú@Ò ˆÛÚˇ@ÒıÛ@Ú@ıÛ@Ú@ÒıÛ@Ú@ ˆÛ@Ú@ÒıÛ@Ú@Ò ˆÛ@Ú@ÒıÛ@Ú@ıÛ@Ú@ÒıÛÚˇ@ ˆ‡@Ò ı‡@Ò ˆ‡@Ò
  8956. ı‡@ ı‡@Ò
  8957. ı‡@ ˆ‡@Ò ı‡@Ò ˆ‡@Ò
  8958. ı‡@ ı‡@Ò
  8959. ı‡@ ˆ‡@Ò ı‡@Ò ˆ‡@Ò
  8960. ı‡@ò@Ä¿˜Ä¿˜˜â7Ä ı‡@Òı‰ˇ‡@ ˆ˜Ô @Òı˜Ô @Ò ˆ˜"*Ô" @Òı˜Ô @ı˜Ô @Òı    ààç»ààòÎà†@ ˆ˛˛ @Ò!ı    vÔ~˛ø¸¸ˆ @Ò% ˆ    ""/˚ˇÓ˙˛"    *#ˇ˚˙{ˇcˇ˙¯" @Ò"ı    √æŒÿ˛    øÛfiw˛~l¸¯ @#ı    ˚∂~~˛    Ûÿ~fl¸¯ @Òı˛àâ˙àèˇÔˇÔÏ˚fl¸¯à†@ ˆ˛˚` ı @Òı˜‡<ı @Ò ˆ˜"*Ô" @Òı˜Ô @ı‰ˇ‡@Òı˜Ô @ ˆ‰ @Òı‰ @Ò ˆ‰ @Òı?Êˇ @ı ¯ @Òı ¯ @ ˆ ¯ @Òı ¯ @Ò ˆ ¯ @Òı Ä˝¯˙ @$ı      >˝@˙ @Ò$ı     c∂ÛÏyÊ@∑„íˆÙvƒÛè˙ @' ˆ     ˆL…ò)üîXJjãDQ˙ @Ò%ı     Åƒ…ò%òTó“Jj˙O”˙ @Ò( ˆ w<ËÁ@à·æÌÍ7è1çÄ˚ @Òı ˝@ÄÄÛ @ı ˝@Ä9¿Û @Òı ¯ @ ˆ ¯ @Òı ¯ @Ò ˆ ¯ @Òı?Êˇ @ı ¯ @Òı ¯ @ ˆ ¯ @Òı ¯ @Ò ˆ ¯ @Òı ˙¿¯Ä˝ @&ı     ˚<˛fif @Ò&ı     gƒ¸›æ퀺vfiŸ    áπΩ4] @) ˆ     Û‡¸"≈\dRãQ    %D ¨Í¢ @Ò'ı     ì ¸"ÖPDR˙    Q    %Dä•*æ @Ò) ˆ q‰¸›ÌxÛú7Ü'fiπ˙Ù˙å @Òı ¯¸ ˘ @ı ¯¸8‡˘ @Òı ¯ @$ ˆ ¯``0˝@˛ @Ò"ı ¯Ä ‡˝ @Ò% ˆ ¯aÓoC8Áø8óœÁÄ @Ò"ı ¯¿ë2•%àêîDËòD    @ @#ı ¯¿ë"ß$hêî¸àÜDâ@ @Ò"ı ¯AÓ~≠˚«|{«=Û>Á` @ ˆ ¯ @Òı ¯ @Òò@¿Ú˜¿Ú˜7âiÄ ˆ ¯ @Òı ¯ @ı ¯ @Òı ¯ @ ˆ?Êˇ @Òı‰ @Ò ˆ‰ @Òı‰ @ı‰ @Òı‰ˇ‡@ ˆ‡@Ò ı‡@Ò ˆ‡@Ò
  8961. ı‡@ ı‡@Ò
  8962. ı‡@ ˆ‡@Ò ı‡@Ò ˆ‰ˇ@Òı˜Ô@ı˜Ô@Òı‰àê@ ˆ˜Ô@Òı˜Ô@Ò ˆ˜"*Ô"0@Òı    ¿˛@"ı˛˛ø¸¯ ˜@Ò!ı    ààé˛Ôˇ˛˝àãˇ˚ÿ˚ˇÔü¯¯àê@% ˆ    ˚ˇŒÿ˛    øÛfiw˛oÃx¯@Ò#ı    √æŒÿ˛    Ûÿ~nÕÿ¯@Ò% ˆ    ""/˚∂~~˛"    *'ˇgˇÔÓ˚Á~¯"0@Òı˛ĸ` ı@ı˛˚‡<ı@Òı‰àê@ ˆ˜Ô@Òı˜Ô@Ò ˆ‰ˇ@Òı‰@ı‰@Òı‰@ ˆ?Êˇ¯@Òı ¯@Ò ˆ ¯@Òı ¯@ı ¯@Ò!ı ¯>˛| ˝@$ ˆ ¯∑„™flúo«UÕ¯˝@Ò"ı ¯îHRb&)(í' ˝@Ò) ˆ Ä˝Tó»R~&    )/ìÂ$˝@Ò'ı      à·ú#å√8Õò˝@ò@@˜@˜iâ©Ä?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒò@@Ę@Ę©âÈÄ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ?“ˇÒ“ˇÒ¡¡¡¡¡¡¡¡¡¡¡¡¡    #·¿c«
  8963. ! ÄîÄ»
  8964. aÅÄ»
  8965. a¿ÅÄ»    í«    !)«    ?√‡Δ«¡¡¡¡¡&¯ `˛    ÄA é˝`Â%êêÅ˛˝@ ˝ Â'#âË≤ãä~¥_"…Œ´ñÏu¨§AQÍ&∫+,娇Â'# YEpïÑL™e©¥(Ñ’‘¢Î*°ZíTUQ@Â'#KN‰¶$xEƒ-9≈2$Hxîôƒ…t@ÈÒ‰¢R@Â'#éàà?<á^: E[Ãx!-RE‡2ó¶à".¢¿Â'#ãáp>*(ËÖ§.Üí%HPÈ(»‚b:AÃy$x!—#`Â@Ô ‡@Ô†‡ÄÔ@‡¡¡'膿‡@tH˝@Äp ¿Ä8ÄÄÊ'E1˛@ @Ä˝  @ÄÄÊ($≈)ÄvÂe•$eË∂ ∂≤6F\ì`-ı°—|ãcêRít∑ŒÊ($¶*ÄöJãfi§™IZ +SVZJ®©†F¢R≤®ï°(ÔUZêÊ($,Äíúíî…íR JRR“ë1I D¬îó%"H$Jn'ìÊ($ HÅ&—)m~⁄¶‘Ñɶ◊˘“`≕ùy™cPDî∏™'ÇÊ($éi—§èΔHîë$$§¢‰âQ"H…DF÷ëB Œc'ÂÊ˝ ı¯Ñ·˝ ı¯Ñ· ˙ÎÑ·¡¡˛@ÄcÜΔ ◊§@˝ $îÅ ◊•ˆ\ãa”íî´∏ÍéCCê%wD†Ÿ'(H®ï¢®wu@*î°¿dN®´–ŸIgâ1%!·p)&8S%¡zD«%‹êŸm¡—˘™`r@#)KU≠Ñ¢âa- ŸInëQCß∫Δ2pi6Ê√ÜN6Ó¿Ÿò@Ä¿˜Ä¿˜Èâ)Äı@˚ÿı@˚ÿı@˚ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¡  ¿ÄÕ
  8966.  Äbà bîêÄZ GÅl¿Œ gz®Ä≠] *5@Œ íSpÅ)I\r&Õ •¿GRvDN¿Œ ;88íå\<FIŒ ˛Äà˛Äà  ˛…¡¡‡A‡êw‡Ä’ê@ê"@)’í·<∂:Ÿ    î"N≤@)"˙Àí‹◊•Ab…ZRjâ(<ÀU@Ie) ◊    ÅD RîLä#»DR^ÄR,·&I◊¡%2¶∂ù0¯Dtà¿õ82?R◊äÉíq$‹íÁPÓTßà“-‚*"8◊¸à˛ ˛—¸à˛ ˛†—
  8967. ¸p˙¿œ¡¡ ˛@  §@$$  •ˆ\VD  '(H®®D  Igâ1(D  m¡—˘P"H  InëPê∞ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜)âiÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜iâ©Ä¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę©âÈÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜Èâ)Ä¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜)â[Ä¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜iâ©Ä$ı     c∂ÛÏyÊ@Ä"˛˘@Ò$ı     ˆL…ò)ü9¿Á˛sÄ˙@ ˆ     Åƒ…ò%ò@Òı w<ËÁ@@Ò% ˆ ˝@Ä|˘@Ò%ı ˝@Äc€yƒ;Δ—Ô8fl6¸@!ı ¯ ¡
  8968. &$E)êîE8ò¸@Ò ı ¯ ¡*'‰≈(êî˝ê¸@# ˆ ¯ @ƒ8œª∑˝€Û<¸@Ò ı ¯ ˛Ä˚@Ò" ˆ ¯p˛‡˚@Òı ¯@ı ¯@Òı ¯@ ˆ?Êˇ¯@Òı ¯@Ò ˆ ¯@Òı ¯@ı ¯@Òı ˙@" ˆ     ˚ć¯@Ò$ı     gƒ¸ @ê˚@Ò& ˆ     Û‡¸ ss7"êÃ4⁄ú˚@Ò#ı     ì ¸ §œ£"ë(}ı>H˚@$ı q‰¸ $Ã"¢ë(E"H˚@Òı ¯ #s°¬‡»<ıD˚@ ˆ ¯@Äı@Òı ¯@Ù@Ò ˆ ¯@Òı ¯¸ˆ@ı ¯¸(˜@Òı ¯6ÜÜ≥į@ ˆ ¯˝O    .y˜@Òı ¯ÕH    )¡˜@Ò ˆ ¯ΩG/8į@Òı ¯@ı ¯@Òı ¯@ ˆ ¯@Òı ¯@Ò ˆ ¯@Òı?Êˇ¯@ı‰@Òı‰@ ˆ‰@Òı‰@Ò ˆ‰@Òı‰ˇ@ ı‡@Ò
  8969. ı‡@ ˆ‡@Ò ı‡@Ò ˆ‡@Ò
  8970. ı‡@ ı‡@Ò
  8971. ı‡@ ˆ‡@Ò ı‡@Ò ˆ‡ˇ¿Ò¡“Ò¡ ”Ò“Òò@@Ę@Ę©âÈÄ ”Ò¡“Ò¡ ”Ò“Ò—3Ò “ÃÒ¡¡¡¡¡¡¡¡¡¡¡¡¡    #·¿c«
  8972. ! ÄîÄ»
  8973. aÅÄ»
  8974. a¿ÅÄ»    í«    !)«    ?√‡Δ«¡¡¡¡¡&¯ `˛    ÄA é˝`Â%êêÅ˛˝@ ˝ Â'#âË≤ãä~¥_"…Œ´ñÏu¨§AQÍ&∫+,娇Â'# YEpïÑL™e©¥(Ñ’‘¢Î*°ZíTUQ@Â'#KN‰¶$xEƒ-9≈2$Hxîôƒ…t@ÈÒ‰¢R@Â'#éàà?<á^: E[Ãx!-RE‡2ó¶à".¢¿Â'#ãáp>*(ËÖ§.Üí%HPÈ(»‚b:AÃy$x!—#`Â@Ô ‡@Ô†‡ÄÔ@‡¡¡'膿‡@tH˝@Äp ¿Ä8ÄÄÊ'E1˛@ @Ä˝  @ÄÄÊ($≈)ÄvÂe•$eË∂ ∂≤6F\ì`-ı°—|ãcêRít∑ŒÊ($¶*ÄöJãfi§™IZ +SVZJ®©†F¢R≤®ï°(ÔUZêÊ($,Äíúíî…íR JRR“ë1I D¬îó%"H$Jn'ìÊ($ HÅ&—)m~⁄¶‘Ñɶ◊˘“`≕ùy™cPDî∏™'ÇÊ($éi—§èΔHîë$$§¢‰âQ"H…DF÷ëB Œc'ÂÊ˝ ı¯Ñ·˝ ı¯Ñ· ˙ÎÑ·¡¡˛@ÄcÜΔ ◊§@˝ $îÅ ◊•ˆ\ãa”íî´∏ÍéCCê%wD†Ÿ'(H®ï¢®wu@*î°¿dN®´–ŸIgâ1%!·p)&8S%¡zD«%‹êŸm¡—˘™`r@#)KU≠Ñ¢âa- ŸInëQCß∫Δ2pi6Ê√ÜN6Ó¿Ÿò@Ä¿˜Ä¿˜Èâ)Äı@˚ÿı@˚ÿı@˚ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¡  ¿ÄÕ
  8975.  Äbà bîêÄZ GÅl¿Œ gz®Ä≠] *5@Œ íSpÅ)I\r&Õ •¿GRvDN¿Œ ;88íå\<FIŒ ˛Äà˛Äà  ˛…¡¡‡A‡êw‡Ä’ê@ê"@)’í·<∂:Ÿ    î"N≤@)"˙Àí‹◊•Ab…ZRjâ(<ÀU@Ie) ◊    ÅD RîLä#»DR^ÄR,·&I◊¡%2¶∂ù0¯Dtà¿õ82?R◊äÉíq$‹íÁPÓTßà“-‚*"8◊¸à˛ ˛—¸à˛ ˛†—
  8976. ¸p˙¿œ¡¡ ˛@  §@$$  •ˆ\VD  '(H®®D  Igâ1(D  m¡—˘P"H  InëPê∞ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜)âiÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜iâ©Ä¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę©âÈÄ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜Èâ)Ä¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜)â[Ä¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ˇ\Ú@ˇ ˇˇˇˇ@
  8977. ˇ·ˇ‚7^
  8978. 4*\¯, Palatino&e.3+l"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@lIntroduction to •)8 Apple Events4⁄*˙¯
  8979. (‡*3-38    )BW’ê)orking WT¿)$ith Object Specifiÿ )C
  8980. er Records4^*¿¯
  8981. °dONLNd\lhÑ(elFigurR¿°dONLNd\Ñhù)e 3-14@°dONLNd \ùh) shows the object specifi#¿°dONLNd$\h)ker r%°dONLNd(\h))ecorô`°dONLNd,\)hü)d for the Get Data event pr†°dONLNdG\†h˜)weviously illustrated °dONLNd\iluw(rlin π¿°dONLNd_iwuè) FiguråÄ°dONLNddièu£)e 3-4*°dONLNdii§u¥) on p‡°dONLNdmi¥uÀ)page K¿°dONLNdriÃuŸ)3-1°dONLNduiŸufi)1°dONLNdvifiux)%. The object class ID tells the SurfWT`°dONLNdõixuÂ)öriter application that the °dONLNd∂vlÇo(lrE°dONLNd∑vpÇ)%equested data is an element of class ,
  8982. Courier{ °dONLNd‹vÇ3)ücTablex‡°dONLNd‚v3ǘ)$.. The container for the table is the document °dONLNdÉlè˘(ål “Sales Report.” The key form is ¨°dONLNd0ɢè))çformName©°dONLNd8É)èÁ)0., which tells the server application that the °dONLNdfêlú¥(ôlkey data identifiú†°dONLNdwê¥úœ)Hes the "@°dONLNd~ê–úÙ)BApple event object by name. The key data is the name of the table.
  8983. æ*œ¯4ø*œ¯"ø*]
  8984. ˇ·ˇ‚7^    °dONLNd¡¥løú(ºl Figure 3-14°dONLNdÕ¥ÆøÔ)BAn object specifi†°dONLNdfi¥ød)Ber record in a Get Data event
  8985. Œ*Q¯4œ*P¯
  8986. œ*Q¯4Œ)œ*ò@@˜@˜œ*!¡¡?Àˇ¯?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘ò@@Ę@Ę*O!?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ˇˇ¸?¿‚ˇ¯˝˜ˇÄ˘?ˇˇ¸¿8‚ˇ¯˝˜ˇÄ˘?ˇˇ¸‚ˇ¯8˛˜ˇÄ˘?ˇˇ¸É‚ˇ¯D˛˜ˇÄ˘?ˇˇ¸C‚ˇ¯Ç˛˜ˇÄ˘?ˇˇ¸ #‚ˇ¯Å˛˜ˇÄ˘?ˇˇ¸@ì‚ˇ¯áü‡˜ˇÄ˘ò@Ä¿˜Ä¿˜O*è!?ˇˇ¸ ÑK‚ˇ¯O‡˜ˇÄ˘?ˇˇ¸@àß‚ˇ¯/f˜ˇÄ˘?ˇˇ¸A!G‚ˇ¯Ä˜ˇÄ˘?ˇˇ¸Ç@ß‚ˇ¯ @˜ˇÄ˘?ˇˇ¸Ç ÄG‚ˇ¯  ˜ˇÄ˘?ˇˇ¸Ñ ÄK‚ˇ¯@ê˜ˇÄ˘?ˇˇ¸ÑA;‚ˇ¯ ÑH˜ˇÄ˘?ˇˇ¸àA‚ˇ¯@৘ˇÄ˘?ˇˇ¸HB‚ˇ¯A!D˜ˇÄ˘?ˇˇ¸HÇ>‚ˇ¯Ç`§˜ˇÄ˘?ˇˇ¸ Ç~‚ˇ¯Ç –D˜ˇÄ˘?ˇˇ¸èΔ‚ˇ¯Ñ àH˜ˇÄ˘?ˇˇ¸ üΔ˚‚ˇ¯ÑAD8˜ˇÄ˘?ˇˇ¸Ò«˚‚ˇ¯àA¢˜ˇÄ˘?ˇˇ¸Ò«‚ˇ¯HCQ˜ˇÄ˘?ˇˇ¸{«‚ˇ¯HǮʡĢ?ˇˇ¸uÔ‚ˇ¯ ÇT@˜ˇÄ˘?ˇˇ¸{◊ª‚ˇ¯Ç* ˜ˇÄ˘?ˇˇ¸uÔ[‚ˇ¯Ç˜ˇÄ˘?ˇˇ¸˚◊ª‚ˇ¯Ç
  8987. ò˜ˇÄ˘?ˇˇ¸uÔ[‚ˇ¯Ad˜ˇÄ˘?ˇˇ¸˚◊ª‚ˇ¯A‰˜ˇÄ˘?ˇˇ¸uÔ[‚ˇ¯¿ÅјˇÄ˘?ˇˇ¸˚◊ª‚ˇ¯@@å˜ˇÄ˘?ˇˇ¸fl}Û‚ˇ¯ Ä|˜ˇÄ˘?€ˇ¯˜ˇÄ˘?€ˇ¯˜ˇÄ˘?€ˇ¯˝˜ˇÄ˘?€ˇ¯˝˜ˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘ò@¿˜¿˜è*œ!?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘ò@@˜@˜œ*!?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘ò@@Ę@Ę*O!?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘?ÀˇÄ˘ÀˇÄ˘¡¡ò@Ä¿˜Ä¿˜O*è!¡¡¡¡¡¡¡¡¡¡¡¡¡
  8988. #‡‡Ä»
  8989. ! @r@»
  8990. a@@»
  8991. a¿@$@»
  8992. íé$@»
  8993.  à$Ä»    ?¡s«¡¡¡¡¡"Ù p˛
  8994. ¿É‡ ‡" ê˛Ä˛
  8995.  Å ‡#ÖËŸ6
  8996. àèé¢5—±deg¡H¡qBÈoÄ·"ΔY"é(YU’Tí¿ä™ä BàÇ¢Ö*µ‡"
  8997. K'‚|í&K¢ûàß@ùíDàoƒéO&‡"éD¶*í/(Ω4Åu«å)Ç'ÁàTO‡" ãCé8‰“«I#ÅâÖ«≈E# ‡@˙—@˙—Ä˙ —¡¡(臿p@:HIJ@Ä8¿ÄÄ8Ä@Ê'D±@ @@ @˝@ÄÄ@Ê($ƒ©Ä;‚≤“í2Ëõ[Z;F^ã`Ωë—>â±» Rët∂ÓÊ($•*ÄMEEÔRUIM)©ÆMJ§ï†&í*≤Tî–î ÔRáZPÊ($,ÄIéIJdâíII)*…ë)% $¢Lñâ$ë$Jg'íéÊ($
  8998. HÄì»èî∂ø⁄ì“BCì◊Ì™`I¥UúΩ©1®"&¬Ê($ãi»“áäc$Jë"RR“âIDi$&÷I!gc#ü‰úÊ˝˛Ñı¯Ñ·˝˛Ñı¯Ñ·
  8999. ˘ÑÎÑ·¡¡˛@Ä@ÄF` ◊§@˝  ÄÄÇê ◊§èÎ.â∞ÛâAï‹ÍNA†Ñïsá"PŸ%òDTî—î
  9000. í∫†*T†„à~§
  9001. UËŸH∑Ñô$ê·8Ô”R•¿ÄH$√íÓHŸl·»˝©02 â%ÑT̃Q)`ñàêŸHæà©!Áùsô8h∂„cêΔGw`Ÿı ˚˛ÄŸı ˚˛ÄŸı ˚˛ÄŸ¡¡¡¡¡ò@¿Ú˜¿Ú˜è*¡!¡¡¡¡¡¡¡¡¡  ¿¿Õ  ÄbÄÕ bîàÄZ GïÄÏ`Œ gzîÄ≠]…*4†Œ íS8Å)IZr%Õ •†GRsDM`Œ ;8íåZ<#HàŒ ˛@à˛@à  ˛…¡¡‡!‡àwp?¿Ä÷ê ê" ÄÄ÷íÒ<õ:ÿâ    ‘"N± ¢˛À ‹◊•!b…MRiI
  9002. (<ÀR†$    ï ◊    AD IîJJ»DRW@),Ò%%◊a%2ì∂öí8xDtÑ`M∏:=™◊äCíq‹ë”–ÓT£ƒi-“)8◊¸à˛ ˛—¸à˛ ˛†—
  9003. ¸p˙¿œ¡¡ ˛@   §@$  §èÎ.K"  %òDT§"  H∑Ñô$"  l·»˝H"$  Hæà®àò ¡¡¡¡¡¡¡¡¡¡ò@@˜@˜œ*!¡¡ 3¯À¯ Ã¯ Ä˘À¯ Ä˘ Ã¯À¯ Ã¯ Ä˘À¯ Ä˘ Ã¯ Ï¿Ä„¯ Ì¿Ä0ʯÌÁΩ˚wxÂĢÌʘ˘ˇˇ∞ʯÌ6˜¡é«∞ÂĢ Ó7Ω¯¸∏ʯ Ï0‚¯ Ì0‚¯ Ä˘À¯ı?Ρ¿ÓĢ ˆ Î`Ô¯ı Î`Ô¯ ˆÍ"`Ô¯ı Î`ÓĢı ˘‡¿˜`Ô¯ı(˘àã∏ÎË»¯à‡ÓĢ ˆ ˘Û}¯¯`Ô¯ı ˘c~¸¯`Ô¯ ˆ¯"&:cvÓ¯"`Ô¯ı ˘ˇsfi¸¯`ÓĢı Î`Ô¯ı(Îà‡ÓĢ ˆ Î`Ô¯ı Î`Ô¯ ˆ?Ρ‡Ô¯ı Î`ÓĢı Î`Ô¯ı Î`ÓĢ ˆ Î`Ô¯ı Î`Ô¯ ˆ ¿˛ı`Ô¯ı  Åˆ`ÓĢı  %πÕ3∏o˜K‚˜`Ô¯ı  ◊‰ì~`ıT…˜`ÓĢ ˆ  $ëIòïT…Ę`Ô¯ı  —‰O?pr◊8Ú˜`Ô¯ ˆ Î`Ô¯ı Î`ÓĢı Î`Ô¯ı ¸Ù`ÓĢ ˆ
  9004.  Û¿ı`Ô¯ˆ  Ãî\€ê€pˆ`Ô¯ ¯√ ƒ"dLIàˆ`Ô¯˜ úîbG‚I    ¯ˆ`¿ÔĢ˜ ˜ÛúÒº?Δ0ˆ`‡¯˜  Î`∞ÔĢ ¯8  Î`ú¯˜` Î`Ü¯ò@@Ę@Ę*O! ¯¿¯?Ρ‡É¯¯É∞ Î`¡¿Ģ¯ Î`p`Ò¯¯  ¿ ÄPÙ`8Ģ ˘88 ä@ı` Ò¯¯`` %π C?]/êˆ`Ò¯! ˘¿¿ ◊‰äGñS'¿ˆ`ÉÄÚ¯˘ÉÄ $äDñS&ı`¿¿ÒĢ ˘ —‰KÉä\„–ˆ```Ú¯˘  Î`88ÒĢ ˙8 Î` Ú¯˘`p Î` Ú¯ ˙¿¿ Ó`Ú¯˘ÅÄ Û¿GÄ@Ù`√ÒĢ ˙Რ    ÃîÚHÒÙ`aÄÛ¯!˙˛
  9005.  ƒ‚B\CÄı`0¿ÚĢ# ˚ ˛
  9006.  úî~JdLÄı``Û¯!˙ ˛
  9007.  ˜Ûå7û3¿ı`0Û¯ ˚0˛ Î` Û¯˙0`˛ Î` ÚĢ˙ ¿˛ Î`Û¯˙aIJ?Ρ‡ÇÚĢ ˚¡˝ Î`˛√Û¯˚É˝ Î`˛aÄÙ¯ ¸˝ Î`˛ ÿÙ¯$˚ ˝ ¿ ˛†˜`˛0xÛĢ%˚ ˝   ( ¯`˛Ù¯&˚0˝ 3;qú˘ù√~∫_ ˘`˛ ÛĢ( ¸`˝ zO£Â3Û¨¶OĢ`˛ Ù¯%˚@˝ JL"e2 ƒ¨¶L¯`˛Ù¯( ¸¿˝ :;ë‹Ò˚Éîπ«†˘`˛Ù¯˚Ä˝ ˝`˛ÛĢı ˝p`˛ƒÙ¯ı Î`˝|ÛĢ ˆ ˝(ÄĈ`˝Ù¯ı ˝ Ĉ`Ô¯ ˆ  w+3õÑ∑«Êˆ`Ô¯˝î˚  è˘¶E≥"üˆ`ÓĢ ˝PÄ˝  èI¶CS"òˆ`Ô¯$˝ù¿˝  ˜+∏öBQ!óˆ`˝ÛĢ ˛“Ä˝ ˛DÔ`˝Ù¯ ˝VÄ˝ ˛DÔ`˝ fñ¿˜¯ ˛ï“@˝ Î`˝Ù_Ę¯ı ˛@Ô`˝ÑhÄˆÄ˘ı ¸@&`ˆ`˝tGĘ¯ı  ›ÃÁ0$(€Ñˆ`ÓĢ! ˝0Ä˝  e>fxºT@ˆ`Ô¯¸ ¸  Â2f@‰W¿ˆ`Ô¯( w33õIJ  ].>8^!Ĉ`¸Pˆ¯ ˛L¥˘¶@˛ ˛Ô`¸@ıĢ$˛    L¥I¶@˛ ˛8Ô`˛ÁS73į¯ ˛w3∏ö@˛ Î`˛î‘˚J@˜Ä˘ ˛D˙ Î`˛    î‘KJ@¯¯˝D˙ Î`˛ÁSπ2@¯¯ ˆ?Ρ‡˝ÑÙ¯ı Î`˝ÑÛĢı Î`Ô¯¸?¿¸ Î`ÓĢ ˝¿8¸?¿ÏÄ¯˝¸ÄÏ¿˛8Ù¯ ˛Ä˝Î¿˛DÙ¯˝@˝Î˝ÇÛĢ˝  ˝Î>˝ÅÙ¯˝@ê˝0θ˝áü‡ıĢò@Ä¿˜Ä¿˜O*è! ˛ ÑH˝‡Ï˝O‡ˆ¯˝@à§˛Äχ˝/fˆ¯$ ˛A!D˛˛†Ä˝Ę¯'˝Ç@§˛˛@Ä˛Äˆ¸ @ˆÄ˘(˝Ç ÄD˛ ‡lÕŒfÕˆˆ¿˝  ˜¯(˝Ñ ÄH˛ ‡iÚâıͺ¸ˇˆ`˝@êˆÄ˘( ˛ÑA8˝
  9008.  iâï*†ƒı`˝ ÑH˜¯$˝àA˚
  9009.  ®ÓNtÍú|ı`˝@৘¯  ˛HB˚ ¸Ò`˝A!D˜¯˝HÇ>¸ ¸Ò`˝Ç`§ˆÄ˘˝ Ç~¸ Î`˝Ç –D˜¯)˝èΔ¸ @˛D˛˘`˝Ñ àHˆÄ˘, ˛ üΔ¯˝
  9010.  Ä˛˘`˝ÑAD8˜¯*˝Ò«¯˝ ∏7Ln~3\ÿÃËÄ˙`˝àA¢ˆ¯+ ˛Ò«˝ §Lfiî…|Õü2§˘`˝HCQˆ¯*˝{«˝ dL–Ñ9DM맢`˝HÇ®ÄˆÄ˘+˝uÔ˝ d7NrÓ;ÃéÏúÄ˙`˝ ÇT@˜¯"˝{◊∏˝ ¸@Û`˝Ç* ˆÄ˘$ ˛uÔX˝ ¸ÄÛ`˝Ç˜¯˝˚◊∏˝ Î`˝Ç
  9011. ò˜¯' ˛uÔX˝ †˛ Ù`˝Ad˜¯%˝˚◊∏˝     `>Ù`˝A‰ˆÄ˘%˝uÔX˝
  9012.  &;£Í#Ñpı`¸¿Åј¯%˝˚◊∏˝
  9013.  /fHrDàı`¸@@åˆÄ˘' ˛fl}˝
  9014.  iÑíD¯ı`¸ Ä|˜¯ı
  9015.  ßw#‹ü0ı`¸ı¯ ˆ Î`¸ı¯ı Î`ÓĢı Î`Ô¯ı Ä   ˙`ÓĢ% Y˚ @Ä@˚`Ô¯-˛½ fl.fÜsÊq“3¶7˚`˛¿ëˆ¯0  ù¡Ãfl`˛ %/©Ùœ¶oë2JoJ˚`˛  ê ˜¯0˛ò¡>è¿˛ e,©ÑÃ"hë*JhB˚`˛â›]|¿˜Ä˘/˛ò≈2å@˛ ô'©tásûgqÃ3ß9˚`˝içi>į¯*˛xπ.á¿˛ ˘@˛ ˙`˛)ãi0Ä˜Ä˘# ˆ ˘@˛@˙`˛«ä)į¯ı Î`Ô¯ ˆ ¯¿˛A¸`Ô¯ı ¯˝B˛ `ÓĢı ˙Ê7Ÿç埫ÿs4Ëgp`Ô¯ı ˙ üM} ”2C0îÑن`ÓĢ ˆ ˙òEa
  9016. 2C0ц`Ô¯%˚¸ ˙Á=]    Œ—¬–s;‘tê`˝Ù¯ ¸¸ ˘ÄÙ`˝Ù¯˚¸ ˘ÄÙ`˝¿ÙĢ˚Ä˝ Î`˝¿ı¯"˚‡˝ ˙ ¿ÄĢ`˝0ÄÙĢ$ ¸00˝ ˙
  9017.  Ä@˘`˝aÄı¯!˚ p˝ ˙Üô¬Yï˘`˝CÙ¯" ¸ @˝ ˘oøΩ2ê˘`˝¬Ù¯"˚ `˝ ˙)†¬a2ê˘`˛ÜÛĢ"˚(0˝ ˙«üÇ]Ãà˘`˛ Ù¯˚<˝ ˆ˜`˛ÛĢ ¸6˝ ˆ˜`˛Ù¯˚ ˝ Î`˛0Ù¯" ¸˝ ¿ Û`˛  Ù¯#˚Ü˝  òˆ`˛`ÛĢ$˙É˝ G€B=Õ˓ˇ¯`˛¿Ù¯$˙¡˝ >C2†&T∑U¯`˛0ÄÛĢ' ˚aIJ °C2†$TôU¯`˛!ÄÙ¯$˙0¿˛ ]Ç“¢=œ’◊‘`¯`˛aÛ¯ ˚`˛ ˛Ô`˛√Û¯˙0˛ ˛Ô`˛ÜÚĢò@¿˜¿˜è*œ!˙ ˛ Î`ÑÛ¯&˙˛ ¿Ä^˝8 ˚` ÚĢ( ˚ ˛ ÇQ˝D ˚`Û¯)˙ܲ C∑d Nç»n1¶8˚`ı¯* ˙√˛ >D˙MJΩHîÔ`˚` 0ı¯)˘AÄ °D êMJ•(îFh˚``ÄıĢ,¸¿`¿ ]Éπt=Jù0d9Áp˚`@¿ˆ¯$¸¿0` ˛˙ ˜`0¿8‡ıĢ& ˝@0 ˛˙@˜`aÄpˆ¯¸    @  Î`√Ĉ¯ ˝
  9018. @ Î`ÜĈ¯¸@ Î`ÄıĢ¸ @ÅÄ Î` Ĉ¯¸¿‡¿ Î` ÄıĢ ˝@0p Î`0Ĉ¯¸    @ Î`0`Ĉ¯ ˝
  9019. @  Î``¿Ĉ¯¸@?Ρ‡¡ÄÄıĢ¸ @ÉÄΡ‡ɲĈ¯¸¿˛¿¿È˛ÄıĢ ˝@˛p`È ˛Ĉ¯¸    @˛0È˛Ĉ¯ ˝
  9020. @˛ Í00˛Ĉ¯¸@˛Í‡`˛ÄıĢ¸ @˛ÉÍ¿¿˛Ĉ¯¸¿˝¡ÄÎIJÄıĢ ˝@˝`‡Î ˝Ĉ¯¸    @˝8`Î ˝Ĉ¯ ˝
  9021. @˝ @νĈ¯ ¸@˝¿˘¿Ĉ˝ÄıĢ#¸ @˝Ģ¿Ä0˘7¸˝Ĉ¯¸¿ÙÁΩ˚wx˘<¸ÄıĢ ˝@Ùʘ˘ˇˇ∞ÛĈ¯¸    @Ù6˜¡é«∞ÛĈ¯ ˝
  9022. @Ù7Ω¯¸∏ÛĈ¯¸@Û0ÔÄıĢ¸ @Û0ÔĈ¯¸¿flÄıĢ ˝@flĈ¯¸    @¸?Ρ¿¸Ĉ¯ ˝
  9023. @¸Í"`¸Ĉ¯¸@¸ Î`¸ÄıĢ¸ @¸ Î`¸Ĉ¯¸¿¸(¯àûà∏˜à‡¸ÄıĢ  ˝@¸ ¯0˜`¸Ĉ¯¸    @¸ ¯wª˜`¸Ĉ¯ ˝
  9024. @¸˜">˛ˇ˜"`¸Ĉ¯¸@¸ ¯Δ˛˜`¸ÄıĢ¸ @¸ ¯æ˜`¸Ĉ¯¸¿¸(˜àéé˜à‡¸ÄıĢ ˝@¸ ˜ ˜`¸Ĉ¯¸    @¸ Î`¸Ĉ¯ ˝
  9025. @¸Í"`¸Ĉ¯¸@¸ Î`¸ÄıĢ¸|p¸?Ρ‡¸Ĉ¯¸8∞¸ Î`¸ÄıĢ ˝`¸ Î`¸Ĉ¯¸¿¸ Î`¸Ĉ¯ ˝ĸ Î`¸Ĉ¯¸˚ Î`¸ÄıĢı ¸˝¯`Ô¯ı ¸IJ"¯`ÓĢ ˆ ¸'FÜ“7À˘`Ô¯ı ¸¶•OíJÔ∞˘`Ô¯ò@@˜@˜œ*! ˆ ¸¶•IäJ#, ˘`Ô¯ı ¸•Gå2Î∏˘`ÓĢı ¯ı`Ô¯ı ¯ı`ÓĢ ˆ Î`Ô¯ı ¸
  9026. 3Δ;Δp˚`Ô¯ ˆ ¸
  9027.     LÄ)D§)Ä˚`Ô¯ı ¸
  9028. LÄ)t§!‡˚`ÓĢı ¸
  9029. LÄΔ §Δ˚`Ô¯ı ¸
  9030.     LÄ    )L§(ê˚`ÓĢ ˆ ¸
  9031. 3Δ3œ`˚`Ô¯ı Î`Ô¯ ˆ Î`Ô¯ı Î`˘ˇ¯¯Ä˘˘ˇÄ Î`Ä˙ ˘¯˘¿ Î `Ä@Ä Ä ‡˙Ģ# Ôº˝=ˇ¿ Î `Ä 3 0˚¯$ ˺`ÄzΩ/¿?Ρ ‡ÄDD@ ˚¯#  ˺`ÄzΩ/¿Ρ‡Ä 3˝ ˚¯ 
  9032. ˺N≥c2ΩÔ¿Á
  9033. ÄLÄåû¿ ˙Ģ
  9034. ˺.≤c2Ω¿ÁÄ˙ ˚¯
  9035. Ôºn≥{2Ωˇ¿Á˘ˇ¸˙Ģ ˘¿ÁÄ˚ ˚¯˘ˇ¿ÁÄ˚ ˚¯ ˙L¿ÁÄ˚ ˚¯˙^¿Á
  9036. Äê ˙Ģ˙s¿Á
  9037. ÄÄ! ˚¯ 
  9038. @w¿Á
  9039. Ä”%÷ ˙Ģ 
  9040.      @  T¿Á
  9041. Ä∑/> ˚¯ 
  9042. b·≥K0\¿Á
  9043. Ä∂'◊ ˚¯
  9044.      W¢gÔp¿ÁÄ˚ ˚¯
  9045. S°¶k‡@¿ÁÄ˚ ˙Ģ˙@¿ÁÄ˚ ˚¯˙@¿Á
  9046. Ć  ˙Ģ  IJ@¿Á
  9047. Ɔ ˚¯ 
  9048. Ä@@@¿Á
  9049. Äé¨≥ ˚¯ 
  9050.  ßÕ´DŸ@¿Á
  9051. ÄS\Ø ˚¯ 
  9052.     §í¨NªÄ@¿Á
  9053. ÄMX´Ä ˙Ģ
  9054. GçõFù¿@¿ÁÄ˚ ˚¯D¸@¿ÁÄ˚ ˙Ģ Ѹ@¿ÁIJ ˚¯˙@¿Á
  9055. Ä@ ˚¯ ˙@¿Á
  9056. ÄñcI ˚¯˙@¿Á
  9057. ÄfiÂÎÄ ˙Ģ˙@¿Á
  9058. Ä ◊√i¿ ˚¯˙@¿ÁÄ˚ ˙Ģ ˙@¿ÁÄ˚ ˚¯˙@¿ÁÄ˚ ˚¯ ˙@¿ÁÄ˚ ˚¯˙@¿ÁÄ˚ ˙Ģ˙@¿ÁÄ˚ ˚¯˙@¿ÁÄ˚ ˙Ģ ˙@¿ÁÄ˚ ˚¯˙@¿ÁÄ˚ ˚¯ ˙@¿ÁÄ˚ ˚¯˙@¿ÁÄ˚ ˙Ģ˙@¿ÁÄ˚ ˚¯˙@¿ÁÄ˚ ˙Ģ) 8˛@«¸Ò ˝¯Ä˚
  9059.  ¯* Bu¶t3@¿Ò     8Ä˚
  9060.  dį*  2kSTJ@¿Ò    ;¶,Ó Ä˚
  9061.  AùÚÊ`¯+ 
  9062. kULJ@¿Ò    &oæî`Ä˚  BR˙ü@Ģ+ qÎSH2@¿ÄÚ    ¶h–î@Ä˚
  9063.  ¸FR ò@¯-˝@¿ÄÚ
  9064. ªßéí@Ä˝ ¿ 9ízó@Ģò@@Ę@Ę*O!' ˝@¿ÄÒ"¸ @Äù4⁄å¿ ˚¯$˙@¿ÄÒ"¸ @Äö™ríÄ ˚¯$ ˛@¿ÄÎ @Äö™±íÄ ˚¯) “0@¿Ä@@Äz™q Ä ˙Ģ) u@@¿Ä@IJ ˚¯) ∑ @¿ÄgL‹n@IJ ˙Ģ(  rp@¿Ä    îfl(î@Ä˝ ˚¯%˙@¿Ä
  9065. î—î@Ä 0˛ ˚¯% ˙@¿Ä
  9066. gN‰d@Äm@˛ ˚¯$˙@¿ÄÔ@˛@ÄØ ˛ ˙Ģ$˙@¿ÄÔIJ@Äjp˛ ˚¯&¸ ‰Ä@¿Ä‡Ú@Ä˚ ˙Ģ. ˛˛+@@¿Äê  ¯BÄ@Ä˚ ˚¯.ÅflÄF¿@¿Äñ|6z…g¯@@Ä@Ä˚ ˚¯1 ¶GÛ‡I @¿ˇ‡ü>/3¢˘
  9067. rΔÊô‹ˇ¿Ä?˝ˇ ˚¯2¶LnF¿@¿Äô2(3â˘ÀÈIø0@Ä  ˙Ģ2fLwp@¿ÄÁ'‰w˘ÀH§Ã@Ä  ˚¯+ ôò¨ÿ@¿ÄÚrÁ'ü∏@Ä!çÑ:! ˙Ģ(  ;∏@¿ÄÒ¸ @Ä RDQ ˚¯( ÿ@¿ÄÒ¸ @Ä “D1 ˚¯+ ?Î<@¿Ä@DÚ @Ä 2D… ˚¯4 ¸@¿ÄÄ!@Ä˚aÄD@Ä!ÕÑ1 ˙Ģ60 D@¿ÄÏ–}…ÜtÕ¿˝‡ Ä
  9068. @Ä  ˚¯6å@¿Ä“®?+…MÚÄ˝z§8éˇò@Ä  ˙Ģ6 2(@¿Ä“®3*    MÄ˝àé$ë‘ä|@Ä  ˚¯5q@¿Äî…ΔtÓ@˝ Äí$üTä`@Ä?˝ˇ ˚¯1  b0@¿Ä˚˚yœ{Ê    LÜ\@Ä  ˚¯(  »±1¿@¿Ä˚Ú @Ä  ˙Ģ$ Ï«ƒ‚â@¿ÄÎ @Ä  ˚¯$ ì#ÀÅôÄ@¿ÄÎ @Ä ÌÑ9 ˙Ģ)  ” ~`@@¿ÄÒ&˝ @Ä íD)! ˚¯) 3 πÄ¿ÄÒ˝ @Ä “D ˚¯* ÿ˝\¿Ú?1æ«8⁄`Ä 2D$     ˚¯'˙T¿Úd˙kÈ%ı<0Ä ÕÑ1 ˙Ģ'˙w¿Ú¬+    %5 Ä  ˚¯'˙r«¯Úw9ÍÁ$ı¯Ä  ˙Ģ ˙^¿Ò¯Ä?˝ˇ ˚¯˙L¿Ò¯Ä˚ ˚¯ ˘ˇ¿Á˘ˇ¸˚¯˙@¿ÁÄ˚ ˙Ģ˙~¿ÁÄ˚ ˚¯˙f¿ÁÄ˚ ˙Ģ ˙~¿ÁÄ˚ ˚¯˙R¿ÁÄ˚ 0˚¯ ˙^¿ÁÄ˚ ‡˚¯˘ˇ¿Á˘ˇ¸Ä˙Ģ˘ˇ¿Á˙ˇ¸˘¯ Ä˘ Ã¯À¯ Ã¯ Ä˘À¯ Ä˘ Ã¯À¯ Ã¯ Ä˘À¯ Ä˘ 3¯ÀU¯¡¡ò@Ä¿˜Ä¿˜O*è!¡¡¡¡¡¡¡¡¡¡¡¡¡
  9069. #‡‡Ä»
  9070. ! @r@»
  9071. a@@»
  9072. a¿@$@»
  9073. íé$@»
  9074.  à$Ä»    ?¡s«¡¡¡¡¡"Ù p˛
  9075. ¿É‡ ‡" ê˛Ä˛
  9076.  Å ‡#ÖËŸ6
  9077. àèé¢5—±deg¡H¡qBÈoÄ·"ΔY"é(YU’Tí¿ä™ä BàÇ¢Ö*µ‡"
  9078. K'‚|í&K¢ûàß@ùíDàoƒéO&‡"éD¶*í/(Ω4Åu«å)Ç'ÁàTO‡" ãCé8‰“«I#ÅâÖ«≈E# ‡@˙—@˙—Ä˙ —¡¡(臿p@:HIJ@Ä8¿ÄÄ8Ä@Ê'D±@ @@ @˝@ÄÄ@Ê($ƒ©Ä;‚≤“í2Ëõ[Z;F^ã`Ωë—>â±» Rët∂ÓÊ($•*ÄMEEÔRUIM)©ÆMJ§ï†&í*≤Tî–î ÔRáZPÊ($,ÄIéIJdâíII)*…ë)% $¢Lñâ$ë$Jg'íéÊ($
  9079. HÄì»èî∂ø⁄ì“BCì◊Ì™`I¥UúΩ©1®"&¬Ê($ãi»“áäc$Jë"RR“âIDi$&÷I!gc#ü‰úÊ˝˛Ñı¯Ñ·˝˛Ñı¯Ñ·
  9080. ˘ÑÎÑ·¡¡˛@Ä@ÄF` ◊§@˝  ÄÄÇê ◊§èÎ.â∞ÛâAï‹ÍNA†Ñïsá"PŸ%òDTî—î
  9081. í∫†*T†„à~§
  9082. UËŸH∑Ñô$ê·8Ô”R•¿ÄH$√íÓHŸl·»˝©02 â%ÑT̃Q)`ñàêŸHæà©!Áùsô8h∂„cêΔGw`Ÿı ˚˛ÄŸı ˚˛ÄŸı ˚˛ÄŸ¡¡¡¡¡ò@¿Ú˜¿Ú˜è*¡!¡¡¡¡¡¡¡¡¡  ¿¿Õ  ÄbÄÕ bîàÄZ GïÄÏ`Œ gzîÄ≠]…*4†Œ íS8Å)IZr%Õ •†GRsDM`Œ ;8íåZ<#HàŒ ˛@à˛@à  ˛…¡¡‡!‡àwp?¿Ä÷ê ê" ÄÄ÷íÒ<õ:ÿâ    ‘"N± ¢˛À ‹◊•!b…MRiI
  9083. (<ÀR†$    ï ◊    AD IîJJ»DRW@),Ò%%◊a%2ì∂öí8xDtÑ`M∏:=™◊äCíq‹ë”–ÓT£ƒi-“)8◊¸à˛ ˛—¸à˛ ˛†—
  9084. ¸p˙¿œ¡¡ ˛@   §@$  §èÎ.K"  %òDT§"  H∑Ñô$"  l·»˝H"$  Hæà®àò ¡¡¡¡¡¡¡¡¡¡ò@@˜@˜¡*!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę*A!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜A*Å!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜Å*¡!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜¡*!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę*A!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜A*Å!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜Å*≥!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜¡*!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę*A!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜A*Å!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜Å*¡!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜¡*!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę*A!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜A*Å!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜Å*≥!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ˇAä@ˇ ˇˇˇˇ@
  9085. ˇ·ˇ‚7^
  9086. 4H\, Palatino&e.3+ä"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@äIntroduction to •)8 Apple Events4⁄ä˙(‡äW’ê)orking WT¿)$ith Object Specifiÿ )C
  9087. er Records
  9088. , (‡3-39
  9089. ˇˇˇˇˇˇˇˇ440lòÄ.B0oMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""B0oB0o$””””””””””””””””””””””””””””””òÄ
  9090. 60@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""60@60@˜˜˜˜˜˜˜˜˜˜˜˜˜
  9091. ˛ˇ˛ˇˇ ˇˇ˛ˇˇ     ˇˇˇ˙ˇ
  9092. ˛ˇˇˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜
  9093. 454+?òÄ
  9094. 56+@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""56+@56+@$˜˛˙ˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  9095. ˛ˇ˛ˇˇ˛¸ˇˇ˚ˇ˛˙ˇˇ˝˛ˇ˛
  9096. ˛ˇ˛ˇˇ
  9097. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  9098. ˛ˇ˛ˇˇ
  9099. ˛ˇ˛ˇˇ˛˙ˇ˜˝˝ˇˇ˛ˇ˚˝ˇ¸˛¸ˇˇ˜˝˛ˇ˛
  9100. ˛ˇ˛ˇˇ
  9101. ˛ˇ˛ˇˇ˝ˇˇ˛˜˝¸ˇ
  9102. ˛ˇ˛ˇˇ˛¸ˇˇ˜˝˛ˇ˛
  9103. ˛ˇ˛ˇˇ
  9104. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˜˝¸ˇ
  9105. ˛ˇ˛ˇˇ˝˛ˇ˛
  9106. ˛ˇ˛ˇˇ
  9107. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  9108. ˛ˇ˛ˇˇ
  9109. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  9110. ˛ˇ˛ˇˇ
  9111. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  9112. ˛ˇˇˇˇ
  9113. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  9114. ˛ˇˇˇ
  9115. ˛ˇˇˇ
  9116. ˛ˇˇˇ
  9117. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  9118. ˛ˇˇˇˇ
  9119. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  9120. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  9121. ˛ˇˇˇˇ
  9122. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähê(eäTµ¿°dONLNd\èh)o add an object specifir`°dONLNd\Òh)ber rs†°dONLNd\h)ecorË°dONLNd \h3)d to an Ɔ°dONLNd(\3h)!+Apple event as one of its parameters, your °dONLNdSiäu›(räapplication must fiû °dONLNdfi›uÛ)Srst cr≈`°dONLNdliÛuP)eate the object specifi6†°dONLNdÉiQu`)^er r7‡°dONLNdái`ur)ecor¨@°dONLNdãiru})d. »°dONLNdéi}uç) “Cr§°dONLNdëiçuÊ)eating Object Specifi†@°dONLNd¶iÁuÚ)Zer °dONLNd©väÇ£(äRecor¢`°dONLNdÆv£Ç¥)ds,”{ °dONLNd≤vµÇ) which begins on ÎÄ°dONLNd√vÇ)Mpage Δ`°dONLNd»vÇ,)6-55@°dONLNdÃv-Çm), describes the ï °dONLNd‹vmÇ’)@Apple Event Manager râ°dONLNdÒv’Ç)h outines for °dONLNd˝Éäèí(åäcrµ@°dONLNdˇÉíèË)eating object specifiH`°dONLNdÉÈè¯)Wer rI†°dONLNdɯè
  9123. )ecoræ°dONLNdÉ
  9124. è)ds.°dONLNd ïä°ê(ûäTµ¿°dONLNd!ïè°ö)o rp@°dONLNd$ïõ°…)
  9125. espond to 5 °dONLNd.ï…°v).'Apple events that include object specifiP °dONLNdVïv°Ö)≠er rQ`°dONLNdZïÖ°ó)ecor≈¿°dONLNd^ïó°È)ds, your applicatioÇ`°dONLNdqïÍ°)S    n should °dONLNdz¢äÆê(´äuá °dONLNd{¢êÆî)sƒ °dONLNd|¢îÆû)e tP °dONLNd¢üÆÕ)
  9126. he standarú†°dONLNdâ¢ÕÆÛ).    d classifi °dONLNdì¢ÙÆB)'cation system for ®¿°dONLNd•¢AÆ∑)MApple event objects and pr4‡°dONLNdø¢∏Æ)wovide functions that °dONLNd‘Ø䪈(∏äTcan locate those objects within your application or its documents. The next section °dONLNd(ºä»*summarizes the classifiÚ‡°dONLNd?º»)f
  9127. cation of ?¿°dONLNdIº»è))Apple event objects as defiF¿°dONLNddºè»Ω)v ned in the †°dONLNdoºæ»Ú)/ Apple Event °dONLNd{…ä’Ù(“äRegistry: Standard Suites.(`°dONLNdï…ı’˜)k 
  9128. ˙H4˚H ¸ä¸
  9129. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNdóÎä˙—(ˆä The ClassifiH°dONLNd£Î“˙    )H
  9130. cation of ≥°dONLNd≠Î˙Ñ)6Apple Event Objectsˇˇˇˇˇˇ€r(ˆ3
  9131. °dONLNd¬äê(
  9132. äTµ¿°dONLNd√èü)o cr‡Ä°dONLNd«ü√)    eate or r„@°dONLNd–√)$esolve object specifiı‡°dONLNdÂ))Wer r˜ °dONLNdÈ);)ecorkÄ°dONLNdÌ<Ø)ds, your application shoulχ°dONLNdØΩ)sd uè¿°dONLNd
  9133. æ¬)sÿ°dONLNd ¬Ã)e tX¿°dONLNdÕ˜)
  9134. he classifi;Ä°dONLNd¯)+cation °dONLNd äï(äof k°dONLNd#ïˇ) Apple event objects defiµ°dONLNd;ˇ0)j ned by the fl‡°dONLNdF0Ã)1%Apple Event Registry: Standard SuitesÕ†°dONLNdkÕœ)ù.M†°dONLNdl–    ) This section °dONLNdzä'h($ä2summarizes the concepts that underlie that classifi\Ä°dONLNd≠i'™)flcation system. y‡°dONLNdº™'∞)AY:`°dONLNdΩ∞')ou should have a copy °dONLNd”(ä4•(1äof the &¿°dONLNd⁄(¶4B)%Apple Event Registry: Standard SuitesÄ°dONLNdˇ(C4Ç)ù available for rΔ °dONLNd(Ç4í)?eferr@°dONLNd(ì4)ence purposes while you °dONLNd+5äAç(>ärE°dONLNd,5éA‘)ead this section.°dONLNd>GäSê(PäY@Ä°dONLNd?GêS¨)Aou do not need to write your application in an object-oriented pr †°dONLNdÄG≠S(P≠ogramming language °dONLNdìTä`û(]äin orÙ@°dONLNdòTû`‡)der to support ò†°dONLNdßT‡`ç)B'Apple event objects in your application_Ä°dONLNdŒTé`º)Æ    . HoweverÏ °dONLNd◊Tª`Ï)- , you must °dONLNd‚aämê(jäuá °dONLNd„aêmÌ)nderstand the classifiB °dONLNd˘aÓmÆ)^-cation system described in this section in or7`°dONLNd&aÆmÌ)¿der to classify ܇°dONLNd6aÌm
  9135. )?Apple °dONLNd<näzæ(wä event object`°dONLNdHnøz»)5s i¬¿°dONLNdKn»zX)    !n your application and to write rÒ`°dONLNdlnXz )ê*outines that can locate them on the basis °dONLNdñ{äá>(Ñä)of information contained in object specifi`°dONLNd¿{?áN)µer r†°dONLNdƒ{Ná`)ecorã°dONLNd»{`áj)ds„¿°dONLNd {jál)
  9136. .
  9137. •H¨4¶H¨ ßäß
  9138. ˇ·ˇ‚7^ °dONLNdÃòä¶ì(¢äO’Ä°dONLNdÕòì¶⁄)    bject Classesˇˇˇˇˇˇ‘@(¢3
  9139. °dONLNd‹¨ä∏0(µä'Except for the concept of inheritance, z°dONLNd¨0∏í)¶Apple event objects arñ‡°dONLNd¨í∏•)be dif
  9140. ‡°dONLNd¨¶∏≤)ferÌ`°dONLNd!¨±∏») ent frc†°dONLNd'¨…∏
  9141. )om the objects °dONLNd6πä≈˚(¬äused in object-oriented pr·†°dONLNdPπ˚≈c)qogramming languages. — °dONLNdeπc≈≈)hApple event objects arÓ°dONLNd{π≈≈)be distinct items in °dONLNdèΔä“ú(œä?a server application or any of its documents that can be specifiZÄ°dONLNdœΔù“˛(œùed by an object specifif@°dONLNdÊΔ˛“    )aer °dONLNdÈ”äflç(‹ärE°dONLNdÍ”éfl†)ecorπ`°dONLNdÓ”†fl¡)d in an Ň°dONLNdˆ”¡flt)!*Apple event sent by a client application. Ù†°dONLNd ”tfl÷)≥Apple event objects arÄ°dONLNd6”◊fl )ce often, but °dONLNdC‡äÏ((Èä%not always, items that a user can dif‹†°dONLNdh‡(Ï4)ûferø °dONLNdk‡4Ï) .entiate and manipulate within an application, °dONLNdôÌä˘æ(ˆä such as wor‘@°dONLNd§Ìæ˘º)49ds, paragraphs, shapes, windows, or style formats. Every h °dONLNd›ÌΩ˘)ˇApple event object °dONLNd˙äΔ(äcan be classifi⁄†°dONLNdˇ˙ΔÍ)<ed accor[°dONLNd˙Î~)%#ding to its object class, which defiFÄ°dONLNd+˙)î%nes both its characteristics and its °dONLNdPä±(äbehavior‹°dONLNdX∞;)&#. The object classes listed in the ¿°dONLNd{<ÿ)å%Apple Event Registry: Standard Suites˚Ä°dONLNd†ÿ‰)ú prB†°dONLNd£Â)ovide a °dONLNd´ä Í(ämethod of describing ο°dONLNd¿Í Q)`Apple event objects thaW`°dONLNd◊R \)ht a¿°dONLNd⁄] õ) ll applications^`°dONLNdÈõ ‚)> can understandΩ°dONLNd¯‚ )G    . Object °dONLNd    !ä-‹(*äclasses permit mor$‡°dONLNd    !›-Í)Se fl{@°dONLNd    !Í-Ê):exibility than simple descriptor types; for example, a wor∑ °dONLNd    Q!Ê-)¸    d can be °dONLNd    Z.ä:ö(7ädefir °dONLNd    ^.õ:D)(ned as a simple string, or it can be defiÊ °dONLNd    á.D:p)©
  9142. ned as an Ç°dONLNd    ë.p:¯),Apple event object with specifi)°dONLNd    ∞.˘:ˇ)âc °dONLNd    ≤;äGƒ(Dächaracteristic„Ä°dONLNd    ¿;ƒGŒ):s s›Ä°dONLNd    √;œG) uch as font or stylü`°dONLNd    ÷;G%)Oe.
  9143. UHc4VHc    °dONLNd    ŸTä_ù(\äNote
  9144. ˇ·ˇ‚7^
  9145. °dONLNd    fiaämÆ*The defi≠‡°dONLNd    ÊaÆmI)$%nition of an object class only specifiC@°dONLNd
  9146. aJm°)úes conventions that °dONLNd
  9147.  mäyJ(vä)determine how applications should handle n`°dONLNd
  9148. ImJy∑)¿Apple event objects that °dONLNd
  9149. byäÖfi(Çäbelong to that class@°dONLNd
  9150. vyfiÖ‡)T.p@°dONLNd
  9151. wy·Ö„) ¬†°dONLNd
  9152. xy„ÖÈ)YÉ °dONLNd
  9153. yyÈÖˇ)our ar`°dONLNd
  9154. ~yÖp)pplication must make sur9†°dONLNd
  9155. ñyqÖ∫)qe that it uses the °dONLNd
  9156. ©Öäë”(éäconventions corrD`°dONLNd
  9157. πÖ‘ë )Jectly; they arȆ°dONLNd
  9158. «Ö ë;)8 e not enfore‡°dONLNd
  9159. “Ö<ëk)0 ced by the —@°dONLNd
  9160. ›Ökë•)/ Apple Event °dONLNd
  9161. Èëäù±(öäManagerT†°dONLNd
  9162. ë±ù≥)'.,Zapf Dingbats‘†°dONLNd
  9163. Úî∏úæ)uˇÒ@ˇ ˇˇˇˇ@
  9164. ˇ·ˇ‚7^
  9165. 4*\¯, Palatino&e.3+l"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@lIntroduction to •)8 Apple Events4⁄*˙¯
  9166. (‡*3-40    )BW’ê)orking WT¿)$ith Object Specifiÿ )C
  9167. er Records4^*¿¯
  9168. °dONLNd\lh‡(elEach object class is identifi| °dONLNd\·h)u ed by a fourç¿°dONLNd)\hÿ)5.-character object class ID, which can also be °dONLNdWiluo(rlrE°dONLNdXipu~)epr’¿°dONLNd[i~uŸ)Qesented by a constant. Constants for object classes always begin with the letter ,
  9169. Courier\†°dONLNd¨i⁄u‡(r⁄c\@°dONLNd≠i‡uÂ). °dONLNd∞{lár(ÑlT†¿°dONLNd±{ráê)he defi≠‡°dONLNd∏{êá) nition of an object class specifi‡°dONLNdŸ{á.)Ües its s@°dONLNd‡{.á])
  9170. superclass£@°dONLNdÍ{]á‘)/, which is the object class fr4°dONLNd{’áÂ)xom °dONLNd àlîë(ëlwhich a “`°dONLNdàëî∑)%subclass¿°dONLNdà∏î)' (the class being defiƇ°dONLNd1àîº)Y)ned) inherits some of its characteristics
  9171. `°dONLNdZàΩî¬)¨. °dONLNd\ïl°(ûl(Characteristics can also be inherited frÂ`°dONLNdÑï°°)®"om special object classes, called H`°dONLNd¶ï¢°»)é    abstract °dONLNdØ¢lÆß(´lsuperclasses,†@°dONLNdº¢ßÆΔ); that arª`°dONLNdƒ¢ΔÆ)e used only in defi¿°dONLNd◊¢Æ∑)R&nitions of object classes and do not r@Ä°dONLNd˝¢∑ÆŸ)ü    efer to ró °dONLNd¢ŸÆË)"eal °dONLNd
  9172. Ølªö(∏lEApple event objects. The pattern of inheritance among object classes B@°dONLNdOØõª—(∏õis called the °dONLNd]ºl»á(≈lobjectB‡°dONLNdcºà»ä) ¬‡°dONLNddºä»)class inheritance hierarchyq@°dONLNdº»)y.Ò@°dONLNdĺ») q@°dONLNdź» )FigurD°dONLNdܺ »9)e 3-15·Ä°dONLNdåº9»Ω) shows a portion of this hierar¿°dONLNd´ºæ»Õ)Öchy«¿°dONLNdƺû‰). The °dONLNd¥…l’™(“labstract superÅ °dONLNd¬…™’¡)>class ”¿°dONLNd»…¡’Î)cObject— °dONLNdœ…Î’Y)* is at the top of the hierar2°dONLNdÎ…Z’d)ochs†°dONLNdÌ…d’q)
  9173. y aÇ¿°dONLNd…q’ö)
  9174. nd is ther7†°dONLNd˙…õ’¨)*efor膰dONLNd˛…¨’ˆ)e the only object °dONLNd÷l‚œ(fllclass that has no super“‡°dONLNd'÷œ‚Ë)cclass. G °dONLNd.÷È‚<)At the next level ar`°dONLNdB÷=‚D)Te M°dONLNdD÷D‚b)cTextK °dONLNdI÷b‚ô), which is a r‡°dONLNdW÷ö‚Ó)8egular object class, °dONLNdl„lÔ(Ïland Ì °dONLNdp„ÔŸ)cOpenableObjectÁÄ°dONLNd„ŸÔP)Z, which is an abstract super±¿°dONLNdõ„QÔa)xclasG`°dONLNdü„bÔv)s. Bo†°dONLNd§„wÔÇ)th ©`°dONLNdß„ÇÔä) arn`°dONLNd©„ãÔí)    e ∏°dONLNd´„íÔÕ)subclasses of °dONLNdπl¸ñ(˘lcObject}`°dONLNd¿ñ¸ƒ)*
  9175.  and super?`°dONLNd ≈¸§)/5classes for their own subclasses. The object classes µ°dONLNdˇ§¸¬)flcWord≥ °dONLNd¬¸«), ≥ °dONLNd«¸Â)cItem±@°dONLNd ¸Í), °dONLNd˝l    (land Ì °dONLNd˝    ù)cCharÎ@°dONLNd˝ù    ®) ar0@°dONLNd˝©    ˘) e all subclasses of 9°dONLNd-˝˘    )PcTex7Ä°dONLNd1˝    )t7 °dONLNd2˝    D) . SimilarlyR`°dONLNd=˝C    H),, R`°dONLNd?˝H    N)cR°dONLNd@˝N    r)Windowd¿°dONLNdF˝q    v)#, d¿°dONLNdH˝v    ¨)    cDocumenta`°dONLNdQ˝¨    ƒ)6, and ŒÄ°dONLNdW˝ƒ    ‚)cFileÆ°dONLNd\˝‚    Ì) ar†°dONLNd_˝Ó    ı) e °dONLNda
  9176. lß(lsubclasses of Ó`°dONLNdo
  9177. ß);cOpenableObjectË¿°dONLNd~
  9178. ‰)Z9. Every object class inherits all the characteristics of °dONLNd∑l#v( litsÁ¿°dONLNd∫v#x)
  9179.  g¿°dONLNdªy#í)super<†°dONLNd¿í#¢)clas“@°dONLNdƒ¢#≠)s aè@°dONLNd«Æ#e) +nd can also add characteristics of its own.
  9180. E*V¯4F*V¯"F*]
  9181. ˇ·ˇ‚7^    °dONLNdÛ;lFú(Cl Figure 3-15°dONLNdˇ;ÆF$)BSuperclasses and subclasses
  9182. °dONLNdl%}("lHer`°dONLNd}%ç)e arn†°dONLNd#ç%) e some of the object classes defi †°dONLNdD%Z)äned for the CorÏ@°dONLNdSZ%y)Ce suite:    °dONLNd\2l=Ñ(:lClass°dONLNdb2º=fl)PClass ID°dONLNdk2Ù=%)8 Description
  9183. °dONLNdx@lLä(IlcChar°dONLNd~@ºL‡)P'cha '°dONLNdÖ@ÙL˙)8Tµ¿°dONLNdÜ@˘L5)ext characters°dONLNdñPl\¢(Yl    cDocument°dONLNd†Pº\‡)P'docu'°dONLNdßPÙ\U)8Macintosh documents°dONLNdº`llä(ilcFile°dONLNd¬`ºl‡)P'cfil'°dONLNd…`Ùl*)8 Macintosh fir@°dONLNd’`+l6)7les°dONLNd⁄pl|®(yl
  9184. cSelection°dONLNdÂpº|‡)P'csel'°dONLNdÏpÙ|v)8User or application selections°dONLNd Älåä(âlcText°dONLNdĺå‡)P'ctxt'°dONLNdÄÙåH)8Series of characters°dONLNd/êlúñ(ôlcWindow°dONLNd7êºú‡)P'cwin'°dONLNd>êÙú)8Standar¥@°dONLNdEêúx)"d Macintosh windows
  9185. U*¯4V*¯
  9186. V*¯4U)V*ò@@˜@˜V*ñ!¡¡?Àˇ‡˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘ò@@Ę@Ęñ*÷!?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘ò@Äú˜Äú˜÷*Ú!?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘òů@˜HHÎ’î"IJˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  9187. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêê@˜V*ñ!'ÅÅÅâÅÅÅâæÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎσÎÅÅÅ ÎÏ≈ÏÅÅÅ ÏÎ≈ÎÅÅÅ ÎÎ≈ÎÅÅÅ ÎÏ≈ÎÅÅÅ ÎÎ≈ÏÅÅÅ ÏÎ≈ÎÅÅÅ ÎÏ≈ÏÅÅÅ ÏÎ≈ÎÅÅÅ ÎÎ≈ÎÅÅÅ ÎÏ≈ÎÅÅÅ ÎÎ≈ÏÅ”ßˇÅ“ÏÎ≈ÎÅ”ˇ©ˇˇÅ”ÎÏ≈ÏÅ”ˇ©ˇˇÅ”ÏÎ≈ÎÅ”ˇ©ˇˇÅ”ÎÎ≈ÎÅ”ˇ©ˇˇÅ”ÎÏ≈ÎÅ”ˇ©ˇˇÅ”ÎÎ≈ÏÅ”ˇ©ˇˇÅ”ÏÎ≈ÎÅ”ˇ©ˇˇÅ”ÎÏ≈ÏÅ”ˇ©ˇˇÅ”ÏÎ≈!ÎÅ”ˇ‹ˇˇ˚ˇ◊ˇˇÅ”ÎÎ≈$ÎÅ”ˇ·˛ˇ˛ˇÌˇÂˇˇÅ”ÎÏ≈2ÎÅ”ˇÊ¸ˇ˛ˇ˛ˇ˛ˇ˛ˇ˛˘ˇÁˇˇÅ”ÎÎ≈=ÏÅ”ˇÁˇ˛ˇˇ˛ˇˇˇ˛ˇˇ˛ˇˇ˛ˇˇÂˇˇÅ”ÏÎ≈;ÎÅ”ˇÁˇ˝ˇ˛ˇˇˇ˛ˇ¸ˇˇ¸ˇˇËˇˇÅ”ÎÏ≈7ÏÅ”ˇÊ˝ˇ˛ˇ˝ˇ˝ˇ˛ˇˇ˛˝ˇˇˇÁˇˇÅ”ÏÎ≈ÎÅ”ˇ‘ˇ◊ˇˇÅ”ÎÎ≈ÎÅ”ˇ÷ˇˇ÷ˇˇÅ”ÎÏ≈ÎÅ”ˇ©ˇˇÅ”ÎÎ≈ÏÅ”ˇ©ˇˇÅ”ÏÎ≈ÎÅ”ˇ©ˇˇÅ”ÎÏ≈ÏÅ”ˇ©ˇˇÅ”ÏÎ≈ÎÅ”ˇ©ˇˇÅ”ÎÎ≈ÎÅ”ˇ©ˇˇÅ”ÎÏ≈ÎÅ”ˇ©ˇˇÅ”ÎÎ≈ÏÅ”ˇ©ˇˇÅ”ÏÎ≈ÎÅ”ˇ©ˇˇÅ”ÎÏ≈ÏÅ”ˇ©ˇˇÅ”ÏÎ≈ÎÅ”ˇ©ˇˇÅ”ÎÎ≈ÎÅ”¶ˇÅ”ÎÏ≈ÎÅ“ßˇÅ”ÎÎ≈ÏÅßˇÅ•ÏÎ≈ÎÅßˇÅ•ÎÏ≈ÏÅßˇÅ•ÏÎ≈ÎÅßˇÅ•ÎÎ≈ÎÅßˇÅ•ÎÏ≈ÎÅßˇÅ•ÎÎ≈ÏÅßˇÅ•ÏÎ≈ÎÅßˇÅ•ÎÏ≈ÏÅßˇÅ•ÏÎ≈ÎÅßˇÅ•ÎÎ≈ÎïÅˇ¶ˇëÎÏ≈ÎñˇˇÅ®ˇˇíÎÎ≈ÏñˇÅ¶ˇíÏÎ≈ÎóˇˇÅ¶ˇíÎÏ≈ÏóˇÅ•ˇíÏÎ≈ÎóˇÅ•ˇíÎÎ≈ÎóˇÅ•ˇíÎÏ≈ÎóˇÅ•ˇíÎÎ≈ÏóˇÅ•ˇíÏÎ≈ÎóˇÅ•ˇíÎÏ≈òů@ĘHHÎ’ê#IJˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  9188. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêê@Ęñ*÷!'ÏóˇÅ•ˇíÏÎ≈ÎóˇÅ•ˇíÎÎ≈ÎóˇÅ•ˇíÎÏ≈ÎóˇÅ•ˇíÎÎ≈ÏóˇÅ•ˇíÏÎ≈ÎóˇÅ•ˇíÎÏ≈Ï√®ˇÅ˛ßˇæÏÎ≈Î√ˇ™ˇˇÅˇ©ˇˇøÎÎ≈Î√ˇ™ˇˇÅˇ©ˇˇøÎÏ≈Î√ˇ™ˇˇÅˇ©ˇˇøÎÎ≈Ï√ˇ™ˇˇÅˇ©ˇˇøÏÎ≈Î√ˇ™ˇˇÅˇ©ˇˇøÎÏ≈Ï√ˇ™ˇˇÅˇ©ˇˇøÏÎ≈Î√ˇ™ˇˇÅˇ©ˇˇøÎÎ≈Î√ˇ™ˇˇÅˇ©ˇˇøÎÏ≈Î√ˇ™ˇˇÅˇ©ˇˇøÎÎ≈Ï√ˇ™ˇˇÅˇ©ˇˇøÏÎ≈2Î√ˇ™ˇˇÅˇ‹ˇˇ˝ˇˇÛˇˇ˚ˇÌˇˇøÎÏ≈?Ï√ˇ›¸ˇıˇ‡ˇˇÅˇˆ˛ˇÈˇ¸ˇ¯˛ˇ˛ˇÌˇ˚ˇˇøÏÎ≈lÎ√ˇ·¸ˇˇˇ˛ˇˇˇ˚ˇ‚ˇˇÅˇ˚¸ˇ˛¸ˇ˛˛ˇ˝ˇ˝ˇ˛˛ˇ˛ˇ˝˛ˇˇ˛ˇ˛ˇ˛ˇ˛ˇ˛˘ˇ˝ˇˇøÎÎ≈âÎ√ˇ‚ˇ˛ˇˇˇ˛ˇ˛ˇˇ‡ˇˇÅˇ¸ˇ˛ˇˇ˛ˇˇˇˇ˛ˇˇˇ˛ˇˇˇˇ˛ˇ˛ˇˇ˛ˇˇˇ˛ˇˇ˛ˇˇ˛ˇˇ˚ˇˇøÎÏ≈~Î√ˇ‚ˇ˚ˇ¸ˇ
  9189. ˇˇˇˇ„ˇˇÅˇ¸ˇ˝ˇ˛ˇˇˇ¸ˇˇˇˇˇˇˇˇ˛˚ˇ˛ˇˇˇ˛ˇ¸ˇˇ¸ˇˇ˛ˇˇøÎÎ≈wÏ√ˇ·˝ˇ˛ˇ˛ ˇˇˇˇˇˇˇˇ‚ˇˇÅˇ˚˝ˇ˛ˇ˛ˇ˝ˇˇ˛ˇˇˇ˘ˇ¸ˇ˛ˇˇ˛ˇ˝ˇ˝ˇ˛ˇˇ˛˝ˇˇˇ˝ˇˇøÏÎ≈'Î√ˇ™ˇˇÅˇÒˇœˇÌˇˇøÎÏ≈(Ï√ˇ™ˇˇÅˇÚ˛ˇ“ˇˇÏˇˇøÏÎ≈Î√ˇ™ˇˇÅˇ©ˇˇøÎÎ≈Î√ˇ™ˇˇÅˇ©ˇˇøÎÏ≈Î√ˇ™ˇˇÅˇ©ˇˇøÎÎ≈Ï√ˇ™ˇˇÅˇ©ˇˇøÏÎ≈Î√ˇ™ˇˇÅˇ©ˇˇøÎÏ≈Ï√ˇ™ˇˇÅˇ©ˇˇøÏÎ≈Î√ˇ™ˇˇÅˇ©ˇˇøÎÎ≈Î√ˇ™ˇˇÅˇ©ˇˇøÎÏ≈Î√ˇ™ˇˇÅˇ©ˇˇøÎÎ≈Ï√ߡŶˇøÏÎ≈ά®ˇÅ˛ßˇøÎÏ≈ÏñˇÅ•ˇìÏÎ≈ÎñˇÅ•ˇìÎÎ≈ÎñˇÅ•ˇìÎÏ≈ÎñˇÅ•ˇìÎÎ≈ÏñˇÅ•ˇìÏÎ≈ÎñˇÅ•ˇìÎÏ≈ÏñˇÅ•ˇìÏÎ≈ÎñˇÅ•ˇìÎÎ≈ÎñˇÅ•ˇìÎÏ≈ÎñˇÅ•ˇìÎÎ≈Ï‘Ñˇ¢Éˇ—ÏÎ≈&Î÷˛ˇƒˇƒˇˇ§ˇˇ√ˇƒˇˇ“ÎÏ≈%Ï÷ˇ¬ˇ√ˇˇ•ˇ¬ˇ√ˇˇ”ÏÎ≈%Î◊ˇˇ¬ˇ¬ˇ¶ˇˇ¬ˇ¬ˇ”ÎÎ≈#Î◊ˇ¡ˇ¬ˇ¶ˇ¡ˇ¬ˇ”ÎÏ≈#Î◊ˇ¡ˇ¬ˇ¶ˇ¡ˇ¬ˇ”ÎÎ≈#Ï◊ˇ¡ˇ¬ˇ¶ˇ¡ˇ¬ˇ”ÏÎ≈#Î◊ˇ¡ˇ¬ˇ¶ˇ¡ˇ¬ˇ”ÎÏ≈#Ï◊ˇ¡ˇ¬ˇ¶ˇ¡ˇ¬ˇ”ÏÎ≈#Î◊ˇ¡ˇ¬ˇ¶ˇ¡ˇ¬ˇ”ÎÎ≈#Î◊ˇ¡ˇ¬ˇ¶ˇ¡ˇ¬ˇ”ÎÏ≈#Î◊ˇ¡ˇ¬ˇ¶ˇ¡ˇ¬ˇ”ÎÎ≈#Ï◊ˇ¡ˇ¬ˇ¶ˇ¡ˇ¬ˇ”ÏÎ≈#Î◊ˇ¡ˇ¬ˇ¶ˇ¡ˇ¬ˇ”ÎÏ≈#Ï◊ˇ¡ˇ¬ˇ¶ˇ¡ˇ¬ˇ”ÏÎ≈#Î◊ˇ¡ˇ¬ˇ¶ˇ¡ˇ¬ˇ”ÎÎ≈#Έ»ˇˆ«ˇˆ»ˇÊ»ˇˆ«ˇˆ»ˇÙÎÏ≈AΈˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇÁˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇıÎÎ≈òůÄú˜HHÎ’î$IJˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  9190. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêêÄú˜÷*Ú!'Aψˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇÁˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇıÏÎ≈AΈˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇÁˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇıÎÏ≈Aψˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇÁˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇıÏÎ≈AΈˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇÁˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇıÎÎ≈AΈˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇÁˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇıÎÏ≈AΈˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇÁˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇıÎÎ≈Aψˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇÁˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇıÏÎ≈AΈˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇÁˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇıÎÏ≈]ψˇ€ˇˇÚˇˇ˜ˇ…ˇˇ˜ˇÈˇˇ‰ˇˇÁˇÏˇ˜ˇˇÏˇˇ˜ˇ…ˇˇ˜ˇÁˇ˛ˇˇÍˇˇıÏÎ≈yΈˇÓˇˇˇˇÛˇÚˇˇ˜ˇÌ¸ˇˇ‰ˇˇ˜ˇÌ˝ˇˇ‰ˇˇÁˇÙˇˇˇˇÛˇÏˇˇ˜ˇ˘˝ˇfiˇ˘ˇˇ˜ˇÓ˚ˇ˚ˇÍˇˇıÎÎ≈fiΈˇÚ¸ˇ˝˝ˇˇˇˇˇ˝ˇÚˇˇ˜ˇÚ˝ˇ˛ˇ˝ˇ˛ˇ˛ˇˇÒˇˇ˜ˇÚ¸ˇ˛ˇ˛ˇ˝ˇˇˇˇˇÚˇˇÁˇ¯¸ˇ˝ˇˇˇ˝ˇ˝ˇ˛ˇˇˇˇˇ¯ˇˇ˜ˇ˝˝ˇˇˇ˛ˇ˚ˇ¸ˇˇ˛ˇ˝ˇ˝ˇ˚ˇˇ˜ˇÛ˝ˇˇ˛˛ˇ˝ˇ˝˛ˇÒˇˇıÎÏ≈    ΈˇÛˇ˛ˇˇˇˇ˛ˇˇˇˇ˛ˇÚˇˇ˜ˇÛˇ˛ˇ˛ˇ˛ˇ˛ˇ˛ˇˇˇˇÚˇˇ˜ˇÛˇ˛ˇˇ¸ˇˇ˛ˇˇˇˇˇÁˇ˘ˇ˛    ˇˇˇˇˇ˛ˇˇˇ˛ˇˇ˛ˇˇˇ˜ˇˇ˜ˇ˛ˇ˛ˇˇˇˇ˛ˇˇ˛ ˇˇˇˇˇˇˇ˛ˇˇˇˇ˘ˇˇ˜ˇÙˇ˛ˇ˛ˇ˛ˇ˝ˇ˛ˇ˛ˇÚˇˇıÎÎ≈ÈψˇÛˇ¸¸ˇ˛ˇˇ˛ˇˇˇÚˇˇ˜ˇÛˇ˙ˇ˛ˇ˚ˇˇˇˇÚˇˇ˜ˇÛˇ˝ˇ˛ˇˇˇˇˇˇÔˇˇÁˇ˘ˇ¸˝ˇ˛ˇ˛
  9191. ˇˇˇˇˇˇ˛ˇ˝ˇ˜ˇˇ˜ˇ˛ˇ¸ˇˇˇ˛ˇˇ¸ˇˇˇˇ˚ˇ
  9192. ˇˇˇˇ¸ˇˇ˜ˇÙˇ˚ˇ¸ˇ˝ˇ˛¸ˇÚˇˇıÏÎ≈fiΈˇÚ˝ˇˇˇ˛ˇ˝ˇˇˇˇˇÛˇˇ˜ˇÚ˝ˇ¸ˇˇˇ˛ˇˇˇˇˇˇÚˇˇ˜ˇÚ˝ˇ˛ˇ˛ˇˇˇ˘ˇÒˇˇÁˇ¯˝ˇˇˇ˘ˇ˝ˇˇˇ˛ˇˇˇ˜ˇˇ˜ˇ˝˘ˇ˛˛ˇ˝ˇ¸ˇ    ˇˇˇˇ˛ˇˇˇˇˇ˚ˇˇ˜ˇÛ˝ˇ˛ˇ˜ˇ˛ˇˇÒˇˇıÎÏ≈Aψˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇÁˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇıÏÎ≈AΈˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇÁˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇıÎÎ≈AΈˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇÁˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇıÎÏ≈AΈˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇÁˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇıÎÎ≈Aψˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇÁˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇıÏÎ≈AΈˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇÁˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇıÎÏ≈Aψˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇÁˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇıÏÎ≈AΈˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇÁˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇıÎÎ≈AΈˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇÁˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇıÎÏ≈AΈˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇÁˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇıÎÎ≈Aψˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇÁˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇıÏÎ≈AΈˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇÁˇ ˇˇ˜ˇ…ˇˇ˜ˇ ˇˇıÎÏ≈#ψ«ˇ˜Δˇ˜«ˇÁ«ˇ˜Δˇ˜«ˇıÏÎ≈#Îı»ˇˆ«ˇˆ»ˇÊ»ˇˆ«ˇˆ»ˇıÎÎ≈ò@@˜@˜Ú*2!?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘?Àˇ˘Àˇ˘¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
  9193. »
  9194.     8»
  9195. »
  9196. »
  9197. êËr»
  9198. ëÇ»
  9199. ˛8»¡¡¡¡¡ ¿`¿`˝`‡÷ Äêrê˝ @÷OEêÄÇ4VhΩ…¬Ï·—CEÓNÿR (p @vz®©b5B3•K∞ÿíZp @”…]˘…&A◊(íÔŒÿÃt@à$Å3•{ƒ`ON¿]Kfi#ÿú\8ps¬ÿíªüäKcóÑÿ
  9200. ˛"˚ Ã
  9201. ˛"˚ Ã
  9202. ˛˚ Ã¡¡( }†@8˛DÅD@¿|Ê&)䃸@@@Ä$Ê)%)L∑+-)#/E±µµë≤2‰õo≠ã‰[Ĭîê#•æpÁ)%1T“T^ı%RJ—Zö≤“UEM5ïïD≠    @«z®8™‘ÄÁ)%—dî‰î¶HîíëRíñîâäI&§∏â)A"SpA<òpÁ)%bD    6à˘Kkˆ’0é§$6øŒìO%,ÎÕSÇ$•¿EQ<Á)%sNç$x¶2D§â q%%$JâFJ"6¥àís8¯è(‡Á˝˛@ıĢ ‚˝˛@ıĢ ‚ ˘@Ï ‚¡¡ò@@Ę@Ę2*r!DÄÑ01Å0ÿ @˝ "Bÿ(ø≤‰[úêd]«TrÑ+∏r%Ÿ    9BED≠•@©+™T•    )u@•^Ä⁄
  9203. K<Iâ) Å˛˝1¬ô.    fi¶9.‰Ä⁄nèÕSíHíXB≠h     À    hâŸKtäàí=–Á9ìÉI∑6Á2q∑vŸı˙@Ÿı˙@Ÿı˙@Ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ‡Õ Õ §Ñ÷R8¨ fŒ ;’DjÓQP™Œ íõÑ    JJ„ê0Œ •.:êì≤ "vŒÿ…¡ƒîb·‚2HÄœ ˛!˝Äà ˛!˝ÄÃ
  9204. ˛!˝Ä ¡¡˛–¯–ÇÄ@ê–óâ±÷»í?Ÿy,—* J“ìTña"íê—L
  9205. &Rî¢d"fi$§ê—~    )ï5¥Ë    ≥áGµ —Tìâ&‰êç"˙E" —
  9206. ¸@À
  9207. ¸@À¸Ä»¡¡    @¿¿À     @! À    (ø≤‚∞" À        9BEE@‚ À    
  9208. K<Iâ@ À    nè Å@À    KtäÑÄÂÄÀ¡¡¡¡¡¡¡¡¡ò@Äú˜Äú˜r*é!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡òů@˜HHÎ’ê%IJˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  9209. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêê@˜Ú*2!'ÎÅÅÅ ÎÏ≈ÎÅÅÅ ÎÎ≈ÏÅÅÅ ÏÎ≈ÎÅÅÅ ÎÏ≈ÏÅÅÅ ÏÎ≈ÎÅÅÅ ÎÎ≈ÎÅÅÅ ÎÏ≈ÎÅÅÅ ÎÎ≈ÏÅÅÅ ÏÎ≈ÎÅÅÅ ÎÏ≈ÏÅÅÅ ÏÎ≈æÎÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛ÎÏ˛Î≈¡˛ÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎ8ÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏÎÏ≈ÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâ͡˛¸ˇ˝˛ˇ˘ˇ˝ˇÅÅÅæ Íˇ˝ˇˇ¸ˇ˙˛ˇ˛ˇÅÅÅæΡˇ˝ˇ˘ˇ¯ˇ˝ˇÅÅÅæΡˇ˝˛ˇ˚ˇ˘ˇ˝ˇÅÅÅΩ%Ïˇˇˇ˝˛ˇˇ˝˛ˇˇ˝ˇÅÅÅΩ'Ìˇ˛ˇˇ˛ˇ˝ˇ˛ˇ¸ˇ˝ˇÅÅÅΩÓˇˇ˘ˇ˝¸ˇ¸˛ˇ˛ˇÅÅÅæÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâ-Ì˚ˇÍˇˇ˘ˇ˛˛ˇ˙ˇˇÈ˛ˇfiˇˇıˇ˘˛ˇÅŨ3ÏˇˇÍˇˇ¸˛ˇˇ¯ˇˇÈˇ‹ˇıˇ¯ˇÅÅ´íÏˇ˛ˇ˝ˇˇ˛ˇˇˇˇ˙ˇ˙ˇ˛ˇ˙ˇ¸ˇ˛ˇˇˇ˛ ˇˇˇˇˇˇˇ˛ˇ˝ˇ˛ˇˇ˛ˇ˝ˇ˛ˇˇˇ˛ˇ˝˛ˇˇ˛ˇˇ˝ˇˇˇ˛ˇ˝ˇ˛ˇˇ˛ˇÅÅ¿ìÏˇˇˇˇˇˇˇˇˇ˛ˇˇ˝˛ˇ˚ˇ˚ˇ˙˛ˇˇˇ˝ˇˇˇˇˇ˛
  9210. ˇˇˇˇˇˇ˛ˇ˝ˇˇˇ˚ ˇˇˇˇˇˇˇ˝ˇ˛ˇˇ˛ˇˇˇˇˇˇˇˇ˛ˇ˝ˇˇˇÅÅΩêÌˇ˛ˇˇˇˇˇˇˇ˛ˇ˘˝ˇˇ˚ˇ¯
  9211. ˇˇˇˇˇ˝ˇˇˇ˛ˇˇˇ˛ˇ˚ˇ˛ˇˇˇˇˇˇˇ¸˛ˇˇ˛ˇˇˇ˛ˇˇˇ˛ˇ˚ˇ˛ˇÅÅ¿íÓˇ˝ˇˇˇˇ˛˛ˇˇ˛ˇ˚ˇ˛ˇ¸ˇˇˇ˚ˇˇˇ˛ˇˇˇˇ˛ˇ˛ˇ˝ˇ˝ˇ˛ˇ˛ˇˇ˚ˇ˝ˇˇ˛ˇˇˇ˙ˇ˛ˇˇˇˇ˝ˇ˝ˇ˛ˇ˛ˇˇ˚ˇÅÅ¿ãÓˇˇ˛ˇ˛ˇ˛ˇ˛ˇ˝˛ˇ˝˛ˇ¸˛ˇˇˇ˘ˇˇ˝ˇˇˇˇˇ˛˝ˇ˝    ˇˇˇˇ˛ˇ˛ˇ˚ˇ˛ˇˇˇˇˇˇˇˇ˛˛ˇˇ˝ˇ˝    ˇˇˇˇ˛ˇ˛ˇ˚ˇÅÅøÁˇ˛ˇŒˇÅÅÅ‹Áˇ˛ˇŒˇÅÅÅ‹Ê˛ˇÕˇÅÅÅ‹ÅÅÅâÅÅÅâdÌˇˇ˛¸ˇˇ¸ˇˇ˚˛ˇ˚ˇÍ˛ˇˇˆˇˇÒ˛ˇ‡ˇ˜ˇ˛ˇÒ˛ˇ˚ˇÙˇˇ˜ˇ˛ˇÛˇıˇÙ˛ˇ˙¸ˇÚˇÅØ\Ρ˛ˇˇˇˇ˛ˇˇ˙ˇ˙ˇÈˇÛˇˇˇ˛ˇ÷ˇÏˇ˙ˇÛˇ˜ˇÔˇıˇÛˇ¯ˇˇÚˇÅØ˚Ïˇˇ˛ ˇˇˇˇˇˇ˘˛ˇˇˇ˛ˇˇˇˇˇˇˇˇˇˇˇˇˇ˛ˇˇˇ˝ˇˇ˛ˇˇˇˇˇ˛ˇ˘ˇˇˇˇˇˇˇˇˇˇˇˇ˛ˇˇˇˇˇ˛ˇˇˇ˛ˇ ˇˇˇˇˇˇ˙ˇˇˇ¸ˇˇˇˇˇ˝˛ˇˇ˛ˇ¸ˇˇ˛ˇˇˇˇˇ˛˛ˇˇ˙ˇˇ˝ˇˇˇˇˇˇ˚ˇ˛˛ˇˇˇˇˇ¸ˇ˛ˇÅµÏˇˇˇˇ˛ˇˇˇˇ˙ˇˇˇˇˇˇˇˇ˛ˇ˝ˇ˝ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˛ˇ˙*ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˛
  9212. ˇˇˇˇˇˇ˚ˇ˛ˇˇˇˇ˛ˇˇˇˇˇˇˇˇˇˇˇ˛
  9213. ˇˇˇˇˇˇ˝ˇˇˇ˚ˇˇ˛˛ˇ˝ˇˇˇˇˇ¸˛ˇ˛ˇˇˇˇˇˇˇˇˇÅ≤Ìˇ˛ˇˇˇ˛ˇˇˇˇ˙
  9214. ˇˇˇˇ˛ˇˇˇˇˇˇˇˇˇˇˇ˛ˇˇˇˇˇˇˇˇ˛ˇ˚"ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˛ˇˇˇ˛ ˇˇˇˇˇ˚ˇ˛ˇˇˇ˝ˇˇˇˇˇˇ˛ˇ˛ˇ˛ ˇˇˇˇˇ˛ˇˇˇ¸ˇˇ˛
  9215. ˇˇˇˇˇ˛ˇ¸ˇ¸ˇ˝ˇˇˇˇ˝˛ˇÅµ˚Ìˇ˝ˇˇ˛ˇˇ˛ˇ˚ ˇˇˇˇˇˇˇ˛ˇ˛¸ˇˇˇˇˇˇˇˇˇ˚ˇˇˇˇˇˇˇˇˇˇ˝ˇ˛˛ˇˇˇˇ˝ˇˇ¸˛ˇ ˇˇˇˇˇˇ˘ˇ˛ˇˇˇˇˇ¸ˇ˛ˇ˝ˇˇˇˇˇˇˇ˛ˇˇ˝ˇˇˇˇˇˇˇˇ˛ˇˇˇˇ¸ˇ˛ ˇˇˇˇˇ˛ˇ˙ˇ˛ˇˇˇˇ˛ˇ˝ˇ¸ˇÅµÓ˛ˇ˛˛ˇˇˇˇ˛ˇˇ˛    ˇˇˇˇˇ˛˝ˇ˛ˇˇˇˇ˛ˇˇˇˇ˛ ˇˇˇˇˇ˛ˇˇˇ˚˛ˇ˛ˇˇˇˇˇˇˇ˛ˇ˛ˇˇˇ˛ˇˇˇˇ˛ˇˇ˛ˇˇˇ˛    ˇˇˇˇˇ˛ˇ˛ˇ˛ˇˇˇˇˇˇˇˇˇ˛ˇ˛ˇˇˇ˝ˇ˛ˇ¸ˇˇ˛ˇˇˇ˛ˇˇˇ˛ˇ˛¸ˇ˛ˇ˛˝ˇˇˇ˛˛ˇÅ¥⁄ˇÂˇ˝ˇõˇµˇ˝ˇÅå⁄ˇÂˇ˝ˇõˇµˇ˝ˇÅåΩˇ˝ˇÅŒˇ˝ˇÅåÅÅÅâÅÅÅâòů@ĘHHÎ’î&IJˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  9216. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêê@Ę2*r!'KÌ˘ˇ˜ˇ˜ˇ˛ˇÔˇÔˇ˛ˇˇ˝ˇ˚ˇÒˇ˝ˇˇˇ˝ˇˇ˛ˇˇ˚ˇ˜ˇˇÅÅΩ?Ïˇˇˇˆˇ˜ˇŸˇ˛ˇ¸ˇ˙ˇÎˇÚ˛ˇ˛ˇ˝ˇ˘ˇˆˇÅÅΩûÏˇˇˇˇ˛ˇ˙ˇˇˇˇ˛ˇˇ˛ˇˇˇˇˇ˝˛ˇˇ˛ˇˇˇ¸ˇˇˇ¸ˇˇˇˇ˛ˇ˛ˇ˛˛ˇˇˇˇ˛˛ˇˇ˝ˇˇˇ˚ˇˇ˝ˇ˝ˇˇ˛ˇ˛ˇ˝˛ˇˇ˛ˇˇˇÅÅ…£Ìˇˇ˛ˇˇˇ˝ˇˇ˛ˇˇˇ˛
  9217. ˇˇˇˇˇˇ˛ˇ˝    ˇˇˇˇˇ˚ˇˇˇˇˇˇ˛ˇˇˇˇ˘ˇˇˇˇˇˇˇˇ˝˛ˇ¸ ˇˇˇˇˇ˛ˇˇˇˇ˚
  9218. ˇˇˇˇˇ˝ˇˇÅÅ ñÌˇˇˇˇˇˇ˝ˇ˛ˇˇˇˇ˛ ˇˇˇˇˇ˝˝ˇ˝ˇ˛ˇ˚˘ˇ˚ˇˇˇˇ˛˛ˇ˝ˇˇˇˇˇˇ˛ˇ¸ˇ˙ˇ˛ˇ˝ˇˇˇˇˇ˛˛ˇˇˇ˛ˇ˛ˇˇˇÅÅ ôÓˇˇˇˇˇ˛ˇ¸˛ˇˇ˛˚ˇˇˇˇˇˇˇˇ˚˛ˇˇˇ˜ˇˇ˛ ˇˇˇˇˇˇ˝ˇ˝ˇˇˇˇˇˇˇˇˇ˙ˇˇ˚ˇˇ˛ˇˇ˛ˇˇˇˇˇ˝ˇˇˇˇˇ˛ˇ˛ˇˇÅÅ…™Óˇˇˇˇˇˇˇ˛ˇˇˇ˛ˇˇˇ˛ˇ˛ˇˇˇ˝˛ˇˇ˝ˇ˛ˇˇ˝˛ˇ˛ˇ˛ˇˇˇˇ˛ˇ¸ˇˇˇˇˇˇˇˇ˛ˇˇˇˇˇ˝˛ˇ˛ˇ˛ˇˇˇˇ˛ˇ˛ˇˇˇˇ˛ˇ˛ˇˇˇÅÅ»õˇ«ˇÁˇÅÅΔõˇ«ˇÁˇÅÅΔõˇ«ˇÁˇÅÅΔÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâ͡ı˛ˇ¯˛ˇÈˇÚ˛ˇÅÅÅÁ!ÍˇÙˇ˘ˇˇ˛ˇÍˇÒˇÅÅÅÊQΡˇ˛ˇˇˇˇˇˇ˝ˇ˘ˇˇˇˇˇˇˇˇˇ˛˛ˇ˛ˇˇˇˇ˚
  9219. ˇˇˇˇˇˇˇÅÅÅSΡˇ˛ˇ˝ˇˇˇˇˇ˛ˇ˙
  9220. ˇˇˇˇˇˇ˛ˇ˛ˇˇˇ˛ˇˇˇ˙ˇ˛ˇˇˇˇˇÅÅÅOÏˇˇˇˇˇˇˇ˛ˇ˝ˇ˚ˇˇˇˇˇˇˇˇ˛ˇ˛˛ˇˇ˙ˇ˛ˇˇˇÅÅÅÌSÌˇ˛ ˇˇˇˇˇ˛ˇ˙ˇ˛˛ˇˇˇˇ˝ˇˇ˛ˇˇˇˇ˛ˇ˙ˇ˛ˇ˛ˇˇˇÅÅÅWÓˇˇ˛ˇˇˇ˛ˇˇˇ˛ˇ¸˛ˇ˛ˇˇˇˇ˛ˇˇ˛ˇ˛ˇ˝˝ˇ˛ˇ˛
  9221. ˇˇˇˇˇ˛ˇÅÅÅÚÁˇ˝ˇ·ˇÌˇÅÅÅflÁˇ˝ˇ·ˇÌˇÅÅÅflÁˇ˝ˇ·ˇÅÅÅ ÅÅÅâÅÅÅâ'Ì˝ˇ˚ˇ¸˝ˇÈˇˇˇ˘ˇ˜ˇˆˇÅÅÅ˝/Ïˇˇ¸ˇ˚ˇˇÈˇÌˇˇˇˆˇˆˇÅÅÅ˝aÏˇˇˇ˛ˇ˝ˇ˛ˇ˛ˇ˝ˇˇˇˇˇˇ˛˛ˇ
  9222. ˇˇˇˇˇˇ¯ˇˇˇˇ˛˘ˇˇˇˇ˝ˇˇˇˇˇÅÅáiÏ    ˇˇˇˇˇ¸ˇˇˇ˛"ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˙ˇˇˇˇˇˇˇ˝ˇˇ˛ˇˇˇˇˇˇÅÅÖgÌˇ˝ˇˇˇ˚ˇˇ˛ˇˇˇˇˇˇˇˇˇˇˇ˛ˇˇˇˇ˙ˇˇˇ˛ˇˇˇ˝ˇ˛ˇˇˇˇˇˇˇÅÅÖ_Ìˇ˝˚ˇ¸#ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ˛ˇˇ˙    ˇˇˇˇˇ˛ˇ˝˛ˇˇ˛˝ˇ    ˇˇˇˇˇÅÅÑhÓ˛ˇ˛ˇˇˇ¸˛ˇˇˇ˛ˇ˛ ˇˇˇˇˇ˛ˇˇˇˇ˝ˇ˛ˇˇˇˇ˛ˇ¸ˇˇˇ˛ˇˇˇ˛ˇ˛ˇÅÅÑ‘ˇ˛ˇ‰ˇÅÅÅŸ‘ˇ˛ˇ‰ˇÅÅÅŸ ”˛ˇÅÅÅ∫ÅÅÅâÅÅÅâÌ˘ˇ˜ˇ˜ˇÛˇˇ˚ˇˇÅÅÅ”'Ïˇˇˇˆˇ˜ˇÙˇˇ˝ˇˇÅÅÅ‘9Ïˇˇˇˇ˛ˇ˙ˇˇˇˇ˛ˇ˛ˇˇˇˇ˚ˇ˛ˇ˛ˇÅÅÅ‘<Ìˇˇ˛ˇˇˇ˝ˇˇ˛ˇˇˇ˛ˇˇˇ˚˛ˇ˛ˇ˛ˇÅÅÅ‘:Ìˇˇˇˇˇˇ˝ˇ˛ˇˇˇˇ˛ˇˇˇ¯ˇˇ˛ˇÅÅÅ‘7Óˇˇˇˇˇ˛ˇ¸˛ˇˇ˛˚ˇˇˇˇ˚ˇ˛ˇˇˇÅÅÅ”;Óˇˇˇˇˇˇˇ˛ˇˇˇ˛ˇˇˇ˝ˇˇ˙˛ˇˇˇˇÅÅÅ“ÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâòůÄú˜HHÎ’ê'IJˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  9223. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêêÄú˜r*é!'ÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâò@@˜@˜é*Œ!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@ĘŒ*!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Äú˜Äú˜**!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡òů@˜HHÎ’î(IJˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  9224. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêê@˜é*Œ!'ÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâòů@ĘHHÎ’ê)IJˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  9225. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêê@ĘŒ*!'ÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâòůÄú˜HHÎ’î*IJˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  9226. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêêÄú˜**!'ÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâò@@˜@˜**j!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ęj*™!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Äú˜Äú˜™*Δ!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡òů@˜HHÎ’ê+IJˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  9227. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêê@˜**j!'ÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâòů@ĘHHÎ’î,IJˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  9228. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêê@Ęj*™!'ÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâòůÄú˜HHÎ’ê-IJˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  9229. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêêÄú˜™*Δ!'ÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâò@@˜@˜Δ*!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę*F!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Äú˜Äú˜F*b!¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡òů@˜HHÎ’î.IJˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  9230. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêê@˜Δ*!'ÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâòů@ĘHHÎ’ê/IJˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  9231. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêê@Ę*F!'ÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâòůÄú˜HHÎ’î0IJˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôô    ˇˇÃÃff
  9232. ˇˇÃÃ33 ˇˇÃà ˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃàˇˇôô!ˇˇff"ˇˇ33#ˇˇ$ÃÃˇˇˇˇ%ÃÃˇˇÃÃ&ÃÃˇˇôô'ÃÃˇˇff(ÃÃˇˇ33)ÃÃˇˇ*ÃÃÃÃˇˇ+ÃÃÃÃÃÃ,ÃÃÃÃôô-ÃÃÃÃff.ÃÃÃÃ33/ÃÃÃÃ0ÃÃôôˇˇ1ÃÃôôÃÃ2ÃÃôôôô3ÃÃôôff4ÃÃôô335ÃÃôô6ÃÃffˇˇ7ÃÃffÃÃ8ÃÃffôô9ÃÃffff:ÃÃff33;ÃÃff<ÃÃ33ˇˇ=ÃÃ33ÃÃ>ÃÃ33ôô?ÃÃ33ff@ÃÃ3333AÃÃ33BÃÃˇˇCÃÃÃÃDÃÃôôEÃÃffFÃÃ33GÃÃHôôˇˇˇˇIôôˇˇÃÃJôôˇˇôôKôôˇˇffLôôˇˇ33MôôˇˇNôôÃÃˇˇOôôÃÃÃÃPôôÃÃôôQôôÃÃffRôôÃÃ33SôôÃÃTôôôôˇˇUôôôôÃÃVôôôôôôWôôôôffXôôôô33YôôôôZôôffˇˇ[ôôffÃÃ\ôôffôô]ôôffff^ôôff33_ôôff`ôô33ˇˇaôô33ÃÃbôô33ôôcôô33ffdôô3333eôô33fôôˇˇgôôÃÃhôôôôiôôffjôô33kôôlffˇˇˇˇmffˇˇÃÃnffˇˇôôoffˇˇffpffˇˇ33qffˇˇrffÃÃˇˇsffÃÃÃÃtffÃÃôôuffÃÃffvffÃÃ33wffÃÃxffôôˇˇyffôôÃÃzffôôôô{ffôôff|ffôô33}ffôô~ffffˇˇffffÃÃÄffffôôÅffffffÇffff33ÉffffÑff33ˇˇÖff33ÃÃÜff33ôôáff33ffàff3333âff33äffˇˇãffÃÃåffôôçfffféff33èffê33ˇˇˇˇë33ˇˇÃÃí33ˇˇôôì33ˇˇffî33ˇˇ33ï33ˇˇñ33ÃÃˇˇó33ÃÃÃÃò33ÃÃôôô33ÃÃffö33ÃÃ33õ33ÃÃú33ôôˇˇù33ôôÃÃû33ôôôôü33ôôff†33ôô33°33ôô¢33ffˇˇ£33ffÃç33ffôô•33ffff¶33ff33ß33ff®3333ˇˇ©3333ÃÙ3333ôô´3333ff¨333333≠3333Æ33ˇˇØ33ÃÃ∞33ôô±33ff≤3333≥33¥ˇˇˇˇµˇˇÃÃ∂ˇˇôô∑ˇˇff∏ˇˇ33πˇˇ∫ÃÃˇˇªÃÃÃúÃÃôôΩÃÃffæÃÃ33øÃÿôôˇˇ¡ôôÃìôôôô√ôôffƒôô33≈ôôΔffˇˇ«ffÃûffôô…ffff ff33ÀffÃ33ˇˇÕ33ÃÃŒ33ôôœ33ff–3333—33“ˇˇ”ÃÑôô’ff÷33◊ÿˇˇˇŸ˘`˘`˘`⁄Ú–Ú–Ú–€Ï@Ï@Ï@‹Â∞Â∞Â∞›fl fl fl fiÿêÿêÿêfl“““‡ÀpÀpÀp·ƒ‡ƒ‡ƒ‡‚æPæPæP„∑¿∑¿∑¿‰±0±0±0™†™†™†Ê§§§ÁùÄùÄùÄËñññÈê`ê`ê`Íâ–â–â–ÎÉ@É@É@Ï|∞|∞|∞Ìv v v ÓoêoêoêÔiiibpbpbpÒ[‡[‡[‡ÚUPUPUPÛN¿N¿N¿ÙH0H0H0ıA†A†A†ˆ;;;˜4Ä4Ä4į---˘'`'`'`˙ – – –˚@@@¸∞∞∞˝   ˛êêêÄú˜F*b!'ÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâÅÅÅâˇB»@ˇ ˇˇˇˇ@
  9233. ˇ·ˇ‚7^
  9234. 4H\, Palatino&e.3+ä"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@äIntroduction to •)8 Apple Events4⁄ä˙(‡äW’ê)orking WT¿)$ith Object Specifiÿ )C
  9235. er Records
  9236. , (‡3-41
  9237. ˇˇˇˇˇˇˇˇ440lòÄ.B0oMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""B0oB0o$””””””””””””””””””””””””””””””òÄ
  9238. 60@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""60@60@˜˜˜˜˜˜˜˜˜˜˜˜˜
  9239. ˛ˇ˛ˇˇ ˇˇ˛ˇˇ     ˇˇˇ˙ˇ
  9240. ˛ˇˇˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜
  9241. 454+?òÄ
  9242. 56+@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""56+@56+@$˜˛˙ˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  9243. ˛ˇ˛ˇˇ˛¸ˇˇ˚ˇ˛˙ˇˇ˝˛ˇ˛
  9244. ˛ˇ˛ˇˇ
  9245. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  9246. ˛ˇ˛ˇˇ
  9247. ˛ˇ˛ˇˇ˛˙ˇ˜˝˝ˇˇ˛ˇ˚˝ˇ¸˛¸ˇˇ˜˝˛ˇ˛
  9248. ˛ˇ˛ˇˇ
  9249. ˛ˇ˛ˇˇ˝ˇˇ˛˜˝¸ˇ
  9250. ˛ˇ˛ˇˇ˛¸ˇˇ˜˝˛ˇ˛
  9251. ˛ˇ˛ˇˇ
  9252. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˜˝¸ˇ
  9253. ˛ˇ˛ˇˇ˝˛ˇ˛
  9254. ˛ˇ˛ˇˇ
  9255. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  9256. ˛ˇ˛ˇˇ
  9257. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  9258. ˛ˇ˛ˇˇ
  9259. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  9260. ˛ˇˇˇˇ
  9261. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  9262. ˛ˇˇˇ
  9263. ˛ˇˇˇ
  9264. ˛ˇˇˇ
  9265. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  9266. ˛ˇˇˇˇ
  9267. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  9268. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  9269. ˛ˇˇˇˇ
  9270. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähõ(eäHer`°dONLNd\õh´)e arn†°dONLNd\´h5) e some of the object classes defi †°dONLNd(\5hm)äned for the T–Ä°dONLNd5\mhv)8ex¬¿°dONLNd7\whá)
  9271. t su…@°dONLNd;\áhî)ite:°dONLNd    Îä˜L(Ùä-As you can see, some object classes, such as ,
  9272. Courierfi °dONLNd6ÎL˜j)¬cChar‹@°dONLNd;Îj˜) and …`°dONLNd@ÎĘû)cText«Ä°dONLNdEÎû˜´), aråÄ°dONLNdIΨ˜ƒ)e defi»@°dONLNdO΃˜Ù)
  9273. ned in morG@°dONLNdYÎı˜)1e than °dONLNd`¯ä(äone suite. For example, the defiä °dONLNdįL)änition of the ‹@°dONLNdé¯Lj)8cText⁄`°dONLNdì¯j¡) object class in the T °dONLNd©¯¡ˇ)Wext suite is an °dONLNdπäµ(ä    extension^†°dONLNd¬∂‘), of the Ö`°dONLNd ‘Ú)cTextÉÄ°dONLNdœÚ9) object class defiò`°dONLNd·9x)Gned in the Cor∑¿°dONLNdÔx)?e suite; it duplicates all the °dONLNdä˜(ächaracteristics of the Corò¿°dONLNd(˜Ó)m9e suite object class and adds some of its own. Like a wor,¿°dONLNdaÔ
  9274. )¯d in a °dONLNdhä+∑((ä
  9275. dictionaryðdONLNdr∂+”),, one o“°dONLNdy”+)bject class I]¿°dONLNdÜ+)2D c @°dONLNdâ+^)an have several r¥`°dONLNdö^+å)J
  9276. elated defi@°dONLNd•ç+∞)/    nitions. ;°dONLNdÆ∞+∂)#Y˚Ä°dONLNdص+)ou can choose to °dONLNd¿,ä8–(5äsupport the defiB`°dONLNd–,—8Ñ)G+nition that best suits your application; or `°dONLNd˚,Ñ8º)≥, if necessaryëÄ°dONLNd    ,ª8Ì)7 , you can cr °dONLNd,Ó8)3eate °dONLNd9äEÛ(Bäextensions of your own.^Ä°dONLNd19ÙEˆ)j fiÄ°dONLNd29ˆE)The ex Ä°dONLNd89E.)tensioÑ¿°dONLNd>9.ET)    n of an oÊ`°dONLNdG9TE{)&
  9277. bject clasV†°dONLNdQ9|Eí)(s is d‘¿°dONLNdW9íEò)if„`°dONLNdY9òE§)fer≈‡°dONLNd\9§Eª) ent fr< °dONLNdb9ºE)om inheritance °dONLNdqFäR(Oäbetween object classes. @°dONLNdâFÒRa)gAn extension of a standarȆ°dONLNd¢FaRß)pd object class prÔ@°dONLNd≥FßR)Fovides additional ways °dONLNd Sä_”(\äof describing an zÄ°dONLNd€S”_w)I&Apple event object of that class, wher>Ä°dONLNdSx_)•!eas the object class inheritance °dONLNd"`äl§(iähierarª°dONLNd(`§l|)2chy determines the pattern of characteristics shar3@°dONLNdZ`}l§)Ÿ    ed by difY¿°dONLNdc`§l∞)'fer<@°dONLNdf`∞l˝) ent object classes.C°dONLNdy`˝lˇ)M °dONLNd{rä~Æ({äThe defi≠‡°dONLNdÉrÆ~T)$'nition of an object class always specifiê`°dONLNd´rU~Õ)ßes a default descriptor typeπ†°dONLNd«rÕ~ )x. Suppose, for °dONLNd÷äãÕ(àäexample, that a–Ä°dONLNdÂÕã)C client applicati^‡°dONLNdˆã?)D
  9278. on sends a÷Ä°dONLNd?ã¡). Get Data, Cut, or Copy event∂‡°dONLNd¬ãÙ)É  that specifi{ °dONLNd*ıã)3es an °dONLNd0åäò´(ïäCApple event object but does not specify a descriptor type for the rg`°dONLNdså´ò(ï´eturned data. In this °dONLNdâô䕧(¢äcase, t9@°dONLNdêô••)he server application r+‡°dONLNdßô•a)ceturns a descriptor rü@°dONLNdºôa•s)Yecor†°dONLNd¿ôt•)%d of the default descriptor type for °dONLNd¶ä≤(Øäthe object class of the specifiï°dONLNd¶≤)|ed ú°dONLNd¶≤)8Apple event object. For example, the default descriptor °dONLNd?≥äøØ(ºä    type for z‡°dONLNdH≥Øø*)%Apple event objects of class n¿°dONLNde≥+øI)|cWordl‡°dONLNdj≥IøU) is í@°dONLNdn≥Uøù) typeIntlTextç¿°dONLNdz≥ùø)H, a descriptor type that °dONLNdì¿äö(…äspecifiÓ °dONLNdö¿¶Ã})2es an undelimited string of characters in a specifi≈ °dONLNdÕ¿~Ã)ÿc language and script system. °dONLNdÎÕäŸ(÷ä!The client application can also r2Ä°dONLNd ÕŸÄ)åequest that the data be r@°dONLNd%ÕÄŸÎ)jeturned in a descriptor rb¿°dONLNd>ÕΟ˝)kecor◊ °dONLNdBÕ˝Ÿ)d of °dONLNdG⁄äÊÈ(„äsome other data type.°dONLNd]Ïä¯Æ*The defi≠‡°dONLNdeÏƯK)$&nition of an object class includes thr+`°dONLNdãÏL¯ƒ)ûee lists of characteristics: pr¸¿°dONLNd™Ïƒ¯)xoperties, element °dONLNdº˘ä¿(äclasses, and h°dONLNd…˘¿ı)6HApple events that support the object class. (The next section describes °dONLNdäì(äprG °dONLNdî)
  9279. operties and element classes.) @°dONLNd2)Ö7Any or all of these characteristics may be inherited frhÄ°dONLNdi)Èom °dONLNdlä™(äa super‘‡°dONLNds™√) class. I °dONLNdzƒ‘)An `°dONLNd}‘˛)HApple event is listed for an object class if its parameters can specify °dONLNd≈ ä,()äobjects of that class. The defi- °dONLNd‰ ,3)~ nition for Ä°dONLNdÔ 4,^),cWindow&‡°dONLNdˆ ],©)), for example, list-`°dONLNd         ©,º)Ls 12  °dONLNd     º,√)A”@°dONLNd     √,ı) pple eventsì¿°dONLNd     ˆ,˚)3, °dONLNd    -ä9P(6ä+including the Open, Close, and Move events,"°dONLNd    G-Q9¯)«% whose parameters can include object °dONLNd    l:äF¶(CäspecifiÓ °dONLNd    s:¶Fµ)er rÔ`°dONLNd    w:µF«)ecorc¿°dONLNd    {:»F/)ds that specify window–°dONLNd    ë:/F5)gs.ç°dONLNd    ì:6FK) The H¿°dONLNd    ò:LFv)cWindowF °dONLNd    ü:vFÂ)* class inherits all of these Á†°dONLNd    º:ÂF)oApple °dONLNd    ¬GäS∞(Pä    events fr£ °dONLNd    ÀG∞S )&om its abstract superUÄ°dONLNd    ‡G S%)\class, ( °dONLNd    ÁG&SÄ)cOpenableObject"Ä°dONLNd    ˆGÄSÇ)Z.°dONLNd    ¯Yäeù(bäThe ª¿°dONLNd    ¸Yùe9)%Apple Event Registry: Standard Suites©Ä°dONLNd
  9280. !Y:ea)ù     also defi6Ä°dONLNd
  9281. +Ybes)(nes éÄ°dONLNd
  9282. /Yse‡)primitive object classes,߇°dONLNd
  9283. HY‡e¯)m whic®‡°dONLNd
  9284. MY¯e)h °dONLNd
  9285. Ofärê(oädõ¿°dONLNd
  9286. Pfêr±)escribe `Ä°dONLNd
  9287. Xf±rœ)!BApple event objects that contain a single value. For example, the ®°dONLNd
  9288. öfœrˇ(oœcBoolean•°dONLNd
  9289. ¢fˇr)0, °dONLNd
  9290. §sä“(|ä cLongIntegeræ °dONLNd
  9291. ∞s—È)G, and +@°dONLNd
  9292. ∂sÍ)cAlias)°dONLNd
  9293. ºsV)$ object classes ar`°dONLNd
  9294. ŒsV)H+e all primitive object classes. The object °dONLNd
  9295. ˘Ääåá(âä=class ID for a primitive object class is the same as the fouréÄ°dONLNd 6ÄáåË)˝-character value of its °dONLNd Nçäôu(ñä7descriptor type. Primitive object classes contain no pr›¿°dONLNd Öçuô˝)Πoperties; they contain only the °dONLNd •öä¶÷(£ävalue of the data.‰@°dONLNd ∑ö÷¶ÿ)L d@°dONLNd ∏öŸ¶€)     °dONLNd@uäÄ¢(}äClass|@°dONLNdFu⁄Ä˝)PClass IDz°dONLNdOuÄC)8 Description
  9296. °dONLNd\Éäè®(åäcChar|@°dONLNdbÉ⁄è˛)P'cha 'z°dONLNdiÉè)8TØ¿°dONLNdjÉèS)ext characters°dONLNdzìäü®(úäcLine|@°dONLNdÄì⁄ü˛)P'clin'z°dONLNdáìüH)8Lines of text°dONLNdñ£äØΔ(¨ä
  9297. cParagraph|@°dONLNd°£⁄Ø˛)P'cpar'z°dONLNd®£ØD)8
  9298. Paragraphs°dONLNd¥≥äø®(ºäcText|@°dONLNd∫≥⁄ø˛)P'ctxt'z°dONLNd¡≥øf)8Series of characters°dONLNd◊√䜿(Ãä    cTextFlow|@°dONLNd·√⁄œ˛)P'cflo'z°dONLNdË√œ)8TØ¿°dONLNdÈ√œ,)ext flq °dONLNdÔ√-œ?)ows°dONLNdÙ”äfl®(‹äcWord|@°dONLNd˙”⁄fl˛)P'cwor'z°dONLNd”fl)8Wè°dONLNd”fl$)    or…Ä°dONLNd”$fl.)    dsˇä@ˇ ˇˇˇˇ@
  9299. ˇ·ˇ‚7^
  9300. 4*\¯, Palatino&e.3+l"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@lIntroduction to •)8 Apple Events4⁄*˙¯
  9301. (‡*3-42    )BW’ê)orking WT¿)$ith Object Specifiÿ )C
  9302. er Records4^*¿¯
  9303. j*p¯4j*p¯ klk¯
  9304. ˇ·ˇ‚7^ °dONLNd\ljÔ(flProperties and Elementsˇˇˇˇˇˇ‘@(fÒ3
  9305. °dONLNdpl|(ylThe ª¿°dONLNdp|à)prLJ°dONLNdpâ|¨)
  9306. opertiesË °dONLNd'p¨|Δ)# listedù†°dONLNd.p«|…) †°dONLNd/p |)for an object clasê¿°dONLNdAp|)IsÕ¿°dONLNdBp|) cæ°dONLNdDp|S) an be used tÃÄ°dONLNdPpS|Ã)5o identify characteristics of ˙`°dONLNdnpÃ|”)yA¡†°dONLNdop‘|Í)pple °dONLNdt}lâ6(Ül0event objects that belong to that class. Each pr≈@°dONLNd§}6â) operty is identifiΔ†°dONLNd∂}â¥)I ed by a fourÿ@°dONLNd¬}¥â‚)5 -character °dONLNdÕälñu(ìlprG °dONLNdœävñ˙)
  9307. operty ID, which can also be r-`°dONLNdÌä˙ñ)Ñepræ °dONLNdäñ≥)'esented by a constant. Constants for pr†°dONLNdä¥ñŸ)¨    operties °dONLNd ól£È(†lalways begin with the letter ,
  9308. Courier… °dONLNd=óÈ£Ô)}p»¿°dONLNd>óÔ£Ò).°dONLNd@©lµ}(≤lHer`°dONLNdC©}µç)e arn†°dONLNdG©çµ›)e constants and prÛ¿°dONLNdY©›µA)Poperty IDs for some pr% °dONLNdo©Bµg)e    operties:°dONLNdDàlîÖ(ëlThe pΩ‡°dONLNdIàÖîà)rLJ°dONLNdJàâî®)operty @°dONLNdQà©î¡) of an D†°dONLNdWà¡î=)Apple event object is itself d@°dONLNduà>îH)}efi‰†°dONLNdxàHîR)
  9309. ne†°dONLNdzàSîl) d as aÿ`°dONLNdÄàlîã) single ±‡°dONLNdààãî⁄)Apple event objec
  9310. `°dONLNdôà€î‡)Pt °dONLNdõïl°0(ûl-whose container is the object to which the pr†°dONLNd»ï1°u)≈operty belongs.g†°dONLNd◊ïu°√)D For example, the 6†°dONLNdÈ‚)OpFont4¿°dONLNdÓï‚°‰) °dONLNdÔ¢lÆu(´lprG °dONLNdÒ¢vÆ∫)
  9311. operty of a wor'`°dONLNd¢∫Æ›)Dd is defiZ†°dONLNd    ¢›Æç)#'ned by the name of a font, such as New ü†°dONLNd0¢çÆì)∞Y` °dONLNd1¢ìÆÁ)ork; the string that °dONLNdFØlªã(∏lidentifiV†°dONLNdNØ媔) es the font is an 0 °dONLNd`Ø”ªJ)GApple event object of class Á°dONLNd|ØJªh)wcText °dONLNdÅØhªm). °dONLNdÑ¡lÕw( lThr °dONLNdÜ¡xÕß) e constant Ü°dONLNdë¡ßÕ›)/    cPropertydž°dONLNdö¡›Õ˚)6 specifip¿°dONLNd¢¡¸Õ
  9312. )es t9¿°dONLNd¶¡ Õ¶)%he object class for any object specifi“@°dONLNdá¶Õµ)õer r”Ä°dONLNd–¡µÕ«)ecorG‡°dONLNd‘¡»Õ‰)d that °dONLNd€Œl⁄ã(◊lidentifiV†°dONLNd„Œå⁄®) es a pr$`°dONLNdÍŒ©⁄Δ)operty°dONLNdŒ≈⁄ ). °dONLNdÛÂlÒÿ(ÓlCONST cProperty = y@°dONLNdÂÿÒfi)l'x‡°dONLNdÂfiÒˆ)propw`°dONLNd
  9313. ˆÒ¸)'w°dONLNd ¸Ò);°dONLNd˝l    ¥(lAn object specifiV‡°dONLNd˝µ    ƒ)Ier rX °dONLNd"˝ƒ    ÷)ecorÃÄ°dONLNd&˝÷    ˇ)
  9314. d for a prÎ`°dONLNd0˝ˇ    :))operty specififi‡°dONLNd>˝;    F)<es eÄ°dONLNdA˝G    })     cPropertyb °dONLNdJ˝}    ã)6 as ü °dONLNdN˝ã    “)the object class I˝¿°dONLNd`˝“    ‹)GD,;°dONLNdb˝›    Ô)  the °dONLNdg
  9315. l(l"Apple event object to which the pr…†°dONLNdâ
  9316. ç)òoperty belongs as the containerË °dONLNd®
  9317. çí)â, Ë °dONLNd™
  9318. íÊ)formPropertyID‚‡°dONLNd∏
  9319. ÊÌ)T ab‡°dONLNd∫
  9320. ÓÙ)s °dONLNdºl#( l%the key form, and a constant such as O`°dONLNd·#-)£pFontMÄ°dONLNdÊ-#q) as the key data≠‡°dONLNdˆq#v)D. ≠‡°dONLNd¯v#x) -‡°dONLNd˘y#{) °dONLNd˚)l5(2lThe ª¿°dONLNdˇ)5®)elements” °dONLNd)®5Ÿ))  of a specifi䆰dONLNd)⁄5‡)2c Ä°dONLNd)·5?)Apple event object ar¸`°dONLNd+)>5o)] e the other 
  9321. Ä°dONLNd7)p5Δ)2Apple event objects‚`°dONLNdJ)Δ5—)V it °dONLNdN6lBö(?l contains, e9‡°dONLNdY6õB)/xcluding those that defi°dONLNdq6B&)h    ne its prH‡°dONLNdz6'BF)$opertieq °dONLNdÅ6FBL)s.. °dONLNdÉ6MBO) O¿°dONLNdÑ6OBó)An object specifi&†°dONLNdï6òBß)Ier r'‡°dONLNdô6ßBπ)ecorú@°dONLNdù6πBfi)    d for an °dONLNd¶ClOÆ(Llelement specifiõ °dONLNdµCÆO…)Bes the  ¿°dONLNdºC OÎ)BApple event object in which the element is located as the containe†°dONLNd˛CÏOÚ(LÏr °dONLNdPl\q(Yla°dONLNdPq\    )!nd can specify any key form excep˘¿°dONLNd"P    \)òt º °dONLNd$P\)fª¿°dONLNd%P\c)ormPropertyID∂‡°dONLNd2Pc\h)N. ∂‡°dONLNd4Ph\Ï) Each object class definition in °dONLNdT]li|(flthe ›`°dONLNdX]|i)%Apple Event Registry: Standard SuitesÀ °dONLNd}]ie)ù includes a list of †Ä°dONLNdë]fiä)MelementG†°dONLNdò]ãiç)% «†°dONLNdô]çiÆ)classes,\Ä°dONLNd°]Øiÿ)"     which ars‡°dONLNd™]ÿiÔ))e the °dONLNd∞jlv(sl'object classes of the elements that an É@°dONLNd◊jvô)£Apple event object can contain.ì°dONLNdˆjôvõ)ä     °dONLNdy¬lÕê( lProperty°dONLNdǬ‘Õ)h Property IDˇÄ°dONLNdé¬ÕI)D Description
  9322. °dONLNdõ–l‹ä(ŸlpName°dONLNd°–‘‹¯)h'pnam'ˇÄ°dONLNd®–‹N)D Name of an ®`°dONLNd≥–N‹†)6Apple event object°dONLNd«‡lÏñ(ÈlpBounds°dONLNdœ‡‘ϯ)h'pbnd'ˇÄ°dONLNd÷‡Ï$)DCoå°dONLNdÿ‡%Ï.)orΔÄ°dONLNd⁄‡.Ïà)    dinates of a window°dONLNdÔl¸ú(˘lpVisible°dONLNd¯‘¸¯)h'pvis'ˇÄ°dONLNdˇ¸ø)D%Indicates whether a window is visible°dONLNd&l ú(    lpIsModal°dONLNd/‘ ¯)h'pmod'ˇÄ°dONLNd6 æ)D#Indicates whether a window is modal°dONLNd[lê(lpClass°dONLNdb‘¯)h'pcls'ˇÄ°dONLNdiX)DClass ID of an —°dONLNdxX™)@Apple event object°dONLNdå l,ä()lpFont°dONLNdí ‘,¯)h'font'ˇÄ°dONLNdô ,,)DFont°dONLNdü0l<®(9l
  9323. pTextStyle°dONLNd™0‘<¯)h'txst'ˇÄ°dONLNd±0<)DT5@°dONLNd≤0<B)    ext style°dONLNdΩ@lLê(IlpColor°dONLNdƒ@‘L¯)h'colr'ˇÄ°dONLNdÀ@L)DT5@°dONLNdÃ@LC)    ext color°dONLNd◊Pl\¿(YlpTextPointSize°dONLNdÊP‘\¯)h'ptps'ˇÄ°dONLNdÌP\B)D
  9324. Point size°dONLNd˘`ll®(il
  9325. pScriptTag°dONLNd`‘l¯)h'psct'ˇÄ°dONLNd `lu)DScript system identifié¿°dONLNd!`vl~)^er°dONLNd%pl|®(yl
  9326. pFillColor°dONLNd0p‘|¯)h'flcl'ˇÄ°dONLNd7p|>)D
  9327. Fill colorˇ>fi@ˇ ˇˇˇˇ@
  9328. ˇ·ˇ‚7^
  9329. 4H\, Palatino&e.3+ä"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@äIntroduction to •)8 Apple Events4⁄ä˙(‡äW’ê)orking WT¿)$ith Object Specifiÿ )C
  9330. er Records
  9331. , (‡3-43
  9332. ˇˇˇˇˇˇˇˇ440lòÄ.B0oMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""B0oB0o$””””””””””””””””””””””””””””””òÄ
  9333. 60@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""60@60@˜˜˜˜˜˜˜˜˜˜˜˜˜
  9334. ˛ˇ˛ˇˇ ˇˇ˛ˇˇ     ˇˇˇ˙ˇ
  9335. ˛ˇˇˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜
  9336. 454+?òÄ
  9337. 56+@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""56+@56+@$˜˛˙ˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  9338. ˛ˇ˛ˇˇ˛¸ˇˇ˚ˇ˛˙ˇˇ˝˛ˇ˛
  9339. ˛ˇ˛ˇˇ
  9340. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  9341. ˛ˇ˛ˇˇ
  9342. ˛ˇ˛ˇˇ˛˙ˇ˜˝˝ˇˇ˛ˇ˚˝ˇ¸˛¸ˇˇ˜˝˛ˇ˛
  9343. ˛ˇ˛ˇˇ
  9344. ˛ˇ˛ˇˇ˝ˇˇ˛˜˝¸ˇ
  9345. ˛ˇ˛ˇˇ˛¸ˇˇ˜˝˛ˇ˛
  9346. ˛ˇ˛ˇˇ
  9347. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˜˝¸ˇ
  9348. ˛ˇ˛ˇˇ˝˛ˇ˛
  9349. ˛ˇ˛ˇˇ
  9350. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  9351. ˛ˇ˛ˇˇ
  9352. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  9353. ˛ˇ˛ˇˇ
  9354. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  9355. ˛ˇˇˇˇ
  9356. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  9357. ˛ˇˇˇ
  9358. ˛ˇˇˇ
  9359. ˛ˇˇˇ
  9360. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  9361. ˛ˇˇˇˇ
  9362. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  9363. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  9364. ˛ˇˇˇˇ
  9365. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähë(eäAG@°dONLNd\íhö)n :@°dONLNd\öhÈ)Apple event objecí¿°dONLNd\ÈhÛ)Ot c≈`°dONLNd\Ûh)
  9366. ontain`°dONLNd\h)sE`°dONLNd\h) ≈`°dONLNd\h/)exactlR†°dONLNd%\0h=)y o◊@°dONLNd(\=hé)ne of each of its prø °dONLNd<\éhÕ)Qoperties, wher€`°dONLNdJ\Õh˜)? eas it can °dONLNdUiäu§(räcontaia‡°dONLNd[i•uÍ)n no elements oŸ†°dONLNdjiÍu)Er L@°dONLNdliÒuù)%many elements of the same element claÒ¿°dONLNdëiùuÌ)¨ss. In general, a pr1Ä°dONLNd•iÓu)Qoperty °dONLNd¨väÇ{(ä8of an object describes something about that object; a pr«Ä°dONLNd‰v{ÇÚ)Òoperty can be examined or °dONLNd˛Éäè©(åächangeο°dONLNdÉ©è∑)d b °dONLNdÉ∏èæ)u@°dONLNdÉæè…)t n™°dONLNd É…èÿ) eve„Ä°dONLNdÉÿè‰)r dq‡°dONLNdÉÂè)eleted. ∂‡°dONLNdÉèâ)An element can be one or morñÄ°dONLNd5Éâè•)Öe discrVÄ°dONLNd<ɶè)ete objects contained in °dONLNdUêäú≈(ôäanother objec§†°dONLNdbê≈úœ);t ag°dONLNdeê–úE) nd can usually be deleted. °dONLNdÅ¢äÆ¿(´ä For exampleq†°dONLNd墡Æ)7 , because a¿‡°dONLNdó¢Æà)/! paragraph can contain one or mor܇°dONLNd∏¢âÆ¢)ôe worb°dONLNdΩ¢¢Æ)ds, one of the element °dONLNd‘Øäª(∏ä$classes listed for the object class ,
  9367. Courier ‡°dONLNd¯ØªT)é
  9368. cParagraph« °dONLNdØTª§)< is the object class φ°dONLNdاª¬)PcWordÍ¿°dONLNdجª«). Í¿°dONLNdØ«ª¯) Individual °dONLNd)ºä»õ(≈äworÄ°dONLNd,ºú»Ò)ds can be deleted fr’ °dONLNd@ºÒ»D)Uom a paragraph. H∫°dONLNdQºE»e)Toweverı@°dONLNdWºe»j) , ı@°dONLNdYºj»Ω)even though a worÄ°dONLNdjºæ»
  9369. )Td in a paragraph °dONLNd{…ä’«(“äcan be in a dif˜°dONLNdä…«’”)=ferŸÄ°dONLNdç…”’ˇ) ent font fr¨‡°dONLNdò…ˇ’1),
  9370. om the wore@°dONLNd¢…2’G)3ds ar°dONLNdß…H’m)    ound it, Ä°dONLNd∞…m’˜)%a paragraph can have only one °dONLNdŒ÷ä‚®(fläpFont~ °dONLNd”÷®‚¥) pr≈@°dONLNd÷÷¥‚») oper˘ °dONLNd⁄÷»‚–)tyƇ°dONLNd‹÷–‚Ù)    . This prÄ°dONLNdÂ÷ı‚)%operty i{@°dONLNdÌ÷‚+)"s defB°dONLNdÚ÷,‚ë)ined as the font of the f£¿°dONLNd ÷ë‚Ë)eirst character in the °dONLNd!„äÔK(Ïä+paragraph and consists of the name of a fon…‡°dONLNdL„KÔû)¡t. The paragraph’s @°dONLNd_„üÔΩ)TpFont`°dONLNdd„ΩÔ…) pr[Ä°dONLNdg„…Ô) operty can be °dONLNduä¸ÿ(˘ächanged but not r¶‡°dONLNdÜÿ¸˛)Nemoved.°dONLNdéä‰( äRThe properties and element classes listed for each object class definition in the °dONLNd‡ä°*Applec°dONLNd¢§) „°dONLNdʧ&)Event Registry: Standard Suitesm¿°dONLNd'¯)É1 can be inherited from a superclass, or they can °dONLNd6ä(¸(%äoriginate with a subclass. ñ‡°dONLNdQ¸(-)r Figure 3-164¿°dONLNd\.()20 illustrates the object class inheritance hierarËÄ°dONLNdå()¬chy for °dONLNdî)ä5Œ(2äthe object class Ä °dONLNd•)Œ5¯)DcWindow}Ä°dONLNd¨)¯5&)*  in the CorÊ °dONLNd∑)&5≠). e suite. Boldface terms in the fi>‡°dONLNdÿ)Æ5Ω)àgurö °dONLNd€)Ω5»)e r®¿°dONLNdfi)»5÷) epr9Ä°dONLNd·)◊5
  9371. ) esent those °dONLNdÌ6äBì(?äprG °dONLNdÔ6îB)
  9372. operties, element classes, or º`°dONLNd6Bi)|Apple events that ar_@°dONLNd!6jBˆ)Z"e not inherited. The object class °dONLNdCCäO¥(LäcWindow}`°dONLNdJC¥O)* includes all the pr.Ä°dONLNd^CO?)Roperties and "Ä°dONLNdkC?O≠)9Apple events of its super0@°dONLNdÑC≠OΔ)nclass, °dONLNdãPä\‰(YäcOpenableObjectz`°dONLNdöP‰\v)Z#, which in turn includes all the prE °dONLNdΩPw\∞)ìoperties and 9 °dONLNd P∞\)9Apple events of its °dONLNdfi]äi£(fäsuperT‡°dONLNd„]£iº)class, 'Ä°dONLNdÍ]ΩiÁ)cObject$‡°dONLNdÒ]Ái2)*. The object class `°dONLNd]3i])LcWindow¿°dONLNd ]]iî)* also includeöÄ°dONLNd]îiü)7s 1 ‡°dONLNd]üi¨) 1 pM°dONLNd]≠i∞)r°dONLNd]±i¸)operties and one °dONLNd0jäv(sä"element class that originate with N@°dONLNdRjvF)ícWindowK†°dONLNdYjFvd)* and ar˝¿°dONLNd`jdv©)e not inherited. °dONLNdr|äàê(ÖäT†¿°dONLNds|êàù)he ª¿°dONLNdv|ùà¡)pClassπÄ°dONLNd||¡àÕ)$ pr†°dONLNd|Œà)operty—the pr*Ä°dONLNdå|à^)Aoperty that specifiÙ °dONLNdü|^àå)O es the fourm†°dONLNd™|çàÁ)/-character class ID—°dONLNdæâäïœ(íäoriginates with µÄ°dONLNdŒâœï˘)EcObject≤‡°dONLNd’â˘ï')* . Because tÿ†°dONLNd‡â'ïE).he defi¿°dONLNdÁâEïƒ) nitions of all object classes ar÷†°dONLNdâƒï˚)e ultimately °dONLNdñä¢∂(üä
  9373. derived frd‡°dONLNdñ∂¢Δ),om .`°dONLNd!ñ«¢Ò)cObject+¿°dONLNd(ñÒ¢ˆ)*, +¿°dONLNd*ñˆ¢)pClass)Ä°dONLNd0ñ¢œ)$, is inherited by all object classes. The defie °dONLNd]ñœ¢˙)µ nition for °dONLNdh£äØ¥(¨äcObject}`°dONLNdo£¥ØÔ)* also lists ten $`°dONLNd£ÔØ);<Apple events, which include common events such as Get Data, °dONLNdª∞äº)(πä"Move, and Delete Element. Because o °dONLNd›∞*ºT)†cObjectlÄ°dONLNd‰∞Tº)*/ is at the top of the object class inheritance °dONLNdΩä…§(Δähierarª°dONLNdΩ§…≥)chyp°dONLNdΩ≥…·) , these ten ”°dONLNd(Ω·…z)."Apple events can use object specifiË`°dONLNdKΩz…â)ôer rȆ°dONLNdOΩâ…õ)ecor^°dONLNdSΩú…„)ds that describe Ì`°dONLNddΩ„…)GApple °dONLNdj ä÷7(”ä*event objects of any object class as a dir≠ °dONLNdî 7÷s)≠ect parameter}°dONLNd° s÷Ÿ)<. Like all abstract super´¿°dONLNd∫ Ÿ÷˚)f    classes, °dONLNd√◊ä„¥(‡äcObject}`°dONLNd ◊¥„)* does not corrª‡°dONLNdÿ◊„))<espond to a r$ °dONLNdÂ◊*„9):eal ˜¿°dONLNdÈ◊8„∂)Apple event object, so its def∂†°dONLNd    ◊∑„)inition does not list °dONLNd    ‰äh(Ìä4any element classes. Unlike any other object class, Ò†°dONLNd    Q‰hí)ficObjectÔ°dONLNd    X‰í)* is at the top of the object °dONLNd    uÒä˝Ô(˙äclass inheritance hierar °dONLNd    çÒ˝˙)fchL†°dONLNd    èÒ˙˝)
  9374. y a[¿°dONLNd    íÒ˝')nd therk@°dONLNd    ôÒ'˝8) efor√@°dONLNd    ùÒ8˝ü)e does not have a superD °dONLNd    ¥Ò†˝π)hclass. ˇaD@ˇ ˇˇˇˇ@
  9375. ˇ·ˇ‚7^
  9376. 4*\¯, Palatino&e.3+l"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@lIntroduction to •)8 Apple Events4⁄*˙¯
  9377. (‡*3-44    )BW’ê)orking WT¿)$ith Object Specifiÿ )C
  9378. er Records4^*¿¯
  9379. g*w¯4g*w¯"h*]
  9380. ˇ·ˇ‚7^°dONLNd\lgú(dl Figure 3-16°dONLNd \Ægï)B<The object class inheritance hierarchy for the object class ,
  9381. Courierâ¿°dONLNdH\ïg∏)ÁcWindow
  9382. w*í¯4w*í¯4v(w)ò@@˜@˜w)∑ ¡¡?…ˇ˛˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚ò@@Ę@Ę∑)˜ ?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚ò@Ä¿˜Ä¿˜˜)7 ?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚ò@¿˜¿˜7)w ?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚ò@@˜@˜w)∑ ?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚ò@@Ę@Ę∑)˜ ?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚ò@Ä¿˜Ä¿˜˜)7 ?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚ò@¿Ú˜¿Ú˜7)i ?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚ò@@˜@˜w)∑ ¡¡»32˚»˚ …˚¡»˚¡ …˚»˚ …˚¡È¯ˇ‡Î˚
  9383. ÈH¯à∞‰ Í@¯0Î˚È@¯0Î˚ Íb¯"0Î˚
  9384. È@¯0‰È@¯0Î˚
  9385. ÈH¯à∞‰ Í@¯0Î˚È@¯0Î˚ Íb˛">:˝"0Î˚È
  9386. @Ã`0‰È
  9387. @~o{œ¯0Î˚È
  9388. HààfiÌü˚Ëàà∞‰ Í
  9389. @Δmûl0Î˚È
  9390. @{flÔ80Î˚ Íb˝":˝"0Î˚È@˝p˝0‰È@¯0Î˚
  9391. ÈH¯à∞‰ Í@¯0Î˚È@¯0Î˚ Íb¯"0Î˚
  9392. È@¯0‰È@¯0Î˚
  9393. ÈH¯à∞‰ Í@¯0Î˚È@¯0Î˚ Íb¯"0Î˚
  9394. ȯˇ‰È?¯ˇÎ˚‰@fl  Â@Ê˚
  9395. ‰@Ê˚  Â@Ê˚‰@fl
  9396. ‰@Ê˚‰@fl  Â@Ê˚
  9397. ‰@Ê˚  Â@Ê˚
  9398. Û¡‡ÌÛ Â0Ù˚
  9399. ÛÂÌ ÙÂÙ˚ÛÂÙ˚ ÙÂÙ˚
  9400. ÛÂÌÛÂÙ˚
  9401. ÛÂÌ ÙÂÙ˚ÛÂÙ˚ò@@Ę@Ę∑)˜  ÙÂÙ˚
  9402. ÛÂÌÛÂÙ˚
  9403. ÛÂÌ ÙÂÙ˚¯?¯ˇ¯ÔˆˇÄ˙˚ ˘ ¯ Ô¢˜"¿˙˚¯ ¯ ÔĘ¿Û¯ ¯ ÔĘ¿˙˚¯ ¯ Ôˆà¿Û ˘ ¯ ÔĘ¿˙˚¯ ¯ ÔĘ¿˙˚ ˘ ¯ Ô¢˜"¿˙˚¯ ¯ ÔĘ¿Û¯ ¯ ÔĘ¿˙˚¯ ¯ Ôˆà¿Û ˘ ¯ ÔIJ8p0¿˙˚#¯ ˛Ä˛ Ô Ä<∞¿¿˙˚% ˘ ˛˙πø˛ Ô ØgÁˇÁ∫˛˛˜øÚ¿˙˚¯ D‰˛ Ô õgø˜ÊŸ¸ˆ?ˆ¿¿Û#¯
  9404.  |§Ä Ô ògº7fŸåˆ<0ÿ¿˙˚¯ ˛˜≥˛ Ô èΩÔˇˇºˇ¸øfi¯¿Û ˘ ¯ ÔÄĸ0¿˙˚¯ ¯ ÔÄ¿¸‡¿˙˚ ˘ ¯ Ô¢˜"¿˙˚¯ ¯ ÔĘ¿Û¯ ¯ ÔĘ¿˙˚¯ ¯ Ôˆà¿Û ˘ ¯ ÔĘ¿˙˚¯ ¯ ÔĘ¿˙˚ ˘ ¯ Ô¢˜"¿˙˚¯ ¯ ÔĘ¿Û¯ ¯ ÔĘ¿˙˚¯?¯ˇ¸Ôˆˇ¿Û ˘¯ˇ¸Ô˜ˇ¿˙˚ÛÂÙ˚ ÙÂÙ˚
  9405. ÛÂÌÛÂÙ˚
  9406. ÛÂÌ ÙÂÙ˚ÛÂÙ˚ ÙÂÙ˚
  9407. ÛÂÌÛÂÙ˚
  9408. ÛÂÌ ¸ÚˇıÚˇ¯¸˚˚˙˙ı ˙˙ ¸˚  ¸˙˙ ı˙˙¸˚˚0˙˙ı˙˙ı˚ ˙˙ı˙˙¸˚˚ ˙˙ı˙˙ı  ¸ ˙˙ı˙˙¸˚˚ ˙˙ı˙˙¸˚  ¸ ˙˙ı˙˙¸˚˚ ˙˙ı˙˙ı˚ ˙˙ı˙˙¸˚˚ ˙˙ı˙˙ı  ¸ ˙˙ı˙˙¸˚˚ ˙˙ı˙˙¸˚  ¸ ˙˙ı˙˙¸˚˚ ˙˙ı˙˙ı&?˚ˇ˙ˇ¿˙ˇ˝˚ˇ¯˚ˇ‡˙ˇÄ˚) ˚Ä˚`˚IJ˚àå@˚0˙¿˙ò@Ä¿˜Ä¿˜˜)7 *  ˚Ä˚`˚IJ˚ @˚0˙¿˚* ˚Ä˚`˚IJ˚ @˚0˙¿˚*  ˚Ä˚`˚IJ˚",@˚0˙¿˚) ˚Ä˚`˚IJ˚ @˚0˙¿˙* ˚Ä˚`˚IJ˚ @˚0˙¿˚) ˚Ä˚`˚IJ˚àå@˚0˙¿˙*  ˚Ä˚`˚IJ˚ @˚0˙¿˚* ˚Ä˚`˚IJ˚ @˚0˙¿˚*  ˚Ä˚`˚IJ˚",@˚0˙¿˚5 ˝0Ä˚`˛¿IJ    ` @˚0˛#˛¿˙< òÄê˛    `@IJ
  9409. ? @<˝@0?˛¿˚< =6ÄÚ<ÓÄ`‚q6IJèûÔflˇ¯åC“„˜”º0—a¿˙=  D®ôÄ@``KòIJûcsõ‡ DSR¨R@0\!¿˚= @¯ë0Äı@`"LêIJ csõ‡ DØ“H0!¿˚=  <ó<ÿġåm@`‹Ô¸IJ'æ˜ˇÛb,C¸„œ©ª00¯ˇΔ¿˚) ˚Ä˚`˚IJ˚ @˚0˙¿˙* ˚Ä˚`˚IJ˚ @˚0˙¿˚) ˚Ä˚`˚IJ˚àå@˚0˙¿˙*  ˚Ä˚`˚IJ˚ @˚0˙¿˚* ˚Ä˚`˚IJ˚ @˚0˙¿˚*  ˚Ä˚`˚IJ˚",@˚0˙¿˚) ˚Ä˚`˚IJ˚ @˚0˙¿˙* ˚Ä˚`˚IJ˚ @˚0˙¿˚) ˚Ä˚`˚IJ˚àå@˚0˙¿˙*  ˚Ä˚`˚IJ˚ @˚0˙¿˚* ˚Ä˚`˚IJ˚ @˚0˙¿˚( ?˚ˇ¯˙ˇ‡˙ˇÄ˛˚ˇ¸˚ˇ˙ˇ¿˚(˚ˇ¯˚ˇ‡˙ˇÄ˛˚ˇ¸?˚ˇ˙ˇ¿˙»˚¡ …˚»˚ …˚¡»˚¡ …˚»˚ …˚¡»˚¡ …˚»˚ …˚¡»˚¡ …˚»˚ …˚¡»˚¡ …˚»˚ …˚¡»˚¡ …˚»˚ …˚¡ò@¿˜¿˜7)w »˚¡ …˚»˚ …˚¡»˚ŸÒˇ‡˙ ⁄ÄÚ ˚ ŸÄÚ ˚ ⁄¢Ú" ˚
  9410. ŸÄÚ ˙ŸÄ˚¿˚ ˚Ÿ˚àè»à»˚à†˙ ⁄Ä˝ÁªÁˇ∏¸ ˚ŸÄ˝gôºÁ¸ ˚ ⁄¢˝"#'ªæÁÚ¸" ˚ŸÄ˝Áøˇ˝∞¸ ˙ ŸÄÚ ˚ŸÒà†˙ ⁄ÄÚ ˚ ŸÄÚ ˚ ⁄¢Ú" ˚
  9411. ŸÄÚ ˙ ŸÄÚ ˚ŸÒˇ‡˙ ⁄ÄÚ ˚ ŸÄÚ ˚ ⁄ÄÚ ˚
  9412. ŸÄÚ ˙ ŸÄÚ ˚
  9413. ŸÄÚ ˙ ⁄ÄÚ ˚ ŸÄÚ ˚ ⁄ÄÚ ˚
  9414. ŸÄÚ ˙ ŸÄÚ ˚
  9415. ŸÄÚ ˙ ⁄ÄÚ ˚ ŸÄÚ ˚ ⁄ÄÚ ˚
  9416. ŸÄÚ ˙ŸÄˆ ˚Ÿ
  9417. Ä#‡¸ ˙ ⁄ ÄõçπùI«zªy¿˛ ˚Ÿ Ä&_    r, ä& ˛ ˚ ⁄ Ä&Q     K„$ä'‡˛ ˚Ÿ Äè    ˘fiƒ8¿˛ ˙ŸÄ˛˛ ˝ ˚ŸÄ˛˛p˝ ˙ ⁄ÄÚ ˚ŸÄ˚Ä˙ ˚ ⁄Ä˚xÄ˙ ˚ŸÄ¸àч¸ ˙ŸÄ¸    Äé1ĸ ˚ŸÄ¸    àí `¸ ˙ ⁄ĸsÔ{¿¸ ˚ŸÄ¸¯ ˚ ⁄ĸ¯ ˚
  9418. ŸÄÚ ˙ŸÄ˙ ¸ ˚ŸÄ˚#‡˛ ˙ ⁄ĸ Iœdz≠˘¿ ˚ŸÄ¸     J$9$ Ö&  ˚ò@@˜@˜w)∑  ⁄ĸ     K‰I$$Ö'‡ ˚ŸÄ¸
  9419. œ<ˇ¬8¿ ˙ŸÄ¸¸  ˚ŸÄ¸¸p ˙ ⁄ÄÚ ˚ ŸÄÚ ˚ ⁄Ä˚Ã˘ ˚ŸÄ¸h∫8˚ ˙ŸÄ¸    Y’D˚ ˚ŸÄ¸    JU|˚ ˙ ⁄ĸÈı˚ ˚ŸÄ¸¯ ˚ ⁄ĸ¯ ˚
  9420. ŸÄÚ ˙ŸÄ¯¸ ˚ŸÄ˚¯0¸ ˙ ⁄ĸmˇ}˜Ä˝ ˚ŸÄ¸˚?7?Ä˝ ˚ ⁄ĸÔ?73¸ ˚ŸÄ¸˘Áˇˇ¸ ˙ŸÄ¸ ¯ ˚ŸÄ¸¯ ˙ ⁄ÄÚ ˚ŸÄ˘¿¸ ˚ ⁄Ä˚
  9421. ˛<¿Ä ˚ŸÄ¸
  9422. o«ÊœÊˇ ˙ŸÄ¸ ˝Ô‡Ÿø˜Á‡ ˚ŸÄ¸
  9423. ÔcfŸèÁ‡ ˙ ⁄ĸ ˇˇ=Ô=ˇø ˚ŸÄ¸ ¯ ˚ ⁄ĸ¯ ˚
  9424. ŸÄÚ ˙ŸÄ¯¿8˝ ˚ŸÄ˚    ˛~ Ä ˙ ⁄ĸ o«ˇflÊ˚ ˚ŸÄ¸ ˝ÔòØΩÄ ˚ ⁄ĸ ÔcÕõÌÄ ˚ŸÄ¸
  9425. ˇˇ=Á=ˇø‡ ˙ŸÄ¸ ¯ ˚ŸÄ¸¯ ˙ ⁄ÄÚ ˚ÌÒˇ˛Ä˙Ä˚ ˚ ÓÚ"#˛Ä˚xÄ˚ ˚Ìڲĸ3Ôø¸ ˙Ìڲĸ±πˇ‡¸ ˚ÌÚàâ˛Ä¸±π·‡¸ ˙ Óڲĸ{ˇˇ¸ ˚Ì˙q¿ÅIJ˛Ä¸ ¯ ˚% Ó˛" #‚""2‚?¢"&""#˛Ä¸¯ ˚Ì˛˛?    Ô<«ÁÁºˇÄ˛ÄÚ ˙&Ì˛ o=ˇ∑∂œÁ±ˇ∂˛Ä˘8¿˛ ˚&Ì˛à ÎΩÈΩæÃÔπÈé»àâ˛Ä˚xò0˝ ˙+ Ó˛ =Ô?ˇ˝Áˇ·æÛIJĸ 0¸˛}œø ˚&Ì˝ ¸IJ˛Ä¸ ±ˇ?0ΔÊ ˚' Ó˝">¸"'˝"#˛Ä¸ ∞lΔÊ ˚Ìڲĸ
  9426. y˛=ÔùÔ˛ ˙Ìڲĸ ˚ ˚ÌÚàâ˛Ä¸˚| ˙ ÓÚ˛ÄÚ ˚ÌÒˇ˛Ä¯8˝ ˚ ÓÚ˛Ä˚xÄ0˝ ˚Ìڲĸ0ˇΩ˛˝ ˙Ìڲĸ±ˇÁ?˝ ˚Ìڲĸ∞yÁ;˝ ˙ò@@Ę@Ę∑)˜  ÓڲĸyˇΩˇº˝ ˚Ìڲĸ ¯ ˚ Óڲĸ¯ ˚ÌÚ˛ÄÚ ˙ÌÚ˛Ä¯8 ˚ÌÚ˛Ä˚x˛ ˙# Úˇ¯Ú˛Ä¸ 0˝º˛?«ô‡ ˚#Úڲĸ ±ˇˆÊ€ ˚# 
  9427. Ú"(ڲĸ ∞o`ff€ ˚"Úڲĸ
  9428. y˝ˇÔ?ˇΩ ˙Úڲĸ ¯ ˚Òàڲĸ¯ ˙# ˚ ˙p ˜˛ÄÚ ˚0˚ˆ0¸H@¿èÄ˝˛Ä˜á˛ ˚6 
  9429. ¸"?øæ˜˛¸"(Nn6Êty'ÍÌÁ˛˛Ä˚xÄɲ ˚6¸mûÕ˝∞¸tô|o¿%»∞Ç(òIJĸ
  9430. 0Û=ˇy„< ˙7¸aûÕå6¸DôDh0%/åí(üIJĸ ±ˆg?Ω≥~ ˚5¸àºˇåˇú˚àDn<'‰;√xg„˛˛Ä¸
  9431. ∞gÁ?Ì≥` ˙3 ˙ ˙˛ ˛IJ˛Ä¸ yÔΩˇøÁæ ˚-˙8˙˛p˛q¿˛˛Ä¸ ¯ ˚ 
  9432. Ú"(ڲĸ¯ ˚Ú˙˙˛ÄÚ ˙"Ú˚‚˙˛Äˆ˛ ˚(Òà˚z"sÄ˝˛Ä˚xÄ0˛ ˙* Úˇ¯˚&8Δ¸˛Ä¸0Û=ˇ=˛ ˚+Ú˚&"H1Ä˝˛Ä¸±ˆg?ˇ0˛ ˚* Ú˚9œΩÔ¸˛Ä¸∞gÁ?„0˛ ˚&Ú˚ ˘˛Ä¸yÔΩˇø¯˛ ˙!Ú˚p˘˛Ä¸ ¯ ˚Úڲĸ¯ ˙ Ú˘ 0˝˛ÄÚ ˚)Ú˚    ¿èIJÄ˙˝ ˚) Ú˚    y'<MëÍ∑Á˛Ä˚< ¸ ˚+Ú˚    %(ê‰êÇòIJĸ
  9433. aÊ=ˇ9ÔÄ ˙,Ú˚    %/ë$êíüIJĸ ªˆl¿ ˚+Ú˚    ;√<Û¸g„˛Ä¸
  9434. ècõ6¿ ˙* Ú˚ ¸Ä˛Ä¸ yˇ?Á=Ô‡ ˚$Ú˚p¸9¿˛Ä¸ ¯ ˚ Úڲĸ¯ ˚ÚÚ˛ÄÚ ˙$Ú˚∞˙˛Ä˙¿é¸ ˚*ˆ˚}ˇ¸¸˛Ä˚¸ܸ ˙3      |3¸˚7˜ˇ¯¸˛Ä¸y«πÊ<˝ ˚5    ŸÃ›éè∑„ˇˇ¸˛˚7˝ˇÄ¸˛Ä¸¯œô∂~˝ ˚5 •>èÿˇ˜«∑¯˛˚=∑˛¯¸˛Ä¸∞√∂`˝ ˚1•0é˜∂«∑IJ˚0˘˛Ä¸1Ô?Ô>˝ ˙-ôŒÖ‹á˝˜ù„<¯˛˚x˘˛Ä¸ ¯ ˚'˛˛0˝Ú˛Ä¸¯ ˙$ ˛˛x˝Ú˛ÄÚ ˚ÚÚ˛ÄÚ ˚ ˚¿˙Ú˛ÄÚ ˚˚<¿˙Ú˛ÄÚ ˙!¸Êœ¸Ú˛ÄÚ ˚ ¸‡«ø¸Ú˛ÄÚ ˙! ¸ÊÕå`¸Ú˛ÄÚ ˚!¸ΩÁ˝‡¸Ú˛ÄÚ ˚ ¸¯Ú˛ÄÚ ˚"¸¯|˝D˘˛ÄÚ ˙!Ú
  9435. Dd˘˛ÄÛ ˚3˙¿¸ DÕ‹T‹`˚˛Ä¯˛IJ ˙7 ˚|1¯˛ }ÍΩ(U2˚˛ Ä3FwmÔÔ‡˛ ˚8¸∑Á˚„}ˇ¸E
  9436. °(M2Ä˚˛ ÄzØJo;?ˇ∑IJ ˚8 ¸˜Û=„0g∑¯|Íù$D“p˚˛ ÄB®Jo8?¯7∞˛ ˚.¸˜m„6g∑ÄÚ˛ Ä:ßI˘Ôˇˇ‡˛ ˙ò@Ä¿˜Ä¿˜˜)7 #¸˝˜˛˜úÛ<¯Ú˛ÄÚ ˚ ¸¸0Ú˛ÄÚ ˙# ¸¸    xÙ˛ÄÚ ˚ÚÙ˛ÄÛ ˚ Úiùÿ˘˛ÄÛ ˚!ÚõÛ=ʲÄgv:ˆ ˙"ÚäL‡`˜˛Ä&¸œ`ˆ ˚!Úy˚ù»˜˛Ä"ì8ˆ ˙ ÚÚ˛Ä~Árˆ ˚ÚÚ˛ÄÚ ˚ ÚÚ˛ÄÚ ˚ÚÚ˛ÄÚ ˙ÚÚ˛ÄÚ ˚IJĢ ÚÄÚ ˙  Ä ĢÚÄÄÚ ˚!    õCsÄ
  9437. ≥ò˙ Ú¿ÄÚ ˚!     æß…
  9438.  |˙˘ÅÚ˛`ÄÚ ˚     ¢§I     `˙@¡Ú0ÄÚ ˙!    û£»Ä≤\˙@aÚÄÚ ˚Ú@1Ú ÄÚ ˙  Ú@a ˛˘ÄÚ ˚'Ú@¡P˛e˘ 0ÄÄ@˘ ˚* Û ˘ÅW:`A70˚ ˛`ÄÄ@˘ ˚*Û t¶AL¯˚ ¿ÄŒòMÃ˙ ˙.cª:ˆ å¶ÄEL¿˚ ÄÄ)ºS>˙ ˚-ˆg‡ˆ è:p94∏˚ Ä#)†S0˙ ˙( ëúˆ ı˛Ä#ŒúM.˙ ˚"wsÚˆ ı˛ÄÙ ˚ ÚÚ˛ÄÙ ˚Ú˚>¸˛ÄÚ ˙-Ú˛  d"˛Ä¸ĸ ˚0Úigw@@“Ó"mœ¿˛ ÄIJ ˙1 ÚıÙ¨A2î>˙ü'˛ÄY›–4ªàõCs ˚1ÚÜÑ£E2î"äë$¿˛Ä=}+L•æß…¿ ˚1 Úttû@8Œí>zè#IJÄ!°(¿L•¢§I0 ˚$ÚÚ˛Ä'ê3§èû£»‡ ˙ÚÚ˛ÄÚ ˚ÚÚ˛ÄÚ ˙! Ú˚@˝˛ÄÚ ˚*Ú˚    d@˛Ä¸–¸ ˚3 @∞˘˚    A±ªY£;IJĸ @ ˚2
  9439. @ ˘˚    A{◊è}W•˛Ä¸
  9440. ln¬hŒ‡ ˙5
  9441. ÓL ?sÄ˚˚    EBTaT%˛Ä¸ ^ı„flUÈ@ ˚4
  9442. ô^ 9ˇ¿˚˚    99Àè]S§Ä˛Ä¸
  9443. PïU    @ ˙+     ôP˘˛˙ڲĸ Nr„◊TÈ  ˚"
  9444. ÓN?{¿˚Ú˛ÄÚ ˚ àÙÚ˛ÄÚ ˚àÙ˚8˙˛ÄÚ ˙$Ú˚$ ˚˛Ä¸˘ ˚,¸Ä¯¸˚$”v˚˛Ä¸    ˙ ˙2  ¿c0˚%˜Ø˚˛Ä¸    4›Ä˚ ˚2-œ– =ÓÛˇ>wÄ˚%(˚˛Ä¸    }ο˚ ˚1 ø' gÔcøˇø˚8Ûó˚˛Ä¸    E
  9445. ˙ ˚+—$¿ÁÔc?«±Äڲĸ<¿˚ ˙%è#ê<ÔsˇøøÚ˛ÄÚ ˚ÚÚ˛ÄÚ ˙" Ú˚    8»Ä˛ÄÚ ˚,Ú˚    $(˛Ä¸Ú ¬˛ ˚4 ¸IJ¸˚    $ƒ.ôªàô¯˛Ä¸     
  9446.  ˚5¸ ¿Δ ˚    %$)æVk˛Ä¸
  9447.     1 ¶n‚&~ ˙6¸ ?ˇœùfi˚    %$)¢àh–˛Ä¸     I
  9448. oïÉ⁄ƒ ˚5¸ ?ø¯«ÔˇÏ˚    8√Œùœõà˛Ä¸
  9449.     I
  9450. hÑb4 ˙1 ¸¸o¿«Òϯĸ˛Ä¸ 0Ûßs√Ê‚ ˚+¸7ø¯ˇÔflÓ˘˚˛Ä˘ ˚ ˚ò@¿Ú˜¿Ú˜7)i  ÚڲĢ@˚ ˚!Ú˚2˛˛ÄÚ ˙,Ú˚" ˛˛Ä¸ Ä@@˛ ˚1¸ÅÄ˙˚    @ŒÇgqw¿˛Ä¸Å2Ä@IJ ˙2 ¸¡Ü˙˚    O‰Ç¸¡K ˛Ä¸3†ô‹]˛ ˚3¸˘ˇ‡˚˚    cäì1K ˛Ä¸˘ ø0R»˛ ˚3 ¸˝ˇ˚˚    ‚r~·J¿˛Ä¸¡"§ÃR»˛ ˚)¸·«Ä˚ڲĸ∏úü∏R∞˛ ˙ ¸Ωˇ˚Ú˛ÄÚ ˚ÚÚ˛ÄÚ ˙ Ú˚p˚˛ÄÚ ˚&Ú˚"H¸˛Ä¸˙ ˚1 ¸Ä|Ã|˚@ŒIª¸˛Ä¸Å˚ ˚2¸¿Δ¿¿``˚O‰K◊Ä˝˛Ä¸3ín¿¸ ˙3¸¸Δ˝›¸fl˚cJTÄ˝˛Ä¸˘ı‡¸ ˚2¸ÊΔflˆ¯cü`˚‚qÀÄ˝˛Ä¸¡ï ¸ ˙+ ¸ÊΔfl0Ãcô‡Ú˛Ä¸∏úr‡¸ ˚#¸º|˝˛¯~flpÚ˛ÄÚ ˚ ˘ ˚Ú˛ÄÚ ˚%˘ ˚˚p@˛˛ÄÚ ˙*Ú˚"H˝˛Ä¸ê˝ ˚4¸¿0 ˛˚    @ŒIª }IJĸÅ@˝ ˙6 ¸aô∞ ˛˚    O‰K◊ÉK¿˛Ä¸3ín√`˛ ˚6¸ ÿ>˜èøÄ˚cJTëR˛˛Ä¸˘ı‡“˛ ˚6 ¸ ˇò?Ô‹¿˚    ‚qÀé}¿˛Ä¸¡ï$TIJ ˚,¸ qõª1è‹¿Ú˛Ä¸∏úr„üp˛ ˙#¸ˇŒ?ÔflÄÚ˛ÄÚ ˚ÚÚ˛ÄÚ ˙ Ú˚B˘˛ÄÚ ˚"Ú˚f˘˛Ä¸Ģ ˚* ¸¿˙˚fi`˚˛Ä¸Ģ ˚+¸açÉ˚˚Zï˚˛Ä¸öX˙ ˙-¸ Õˇ¸˚ZñÄ˚˛Ä¸•|˙ ˚,¸ ˇçøx¸˚Rdp˚˛Ä¸•†˙ ˙' ¸ qçÔÿ¸Ú˛Ä¸ô˙ ˚!¸ˇœ?¯¸Ú˛ÄÚ ˚ ÚÚ˛ÄÚ ˚Ú˚8‡˚˛ÄÚ ˙&Ú˚Dê ¸˛Ä¸8˙ ˚/¸¿ˆ˝˚1úìv¸˛Ä¸$˚ ˙1 ¸açÉò˝˚»óظ˛Ä¸ g$›Ä¸ ˚2¸ ÕˇÁ¸˛˚F˛Ä¸Ú%ο¸ ˚2 ¸ ˇçøx6˛˛˚9ƒ„ó¸˛Ä¸Ç%*@¸ ˚*¸ qçÔŸü∞˛Ú˛Ä¸q8¿¸ ˙#¸ˇœ?¯˜˛˛Ú˛ÄÚ ˚ÚÚ˛ÄÚ ˙ Ú˚<¿˙˛ÄÚ ˚#Ú˚f¿˙˛Ä¸@˘ ˚) ¸`˘˚`˝¸˚˛Ä¸@˘ ˚)¸‡˘˚`Á˛˚˛Ä¸LÏ˙ ˙ò@@˜@˜i)© ?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚?»ˇ˚»ˇ˚¡¡¡¡¡¡¡¡¡¡
  9451. p    Ä»
  9452. ê :@»
  9453. 0Ä @»
  9454. 0‡ Ä»    IG«    âD«
  9455. ü‡¯;¿»¡¡¡¡¡+'˙Ü–A $ 0 A 8d‡È+'H    à    P@ @ @ D@È-)BÙlÅêAQi]≈≤ÕÆ]ô¢µ5§‰≥¨ÅQp—]√L≠é]@Î-)c,ëG$¢Î*†™¢”V$¶™Ü•JV‰JA5BÎ-!R¢R¶î•@Î-)Ö%ìÄÒ:ƒ…tAù»ízI$«ŒRÑ®RB'Ñ…xB$ù»SD•*@Î-)«"Å"RE·ÑM2‰mÈ‹Ëûµ∏îÉ.RKb˜ÑKai≠JÄÎ,(Ö≈°«ú$‚b:@ï;â$úII#âGîI(àÇI¬b<A%;ÑAI6çÍò@@Ę@Ę©)È  ˙ÛIJ· ˙ÛRIJ·¿˙Ûa˝·¡¡(«`8 $¿˛ @`@@¿ Ê'"X†   ˝ @@ Ê($bT¿ÒYiItMà    ≠≠£/E∞fi»ËüDÿ‰)HÇ:[wÊ($Rï@&¢¢˜©*§¶à‘◊&•RJ–IY*JhJw©Cä≠(Ê($åñ@$«$•2D…$à$îïd»îíêQ&KDíHí    %3Ñ…GÊ($Ö$@I‰G [_ÌIÑi!!…Έ’0$⁄*Œ^‘ò‘JZUaÊ($≈¥‰iC≈1í%Hâë))iD§â"4ík$àêà3±ëœàÚNÊ˝˛Bı¯B·˝˛Bı¯B·
  9456. ˘BÎB·¡¡ˇ @å @#Ï0ÄÿR ˝ @@HÄÿRGıóDÿyƒÉ  Óu' —¬äπ√ë(ŸíÃ"*JhäJI]P*Pp.èR*ÙŸ§[¬LíHpú˜Èé)R‡@!äa…w$Ÿ6p‰~‘òDí¬*vÄbQî∞KDHŸ§_DTàêÛŒá9Ãú4[q±éc#çª∞Ÿı˚˛@Ÿı˚˛@Ÿı˚˛@Ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¡‡˛ćÕ@1˛Ä@Õ 1JD@-e# ¿v0Œ 3ΩJ@VƉïöPŒ I)ú@î§≠9íÄŒ äR–#©    9¢&∞Œ ùåéIF-§DŒ˛ Ã˛ Ã ˛…¡¡ƒ;Ä8‡@÷HHÄ
  9457. @@÷IxàûMùlDÑÍ'Xê
  9458. QeÂn◊Rê±d¶©4§Öe©PrÑäJê◊ц¢e$ %%‰")+†ñxííé◊á∞íôI€MI<":B0&‹’◊≈!…8ânHãÈËw*Q‚4ñÈâ◊¸D˛˛—¸D˛˛P—
  9459. ¸8˙`œ¡ò@Ä¿˜Ä¿˜È)) ¡ ˇ    R       RGıó%Ç  íÃ"*R  §[¬Lí  6p‰~§  §_DTDL ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜))i ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜i)© ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę©)È ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜È)) ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜))[ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜i)© +¸ˇæ˙˚nÊp˚˛Ä¸Sû˙ ˚*¸Ûˇ˙˚8ˇfi˚˛Ä¸Rp˙ ˙% ¸Û¯˙ڲĸMŒ˙ ˚¸˛œ˙Ú˛ÄÚ ˚ ÚÚ˛ÄÚ ˚Ú˚>˘˛ÄÚ ˙!Ú˚c˘˛Ä¸¯ ˚)¸Ä˙˚c˜8˚˛Ä¸Ģ ˙, ¸ √˚˚cflº˚˛Ä¸Ò∏˙ ˚-¸?õˇ‡¸˚c‹<˚˛Ä¸À‰˙ ˚- ¸ˇ~¸˚>˜º˚˛Ä¸ $˙ ˚*¸ „fl∞¸˙¿˙˛Ä¸q‰˙ ˙)¸øû¸˙¿˙˛Ä˚@˘ ˚ÚÚ˛Ä˚@˘ ˙ ÚÚ˛ÄÚ ˚ÚÚ˛ÄÚ ˚ ÚÚ˛ÄÚ ˚ÚÚ˛ÄÚ ˙ÚÚ˛ÄÚ ˚ÚÚ˛ÄÚ ˙ Úˇ¯Òˇ˛Òˇ‡˚»˚ …˚¡»˚¡ …˚»˚ …˚¡»˚¡ …˚»U˚»3˚¡¡¡¡¡¡¡¡¡¡
  9460. p    Ä»
  9461. ê :@»
  9462. 0Ä @»
  9463. 0‡ Ä»    IG«    âD«
  9464. ü‡¯;¿»¡¡¡¡¡+'˙Ü–A $ 0 A 8d‡È+'H    à    P@ @ @ D@È-)BÙlÅêAQi]≈≤ÕÆ]ô¢µ5§‰≥¨ÅQp—]√L≠é]@Î-)c,ëG$¢Î*†™¢”V$¶™Ü•JV‰JA5BÎ-!R¢R¶î•@Î-)Ö%ìÄÒ:ƒ…tAù»ízI$«ŒRÑ®RB'Ñ…xB$ù»SD•*@Î-)«"Å"RE·ÑM2‰mÈ‹Ëûµ∏îÉ.RKb˜ÑKai≠JÄÎ,(Ö≈°«ú$‚b:@ï;â$úII#âGîI(àÇI¬b<A%;ÑAI6çÍò@@Ę@Ę©)È  ˙ÛIJ· ˙ÛRIJ·¿˙Ûa˝·¡¡(«`8 $¿˛ @`@@¿ Ê'"X†   ˝ @@ Ê($bT¿ÒYiItMà    ≠≠£/E∞fi»ËüDÿ‰)HÇ:[wÊ($Rï@&¢¢˜©*§¶à‘◊&•RJ–IY*JhJw©Cä≠(Ê($åñ@$«$•2D…$à$îïd»îíêQ&KDíHí    %3Ñ…GÊ($Ö$@I‰G [_ÌIÑi!!…Έ’0$⁄*Œ^‘ò‘JZUaÊ($≈¥‰iC≈1í%Hâë))iD§â"4ík$àêà3±ëœàÚNÊ˝˛Bı¯B·˝˛Bı¯B·
  9465. ˘BÎB·¡¡ˇ @å @#Ï0ÄÿR ˝ @@HÄÿRGıóDÿyƒÉ  Óu' —¬äπ√ë(ŸíÃ"*JhäJI]P*Pp.èR*ÙŸ§[¬LíHpú˜Èé)R‡@!äa…w$Ÿ6p‰~‘òDí¬*vÄbQî∞KDHŸ§_DTàêÛŒá9Ãú4[q±éc#çª∞Ÿı˚˛@Ÿı˚˛@Ÿı˚˛@Ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¡‡˛ćÕ@1˛Ä@Õ 1JD@-e# ¿v0Œ 3ΩJ@VƉïöPŒ I)ú@î§≠9íÄŒ äR–#©    9¢&∞Œ ùåéIF-§DŒ˛ Ã˛ Ã ˛…¡¡ƒ;Ä8‡@÷HHÄ
  9466. @@÷IxàûMùlDÑÍ'Xê
  9467. QeÂn◊Rê±d¶©4§Öe©PrÑäJê◊ц¢e$ %%‰")+†ñxííé◊á∞íôI€MI<":B0&‹’◊≈!…8ânHãÈËw*Q‚4ñÈâ◊¸D˛˛—¸D˛˛P—
  9468. ¸8˙`œ¡ò@Ä¿˜Ä¿˜È)) ¡ ˇ    R       RGıó%Ç  íÃ"*R  §[¬Lí  6p‰~§  §_DTDL ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿˜¿˜))i ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@˜@˜i)© ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ę@Ę©)È ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿˜Ä¿˜È)) ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Ú˜¿Ú˜))[ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ˇ;F@ˇ ˇˇˇˇ@
  9469. ˇ·ˇ‚7^
  9470. 4H\, Palatino&e.3+ä"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@äIntroduction to •)8 Apple Events4⁄ä˙(‡äW’ê)orking WT¿)$ith Object Specifiÿ )C
  9471. er Records
  9472. , (‡3-45
  9473. ˇˇˇˇˇˇˇˇ440lòÄ.B0oMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""B0oB0o$””””””””””””””””””””””””””””””òÄ
  9474. 60@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""60@60@˜˜˜˜˜˜˜˜˜˜˜˜˜
  9475. ˛ˇ˛ˇˇ ˇˇ˛ˇˇ     ˇˇˇ˙ˇ
  9476. ˛ˇˇˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜
  9477. 454+?òÄ
  9478. 56+@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""56+@56+@$˜˛˙ˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  9479. ˛ˇ˛ˇˇ˛¸ˇˇ˚ˇ˛˙ˇˇ˝˛ˇ˛
  9480. ˛ˇ˛ˇˇ
  9481. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  9482. ˛ˇ˛ˇˇ
  9483. ˛ˇ˛ˇˇ˛˙ˇ˜˝˝ˇˇ˛ˇ˚˝ˇ¸˛¸ˇˇ˜˝˛ˇ˛
  9484. ˛ˇ˛ˇˇ
  9485. ˛ˇ˛ˇˇ˝ˇˇ˛˜˝¸ˇ
  9486. ˛ˇ˛ˇˇ˛¸ˇˇ˜˝˛ˇ˛
  9487. ˛ˇ˛ˇˇ
  9488. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˜˝¸ˇ
  9489. ˛ˇ˛ˇˇ˝˛ˇ˛
  9490. ˛ˇ˛ˇˇ
  9491. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  9492. ˛ˇ˛ˇˇ
  9493. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  9494. ˛ˇ˛ˇˇ
  9495. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  9496. ˛ˇˇˇˇ
  9497. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  9498. ˛ˇˇˇ
  9499. ˛ˇˇˇ
  9500. ˛ˇˇˇ
  9501. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  9502. ˛ˇˇˇˇ
  9503. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  9504. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  9505. ˛ˇˇˇˇ
  9506. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\äh®(eäAThe chain of containers that determine the location of one or mor, °dONLNdA\©h∞(e©e `°dONLNdC\∞h)Apple event objects is °dONLNdZiäu∑(rä called the É¿°dONLNdei∑u)-container hierarchy-°dONLNdxiu)X.≠°dONLNdyium) The container hierarì@°dONLNdéimu|)\chyH@°dONLNdëi|uª), which specifià¿°dONLNd†iªu)?es the location of °dONLNd≥väÇç(ärE°dONLNd¥véÇù)eal †°dONLNd∏vùÇ)Apple event objects, is dif¿@°dONLNd”vÇ)qfer¢¿°dONLNd÷vÇ1) ent fr°dONLNd‹v2ÇS)om the ?‡°dONLNd„vSlj)!"object class inheritance hierarchy˝†°dONLNdv„Ç)ê , which is °dONLNdÉäèP(åä,an abstract concept that determines which pr °dONLNd<ÉQè’)«operties, element classes, and `°dONLNd[É’è)ÑApple events °dONLNdhêäúˆ(ôäan object class inherits frº °dONLNdÉêˆú,)l om its superB@°dONLNdèê-úŸ)7(class. For example, the container hieraré`°dONLNd∑êŸú)¨ chy for an °dONLNd¬ùä©(¶äApple event object of class ,
  9507. Courier6‡°dONLNdfiù© )xcWord5°dONLNd„ù ©R)  can vary fr7Ä°dONLNdÔùR©á)2
  9508. om one wor#°dONLNd˘ù᩺)5 d to anotherP °dONLNdùº©
  9509. )5, because various °dONLNd™ä∂Ì(≥äcombinations of other Z@°dONLNd-™Ì∂)cBApple event objects, such as a document, a paragraph, a delimited °dONLNdo∑ä√Í(¿ästring, or another worK`°dONLNdÖ∑Î√D)ad, can contain a wormÄ°dONLNdô∑D√O)Yd. °dONLNdù…ä’˛(“äApplications that support •¿°dONLNd∑…˛’€)t3Apple event objects must be able to identify the or_†°dONLNdÍ…‹’¯)fider of °dONLNdÒ÷ä‚>(flä*several elements of the same class that ar*†°dONLNd÷?‚∏)µe contained within another R@°dONLNd6÷∏‚)yApple event object. °dONLNdJ„äÔÓ(ÏäFor example, each woré`°dONLNd_„ÓÔ†)d'd in a paragraph should have an identifi¶@°dONLNdᄆÔæ)≤able orö`°dONLNdé„æÔÃ)derµ°dONLNdë„ÃÔ¸) , such as thãÄ°dONLNdù„˝Ô)1e °dONLNdüä¸ö(˘ä5th ¿°dONLNd£õ¸£)wj¿°dONLNd§£¸¨)or•@°dONLNd¶¨¸…)    d or th<‡°dONLNd≠ ¸Ô)e 12th wq@°dONLNdµÔ¸¯)%or´¿°dONLNd∑¯¸∫)    .d. This allows other applications to identify ˘°dONLNdÂ∫¸)¬Apple event objects °dONLNd˘˝ä    ~(ä8by describing their absolute position within a containerÄ°dONLNd1˝~    É)Ù. °dONLNd4ä¢(äFigurR¿°dONLNd9¢ª)e 3-17@°dONLNd?ªÈ)
  9510.  shows an ˚ °dONLNdIÈ}).#Apple event object of object class  °dONLNdl~ú)ïcWord@°dONLNdqú»)—the worÔ °dONLNdy«˘)+
  9511. d “Sales”—°dONLNdÉä(Á(%äcontained in another 
  9512. ‡°dONLNdòË(|)^#Apple event object of object class ‡°dONLNdª|(∏)î
  9513. cParagraph °dONLNd≈∏()<. (Both these object °dONLNd⁄)ä5≥(2ä
  9514. classes arû@°dONLNd‰)≥5À))e defi⁄°dONLNdÍ)À5ˇ) ned in the T›†°dONLNdˆ)ˇ5E)4ext suite.) The fig °dONLNd)F5U)Ggur¬`°dONLNd )U5)(e shows only a portion of the container °dONLNd36äB§(?ähierarª°dONLNd96§BÁ)chy for the wor6†°dONLNdH6ËB†)D*d, since a complete description of the worÄ°dONLNdr6†B)∏d would also include the °dONLNdãCäOr(Lä6containers that specify the location of the paragraph.‘‡°dONLNd¡CrOt)Ë °dONLNd√Uäaê(^äY@Ä°dONLNdƒUêaU),our application must take account of the defiÊ°dONLNdÒUUaë)≈nitions in the eÄ°dONLNdUíaÓ)=Apple Event Registry: °dONLNdbänØ(käStandard∂@°dONLNdbØn±)% 6@°dONLNdb≤nÀ)Suites6‡°dONLNd%bÀnÈ)A for any object classes you want to support. For example, the defi_ °dONLNdgbÈn(kÈ nition for °dONLNdroä{Œ(xäthe object class Ä °dONLNdÉoŒ{Ï)DcText~@°dONLNdàoÏ{e) lists paragraphs, lines, worÆ°dONLNd•oe{¬)yds, and characters as Q@°dONLNdªo√{˚)^ Apple event °dONLNd«|äà(Öä!objects that can be contained in j °dONLNdË|àë)åApple event objects of class ^°dONLNd|íà∞)|cText\ °dONLNd
  9515. |∞àª). T뇰dONLNd|∫àø)
  9516. o`°dONLNd|¿àÁ)     support õ‡°dONLNd|Áà)'Apple °dONLNdâäï¿(íäevents that r%`°dONLNd*â¡ïH)7!efer to elements of object class ç °dONLNdKâHïf)ácTextã@°dONLNdPâfïÆ), your applicatioÔ °dONLNdaâÆï‹)H
  9517. n should aO†°dONLNdkâ›ï)/ssociate the °dONLNdxñ䢮(üäcText~ °dONLNd}ñ®¢W)) object class with paragraphs, lines, wor5@°dONLNd¶ñX¢ )∞)ds, and characters in its documents. The °dONLNdœ£äØØ(¨ä
  9518. list of pr`†°dONLNdŸ£ØØÂ)% operties defi8°dONLNdÊ£ÊØ)7ned for class ˝`°dONLNdÙ£Ø=)9cText˚Ä°dONLNd˘£=ØÅ) includes the pr[‡°dONLNd    £ÇØß)E    operties A °dONLNd£®ØÃ)&pColorÅÄ°dONLNd£ÀØ–)#, ÅÄ°dONLNd£–ØÓ)pFont†°dONLNd£ÓØÛ), °dONLNd!∞äºΔ(πä
  9519. pPointSize|@°dONLNd+∞ΔºÀ)<, |@°dONLNd-∞Àº)
  9520. pScriptTagxÄ°dONLNd7∞º)<, and †°dONLNd=∞ºa) pTextStyles·Ä°dONLNdH∞aºÃ)B. If you want to support ÷¿°dONLNda∞ú    )kApple events °dONLNdnΩä…:(Δä(that distinguish a boldface 12-point worÄ°dONLNdñΩ;…Ç)±d of object class ê`°dONLNd®ΩÇ…†)GcTextéÄ°dONLNd≠Ω†…©) fr'`°dONLNd∞Ω™…)
  9521. om an italic 14-point °dONLNdΔ ä÷õ(”äworÄ°dONLNd… ú÷)Xd, for example, your application must associate the point size and style of text in its ˇˇ«a°dONLNd    !◊ä„Ì(‡ädocuments with the prD√°dONLNd    6◊Ó„)d    operties ˇˇx$Òd°dONLNd    ?◊„O)%
  9522. pPointSizeˇˇ«a̧°dONLNd    I◊O„d)< and ˇˇx$iÜ°dONLNd    N◊e„ß) pTextStylesˇˇ«aef°dONLNd    Y◊ß„∫)B defiûÁ°dONLNd    ^◊∫„Û)ned for class ˇˇx$∫j°dONLNd    l◊Û„)9cTextˇˇ«a∏ä°dONLNd    q◊„). ˇZF@ˇ ˇˇˇˇ@
  9523. ˇ·ˇ‚7^
  9524. 4*\¯, Palatino&e.3+l"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@lIntroduction to •)8 Apple Events4⁄*˙¯
  9525. (‡*3-46    )BW’ê)orking WT¿)$ith Object Specifiÿ )C
  9526. er Records4^*¿¯°dONLNd\lgú(dl Figure 3-17°dONLNd \Ægª)BAn É °dONLNd\ªg()Apple event object of class ,
  9527. Courier ¿°dONLNd+\)gB)ncWord
  9528. °dONLNd0\DgÜ) contained in an í°dONLNdA\Ög€)AApple event object of 
  9529. q*ů4q*ů
  9530. ˇ·ˇ‚7^°dONLNdWfÆq≈(nÆclass Ä@°dONLNd]f≈q˜)
  9531. cParagraph
  9532. .*5¯4.*4¯ /l/¯
  9533. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNdil.ú(*lFinding e–°dONLNdqú.)0Apple Event Objectsˇˇˇˇˇˇ€r(*3
  9534. °dONLNdÜ4l@†(=l Most of the ≤Ä°dONLNdí4†@    )4Apple events in the Cor¢‡°dONLNd©4    @Ö)ie suite and the functional-ar°dONLNdΔ4Ö@æ)|ea suites defi∞@°dONLNd‘4æ@Ï)9 ned in the °dONLNdflAlM(Jl%Apple Event Registry: Standard Suitesm¿°dONLNdA    M—)ù/ can include parameters that consist of object °dONLNd3NlZà(WlspecifiÓ °dONLNd:NàZó)er rÔ`°dONLNd>NóZ©)ecorc¿°dONLNdBN™Zπ)ds. 釰dONLNdFNπZø)YO`°dONLNdGNøZ∞)8our application’s handlers for these events can use the ‡°dONLNdN∞ZÊ)Ò    AEResolveÌÄ°dONLNdàNÊZË)6 °dONLNdâ[lg¢(dlfunction to r  °dONLNdñ[£g˙)7esolve object specifi¿°dONLNd´[˙g    )Wer r°dONLNdØ[    g)ecorì`°dONLNd≥[gÇ)ds: that is, to locate the x†°dONLNdŒ[ÇgÒ)gApple event objects they °dONLNdÁhltì(ql    describe.°dONLNdÒzlÜ*The ª¿°dONLNdızܵ)    AEResolve∏`°dONLNd˛zµÜC)6! function parses an object specifi醰dONLNd zDÜS)èer r臰dONLNd$zSÜe)ecor@°dONLNd(zfܱ)d and performs r›Ä°dONLNd8z∞ÜÊ)Jelated tasks °dONLNdEálìà(êlthat ar °dONLNdLáâì) e the same for all object specifig¿°dONLNdmáì)Üer ri°dONLNdqáì0)ecor›`°dONLNduá0ìI)ds. W6 °dONLNdzáJìá)hen necessary◊`°dONLNdááÜìõ)<, the 4¿°dONLNdçáúì“)    AEResolve1`°dONLNdñá“ì‘)6 °dONLNdóîl†ó(ùl
  9535. function c~Ä°dONLNd°îò†Ô),alls application-defi     °dONLNd∂î†ñ)X&ned functions to perform tasks that arx°dONLNd‹îñ†⁄)¶e unique to the °dONLNdÏ°l≠(™l&application, such as locating a specifi¡ °dONLNd°≠)£c S°dONLNd°≠◊)-Apple event object in the application’s data °dONLNdBÆl∫w(∑lstrfi°dONLNdEÆw∫é) ucturc‡°dONLNdJÆè∫ì)e-Ä°dONLNdKÆî∫ö)s.
  9536. f*mß4g*mß"h*]
  9537. Å*¯4Å*¯4Ä)Å*ò@@ˆ@ˆÅ*¡ ¡¡? ˇ¿˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙ò@@Ĉ@Ĉ¡* ? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙ò@Ä¿ˆÄ¿ˆ*A ? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙ò@¿ˆ¿ˆA*Å ? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙ò@@ˆ@ˆÅ*¡ ? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙ò@@Ĉ@Ĉ¡* ? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙? ˇ‡˙ò@Ä¿ˆÄ¿ˆ*A ? ˇ‡˙ ˇ‡˙¡¡¡¡¡¡¡¡¡¡¡¡¡    #·¿&«    ! ÄÈ«    aÄ!«    a¿ÄG«
  9538. í@Ä»
  9539. !HÄ»    ?√‡Á«¡¡¡¡¡$ ¯ xÇ@ 2`@@Ñ‚$ êÄ@" @Ä‚&"âË≤l )IȀǢ#·8hΩ¡¶Ig õÂ[#á`ª‰&" YE 4 w™Ö*È÷UBê©b©TäMJMU°M‰&"KN‰     $%7OJ    íËÑë]ƒ)§í"IíâÈ    "I‰&"éà@L"J\Tõ
  9540. §ã≈!{ƒE∞©.ìfi”ãc”‰&"ãá@3»g1ìá#íƒtÇ íªÇ ëîí}äBí‰@˙B¸ ÷@˙B¸†÷Ä˙B¸@÷¡¡ ¿ ¡¿¿˛÷ ÄÄ ˛÷bîê.ñ¯*"> ÜäÓ%µ}ññ÷gz®R´P]eT
  9541. ï)JJí/Z÷íSp‰Ú`ô.à%$ÓBRíJR÷•¿ÖD™Hº*º"Zûd|ñ÷;8r<†LGH    )‹'î‰S$÷ ¸@¸’ ¸@
  9542. ¸’ ¸Ä˚‡’¡¡'膿‡@tH˝@Äp ¿Ä8ÄÄÊ'E1˛@ @Ä˝  @ÄÄÊ($≈)ÄvÂe•$eË∂ ∂≤6F\ì`-ı°—|ãcêRít∑ŒÊ($¶*ÄöJãfi§™IZ +SVZJ®©†F¢R≤®ï°(ÔUZêÊ($,Äíúíî…íR JRR“ë1I D¬îó%"H$Jn'ìÊ($ HÅ&—)m~⁄¶‘Ñɶ◊˘“`≕ùy™cPDî∏™'ÇÊ($éi—§èΔHîë$$§¢‰âQ"H…DF÷ëB Œc'ÂÊ˝ ı¯Ñ·˝ ı¯Ñ· ˙ÎÑ·¡¡˛@Ä0ÅÜ ¿ ◊ò@¿Úˆ¿ÚˆA*s §@˝ Aì  ◊•ˆ\ãa”í É+∏ÍéC@í%wD†Ÿ'(H®ï¢®%u@*î°√úN®´–ŸIgâ1%!·p?fl¶8S%¡dÑ«%‹êŸm¡—˘™`r@    KU≠Ñe    a- ŸInëQCß∫Á2pi6Ê√ôÊN6Ó¿Ÿı@˚ÿı@˚ÿı@˚ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¡  ¿ÄÕ
  9543.  Äbà bîêÄZ GÅl¿Œ gz®Ä≠] *5@Œ íSpÅ)I\r&Õ •¿GRvDN¿Œ ;88íå\<FIŒ ˛Äà˛Äà  ˛…¡¡‡A‡êw‡Ä’ê@ê"@)’í·<∂:Ÿ    î"N≤@)"˙Àí‹◊•Ab…ZRjâ(<ÀU@Ie) ◊    ÅD RîLä#»DR^ÄR,·&I◊¡%2¶∂ù0¯Dtà¿õ82?R◊äÉíq$‹íÁPÓTßà“-‚*"8◊¸à˛ ˛—¸à˛ ˛†—
  9544. ¸p˙¿œ¡¡ ˛@  §@$$  •ˆ\VD ò@@ˆ@ˆÅ*¡ ¡¡…3˘…@˙   ˙…@˙…@˙…@˙   ˙…@˙   ˙…@˙…@˙…@˙! Â0˛ å01Ä <˛¸ ˙‰0ÄÄ`00 6˛¸@˙! Â<˜ænÔ=ÔªœÛ˝ª˘œΩ„∑œfi¸˜¸ ˙ ‰<fiˇ?ˇˆgøÌôÊw˛Ûo˚Δ˝ÌˆfiflÄ˝@˙ ‰ffi¯1ÿˆgæaôÊwÊ3Ãf3ovˆflÄ˝@˙ ‰f˜øè˜=Ô˝œc˝ø˘Ô˚√ÒÌ˛fi˜Ä˝@˙ ‰Δ¸ ˛Ä˚¿¸ ˙„Δ¸ ˛Ä˚<¿¸@˙   ˙…@˙…@˙…@˙ „‡Ä˛9ƒ @˙ ˙‚`˛F<˙@˙ „9¡Àè=∑πΔwÇF$6áf„8˚ ˙‚&",HíF äNdY)D˚@˙‚'·ÊsâHí}ƒä5§Q(Ú|˚@˙‚&@â0≤@DäDS(≤@˚@˙ „w„™?∏_?éwsé?m˜Y<˚ ˙
  9545. ‹DÔ@˙  ›DÔ ˙
  9546. ‹8Ô@˙…@˙· ÄÄ¿¿Ä    Äˆ@˙ ‚ Ä@@Ĉ ˙‚≥ú˘£‹CfiÌ6p⁄ Ôsé{∏‡˚@˙ „íaÑ÷BDâHMîåA$E˙ ˙‚í\ºí^Dâ§HIîˇœ'¸‡˚@˙‚≤ƒ¨íVC    DHIîÑ $, ˚@˙‚[8WŸÎ„ú‰BÏ˝Öfi{≈Û◊»˚@˙ ›@ ˙„˚@ˆ¸@˙ ›Ä ˙
  9547. „ÄË@˙
  9548. ŒÄ˝@˙
  9549. ‰Á@˙   ˙Âν@˙   ˙
  9550.  Ê@˙ Í@˛@˙…@˙  Á ˙
  9551. Õ˛@˙  Á¿Â ˙…@˙ÁÁ`@˙…@˙  È„ ˙ËÊ@˙ò@@Ĉ@Ĉ¡*    ˙
  9552. Ë „@˙
  9553. ˉˇ@˙ ËÄÂ@˙ ÈÄ ˙ ËÄÂ@˙ ÈÄ ˙ ËÄÂ@˙ ËÄÂ@˙ ËÄÂ@˙ ÈÄ ˙ ËÄÂ@˙ ÈÄÏĸ ˙ËÄ·¸@˙ËÄΠ¸@˙ËÄÎ0¸@˙ ÈĘ¿¯¸ ˙ËÄà˝Ä˝@¯¸@˙ ÈÅËàAŒ¿zHŸŸp¯¸ ˙ËÄò„ãúcìcâH¯¸@˙ËÄòâ Δ¿Ç$DëDâH¯¸@˙ËÄÁ>˜ºۜیϯ¸@˙ ÈÄĢ˜¸ ˙ËÅ¿˘˜¸@˙ ÈÄθ ˙ËÄ˙ı@˙Ë Ä¿
  9554. ˜    @˙Ë Å‰]ÁÄ
  9555. I'åÛÖ˜    ŸÃ›é@˙  ÈÄó"í˛sàrL@˜•>èÿ ˙Ë Äî"í@DàíDL@˜•0é@˙  È ÄÓŸÄ„˛yüÔĘôŒÖ‹ ˙ËÄÄÏ˛@˙ËÅ¿Ï˛@˙ËÄθ@˙' ÈIJ1˛˛`˛ ÅêêB  ˙$ËÄÄ@˝c¸à êä˛@˙' ÈÅ·6wòÛ'òwÄx 1(q˛ gyᱫêflß ˙%ËÄë¬A"rä@ Q˛à    , Ç(üäl@˙%ËÄô2HA íHä@x
  9556. q)¯âI#$ÇÈêäc@˙%ËÄÊ·æ˜fiyæw`€ˇ1Ê0˛Á¸Δ– Ün@˙ ÈÄÄϸ ˙Ëſϸ@˙ ÈÄθ ˙ËÄ@˛ı˝@˙ËÄp˛    ı˝@˙Ë
  9557. ʼnú«ºÉp    ıŸèõú@˙ È
  9558. Äó"BPaà    ıÛ”>R ˙Ë
  9559. Äî"BS¯    ı2S&R@˙ È
  9560. ÄÓ˜mÁfi0ΔıÒœí ˙ËÄÄÏ@˙ËÅ¿Ï@˙ËÄθ@˙ Èĸ˝ ¯¸ ˙ËÄÄIJÒ˘¸@˙  ÈÅÍù∑ëÊ»q¿xIc≈˘¸ ˙ËÄí"‚ Çàã˛q! ˘¸@˙ËÄí>¢bí௿xA! ˘¸@˙ËÄÁ±ºa>7ÄÁœ˚∞˘¸@˙ ÈÄIJ0¸ ˙ËÅ¿˛`¸@˙ ÈÄÏ¿¸ ˙ËÄÏ˚@˙ ËÄÂ@˙ ËÄÂ@˙ò@Ä¿ˆÄ¿ˆ*A  ÈÄ ˙ ËÄÂ@˙ ÈÄ ˙ ËÄÂ@˙ ËÄÂ@˙ ËÄÂ@˙ ÈÄ ˙ ËÄÂ@˙ ÈÄ ˙ ËÄÂ@˙ ËÄÂ@˙ ËÄÂ@˙ ÈÄ ˙ ËÄÂ@˙ ÈÄ ˙ËÄı‡Û@˙ËÄÙ0Û@˙ËÄÙÛ@˙ ÈįˆÛ ˙ËÄò¸˛ÄÛ@˙ ÈÄé8˝ÄÛ ˙ËÄâD˝~ïõÄÛ@˙ËÄâ|˝ƒ∂TÄÛ@˙ËÄâ@˝4jTÄÛ@˙ ÈÄ›º˝‚IìÄÛ ˙ËÄÙÛ@˙ ÈÄÙÛ ˙ËÄÙÛ@˙ËÄÙÛ@˙ËĈÛ@˙ Èĸ۠˙ËÄñ'˝    Û@˙ ÈÄD*X˝Á∂pÛ ˙ËÄÃÁ˝ôÃêÛ@˙Ëà˛Å˝ôLêÛ@˙ËÄT~˝ó    4pÛ@˙ ÍÄÙÛ ˙ËÄÙÛ@˙ Í0ÄÙÛ ˙ËÄÙÛ@˙ÍÄĈÛ@˙ËÄ˚@Û@˙ Î@ÄœmÓp    @Û ˙ËÄR$ëÄŒJÕ¿Û@˙ ÏÄR$üpí[*@Û ˙ËÄL,ê    í5*@Û@˙Ï˛ÄÓœ‡é$…¿Û@˙ËĈÛ@˙ Ì ˛ÄˆÛ ˙Ì˝ÄˆÛ@˙ Ó˝ÄÙÛ ˙ÌÄ˝ÄĈÛ@˙ËÄ˚ @Û@˙Ó¸Äs¿˝`@Û@˙ ÈÄⸯJŸ¿Û ˙Ô˚Ä⸉[2@Û@˙ ÈÄâ¸d52@Û ˙Ô`˚ÄsÄ˝$$—¿Û@˙ËÄÙÛ@˙˙ÄÙÛ@˙ ÈÄÙÛ ˙Ä˙ÄÙÛ@˙ ÈÄ‚˜Û ˙Ò˘Ä#˝ @Û@˙ò@¿ˆ¿ˆA*Å ËÄ#˝`@Û@˙Ú¯Ä'2˝¯JŸ¿Û@˙ ÈÄ“˝d[2@Û ˙$Ú@¯Ä"˝        d52@IJ˙@˙" ÈÄπ«˝$$—¿Ä˙ ˙Û˜ÄÙô£;‹˙@˙ËÄÙΩW•¡(˙@˙ÙˆÄÙ°T%1(˙@˙ ıˆÄÙùS§‡»˙ ˙Ù0ˆÄh@˘Û@˙  ˆıÄ @ @Û ˙ËÄ–Ï‹n`@Û@˙%ı@ıÄk%"—¯JŸ¿ ˝ ˚@˙ ËÄJ%_    d[2@ ¸ ˚@˙( ˜ÙÄJeP    d52@.9õ78˚ ˙"ËÄÌæÎ/$$—¿ ∏'◊¶|§˚@˙ ¯ÛÄÙ ¶&T¶L§˚ ˙ËÄÙº9”û?$˚@˙˜ ÛÄÙ¸ ˙@˙ËÄÙ˛ 8˙@˙ ˘ÚÄÄ †0˚Û ˙ËÄÄ Ä @¯@˙' ˘ÄÚÄÏ„æh˜`@ ˙ ˙"ËÄ$îa5êê¯JŸ¿ú”9«¿˚@˙&˘ÒħìØ$óêd[2@ ΩÙ¶C ˚@˙"ËĨ∞´$ïêd52@ •¶C ˚@˙( ˚Ä«ˆz¯$$—¿úúÛ%¡¿˚ ˙ËÄÙ˚@˙@˙ ˚`ÄÙ¸Ä˙ ˙ËÄÙÛ@˙˚ÔÄÙ¸¿˚@˙ËIJ¿˘`@˚@˙$ ÈIJ@ @3∏Ù<€¿˚ ˙8˝ Δ¿6¿˛ÄfiÌ6p    `@~a¢d@˚@˙9 ¿¿06¿˛ÄâH    ¯JŸ¿Iô‚D¿˚ ˙9{fl∑wû˜œÁ˘˛›¸ÁfiÒˇflfi˛Äâ§Hd[2@?pÚ\Û`˚@˙1oüˇ˚3fl˚ÃÛ;ˇy∑˝„≥∂˛Ä    DH    d52@Û@˙1Ô|Ï{3flÃÛ;Ûáf3≥∂˛Äú‰BÏ$$—¿Û@˙) ˚flè«˚û˜ÔÁ±˛fl¸˜˝·Ôû˛Ä@ˆÛ ˙˛c¸˝¿˜Ä@ˆÛ@˙ c¸˝¿˜ÄĈÛ ˙ËÄÙÛ@˙ËÄıÛ@˙0ÎÄ˙ @Û@˙ ÈÄ–¸    `@Û ˙͡˛h¸    ¯JŸ¿Û@˙ ÍH¸d[2@Û ˙ÍH¸d52@Û@˙Íϸ$$—¿Û@˙ÍÙÛ@˙ ÍÙÛ ˙ÍÙÛ@˙ Ò¯¸ÙÛ ˙ ¸¿ˆÛ@˙¸@¸aÛ@˙!¸s‹‡˛ïÛ@˙! ¸I#˛üƒ¨‹Û ˙(`˚˙¸I?˛ï%≤§Û@˙)  ˝Ä˙¸I!˝ï#R§Û ˙- ¢!8Ûo˙
  9561. Ôû˛c"LúÛ@˙# `#å`*âë˙ÄÙÛ@˙# b$Éâ˙Ê„ngÙÛ@˙$  ú˚fiÈsÕÄ˚IóΔ¸ÙÛ ˙ÒIîFÉÙÛ@˙ò@@ˆ@ˆÅ*¡  ÒF„¬~ÙÛ ˙Ä˙!Û@˙)˘`˚
  9562. Ä=‹p˛%Û@˙.?+¿ ˝¸í"IJoƒ¨‹Û@˙0 ëwû¿)$ û3Œ˝
  9563. !ì˛p˛%%≤§Û ˙/\äHŒ!»1¸C˛í˛%#R§Û@˙/ PäI¿"I1¸
  9564. ÁÀĢ·˛#"LúÛ ˙%∏wfè˘Ê清C.ÙÛ@˙Ò    C)ÄÙÛ@˙ÒA/ÙÛ@˙ ¸ÙÛ ˙"˛˚¸ÙÛ@˙( <A¿˛$˚¸˙aÛ ˙* ísÚ y¿x$˚˙ïÛ@˙* \â    AÑ $˚˙ƒ¨‹Û@˙* Pâ    LD#‡x$˚    [8˙e%≤§Û@˙*  ∏w›∑üx¿˚ fH˙Ö#R§0Û ˙!Ò¶H˚Û"Lú`Û@˙ Òö8ı¿Û ˙¸Â@˙˝`¸Ç¸Â@˙!
  9565. ;9 ˛‰ÄR¸Â@˙! íÛv˙C€!«‡èÜ<R¸Â ˙! RIã1
  9566. ",˛Ñ8ÇD¸Â@˙! RIäâ*#„‡Ñ»Ç@¸Â ˙!åÔœwµƒ¯fi„?Ôº¸Â@˙˚¯¸Â@˙˚¯¸¡@˙ Ò¸„ ˙Í„@˙ Í„ ˙Í„@˙Í„@˙Í„@˙ Í„ ˙Í„@˙ Í„ ˙Í„@˙Í„@˙Í„@˙ Í„ ˙Í„@˙ Í„ ˙Í„@˙Í„@˙Í„@˙ Í„ ˙Í„@˙ Í„ ˙Í„@˙Í„@˙Í„@˙ Ô„ ˙    Ä Ú„@˙  ?7v√˛Ù„ ˙ ÄbLæ|ØÄÙ„@˙ ÄD¶L(ÄÙ„@˙ q<û;óÄÄı„@˙ ˜Äı„ ˙˜Äı„@˙ ˜Äı„ ˙˜Äı„@˙˜Äı„@˙ÄÄ˝Äı„@˙ò@@Ĉ@Ĉ¡*  @˛ÄÄı„ ˙ÄÛÜ„foòÄIJ˚„@˙ ÄLâóœó–ÄÄ˚„ ˙ÄLàî…ÜÄõCsÒú˚„@˙Àáì«s–Äæß…¬H˚„@˙˜Ä¢§I2H˚„@˙ ˜Äû£»·à˚„ ˙˜Äı„@˙ ˜Äı„ ˙¯Äı„@˙¸Ä@A˙„@˙ÅÄ ˛C@¸„@˙ Áçôª`ÄNJŸ«Ã‡¸„ ˙I&_>W¿ˇÃÿ[2C>@¸„@˙ …"S&@Ä Δ52C2@¸„ ˙GOÀ¿Ä‹$—¡. ¸„@˙˜Äı„@˙˜Äı„@˙ ˜Äı„ ˙˜Ä˛ ˚„@˙ ˜Ä ˚„ ˙˛ê¸Ä”9«¡¨w¸„@˙∞ÄÙ¶C"~ø„@˙ĸô±æ`ĶC"23¸„@˙ Ú&}z_@ÄÛ%¡¡ÓÓ¸„ ˙ ≤"eJ@IJ@˘„@˙ Äí]9œ@ÄĢ„ ˙˜Äı„@˙˜Ä˜„@˙˜Äz˜„@˙ ˜ÄãÑÿ˘„ ˙˜ÄÇN`˘„@˙ ê¸ÄäR@˘„ ˙Ä0Äwo˘„@˙ |ô±æ`Ù„@˙ Ä≤&}z_@Ù„@˙  Ä≤"eJ@Ù„ ˙ ]9œC¸Ù„@˙ Í„ ˙Í„@˙Í„@˙Í„@˙ Í„ ˙Í„@˙ Í„ ˙Í„@˙Í„@˙Í„@˙ Í„ ˙Í„@˙ ͡˛„ ˙…@˙…@˙…@˙   ˙…@˙   ˙…@˙…@˙…@˙   ˙…@˙   ˙…@˙ò@Ä¿ˆÄ¿ˆ*A  U@˙  Ã¿˙¡¡¡¡¡¡¡¡¡¡¡¡¡    #·¿&«    ! ÄÈ«    aÄ!«    a¿ÄG«
  9567. í@Ä»
  9568. !HÄ»    ?√‡Á«¡¡¡¡¡$ ¯ xÇ@ 2`@@Ñ‚$ êÄ@" @Ä‚&"âË≤l )IȀǢ#·8hΩ¡¶Ig õÂ[#á`ª‰&" YE 4 w™Ö*È÷UBê©b©TäMJMU°M‰&"KN‰     $%7OJ    íËÑë]ƒ)§í"IíâÈ    "I‰&"éà@L"J\Tõ
  9569. §ã≈!{ƒE∞©.ìfi”ãc”‰&"ãá@3»g1ìá#íƒtÇ íªÇ ëîí}äBí‰@˙B¸ ÷@˙B¸†÷Ä˙B¸@÷¡¡ ¿ ¡¿¿˛÷ ÄÄ ˛÷bîê.ñ¯*"> ÜäÓ%µ}ññ÷gz®R´P]eT
  9570. ï)JJí/Z÷íSp‰Ú`ô.à%$ÓBRíJR÷•¿ÖD™Hº*º"Zûd|ñ÷;8r<†LGH    )‹'î‰S$÷ ¸@¸’ ¸@
  9571. ¸’ ¸Ä˚‡’¡¡'膿‡@tH˝@Äp ¿Ä8ÄÄÊ'E1˛@ @Ä˝  @ÄÄÊ($≈)ÄvÂe•$eË∂ ∂≤6F\ì`-ı°—|ãcêRít∑ŒÊ($¶*ÄöJãfi§™IZ +SVZJ®©†F¢R≤®ï°(ÔUZêÊ($,Äíúíî…íR JRR“ë1I D¬îó%"H$Jn'ìÊ($ HÅ&—)m~⁄¶‘Ñɶ◊˘“`≕ùy™cPDî∏™'ÇÊ($éi—§èΔHîë$$§¢‰âQ"H…DF÷ëB Œc'ÂÊ˝ ı¯Ñ·˝ ı¯Ñ· ˙ÎÑ·¡¡˛@Ä0ÅÜ ¿ ◊ò@¿Úˆ¿ÚˆA*s §@˝ Aì  ◊•ˆ\ãa”í É+∏ÍéC@í%wD†Ÿ'(H®ï¢®%u@*î°√úN®´–ŸIgâ1%!·p?fl¶8S%¡dÑ«%‹êŸm¡—˘™`r@    KU≠Ñe    a- ŸInëQCß∫Á2pi6Ê√ôÊN6Ó¿Ÿı@˚ÿı@˚ÿı@˚ÿ¡¡¡¡¡¡¡¡¡¡¡¡¡¡  ¿ÄÕ
  9572.  Äbà bîêÄZ GÅl¿Œ gz®Ä≠] *5@Œ íSpÅ)I\r&Õ •¿GRvDN¿Œ ;88íå\<FIŒ ˛Äà˛Äà  ˛…¡¡‡A‡êw‡Ä’ê@ê"@)’í·<∂:Ÿ    î"N≤@)"˙Àí‹◊•Ab…ZRjâ(<ÀU@Ie) ◊    ÅD RîLä#»DR^ÄR,·&I◊¡%2¶∂ù0¯Dtà¿õ82?R◊äÉíq$‹íÁPÓTßà“-‚*"8◊¸à˛ ˛—¸à˛ ˛†—
  9573. ¸p˙¿œ¡¡ ˛@  §@$$  •ˆ\VD ò@@ˆ@ˆs*≥  '(H®®D  Igâ1(D  m¡—˘P"H  InëPê∞ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ĉ@Ĉ≥*Û ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿ˆÄ¿ˆÛ*3 ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿ˆ¿ˆ3*s ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@ˆ@ˆs*≥ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ĉ@Ĉ≥*Û ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿ˆÄ¿ˆÛ*3 ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Úˆ¿Úˆ3*e ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@ˆ@ˆs*≥  '(H®®D  Igâ1(D  m¡—˘P"H  InëPê∞ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ĉ@Ĉ≥*Û ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿ˆÄ¿ˆÛ*3 ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿ˆ¿ˆ3*s ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@ˆ@ˆs*≥ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@@Ĉ@Ĉ≥*Û ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@Ä¿ˆÄ¿ˆÛ*3 ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ò@¿Úˆ¿Úˆ3*e ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ˇ@j@ˇ ˇˇˇˇ@
  9574. ˇ·ˇ‚7^
  9575. 4H\, Palatino&e.3+ä"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@äIntroduction to •)8 Apple Events4⁄ä˙(‡äW’ê)orking WT¿)$ith Object Specifiÿ )C
  9576. er Records
  9577. , (‡3-47
  9578. ˇˇˇˇˇˇˇˇ440lòÄ.B0oMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""B0oB0o$””””””””””””””””””””””””””””””òÄ
  9579. 60@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""60@60@˜˜˜˜˜˜˜˜˜˜˜˜˜
  9580. ˛ˇ˛ˇˇ ˇˇ˛ˇˇ     ˇˇˇ˙ˇ
  9581. ˛ˇˇˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜
  9582. 454+?òÄ
  9583. 56+@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""56+@56+@$˜˛˙ˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  9584. ˛ˇ˛ˇˇ˛¸ˇˇ˚ˇ˛˙ˇˇ˝˛ˇ˛
  9585. ˛ˇ˛ˇˇ
  9586. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  9587. ˛ˇ˛ˇˇ
  9588. ˛ˇ˛ˇˇ˛˙ˇ˜˝˝ˇˇ˛ˇ˚˝ˇ¸˛¸ˇˇ˜˝˛ˇ˛
  9589. ˛ˇ˛ˇˇ
  9590. ˛ˇ˛ˇˇ˝ˇˇ˛˜˝¸ˇ
  9591. ˛ˇ˛ˇˇ˛¸ˇˇ˜˝˛ˇ˛
  9592. ˛ˇ˛ˇˇ
  9593. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˜˝¸ˇ
  9594. ˛ˇ˛ˇˇ˝˛ˇ˛
  9595. ˛ˇ˛ˇˇ
  9596. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  9597. ˛ˇ˛ˇˇ
  9598. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  9599. ˛ˇ˛ˇˇ
  9600. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  9601. ˛ˇˇˇˇ
  9602. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  9603. ˛ˇˇˇ
  9604. ˛ˇˇˇ
  9605. ˛ˇˇˇ
  9606. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  9607. ˛ˇˇˇˇ
  9608. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  9609. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  9610. ˛ˇˇˇˇ
  9611. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähê(eäY@Ä°dONLNd\êhÒ)our application can prÔ`°dONLNd\Òhå)a"ovide two kinds of application-defiO†°dONLNd:\çh˙)úned functions for use by ,
  9612. Courier°dONLNdSiäu¿(rä    AEResolve|†°dONLNd\i¿u≈)6. |†°dONLNd^i≈u9)Object accessor functionsÜ@°dONLNdwi9uW)t locate °dONLNdiXu)'Apple event objects. Every application °dONLNd¶väÇ (ä"that supports simple object specifiÒ¿°dONLNd…v Ç/)ñer rÛ°dONLNdÕv/ÇA)ecorg`°dONLNd—vBÇq)
  9613. ds must pr·¿°dONLNd€vqÇΩ)/ovide one or mor“`°dONLNdÎvΩÇ)Le object accessor °dONLNd˝Éäè∏(åä functions. À@°dONLNdÉ∏è,).Object callback functions`‡°dONLNd!É-è)u2 perform other tasks that only an application can °dONLNdSêäúk(ôä1perform, such as counting, comparing, or marking z`°dONLNdÑêkúΔ)·Apple event objects. °dONLNdö¢äÆ∏(´ä
  9614. Each time •¿°dONLNd§¢∏ÆÓ).    AEResolve¢`°dONLNd≠¢ÓÆÊ)6; calls one of your application’s object accessor functions °dONLNdËØäªø(∏ä successfullyá`°dONLNdÙØæªB)4 , the object accessor function rî`°dONLNdØBªº)Ñeturns a special descriptor r—Ä°dONLNd1غªŒ)zecorE‡°dONLNd5Øœª˚) d, called a°dONLNd@ظª˛)- °dONLNdAºä»¶(≈ätoken,Ä°dONLNdGºß»›) that identifiG@°dONLNdUº›»f)6 es either an element in a specifiˆ °dONLNdvºf»º)âed container or a prz@°dONLNdäºΩ»Ô)W operty of a °dONLNdñ…ä’¶(“äspecifiÓ °dONLNdù…¶’≥)ed ı °dONLNd†…≥’Î)GApple event object. The token can be of any descriptor type, including °dONLNdÁ÷䂯(flädescriptor types you defiÚ`°dONLNd÷¯‚.)nne yourself. °dONLNdËäÙê(ÒäY@Ä°dONLNdËêÙc)2ou install object accessor functions by using the Ô¿°dONLNdAËcÙÌ)”AEInstallObjectAccessorÁ °dONLNdXËÌÙÔ)ä °dONLNdYıäÛ(˛äfunction. Much like the ” °dONLNdqıÛq)iAEInstallEventHandlerÀ@°dONLNdÜıqù)~  function, °dONLNdëä( äAEInstallObjectAccessorw`°dONLNd®9)ä     uses an Ä°dONLNd±:¿)&object accessor dispatch table) °dONLNdœ¿‰)Ü to map °dONLNd◊äç(ärE°dONLNdÿéÆ)equests4‡°dONLNdflر)! ¥‡°dONLNd‡±π)fo~@°dONLNd‚∫¿)    r íÄ°dONLNd‰¿)Apple event objects Í`°dONLNd¯I)Y to the apprH‡°dONLNdJÊ)1%opriate object accessor functions in °dONLNd(ä(û(%äyour~`°dONLNd,ü(°) ˛`°dONLNd-°(˜)application. These rº†°dONLNdA¯()W    equests rÒÄ°dONLNdJ(c)'efer to objects oÖ¿°dONLNd[d(ç)E
  9615. f a specifiG¿°dONLNdfé(⁄)*ed object class in °dONLNdy)ä5∑(2ä
  9616. containers,Ä°dONLNdÉ)∏5∫). ¨Ä°dONLNdÑ)∫5Ÿ)identifiÉ °dONLNdå)⁄5G) ed by a token of a specifiò¿°dONLNd¶)G5í)med descriptor typl°dONLNd∑)ì5ö)Le.°dONLNd∫;äG⁄(DäResponding to an ç °dONLNdÀ;⁄GG)PApple event that include,‡°dONLNd„;HGa)ns an o∞¿°dONLNdÈ;aGî) bject specifi˘Ä°dONLNdˆ;îG£)3er r˙¿°dONLNd˙;£Gµ)ecoro °dONLNd˛;∂G)d typically involves °dONLNdHäTº(Qä these steps:°dONLNd![ãgí+1.°dONLNd$[ñg>) 'After determining that the event is an ÌÄ°dONLNdK[>gt)® Apple event8@°dONLNdV[ugñ)7, your a∂†°dONLNd^[ñg€)!pplication calls °dONLNdogñs(pñAEProcessAppleEventx‡°dONLNdÇgs
  9617. )r.°dONLNdÖyãÖí(Çã2.°dONLNdàyñÖ©) The ª¿°dONLNdåy©Ö)AEProcessAppleEvent¥†°dONLNdüyÖk)r function uses the 冰dONLNd≤ykÖÔ)PApple event dispatch table to °dONLNd–Öñë˝(éñdispatch the event to th=Ä°dONLNdËÖ˛ë])he your application’s h°dONLNd˛Ö^ëz)`andler£¿°dONLNdÖzë∑) for that eventÉ °dONLNdÖ∏ë∫)>.°dONLNdóã£í(†ã3.°dONLNdóñ£©) The ]`°dONLNdó©£;)!Apple event handler extracts the ° °dONLNd>ó;£÷)í!Apple event parameters, and passeÏ¿°dONLNd_ó÷£Ú)õs the o|†°dONLNdfóÛ£    )bject °dONLNdl£ñØ≤(¨ñspecifiÓ °dONLNds£≤Ø¡)er rÔ`°dONLNdw£¡Ø”)ecorc¿°dONLNd{£‘Ø%)ds they contain to î °dONLNdé£%ØU)QAEResolvë °dONLNdñ£UØ[)0eê¿°dONLNdó£[Ø]).°dONLNdöµã¡í(æã4.°dONLNdùµñ¡©) The ª¿°dONLNd°µ©¡fl)    AEResolve∏`°dONLNd™µfl¡∂)63 function uses the object accessor dispatch table t–¿°dONLNd›µ∂¡)◊o call one or mor`°dONLNdÓµ¡)Ke °dONLNd¡ñÕø( ñGobject accessor functions, one at a time, that can identify the nested @°dONLNd7¡¿Õ¯( ¿ Apple event °dONLNdCÕñŸÈ(÷ñobjects described bÔ`°dONLNdVÕÈŸ)Sy each oˇ@°dONLNd^ÕŸ@)$ bject specifiH°dONLNdkÕAŸP)4er rI@°dONLNdoÕPŸb)ecorΩ†°dONLNdsÕbŸÛ)"d. Each object accessor function rf`°dONLNdïÕÙŸ)íeturns °dONLNdúŸñÂ(‚ña token for the object it fi°dONLNd∏ŸÂ)n<nds, which in turn helps to determine which object accessor °dONLNdÙÂñÒÕ(Óñfunction the k†°dONLNdÂŒÒ)8    AEResolveh@°dONLNd
  9618. ÂÒ†)6& function will use to locate the next ´`°dONLNd0†Òı)úApple event object.°dONLNdE˜ãí(ã5.°dONLNdH˜ñú) T†¿°dONLNdI˜ú©)he ª¿°dONLNdL˜©fl)    AEResolve∏`°dONLNdU˜fl)6 functiou@°dONLNd]˜)"n rㆰdONLNd`˜;) eturns the } °dONLNdk˜<B)/fi⇰dONLNdm˜BR)nal √†°dONLNdq˜Rê)token for the rÑ°dONLNdĘëÚ)?equested object to the °dONLNdóñÛ( ñapplication’s handler`‡°dONLNd¨Ûı)].°dONLNdÆä °(äThe rÄ¿°dONLNd≥° )esolution of an object specifi7°dONLNd— -)}er r8@°dONLNd’- ?)ecor¨†°dONLNdŸ? )0d always begins with the outermost container it °dONLNd        !ä-¶(*äspecifiÓ °dONLNd    !¶-˛)Les. For example, to locate a table named “Summary of Sales” in the document °dONLNd    \.ä:(7änamed “Sales Report,” the ª °dONLNd    v.:7)w    AEResolve∑¿°dONLNd    .7:g)6  function fi“¿°dONLNd    ã.g:)0&rst calls an object accessor function °dONLNd    ±;äGi(Dä3that can locate the document, then uses the token r °dONLNd    ‰;jG)‡(eturned by that function to identify an °dONLNd
  9619. HäTÑ(Qä=object accessor function that can locate the table. It then rJÄ°dONLNd
  9620. IHÖT)˚"eturns the token for the table to °dONLNd
  9621. kUäaö(^äthe °dONLNd
  9622. oUöa() Apple event handler that called ©`°dONLNd
  9623. èU(a^)é    AEResolve¶°dONLNd
  9624. òU^a`)6.°dONLNd
  9625. ögäsê(päT†¿°dONLNd
  9626. õgês)he chapter “Resolving and CrH‡°dONLNd
  9627. ∑gsl)Éeating Object SpecifiE °dONLNd
  9628. Ãgmsë)Zer Recor£¿°dONLNd
  9629. ‘gës)$ds” in this book describes in °dONLNd
  9630. ÚtäÄ (}ädetail how to r@°dONLNd tÀÄ")Aesolve object specifi%‡°dONLNd t"Ä1)Wer r' °dONLNd t1ÄC)ecorõÄ°dONLNd tCÄ)0ds and how to write and install object accessor °dONLNd NÅäç (ääand object callback functions.PÄ°dONLNd lÅ ç)Ç ˇ @ˇ ˇˇˇˇ@
  9631. ˇ·ˇ‚7^
  9632. 4*\¯, Palatino&e.3+l"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@lIntroduction to •)8 Apple Events4⁄*˙¯
  9633. (‡*3-48    )B
  9634. About the ¿))Apple Event Manager4^*¿¯
  9635. ^*x¯4^*x¯
  9636. à*ê¯4â*ꯠä*ä˛
  9637. ˇ·ˇ‚7^ˇˇ©ˇÆ°dONLNdu*àv(É*
  9638. About the F'°dONLNd
  9639. uvà)LApple Event ManagerˇˇˇˇˇˇU˛(É3
  9640. °dONLNdôl•r(¢lY@Ä°dONLNd ôr•≥)ou can use the ãÄ°dONLNd/ô≥•)AApple Event Manager to,Zapf Dingbats°dONLNdFØl∂q(µln
  9641. °dONLNdH¨x∏{) rE°dONLNdI¨|∏™)
  9642. espond to     ‡°dONLNdS¨™∏‰). Apple events놰dONLNd_¨‰∏I): as a server application°dONLNdx¡l»q(«ln
  9643. °dONLNdzæx Ä) crµ@°dONLNd|æÄ ø)eate and send ç`°dONLNdäæø ˘)? Apple events °dONLNdñæ˙ \); as a client application°dONLNdØ”l⁄q(Ÿln
  9644. °dONLNd±–x‹{) rE°dONLNd≤–|‹∂)esolve and cr;¿°dONLNdø–∂‹):eate object specifiO†°dONLNd“–‹)Mer rP‡°dONLNd÷–‹$)ecor≈@°dONLNd⁄–$‹.)ds°dONLNd›ÂlÏq(Îln
  9645. °dONLNdfl‚xÓù) support îÄ°dONLNdÁ‚ùÓ§)%A[¿°dONLNdË‚•ÓŸ) pple event r$@°dONLNdÙ‚⁄ÓÏ)5ecorò†°dONLNd¯‚ÏÓ)ding°dONLNd˝Ûlˇr(¸lT†¿°dONLNd˛Ûrˇö)
  9646. his sectio.†°dONLNdÛõˇ∫))n brieflπ°dONLNdÛ∫ˇb)%y summarizes the steps involved in prE¿°dONLNd5ÛcˇÊ)©oviding each kind of support °dONLNdRl v(    lanQ`°dONLNdTw ¢)
  9647. d tells whØ@°dONLNd^¢ ™)+er=‡°dONLNd`´ √)    e to fià°dONLNdg√ Â)nd the r[†°dONLNdoÊ v)#!elevant information in this book.
  9648. 1*8¯42*8¯ 3l3¯
  9649. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNdë"l1≤(-l Supporting ≈Z°dONLNdú"±1O)EApple Events as a Server R¯°dONLNdµ"O1ë)û Applicationˇˇˇˇˇˇ€r)°3
  9650. °dONLNd¬8lDr(AlY@Ä°dONLNd√8rD) ou do not need to implement all $ °dONLNd„8Dc)êApple events at once. A`°dONLNd˘8cDi)aY‡°dONLNd˙8iD˜) ou can begin by supporting just °dONLNdElQÄ(Nlthe r¢`°dONLNdEÄQó)equirπ†°dONLNd$EóQ )ed events and, if necessaryáÄ°dONLNd?E QΩ)u(, the events sent by the Edition Managerc¿°dONLNdgEΩQ’)±. The °dONLNdmRl^ÿ([lbeginning of the section √†°dONLNdÜRÿ^    )l
  9651. “Handling U°dONLNdêR
  9652. ^r)2Apple Events” on page P†°dONLNd¶Rs^Ä)i4-4§Ä°dONLNd©RÄ^Ÿ) describes how to prΩ@°dONLNdΩRŸ^Ù)Yovide °dONLNd√_lkÓ(hlthis minimal level of support.°dONLNd‚ql}o*IfiÄ°dONLNd„qo}Ç)t is r @°dONLNdÈqÉ}ƒ)elatively easy tßÄ°dONLNd˘qƒ}œ)Ao rb°dONLNd¸q–}) espond to t«†°dONLNdq})1he r߆°dONLNd q}))equir懰dONLNdq)} )%ed events and the events sent by the °dONLNd5~läå(álEditionÄ°dONLNd<~çäè)! ëÄ°dONLNd=~èä≤)Manage0‡°dONLNdC~≥ä∂)$rf °dONLNdD~∂äÌ). If, however% °dONLNdQ~Ìä˜)7, y¥@°dONLNdT~˜äa)
  9653. our application cannot rÍ@°dONLNdl~aäª)jespond to any other U °dONLNdÄ~ºäŸ)[Apple °dONLNdÜãló5(îl0events, other applications will not be able to rd¿°dONLNd∂ã5ó◊)…&equest services that involve locating °dONLNd‹òl§à(°lspecifiÓ °dONLNd„òà§é)c °dONLNdÂòè§≠)@Apple event objects within your application or its documents, an≤@°dONLNd%ò≠§Û(°≠d users will not °dONLNd6•l±Ø(Ælbe able to contr@°dONLNdF•∞±i)D+ol your application by executing scripts. T© °dONLNdq•h±s)∏o rc†°dONLNdt•t±¢)
  9654. espond to (Ä°dONLNd~•¢±Ò).Apple events it is °dONLNdë≤læñ(ªl likely to rù‡°dONLNdú≤ñæª)*    eceive fríÄ°dONLNd•≤ªæ1)%om other applications or frñ`°dONLNd¿≤1æÚ)v*om scripting components, your application °dONLNdÍølÀµ(»lmust be able to r‚@°dONLNd˚øµÀ)Iespond to the appr, °dONLNdø    À8)T opriate corµÄ°dONLNdø8ÀJ)/e an–Ä°dONLNdøJÀU)d f¿ °dONLNdøVÀã) unctional-ar{¿°dONLNd+øåÀò)6ea g°dONLNd.øòÀ◊) Apple events. °dONLNd=—l›s(⁄lO[‡°dONLNd>—t›∫)nce you have pr˚@°dONLNdM—∫›ä)F0ovided the basic level of support for the Requir @°dONLNd}—ã›Ò)—ed suite and for events °dONLNdïfilÍÈ(Álsent by the Edition ManagerÙ†°dONLNd∞fiËÍ)| , you should°dONLNdΩÙl˚q(˙ln
  9655. °dONLNdøÒx˝œ) decide which other \‡°dONLNd“Òœ˝~)W&Apple event suites you want to support°dONLNd˘lq( ln
  9656. °dONLNd˚xà) defir °dONLNdˇâ¿)ne the hierar%Ä°dONLNd ¡fi)8chy of a@°dONLNdfi‚):Apple event objects within your application that you want °dONLNdMx5(x*scripting components or other applicationsT@°dONLNdw68)æ ‘@°dONLNdx8;)t†°dONLNdy<€)%o be able to identify—that is, which °dONLNdûx'E($x.Apple event objects can be contained by other Å@°dONLNdÃE'Ú)Õ'Apple event objects in your application°dONLNdÙ0l7q(6ln
  9657. °dONLNdˆ-x9ä) writÙ`°dONLNd˙-ä9Ã)e handlers for t‹Ä°dONLNd
  9658. -Õ9⁄)Che ô °dONLNd-⁄9ï)*Apple events you support, and install corr≥‡°dONLNd7-ï9Ò)ªesponding entries in °dONLNdL9xE (Bxyour application’s € °dONLNd_9 E;)RApple event dispatch tablüÄ°dONLNdx9<E@)re°dONLNdzJlVr(SlTµ¿°dONLNd{JqV∂)o decide which ¬†°dONLNdäJ∂V≠)E5Apple event suites you want to support and how to defiY °dONLNd¿JÆVÀ)¯ne the °dONLNd«WlcÜ(`lhierarª°dONLNdÕWÜcï)chyã¿°dONLNd–Wñcò)  ¿°dONLNd—Wôc§)of ˆ¿°dONLNd‘W£cà)
  9659. 5Apple event objects in your application, consult the ¡°dONLNd    WâcÂ)ÊApple Event Registry: °dONLNddlp¨(mlStandard Suites6‡°dONLNd.d≠p)A and evaluate which É`°dONLNdBdpX)[Apple events and ô‡°dONLNdSdXpË)P Apple event object classes make °dONLNdsql}(zl(sense for your application. If necessary7 °dONLNdõq}É)´, you can extend the defi?`°dONLNd¥qÉ}‡)lnitions of the standar°dONLNd q·}È)^d °dONLNdÃ~läº(álApple events and ñÄ°dONLNd›~ºäd)P'Apple events objects to cover special r∫@°dONLNd    ~dä{)®equir—Ä°dONLNd        ~{äÎ)ements of your applicatio∂¿°dONLNd    "~Ïäˆ)qn. °dONLNd    %ãlór(îlIt ‡°dONLNd    'ãsóx) iâ@°dONLNd    )ãxóû)
  9660. s better tö‡°dONLNd    3ãûó¯)&o extend the standar䆰dONLNd    Gã¯ó)Zd defiÄ°dONLNd    Mãó^)nitions rather thaW@°dONLNd    _ã^óÇ)Ln to defi“†°dONLNd    hãÇóî)$ne y|¿°dONLNd    lãïófl)our own custom °dONLNd    {òl§¶(°l Apple events¿°dONLNd    áòߧ÷); , because oÃÄ°dONLNd    íò÷§ÿ)/:nly those applications that choose to support your custom -Ä°dONLNd    ÃòŸ§ˆ(°ŸApple °dONLNd    “•l±G(Æl3events explicitly will be able to make use of them.ˇ>H@ˇ ˇˇˇˇ@
  9661. ˇ·ˇ‚7^
  9662. 4H\, Palatino&e.3+ä"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@äIntroduction to •)8 Apple Events4⁄ä˙(‡ä
  9663. About the ¿))Apple Event Manager
  9664. , (‡3-49
  9665. ˇˇˇˇˇˇˇˇ440lòÄ.B0oMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""B0oB0o$””””””””””””””””””””””””””””””òÄ
  9666. 60@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""60@60@˜˜˜˜˜˜˜˜˜˜˜˜˜
  9667. ˛ˇ˛ˇˇ ˇˇ˛ˇˇ     ˇˇˇ˙ˇ
  9668. ˛ˇˇˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜
  9669. 454+?òÄ
  9670. 56+@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""56+@56+@$˜˛˙ˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  9671. ˛ˇ˛ˇˇ˛¸ˇˇ˚ˇ˛˙ˇˇ˝˛ˇ˛
  9672. ˛ˇ˛ˇˇ
  9673. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  9674. ˛ˇ˛ˇˇ
  9675. ˛ˇ˛ˇˇ˛˙ˇ˜˝˝ˇˇ˛ˇ˚˝ˇ¸˛¸ˇˇ˜˝˛ˇ˛
  9676. ˛ˇ˛ˇˇ
  9677. ˛ˇ˛ˇˇ˝ˇˇ˛˜˝¸ˇ
  9678. ˛ˇ˛ˇˇ˛¸ˇˇ˜˝˛ˇ˛
  9679. ˛ˇ˛ˇˇ
  9680. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˜˜˜˝¸ˇ
  9681. ˛ˇ˛ˇˇ˝˛ˇ˛
  9682. ˛ˇ˛ˇˇ
  9683. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  9684. ˛ˇ˛ˇˇ
  9685. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  9686. ˛ˇ˛ˇˇ
  9687. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  9688. ˛ˇˇˇˇ
  9689. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  9690. ˛ˇˇˇ
  9691. ˛ˇˇˇ
  9692. ˛ˇˇˇ
  9693. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  9694. ˛ˇˇˇˇ
  9695. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  9696. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  9697. ˛ˇˇˇˇ
  9698. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähê(eäT†¿°dONLNd\êh)he chapter “Responding to 9‡°dONLNd\    hz)yApple Events” in this boo˘@°dONLNd4\zhË)qk describes how to write 9†°dONLNdM\Èh)oA‡°dONLNdN\Òh)pple °dONLNdSiäuÂ(räevent handlers and rüÄ°dONLNdgiÂu)[elated ræ@°dONLNdoiu&)!outines=†°dONLNdvi'u¥)!. The chapter “Resolving and CrÄ°dONLNdïiµuÒ)éeating Object °dONLNd£väÇß(äSpecifi‡°dONLNd™vßÇÀ)er RecorOÄ°dONLNd≤vÃÇ.)%ds” describes how to r懰dONLNd»v.ÇÖ)besolve object specifi—Ä°dONLNd›vÖÇ≠)W
  9699. ers in an wÄ°dONLNdÁv≠Ǣ)(Apple event that °dONLNd¯Éäèµ(åä
  9700. describes ùÄ°dONLNdɵè±)+9Apple event objects in your application or its documents.°dONLNd<ïä°Ù(ûäIf your application can rÓ@°dONLNdUïÙ°")j
  9701. espond to ≥ °dONLNd_ï"°).3Apple events, you can make it scriptable simply by °dONLNdí¢äÆπ(´ä
  9702. adding an ,
  9703. Courier—¿°dONLNdú¢πÆø)/'—`°dONLNdù¢øÆ◊)aeteœ‡°dONLNd°¢◊Æ›)'œÄ°dONLNd¢¢›Æ„) rÄ°dONLNd§¢‰Æ¸)esour\¿°dONLNd©¢¸Æ—)0ce. Scripting components use your application’s `°dONLNdŸ¢“Æÿ)÷'°dONLNd⁄¢ÿÆ)aeteÄ°dONLNdfi¢ƈ)' °dONLNdfl¢ˆÆ¯) °dONLNd‡Øäªç(∏ärE°dONLNd·Ø骶)esourç@°dONLNdÊضª>)#ce to obtain information about the ˘@°dONLNd    Ø>ª†)òApple events and corr Ä°dONLNdØ°ª“)c
  9704. esponding °dONLNd(ºä»(≈äThuman-language terminology that your application supports. The chapter “Apple Event °dONLNd|…ä’ê*Tµ¿°dONLNd}…è’„)erminology Resourg†°dONLNdé…‰’)UCces” in this book describes how to optimize your implementation of °dONLNd—÷ä‚î(flä:Apple events for use by scripting components and how to cr °dONLNd ÷ï‚∂(flïeate an ∫ °dONLNd÷∂‚º)!'π¿°dONLNd÷º‚‘)aete∏@°dONLNd÷‘‚⁄)'∑‡°dONLNd÷⁄‚‡) r¸‡°dONLNd÷‡‚¯)esourE °dONLNd ÷˘‚)ce.
  9705. H4H     ä    
  9706. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd$¯ä–(ä Supporting ≈Z°dONLNd/¯œg)EApple Events as a Client ·°dONLNdH¯g©)ò Applicationˇˇˇˇˇˇ€r)ß3
  9707. °dONLNdUäµ(ä    Because ujÄ°dONLNd^∂Ú),sers can send ˜¿°dONLNdlÚ
  9708. )<@Apple events to a variety of applications simply by executing a °dONLNd¨ä'9($ä'script, many applications have no need ˝†°dONLNd”9'D)Øto 5Ä°dONLNd÷E'\) send J‡°dONLNd€\'ƒ)Apple events. However_@°dONLNdƒ'    )h, if you want to °dONLNd(ä4(1äfactor your application for r$‡°dONLNd(4){ecorô@°dONLNd"(4fl).ding, or if you want your application to send @°dONLNdP(‡4˝)…Apple °dONLNdV5äA∂(>ä
  9709. events dirS`°dONLNd`5∂Ad),)ectly to other applications, you can use 5 °dONLNdâ5dAÃ)ÆApple Event Manager r)°dONLNdû5ÃA˙)h outines to °dONLNd©BäNí(Käcrµ@°dONLNd´BíN—)eate and send ç`°dONLNdπB—N)?Apple events.ï °dONLNdΔBN)= °dONLNd»Tä`ê(]äTµ¿°dONLNd…Tè`ª)
  9710. o send an °dONLNd”Tº`!)-Apple event, you must,Zapf Dingbats°dONLNdÈjäqè(pän
  9711. °dONLNdÎgñsû) crµ@°dONLNdÌgûs¬)    eate the     ‡°dONLNdˆg√s˘)% Apple event°dONLNd|äÉè(Çän
  9712. °dONLNdyñÖ) add parameters and attributes°dONLNd"éäïè(îän
  9713. °dONLNd$ãñó∑) use the k °dONLNd,ã∏ó‹)"AESendh‡°dONLNd2ã‹óQ)$ function to send the event°dONLNdNúä®ê(•äT†¿°dONLNdOúê®–)he chapter “CrZ °dONLNd]ú—®))Aeating and Sending ˝ °dONLNdpú(®Δ)W#Apple Events” in this book describeäÄ°dONLNdìú«®)üs how to perform °dONLNd§©äµº(≤ä these tasks.
  9714. ⁄H·4€H· ‹ä‹
  9715. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd±Àä⁄–*$ Supporting ≈Z°dONLNdºÀœ⁄K)EApple Event Objectsˇˇˇˇˇˇ€r(÷3
  9716. °dONLNd—·äÌ‚(ÍäIf your application r,†°dONLNdÊ·„Ì#)Yesponds to cor7†°dONLNdÙ·#Ìv)@e and functional-ar˝‡°dONLNd·vÌÇ)Sea È °dONLNd
  9717. ·ÇÌ) Apple events, it must also be °dONLNd(Óä˙≠(˜ä    able to r6Ä°dONLNd1ÓÆ˙)$esolve object specifiI °dONLNdFÓ˙)Wer rJ`°dONLNdJÓ˙&)ecoræ¿°dONLNdNÓ&˙f)ds that describb‡°dONLNd]Óg˙Ñ)Ae the o`°dONLNddÓÑ˙‰)bjects on which those ·¿°dONLNdzÓ‰˙)`Apple °dONLNdÄ˚äÈ(äQevents can act. In addition to the tasks described in the chapter “Responding to °dONLNd—ä•*Apple˝Ä°dONLNd÷•ß) }Ä°dONLNd◊®•)8Events,” you must perform the following tasks to handle ∞‡°dONLNd•ı)˝Apple events that °dONLNd!ä!Â(äcontain object specifiqÄ°dONLNd7Ê!ı)\er rr¿°dONLNd;ı!)ecorÁ °dONLNd?!)ds:°dONLNdC+ä2è(1än
  9718. °dONLNdE(ñ4†) W¬†°dONLNdF(ü4q)    3rite object accessor functions that can locate the B °dONLNdy(r4)”!Apple event objects you support, °dONLNdö4ñ@ÿ(=ñand install corr`°dONLNd™4Ÿ@ )CGesponding entries in your application’s object accessor dispatch table.°dONLNdÚIäPè(Oän
  9719. °dONLNdÙFñR†) W¬†°dONLNdıFüRç)    8rite any object callback functions that you decide to prq¿°dONLNd-FéR¢)Ôovid놰dONLNd1F¢R±)e. Të°dONLNd5F±Rˆ)o handle object °dONLNdERñ^≤([ñspecifiÓ °dONLNdLR≤^¡)er rÔ`°dONLNdPR¡^”)ecorc¿°dONLNdTR‘^°)0ds that specify a test, your application must pr9@°dONLNdÑR°^)Õovide at least two object °dONLNdû^ñj¨(gñ?callback functions: one that counts objects and one that compar@°dONLNd›^≠j—(g≠es them.°dONLNdÊsäzè(yän
  9720. °dONLNdËpñ|™) Call Á¿°dONLNdÌp™|‡)    AEResolve‰`°dONLNdˆp‡|È)6 fr}@°dONLNd˘pÍ|)
  9721. om your f¿°dONLNd    p|Ø)(!Apple event handlers whenever an ¥ °dONLNd    "pØ|Á)ù Apple event °dONLNd    .|ñà3(Öñ#parameter includes an object specifi\Ä°dONLNd    R|4àC)ûer r]¿°dONLNd    V|CàU)ecor“ °dONLNd    Z|Uà[)ḋ°dONLNd    [|[à`). °dONLNd    ^çäô(ñäThe chapter “Resolving and CrH‡°dONLNd    {çôl)âeating Object SpecifiE °dONLNd    êçmôë)Zer Recor£¿°dONLNd    òçëôÔ)$ds” describes how to °dONLNd    ≠ö䶮(£äBperform these tasks. It also describes how applications that send 2¿°dONLNd    Ôö®¶(£®Apple events to °dONLNd    ˇßä≥÷(∞äthemselves or dir˛Ä°dONLNd
  9722. ß÷≥e)L"ectly to other applications can cr⁄`°dONLNd
  9723. 2ße≥≤)èeate object specifiÓ@°dONLNd
  9724. Eß≤≥¡)Mer rÔÄ°dONLNd
  9725. Iß¡≥”)ecorc‡°dONLNd
  9726. Mß‘≥‡)ds.ˇ2@ˇ ˇˇˇˇ@
  9727. ˇ·ˇ‚7^
  9728. 4*\¯, Palatino&e.3+l"CHAPTER ”)>3,     Helvetica    ˇˇ—ÚˇÆ(@lIntroduction to •)8 Apple Events4⁄*˙¯
  9729. (‡*3-50    )B
  9730. About the ¿))Apple Event Manager4^*¿¯
  9731. k*r¯4l*r¯ mlm¯
  9732. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd\lk≤(gl Supporting ≈Z°dONLNd \±k=)EApple Event Recordingˇˇˇˇˇˇ€r(g3
  9733. °dONLNd"rl~®({lIf you make yz°dONLNd/r©~®)=:our application scriptable, you may also want to make it ro`°dONLNdir®~∫)ˇecor„¿°dONLNdmr∫~Ú)dable. Users °dONLNdzlã{(àlof ré`°dONLNd~{ãç)ecor¿°dONLNdÇéãˆ)dable applications can r“†°dONLNdöˆã)hecorG°dONLNdû    ãÉ)d their actions in the form o÷†°dONLNdªÉãà)zf L °dONLNdΩâãê)A`°dONLNdæëã·)pple events that a °dONLNd—ålòù(ïlFscripting component translates into a script. When a user executes a r÷‡°dONLNdåùòØ(ïùecorK@°dONLNdå∞ò·) ded script, °dONLNd'ôl•y(¢lthe]`°dONLNd*ôz•|) ›`°dONLNd+ô|•)#scripting component sends the same ›Ä°dONLNdNô•Í)£.Apple events to the application in which they °dONLNd|¶l≤}(Ølwere†°dONLNd¶}≤à)e rt@°dONLNdǶà≤ö) ecorˆ°dONLNdܶö≤≠)ded.°dONLNdã∏lƒr(¡lTµ¿°dONLNdå∏qƒ„)o make your application r“@°dONLNd•∏„ƒı)recorF†°dONLNd©∏ˆƒ)    dable, yo††°dONLNd≤∏ƒM)(
  9734. u should u>°dONLNdº∏NƒY)0se f@°dONLNdø∏Yƒ•) Apple events to rj‡°dONLNd–∏•ƒˆ)Leport user actions °dONLNd„≈l—á(Œlto the ∂‡°dONLNdÍ≈á—) Apple Event Manager in terms of ö °dONLNd
  9735. ≈—Ô)ñ0Apple events. One way to do this is to separate °dONLNd:“lfiv(€l=the code that implements your application’s user interface frˆ`°dONLNdw“vfiÁ(€vom the code that actually °dONLNdëfll΢(ËlFperforms work when the user manipulates the interface. This is called I‡°dONLNd◊fl£ÎÃ(Ë£    factoringc °dONLNd‡flÃÎÂ)) your °dONLNdÊÏl¯ó(ıl
  9736. applicatioeÄ°dONLNdÏò¯†),n.∂‡°dONLNdÚφ¯¢) ÿÄ°dONLNdÛÏ¢¯©)A °dONLNdÙÏ™¯≈) factor‘ °dONLNd˚Ï≈¯‹)Bed application acts as both the client and server application for °dONLNd=˘lˇ(l$Apple events it sends to itself in rÄ°dONLNda˘ã)îesponse to user actions. When rf@°dONLNdĢãù)ãecor⁄†°dONLNdÑ˘ùÓ)ding is turned on, °dONLNdól|(lthe °dONLNdõ|Û)TApple Event Manager sends a copy of every event than an application sends to itself °dONLNdÔl(l&to the scripting component or other pr¿°dONLNdf)©ocess that turned r7 °dONLNd(gy)Recor´Ä°dONLNd,yù)ding on.°dONLNd5%l1∏(.lThe chapter “Intrµ`°dONLNdF%∏1])L&oduction to Scripting” in this book prª†°dONLNdl%]1‚)•ovides an overview of how to °dONLNdâ2l>-(;l+make your application both scriptable and r+`°dONLNd¥2.>@)¬ecorü¿°dONLNd∏2@>c)dable. T‡°dONLNd¿2d>≥)$he chapter “Recor†°dONLNd—2≥>…)Oding õ‡°dONLNd÷2…>Ê)Apple °dONLNd‹?lKY(Hl6Events” describes how to factor your application for rR‡°dONLNd?YKk)Ìecor«@°dONLNd?kKå)ding an}@°dONLNd?çKΔ)"d explains thÄ@°dONLNd*?ΔKÕ)9e °dONLNd,LlXá(UlApple˝Ä°dONLNd1LáXâ) }Ä°dONLNd2LäXÕ)Event ManagerÏ@°dONLNd?LŒX€)D’s r5Ä°dONLNdCL‹XÓ)ecor©‡°dONLNdGLÓX:)ding mechanism.ˇ#T@ˇ ˇˇˇˇ@
  9737. ˇ·ˇ‚7^
  9738. 4⁄∫˙,     Helvetica    .(‡∫Contents, Palatino
  9739. , (‡    4-1    3, Ã(#∫CHAPTER ÿ)h4
  9740. ˇˇˇˇˇˇˇˇ4l4älòÄ2lAärMM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""lAärlAär$œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœòÄ
  9741. l6ä@MM!ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""l6ä@l6ä@˜˜˜˜˜˜˜˜˜˜˜˜¸ˇˇ˛¸˛ˇˇ¸ˇˇˇ˛˙ˇ˛˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜˜ˇˇˇˇˇˇ(JH
  9742. Figure 4-0*     Listing 4-0*    T)able 4-0
  9743. zH,
  9744. 4zH, H°dONLNd∫*˘+m Contentsˇˇˇˇˇˇ
  9745. ˇ·ˇ‚7^ˇˇ∫Ρ◊(qH4°dONLNd[∫xÀ)rRCΰdONLNd[Ãxk)esponding to Ú °dONLNd[jx)û Apple Events
  9746. °dONLNd$;∫GÊ(D∫    Handling `°dONLNd-;ÁG")- Apple EventsÎ@°dONLNd;;6GC)O4-4°dONLNd?HƒT(QƒAccepting an Ò¿°dONLNdLHT7)< Apple Event醰dONLNdYHLTY)L4-5°dONLNd]Uƒa-(^ƒInstalling Entries in the í¿°dONLNdwU-aó)iApple Event Dispatch TŒ °dONLNdçUña¨)iablesD¿°dONLNdîU¡aŒ)+4-7°dONLNdòbŒn—(kŒIfiÄ°dONLNdôb—nY) nstalling Entries for the Requir∏†°dONLNdπbYnf)àed ø†°dONLNdºbfn°) Apple EventsôÄ°dONLNd b∂n√)P4-8°dONLNdŒoŒ{+(xŒInstalling Entries for 7†°dONLNdÂo+{Á)](Apple Events Sent by the Edition ManagerΔ@°dONLNdo˚{)–4-9°dONLNd|ŒàÊ(ÖŒHow øÄ°dONLNd|Êàb)Apple Event Dispatching W#°dONLNd0|bàu)|orksW@°dONLNd6|âàñ)'4-9°dONLNd:âƒï(íƒHandling the Requirí`°dONLNdMâï,)[ed ô`°dONLNdPâ,ïg) Apple Eventss@°dONLNd^â|ïâ)P4-1:Ä°dONLNdaââïé)1°dONLNdcñŒ¢Î(üŒRequirE@°dONLNdiñÏ¢˘)ed L@°dONLNdlñ˘¢4) Apple Events& °dONLNdzñI¢V)P4-1Ì`°dONLNd}ñU¢Z) 1°dONLNd£ŒØ&(¨ŒHandling the Open g¿°dONLNdë£&Øv)XApplication Event@°dONLNd§£ãØù)e4-14°dONLNd©∞Œºt(πŒ!Handling the Open Documents Event~°dONLNdÃ∞âºõ)ª4-15°dONLNd—ΩŒ…r(ΔŒ"Handling the Print Documents Event˝`°dONLNdıΩÜ…ò)∏4-17°dONLNd˙ Œ÷!(”ŒHandling the Quit ¸Ä°dONLNd  !÷q)SApplication Eventö°dONLNd Ü÷ò)e4-19°dONLNd$◊ƒ„(‡ƒ    Handling `°dONLNd-◊Ò„≠)-(Apple Events Sent by the Edition Manager†°dONLNdW◊¡„”)–4-20°dONLNd\‰ŒK(ÌŒThe Section Read, Section Wh@°dONLNdw‰K¢)}rite, and Section Scrú†°dONLNd剢Õ)W
  9747. oll Events?@°dONLNdò‰‚Ù)@4-21°dONLNdùÒŒ˝(˙ŒHandling the Cr© °dONLNd¨Ò˝p)Heate Publisher EventQ‡°dONLNd¬ÒÖ˝ó)o4-22°dONLNd«˛ƒ
  9748. ˜(ƒ Getting Dat8°dONLNd“˛¯
  9749. #)4
  9750. a Out of a¶¿°dONLNd‹˛#
  9751. +)+n ô¿°dONLNdfi˛+
  9752. b) Apple Event6†°dONLNdβw
  9753. â)L4-25°dONLNd Œ5(ŒGetting Data Out of an ô¿°dONLNd 5ú)gApple Event ParameterO °dONLNd ±√)|4-26°dONLNd#Œ$5(!ŒGetting Data Out of an ô¿°dONLNd:5$])g    Attribute[Ä°dONLNdEr$Ñ)=4-28°dONLNdJ%Œ1q(.Œ%Getting Data Out of a Descriptor ListÊ°dONLNdq%Ö1ó)∑4-31°dONLNdv2ƒ>Œ(;ƒW¬†°dONLNdw2Õ>Á)    riting JÄ°dONLNd~2Ë>K)Apple Event HandlersáÄ°dONLNdî2_>q)w4-33°dONLNdô?ƒK(HƒReplying to an e°dONLNd®?K>)C Apple Event‡°dONLNdµ?SKe)L4-36°dONLNd∫LƒX˛(UƒDisposing of À °dONLNd«L˛X\):Apple Event Data Str»`°dONLNd€L\Xs)^ucturN@°dONLNd‡LtX})esT‡°dONLNd‰LëX£)4-39°dONLNdÈYƒeŒ(bƒW¬†°dONLNdÍYÕe<)    riting and Installing Coerz°dONLNdY=e{)pcion Handlersπ†°dONLNdYèe°)R4-41°dONLNdf∫rˆ(o∫Interacting Wù`°dONLNd%fˆr))< ith the User7`°dONLNd3f>rP)H4-45°dONLNd8sƒ(|ƒSetting the Client  °dONLNdKs§)O!Application’s User Interaction PrΩ°dONLNdls§¥)ëeferi °dONLNdpsµÕ)ences{°dONLNdws·Û),4-46°dONLNd|ăå(âƒSetting the Server ¥Ä°dONLNdèÄå•)P!Application’s User Interaction PrV`°dONLNd∞Ķå∂)íeferÄ°dONLNd¥Ä∑åœ)ences`°dONLNdªÄ„åı),4-48°dONLNd¿çƒô?(ñƒRequesting User Interaction˙†°dONLNd›çSôe)è4-49ˇ¶@ˇ ˇˇˇˇ@
  9754. ˇ·ˇ‚7^
  9755. 4*\¯, Palatino&e.3+ú"CHAPTER à)>44⁄*˙¯
  9756. (‡*4-2,     Helvetica    )rContents4^*¿¯
  9757. °dONLNd\úh≥(eúRefer⁄ °dONLNd\≥h)ence to Responding to "†°dONLNd\hS)e Apple Events¸Ä°dONLNd)\ghy)O4-56°dONLNd.i¶u…(r¶Data Str``°dONLNd6i u·)$ucturÊ@°dONLNd;i·u#)es Used by the l@°dONLNdJi$uÖ)CApple Event Manager °dONLNd_iöu¨)v4-56°dONLNddv∞Ç˙(∞Descriptor Recorfi °dONLNdtv˙Çb)Jds and Related Data Str  °dONLNdãvcÇz)iucturí°dONLNdêvzÇÉ)esò†°dONLNdîvóÇ©)4-56°dONLNdôÉ∞èÍ(å∞ Apple Event >Ä°dONLNd•ÉÍè$): Array Data T¥Ä°dONLNd±É#è7)9ypesL`°dONLNd∑ÉLè^))4-60°dONLNdºê¶ú"(ô¶Routines for Responding to % °dONLNd◊ê"ú])| Apple Eventsˇ°dONLNdÂêqúÉ)O4-61°dONLNdÍù∞©ª(¶∞Cr\°dONLNdÏùª©,) eating and Managing the ;†°dONLNdù,©ñ)qApple Event Dispatch Tw°dONLNdùï©´)iables̆°dONLNd!ùø©—)*4-61°dONLNd&™∞∂Ë(≥∞ Dispatching S@°dONLNd2™Ë∂#)8 Apple Events- °dONLNd@™8∂J)P4-66°dONLNdE∑∞√A(¿∞ Getting Data or Descriptor Recor˛@°dONLNde∑A√G)ëd°dONLNdf∑H√m)    s Out of g`°dONLNdo∑m√t)%A.†°dONLNdp∑u√Ô)pple Event Parameters and °dONLNdä¬∞Œ‹(À∞
  9758. Attributes~¿°dONLNdñ¬ÒŒ)A4-68°dONLNdõœ∞€X(ÿ∞&Counting the Items in Descriptor Lists °dONLNd√œm€)Ω4-74°dONLNd»‹∞˯(Â∞Getting Items Frà°dONLNdÿ‹¯ËN)Hom Descriptor ListsM¿°dONLNdÌ‹cËu)k4-74°dONLNdÚÈ∞ı˛(Ú∞Getting Data and % °dONLNdÈˇı")OKeyworQÄ°dONLNd    È"ıH)#d-Specifi2°dONLNdÈIıV)'ed ó`°dONLNdÈVı†)Descriptor RecorıÄ°dONLNd%Ȇı¶)Jd@°dONLNd&ÈßıÃ)    s Out of ^†°dONLNd/ÈÃı”)%A%‡°dONLNd0È‘ı‹)E °dONLNd2Ù∞…(˝∞Recor¢`°dONLNd7Ù…”)ds˚ °dONLNd;ÙÁ˘)4-78°dONLNd@∞+(
  9759. ∞Requesting User Interaction˙†°dONLNd]?Q)è4-81°dONLNdb∞˜(∞Requesting MorYÄ°dONLNdp˜)Ge T7@°dONLNdsW)ime to Respond to Ë°dONLNdÖVë)R Apple Events¡‡°dONLNdì¶∏)P4-84°dONLNdò∞')($∞Suspending and Resuming Ì°dONLNd∞)'ç)yApple Event Handlingy†°dONLNdΔ¢'¥)y4-85°dONLNdÀ(∞4G(1∞"Getting the Sizes and Descriptor T( °dONLNdÌ(G4≥)óypes of Descriptor RecorÁÄ°dONLNd(≥4Ω)lds@@°dONLNd    (“4‰)4-89°dONLNd5∞A"(>∞Deleting Descriptor Recor"@°dONLNd'5#A-)sds{°dONLNd+5AAS)4-92°dONLNd0B∞Nl(K∞(Deallocating Memory for Descriptor Recorχ°dONLNdXBlNv)ºdsE†°dONLNd\BãNù)4-93°dONLNdaO∞[≈(X∞Coerõ °dONLNdeO≈[)cing Descriptor TJ¿°dONLNdvO[%)Lypes‚†°dONLNd|O9[K)(4-94°dONLNdÅ\∞hª(e∞Cr\°dONLNdÉ\ªhA) eating and Managing the Coerµ °dONLNdü\Ah≠)Ücion Handler Dispatch TV@°dONLNd∂\≠h√)lablesÇ°dONLNdΩ\◊hÈ)*4-96°dONLNd¬i∞uª(r∞Cr\°dONLNdƒiªu•) 2eating and Managing the Special Handler Dispatch TË °dONLNdˆi§u∫)Èables^¿°dONLNd˝iœu·)+4-99°dONLNdv∞Ç (∞Getting Information ãÄ°dONLNdv Ç9)[
  9760. About the `°dONLNd v:Çõ)/Apple Event Manager«@°dONLNd5vØÇΔ)u4-103°dONLNd;ɶè(å¶Application-Defi†°dONLNdKÉè*)J ned RoutinesI¿°dONLNdYÉ?èV)O4-104°dONLNd_êúú(ôúSummary of Responding to u¿°dONLNdxêúS)| Apple EventsO†°dONLNdÜêhú)P4-108°dONLNdåù¶©Ô(¶¶Pascal Summary‡°dONLNdúù©)^4-108°dONLNd¢™∞∂‹(≥∞    ConstantsÆ°dONLNd≠™∂)@4-108°dONLNd≥∑∞√Õ(¿∞Data T:`°dONLNdπ∑Õ√·)ypes“@°dONLNdø∑ı√)(4-1ôÄ°dONLNd¬∑√ )12°dONLNd≈ƒ∞–◊(Õ∞Routines≠`°dONLNdÕƒ◊–+)' for Responding to % °dONLNd‡ƒ,–g)U Apple Eventsˇ°dONLNdÓƒ{–à)O4-1Δ@°dONLNdÒƒà–í)14°dONLNdÙ—∞›˙(⁄∞Application-Defi†°dONLNd—˙›4)J ned RoutinesI¿°dONLNd—I›V)O4-1°dONLNd—V›`)18°dONLNdfi¶Í€(Á¶    C SummaryᆰdONLNd#fiÔ͸)I4-1N‡°dONLNd&fi¸Í)18°dONLNd)Î∞˜‹(Ù∞    ConstantsÆ°dONLNd4Î˜˝)@4-1u@°dONLNd7ν˜)18°dONLNd:¯∞∑(∞D=@°dONLNd;¯∏Õ)ata T:`°dONLNd@¯Õ·)ypes“@°dONLNdF¯ı )(4-123°dONLNdL∞◊(∞Routines≠`°dONLNdT◊+)' for Responding to % °dONLNdg,g)U Apple Eventsˇ°dONLNdu{í)O4-124°dONLNd{∞˙(∞Application-Defi†°dONLNdã˙4)J ned RoutinesI¿°dONLNdôI`)O4-128°dONLNdü¶+.((¶Assembly-Language Summary~†°dONLNd∫C+Z)ù4-128°dONLNd¿,∞8∂(5∞T∫¿°dONLNd¡,µ8›)rap Macr⁄°dONLNd…,›8Ê)(osåÄ°dONLNdÕ,˚8)4-128°dONLNd”9¶E‡(B¶ Result Codesï`°dONLNd·9ÙE )N4-130ˇ?:@ˇ ˇˇˇˇ@
  9761. ˇ·ˇ‚7^, Palatino&e.3+ä"CHAPTER ”)>4
  9762. 4⁄ä˙
  9763. , (‡    4-3
  9764. ˇˇˇˇˇˇˇˇ4l4älòÄ.lBäoMM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""lBäolBäo$””””””””””””””””””””””””””””””òÄ
  9765. l6ä@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""l6ä@l6ä@˜˜˜˜˜˜˜˜˜˜˜˜˜¸ˇˇ˛¸˛ˇˇ¸ˇˇˇ˛˙ˇ˛˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜
  9766. 4è4Ö?òÄ
  9767. è6Ö@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""è6Ö@è6Ö@$˛˙ˇ˚ˇˇ˚ˇˇ˚ˇˇ    ˛˛ˇˇˇ˜˝˛ˇ˛
  9768. ˛ˇˇˇˇ
  9769. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜    ˛ˇˇ˛
  9770. ˛ˇˇˇˇ
  9771. ˛ˇˇˇˇ    ˝ˇˇˇ˙ˇˇ
  9772. ˛ˇ˛ˇˇ
  9773. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  9774. ˛ˇ˛ˇˇ
  9775. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝˛ˇ˛
  9776. ˛ˇ˛ˇˇ
  9777. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˜˜˜˝¸ˇ
  9778. ˛ˇ˛ˇˇ˝˛ˇ˛
  9779. ˛ˇ˛ˇˇ
  9780. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  9781. ˛ˇ˛ˇˇ
  9782. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  9783. ˛ˇ˛ˇˇ
  9784. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  9785. ˛ˇˇˇˇ
  9786. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  9787. ˛ˇˇˇ
  9788. ˛ˇˇˇ
  9789. ˛ˇˇˇ
  9790. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  9791. ˛ˇˇˇˇ
  9792. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  9793. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  9794. ˛ˇˇˇˇ
  9795. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜,     Helvetica    ˇˇ—ÚˇÆ°dONLNd8äCê(@äR—B°dONLNd8êC√)esponding to ,°dONLNd8ƒCˆ)4 Apple Eventsˇˇˇˇˇˇ≠>(@4
  9796. °dONLNd\äh¥(eä    This chap[@°dONLNd$\µhΩ)+teg@°dONLNd&\ΩhÑ)-r describes how your application can use the w@°dONLNdS\ÑhÛ)«Apple Event Manager to °dONLNdjiäuç(rärE°dONLNdkiéuº)
  9797. espond to     ‡°dONLNduiºu˚).Apple events. d°dONLNdÉi˚u)?Y$Ä°dONLNdÑiuê)!our application must be able to r¨‡°dONLNd•iêuÁ)èespond to the four r5†°dONLNdπiËuˇ)XequirL‡°dONLNdæiˇu )ed °dONLNd¡väÇ¿(ä Apple event ¿°dONLNdÃv¿Ç…)6s t  °dONLNdœv Ç§)
  9798. 0o take advantage of the launching and terminatinÒ°dONLNdˇv§ÇË)⁄g mechanisms t©Ä°dONLNdvÈÇ)Ehat ar@°dONLNdvÇ
  9799. )e °dONLNdÉäè§(åäpart o¨†°dONLNdɧèÿ) f System 7 al`°dONLNd'ÉŸè")5nd later versionsL@°dONLNd8É#ès)J of system softwar„Ä°dONLNdJÉsèw)Pe≠ °dONLNdKÉxè€). If your application pr[‡°dONLNdcÉ‹è˚)dovides °dONLNdjêäú(ôäYpublish and subscribe capabilities, it should also handle the events sent by the Edition °dONLNd√ù䩱*ManagerT†°dONLNd ù±©º)'. Tä`°dONLNdÕùª©?)
  9800.  o be scriptable, or capable of rz°dONLNdÌù?©{)Ñesponding to á¿°dONLNd˙ù{©)<Apple events sent by scripting °dONLNd™ä∂–(≥äcomponents, yo°¿°dONLNd'™–∂)Fur applicatio°dONLNd4™    ∂V)9n should handle tî`°dONLNdE™V∂x)Mhe apprx†°dONLNdL™x∂ß)" opriate cor°dONLNdW™®∂˚)0e and functional-ar»@°dONLNdj™˚∂)Sea °dONLNdm∑ä√¿(¿ä Apple event ¿°dONLNdx∑¿√Δ)6s.°dONLNd{…ä’°(“äBeforÛ¿°dONLNdÄ…°’ø)e you ré °dONLNdá…¿’)ead this chapter1†°dONLNdó…’∫)F), you should be familiar with the chapterd@°dONLNd¿…∫’æ)¥s°@°dONLNd¡…æ’’) “IntrXÄ°dONLNd«…÷’ ) oduction to °dONLNd”÷ä‚K(flä)Interapplication Communication” and “Intr·°dONLNd¸÷K‚Ä)¡ oduction to ¥¿°dONLNd÷Ä‚˜)5Apple Events” in this book@°dONLNd"÷¯‚˝)x. ’†°dONLNd$÷¸‚)Yñ °dONLNd%÷‚)o †°dONLNd&÷‚)u ˇˇ€°dONLNd(„äÔ(Ïäshould also have a copy of the ÜΩ°dONLNdG„Ô≠)á%Apple Event Registry: Standard Suites‡È°dONLNdl„≠ÔÏ)ú available for r#⁄°dONLNd|„ÌÔ˝)@eferœ˙°dONLNdÄ„˝Ô)ence§⁄°dONLNdÑ„Ô). °dONLNdáıä∫(˛ä
  9801. Although t‚‡°dONLNdëı∫«)0he üÄ°dONLNdîı«è)+Apple events used by the Edition Manager ar-`°dONLNdøıê)…e discussed in this chapterÜ¿°dONLNd⁄ı)s, °dONLNd‹ä∫( ä
  9802. you must r´@°dONLNdÊ∫)0Pefer to the chapter “Edition Manager” in this book for a full discussion of how °dONLNd6ä"(ä to implement the Edition Manager°dONLNdV$´)ö’s publish and subscribe featurJ†°dONLNdu´∂)áes.°dONLNdy!ä-Õ(*äThis chapter pr°°dONLNdà!Õ-)CGovides the basic information you need to make your application capable °dONLNdœ.ä:ô(7äof ré`°dONLNd”.ô:’)esponding to ú °dONLNd‡.’:)<Apple events. TY†°dONLNdÔ.:%)Eo r °dONLNdÚ.&:a) espond to cor‚ °dONLNdˇ.a:¥);e and functional-ar®`°dONLNd.µ:¡)Tea 솰dONLNd.¡:) Apple events, °dONLNd#;äG3(Dä'your application must also be able to r≤`°dONLNdJ;3Gä)©esolve object specifi≈°dONLNd_;äGô)Wer rΔ@°dONLNdc;ôG´)ecor:†°dONLNdg;¨Gª)ds. e¿°dONLNdk;ªG¡)Y&@°dONLNdl;¡G)
  9803. ou should °dONLNdvHäTç(QärE°dONLNdwHéTù)ead*`°dONLNdzHûT†) ™`°dONLNd{H†T&)the chapter “Resolving and CrdONLNdòH&T)Üeating Object Specifië °dONLNd≠HÄT§)Zer RecorÔ¿°dONLNdµH§TÃ)$    ds” befor® °dONLNdæHÕT)) e you write °dONLNd Uäa•(^äApple˝Ä°dONLNdœU•aß) }Ä°dONLNd–U®aõ)8event handlers for events that can contain object specifi:`°dONLNd    Uúa´)Ùer r;†°dONLNdU´aΩ)ecor∞°dONLNdUΩa…)ds.°dONLNdgäsï(päThr °dONLNdgñs°) e s¯¿°dONLNdg°sµ) ectio“‡°dONLNdg∂sæ)n $@°dONLNd!gøs)    
  9804. “Handling µ†°dONLNd+gs3)1Apple Events,”Ä°dONLNd9g4s6)D èÄ°dONLNd:g6sÄ)which begins on ‡°dONLNdJgÅsò)Kpage Z¿°dONLNdOgôs¶)4-4Ɔ°dONLNdRg¶s±), d `°dONLNdUg±sı) escribes how to,Zapf Dingbats°dONLNde}äÑè(Éän
  9805. °dONLNdgzñÜ—) accept and pr"‡°dONLNdtz“ÜÎ)<ocess m‡°dONLNdzzÎÜ%) Apple events°dONLNdáèäñè(ïän
  9806. °dONLNdâåñòÔ) install entries in the ņ°dONLNd†åÔòi)YApple event dispatch tables°dONLNdº°ä®è(ßän
  9807. °dONLNdæûñ™À) handle the r퇰dONLNd ûÀ™‚)5equir™ °dONLNdœû‚™ )    ed events°dONLNdŸ≥ä∫è(πän
  9808. °dONLNd€∞ñºS) )handle events sent by the Edition Manager°dONLNd≈äÃè(Àän
  9809. °dONLNd¬ñŒ¥) get dat˘@°dONLNd¬¥Œ›)
  9810. a out of a†°dONLNd¬fiŒÊ)*n Ù†°dONLNd¬ÂŒ) Apple event°dONLNd&◊äfiè(›än
  9811. °dONLNd(‘ñ‡E) (write handlers that perform the action r܇°dONLNdP‘E‡ä)Øequested by an (‡°dONLNd_‘䇿)E Apple event°dONLNdkÈäè(Ôän
  9812. °dONLNdmÊñÚô) rE°dONLNdnÊöÚ») eply to an 3 °dONLNdyÊ»Ú˛). Apple event°dONLNdÖ˚äè(än
  9813. °dONLNdá¯ñø)     dispose o4‡°dONLNd꯿≈)*f ™`°dONLNdí¯≈)Apple event data str±@°dONLNd¶¯6)Zuctur7 °dONLNd´¯7@)es°dONLNdÆäè(än
  9814. °dONLNd∞
  9815. ñÛ) write and install coer©`°dONLNdΔ
  9816. Û.)]cion handlers°dONLNd‘ä'∂($ä
  9817. The sectio“‡°dONLNdfi∂'æ),n $@°dONLNd‡ø')    “Interacting WA†°dONLNdÓ'3)A ith the User@°dONLNd˙3':)3,”û@°dONLNd¸:'á) which begins on †°dONLNdà'ü)Npage ÈÄ°dONLNdü'±)4-45=`°dONLNd≤'Ω), dY °dONLNdΩ'‚)     escribes °dONLNd#1ä8è(7än
  9818. °dONLNd%.ñ:õ) hQ`°dONLNd&.ú:ù):ow a server application can interact with the user when pròÄ°dONLNd`.ù:“(7ù ocessing an }¿°dONLNdl.“:)5
  9819. Apple evenÜ °dONLNdv.:)3t°dONLNdxCäJè(Iän
  9820. °dONLNdz@ñLõ) hQ`°dONLNd{@úL_).ow client applications set user interaction pr⁄‡°dONLNd©@_Lo)√eferá°dONLNd≠@pLÉ)ence[‡°dONLNd±@ÑLà)s°dONLNd≥Uä\è([än
  9821. °dONLNdµRñ^õ) hQ`°dONLNd∂Rú^°)oΔ‡°dONLNd∑R°^)w the client application’s p÷‡°dONLNd”R^)wrõ‡°dONLNd‘R^,)eferH°dONLNdÿR-^Œ)%ences and the server application’s prÇ`°dONLNd˝RŒ^fi)°efer.Ä°dONLNd    Rfl^)ences afʆ°dONLNd        R^)"fect °dONLNd    ^ñj’(gñuser interactio…@°dONLNd    ^’j⁄)?nˇt@ˇ ˇˇˇˇ@
  9822. ˇ·ˇ‚7^
  9823. 4*\¯, Palatino&e.3+l"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@lResponding to ,): Apple Events4⁄*˙¯
  9824. (‡*4-4    )B    Handling ê)& Apple Events4^*¿¯
  9825. ^*x¯4^*x¯
  9826. à*ê¯4â*ꯠä*ä˛
  9827. ˇ·ˇ‚7^ˇˇ©ˇÆ°dONLNdu*às(É*    Handling >°dONLNd    usà‘)I Apple EventsˇˇˇˇˇˇU˛(É4
  9828. °dONLNdôl•r(¢lY@Ä°dONLNdôr•) ou do not need to implement all $ °dONLNd8ô•Ã)ê.Apple events at once. If you want to begin by °dONLNdf¶l≤ (Ølsupporting only the rúÄ°dONLNd{¶ ≤·)^equir≥¿°dONLNdĶ·≤Ó)ed ∫¿°dONLNdɶÓ≤W)Apple events, you must,Zapf Dingbats°dONLNdöºl√q(¬ln
  9829. °dONLNdúπx≈¥) set bits in the ,
  9830. CourierOÄ°dONLNd¨πµ≈Ÿ)='SIZE'M@°dONLNd≤πŸ≈fl)$ rí@°dONLNd¥πfl≈˜)esour⁄Ä°dONLNdππ˜≈Î)9ce to indicate that your application supports high-level °dONLNdÚ≈x—î(Œxevents°dONLNd˘⁄l·q(‡ln
  9831. °dONLNd˚◊x„ó) @include code to handle high-level events in your main event loop°dONLNd<ÏlÛq(Úln
  9832. °dONLNd>Èxıï) write r°dONLNdEÈñı)outines that handle the rÎ`°dONLNd^Èı)kequir†°dONLNdcÈıB)    ed events°dONLNdm˛lq(ln
  9833. °dONLNdo˚xŸ) install entries for the rß@°dONLNdà˚Ÿ)aequiræÄ°dONLNdç˚˝)ed ≈Ä°dONLNdê˚˝ó)#Apple events in your application’s b °dONLNd≥˚ò–)õ Apple event °dONLNdøx∏(xdispatch table °dONLNdœl$q(!l;The following sections explain how to perform these tasks: z‡°dONLNd
  9834. r$≥(!r“Accepting an φ°dONLNd≥$Ú)AApple Event,”    Ä°dONLNd%Û$ı)@ °dONLNd&%l1∂(.lwhich begins on p`°dONLNd6%∑1Œ)Kpage K@°dONLNd;%œ1‹)4-5ü °dONLNd>%‹1·), ü °dONLNd@%·1O)“Installing Entries in the ±‡°dONLNd[%O1π)nApple Event Dispatch TÌ@°dONLNdq%∏1’)iables,”„‡°dONLNdx%÷1ˆ) which °dONLNd2l>ô(;l
  9835. begins on û°dONLNdâ2ô>∞)-page x‡°dONLNdé2±>æ)4-7ÿ°dONLNdë2æ>÷), and 9‡°dONLNdó2◊>7)“Handling the RequirL@°dONLNd´27>D)`ed S@°dONLNdÆ2D>á)Apple Events,”≠ °dONLNdº2á>‘)C which begins on °dONLNdÕ?lKÉ(Hlpage Z‡°dONLNd“?ÑKë)4-1" °dONLNd’?ëKñ)1" °dONLNd÷?ñKò).°dONLNdÿQl]r(ZlTµ¿°dONLNdŸQq]|)o rp@°dONLNd‹Q}]ª) espond to the íÄ°dONLNdÍQª]ø)>:Apple events sent by the Edition Manager in addition to th„ °dONLNd$Qø] (Zøe rÒ¿°dONLNd'Q ]Œ) eª`°dONLNd(Qœ]·)quir    °dONLNd,Q‚]Ô)ed °dONLNd/^ljÅ(gl@events, you must install entries for the Section Read, Section W@°dONLNdo^Åjƒ(gÅrite, Section ScrFÄ°dONLNdÄ^≈jË)D    oll, and °dONLNdâklww(tlCr\°dONLNdãkww5) ,eate Publisher events in your application’s Ä°dONLNd∑k5wÎ)æ)Apple event dispatch table and write the °dONLNd‡xlÑ}(Ålcorr`°dONLNd‰x~Ñ)"esponding handlers, as described iÒ¿°dONLNdxÑ)òn C °dONLNdxÑP)    
  9836. “Handling ‘Ä°dONLNdxPщ)1!Apple Events Sent by the Edition °dONLNd3Ölë¿(élManager” on page 3¿°dONLNdDÖ¡ë”)U4-20ᆰdONLNdHÖ”ë’).†°dONLNdIÖ÷ëÿ) °dONLNdKól£r(†lTµ¿°dONLNdLóq£|)o rp@°dONLNdOó}£∏) espond to cor>@°dONLNd\óπ£ )<e and functional-arÄ°dONLNdoó£)Tea Ô¿°dONLNdró£Ó) 1Apple events, you must install entries and write °dONLNd£§l∞fl(≠lhandlers for those events. H†°dONLNd槇∞Ê)tY     °dONLNdø§Ê∞I)ou must also make sur±°dONLNd‘§I∞P)ce ˙†°dONLNd÷§P∞c)that –¿°dONLNd€§d∞›)your application can locate °dONLNd˜±lΩ(∫l(Apple event objects with the aid of the ‘‡°dONLNd±ΩÄ)¨Apple Event Manager r»¿°dONLNd4±ÄΩÎ)houtines described in the °dONLNdMæl ·(«lchapter “Resolving and Cr °dONLNdfæ‚ ;)veating Object Specifi    `°dONLNd{æ< `)Zer Recorh°dONLNdÉæ` î)$ ds.” These r» °dONLNdèæî ø)4
  9837. outines aråÄ°dONLNdôæ¿ Ÿ),e curr °dONLNdüæ⁄ Ú)ently °dONLNd•Àl◊Δ(‘lMavailable as the Object Support Library (OSL), which you must link with your °dONLNdÚÿl‰Ù*application when you build it. °dONLNdÍlˆ*The ]`°dONLNd͈ã);Apple Event Manager (excluding the OSL) is available only i| °dONLNdQÍãˆΩ(Ûã n System 7 °dONLNd\˜lq(la°dONLNd]˜q|)ndm °dONLNd_˜})  Ì °dONLNd`˜í)later‘ °dONLNde˜ìï) T °dONLNdf˜ñª)versions_‡°dONLNdn˜ª )% of system softwar˜ °dONLNdĘ )Pe. Uà°dONLNdј8)se the l°dONLNdã˜9c)Gestalti`°dONLNdí˜c¥)* function with the °dONLNd•l(lgestaltAppleEventsAttrw¿°dONLNdªâ)Ñ# selector to determine whether the `°dONLNdfiâ√)ô Apple Event °dONLNdÍlè(lManage`°dONLNdêì)$r°dONLNdÒîñ) í°dONLNdÚñù)is∑`°dONLNdÙùü) 7`°dONLNdı†•)a7`°dONLNdˆ•¬)vailabl`°dONLNd˝√ )e.h°dONLNdˇ Ë) In the ı@°dONLNdË)responseÚ@°dONLNdH)0
  9838.  parameterE‡°dONLNdH|)0, the bit defi«¿°dONLNd'|‘)4ned by the constant °dONLNd;l*('lgestaltAppleEventsPresentv†°dONLNdT*6)ñ is set if the  @°dONLNdc6*Δ)4Apple Event Manager is availabl€Ä°dONLNdÇΔ*Õ)êe.°dONLNdÖ5lAä(>lCONST°dONLNdå5êAV)$!gestaltAppleEventsAttr  = 'evnt';°dONLNdπ5hA‘)ÿ{Gestalt selector}°dONLNdŒCêOD(LêgestaltAppleEventsPresent = 0;°dONLNd¯ChOÚ)ÿ{if this bit is set, } °dONLNdQh]Ï*{ then the Apple Eventw¿°dONLNd4QÏ]Ú)Ñ w`°dONLNd5QÚ]¯)}°dONLNdE_hkÏ(hh{ Manager is availablew¿°dONLNd[_ÏkÚ)Ñ}°dONLNd]wlÉr(ÄlTµ¿°dONLNd^wqÉ)o fi∏°dONLNdbwÉ˚)nd out which version of the Õ†°dONLNd~w˚É‹)|2Apple Event Manager is available, you can use the °dONLNd∞Ñlê∫(çlAEManagerInfo{ °dONLNdΩÑ∫ê)N function; for morS‡°dONLNdœÑêD)Ne informationX‡°dONLNd‹ÑDêF)<,ÿ‡°dONLNd›ÑFêX) see © °dONLNd‚ÑYêp)page Ñ°dONLNdÁÑqêà)4-104◊‡°dONLNdÏÑàêä).ˇ9 @ˇ ˇˇˇˇ@
  9839. ˇ·ˇ‚7^
  9840. 4H\, Palatino&e.3+ä"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@äResponding to ,): Apple Events4⁄ä˙(‡ä    Handling ê)& Apple Events
  9841. , (‡    4-5
  9842. ˇˇˇˇˇˇˇˇ4l4älòÄ.lBäoMM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""lBäolBäo$””””””””””””””””””””””””””””””òÄ
  9843. l6ä@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""l6ä@l6ä@˜˜˜˜˜˜˜˜˜˜˜˜˜¸ˇˇ˛¸˛ˇˇ¸ˇˇˇ˛˙ˇ˛˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜
  9844. 4è4Ö?òÄ
  9845. è6Ö@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""è6Ö@è6Ö@$˛˙ˇ˚ˇˇ˚ˇˇ˚ˇˇ    ˛˛ˇˇˇ˜˝˛ˇ˛
  9846. ˛ˇˇˇˇ
  9847. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜    ˛ˇˇ˛
  9848. ˛ˇˇˇˇ
  9849. ˛ˇˇˇˇ    ˝ˇˇˇ˙ˇˇ
  9850. ˛ˇ˛ˇˇ
  9851. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  9852. ˛ˇ˛ˇˇ
  9853. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝˛ˇ˛
  9854. ˛ˇ˛ˇˇ
  9855. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˜˜˜˝¸ˇ
  9856. ˛ˇ˛ˇˇ˝˛ˇ˛
  9857. ˛ˇ˛ˇˇ
  9858. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  9859. ˛ˇ˛ˇˇ
  9860. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  9861. ˛ˇ˛ˇˇ
  9862. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  9863. ˛ˇˇˇˇ
  9864. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  9865. ˛ˇˇˇ
  9866. ˛ˇˇˇ
  9867. ˛ˇˇˇ
  9868. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  9869. ˛ˇˇˇˇ
  9870. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  9871. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  9872. ˛ˇˇˇˇ
  9873. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  9874. kHr4lHr mäm
  9875. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd\äk‹(gäAccepting an ∏÷°dONLNd\‹k%)R Apple Eventˇˇˇˇˇˇ€r(g4
  9876. °dONLNdrä~ê({äTµ¿°dONLNdrè~ÿ)o accept or send `°dONLNd,rŸ~Ò)J@Apple events (or any other high-level events), you must set the °dONLNdläãû(àäapprI@°dONLNdpüãΔ)    opriate fl4†°dONLNdz«ã6)(ags in your application’s ,
  9877. Couriert°dONLNdî6ãZ)o'SIZE'q¿°dONLNdöZã`)$ r∂¿°dONLNdú`ãx)esourˇ°dONLNd°xã˛)ce and include code to handle °dONLNdøåäòÇ(ïä9high-level events in your application’s main event loop. °dONLNd˘ûä™ê*T∫¿°dONLNd˙û處)wo fl°dONLNdˇû¶™“) ags in the ˜@°dONLNd
  9878. û“™ˆ),'SIZE'ı°dONLNdûˆ™¸)$ r:°dONLNdû˝™)esourÇ@°dONLNdû™Ω)%ce determine whether an application rÜ¿°dONLNd<ûΩ™)®eceives high-level °dONLNdO´ä∑´(¥äevents: ,Zapf Dingbats°dONLNdX¡ä»è*n
  9879. °dONLNdZæñ ©) The ª¿°dONLNd^æ© ')isHighLevelEventAware≥‡°dONLNdsæ' /)~ fl@†°dONLNdvæ0 €)    (ag must be set for your application to r≤†°dONLNdû怠 )´ eceive any °dONLNd© ñ÷‰(”ñhigh-level events.°dONLNdºfläÊè(Âän
  9880. °dONLNdæ‹ñË©) The ª¿°dONLNd¬‹©Ë-)localAndRemoteHLEvents≥Ä°dONLNdÿ‹-Ë5)Ñ fl@@°dONLNd€‹6Ë·)    (ag must be set for your application to r≤@°dONLNd‹·Ë˛)´eceive °dONLNd
  9881. ËñÙˇ(Òñhigh-level events sent fr5‡°dONLNd#ËÙ®)j#om another computer on the network.°dONLNdG˘ä (äNote that in or¿°dONLNdV˘ÀF)Ader for your application to r`‡°dONLNds˘Ft){
  9882. espond to %¿°dONLNd}˘tÃ).Apple events sent fr‡¿°dONLNdë˘Ã‡)Xom ro@°dONLNdï˘·˛)emote °dONLNdõä(äVcomputers, the user of your application must also allow network users to link to your °dONLNdÒäŒ*Kapplication. The user does this by selecting your application in the Finder>¿°dONLNd<Œ˝(Œ , choosing °dONLNdG ä,∂()ä
  9883. Sharing freÄ°dONLNdQ ∂,Q),#om the File menu, and clicking the !`°dONLNdt Q,ù)õAllow Remote Pr!†°dONLNdÉ ù,)Logram Linking checkbox. °dONLNdõ-ä9(6ä"If the user has not yet started pr#¿°dONLNdΩ-9«)ç%ogram linking, the Sharing command of©¿°dONLNd‚-«9)∞fers to display °dONLNdÚ:äFÒ(Cäthe Sharing Setup contr=Ä°dONLNd    :ÚFè)h&ol panel so that the user can start prƒ`°dONLNd/:èF)ùogram linking. The user must °dONLNdLGäSŒ(Päalso authorize r‡°dONLNd\GœS)Eemote users for prtÄ°dONLNdnGS¥)P!ogram linking by using the Users 8Ä°dONLNdèGµSº)ñ&ˇ¿°dONLNdêGºS ) Gr‡°dONLNdìG S˘)
  9884. oups contr‡ °dONLNdùG˘S)/ol °dONLNd†Tä`±(]ä    panel. Pr‘ °dONLNd©T±`¢)'6ogram linking and setting up authenticated sessions ar醰dONLNdflT£`Û)Úe described in the °dONLNdÚaämº(jä chapter “Pr°dONLNd˝aΩmÛ)3 ogram-to-Pr
  9885. Ä°dONLNdaÛmg)6ogram Communications T¿°dONLNdafm¢)soolbox” in thiŒ¿°dONLNd,a¢m¡)<s book.°dONLNd4sä(|ä"For a complete description of the y@°dONLNdVsB)î'SIZE'w°dONLNd\sBH)$ rº°dONLNd^sH`)esour@°dONLNdcsa≥)ce, see the chapter Æ °dONLNdws≥æ)R“E…‡°dONLNdysæ) vent Manager” in °dONLNdäÄäå(âäInside Macintosh: Macintosh T“Ä°dONLNdßÄåN)}oolbox Essentials.Ä°dONLNdπÄOåQ)H °dONLNdªíäûQ(õä-Apple events (and other high-level events) ar)¿°dONLNdËíRûy)»    e identifiJ°dONLNdÚíyûÊ)'ed by a message class of °dONLNd üä´‰(®äkHighLevelEventz`°dONLNdü‰´)Z in the ëÄ°dONLNd"ü´)whatê°dONLNd&ü´) f4`°dONLNd(ü ´m)ield of the event r£Ä°dONLNd;üm´)Mecor‡°dONLNd?üÄ´ã)d. °dONLNdBüã´ë) YΔÄ°dONLNdCüê´“)ou can test the ÌÄ°dONLNdSü“´Í)BwhatÏ°dONLNdWüÍ´Ô) fê`°dONLNdYü´)ield of °dONLNda¨ä∏π(µä the event ro†°dONLNdl¨π∏À)/ecor‰°dONLNdp¨À∏ª)7d to determine whether the event is a high-level event.°dONLNd®æä ∏(«ä Listing 4-1 @°dONLNd≥æπ )/ is an example of a pr!‡°dONLNd…æ 5)^ocedurπ °dONLNdœæ5 `) e called fr¬°dONLNd⁄æ` ˚)+"om an application’s main event looΔ`°dONLNd¸æ˚ )õp to °dONLNdÀä◊è(‘ähQ`°dONLNdÀê◊£)andl&‡°dONLNdÀ§◊∞)e e: °dONLNd    À∞◊g) *vents, including high-level events. The pr~`°dONLNd3Àg◊Ö)∑ocedur†°dONLNd9ÀÜ◊)e determines the type of event °dONLNdXÿä‰ç(·ärE°dONLNdYÿé‰) eceived and then calls another r2@°dONLNdyÿ‰~)åoutine to take the apprn@°dONLNdêÿ~‰Ω)dopriate action.
  9886. H4H"H_
  9887. ˇ·ˇ‚7^    °dONLNd†˝ä∂(ä Listing 4-1°dONLNd¨˝Œ‘)DA0°dONLNd≠˝‘÷) ÇP°dONLNdÆ˝÷˘)DoEventL¿°dONLNdµ˝¸')&
  9888.  procedure
  9889. °dONLNd¡ä#n( ä&PROCEDURE DoEvent (event: EventRecord)q¿°dONLNdÁn#t)‰;°dONLNdÈ%ä1ê(.äB†°dONLNdÍ%ê1®)EGIN°dONLNdÙ3ú?+ CASE event.what OF°dONLNd3>?Ï)¢{determine the type of event}°dONLNd/AÆMÍ(JÆ
  9890. mouseDown:°dONLNd=O¿[8+DoMouseDown (event);°dONLNdT]Æi¥(fÆ.°dONLNdXkÆwn* . {handle other kinds of events}°dONLNd{yÆÖ¥*.°dONLNdáÆì⁄*2{handle high-level events, including Apple events}°dONLNd¥ïÆ°*kHighLevelEventz`°dONLNd√ï°)Z: Dy@°dONLNdΔï°™)oHighLevelEvent (event);°dONLNd‡£úØ¥(¨úEND;°dONLNd±äΩ®(∫äEND; ˇV@ˇ ˇˇˇˇ@
  9891. ˇ·ˇ‚7^
  9892. 4*\¯, Palatino&e.3+l"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@lResponding to ,): Apple Events4⁄*˙¯
  9893. (‡*4-6    )B    Handling ê)& Apple Events4^*¿¯
  9894. °dONLNd\lhö(el Listing 4-2 @°dONLNd \õhÁ)/ is an example of ⁄¿°dONLNd\ÁhÙ)La p\‡°dONLNd \ıh¯)r!‡°dONLNd!\˘h)ocedurπ °dONLNd'\hW)e that handles `°dONLNd6\Xhn)Aboth 8‡°dONLNd;\nhµ)Apple events an°dONLNdJ\∂h¡)Hd t °dONLNdM\¡hŒ) he °dONLNdPilu’(rlhigh-level event identifi@°dONLNdii÷u3)jed by the event class ,
  9895. CourierdONLNdi3u±)]mySpecialHLEventClassç¿°dONLNdîi±uÚ)~ and the event °dONLNd£vlÇy(lID ¿°dONLNd¶vzÇÊ)mySpecialHLEventID°dONLNd∏vÊÇü)l+. Note that, in most cases, you should use º@°dONLNd„vûÇÊ)∏Apple events to °dONLNdÛÉlè(ål%communicate with other applications.     °dONLNd®l≥ò*$ Listing 4-2°dONLNd%®∞≥∂)DA0°dONLNd&®∂≥∏) ÇP°dONLNd'®∏≥)DoHighLevelEvent„P°dONLNd7®≥m)V procedure for handling j†°dONLNdO®m≥ı)_"Apple events and other high-level °dONLNdq≤∞Ω (∫∞events
  9896. °dONLNdx l÷Ü(”l/PROCEDURE DoHighLevelEvent (event: EventRecord)n`°dONLNdß Ü÷å(”Ü;°dONLNd©ÿl‰r(·lV†°dONLNd™ÿr‰~)AR°dONLNdÆÊ~ÚÃ+ myErr: OSErr;°dONLNdºÙlä(˝lBEGIN°dONLNd√~»+7IF (event.message = LongInt(mySpecialHLEventClass)) AND°dONLNd˝êŒ+5(LongInt(event.where) = LongInt(mySpecialHLEventID)) °dONLNd4~*ñ('~THEN°dONLNd;,ê8∞+0{it's a high-level event that doesn't use AEIMP}°dONLNdn:êFt*&myErr := HandleMySpecialHLEvent(event)°dONLNdñH~Tñ(Q~ELSE°dONLNdùVêb»+4{otherwise, assume that the event is an Apple event}°dONLNd‘dêph*$myErr := AEProcessAppleEvent(event);°dONLNd¸Ä~å(â~{check and handle error}°dONLNdé~öb*&IF myErr <> noErr THEN DoError(myErr);°dONLNd=úl®Ñ(•lEND;°dONLNdB¥l¿ì*EIf your application accepts high-level events that do not follow the Ï °dONLNdá¥ì¿Õ(Ωì Apple Event °dONLNdì¡lÕã( lInterpru†°dONLNdö¡ãÕ‡)ocess Messaging Pr˛Ä°dONLNd¨¡‡ÕÂ)U:otocol (AEIMP), you must dispatch these high-level events °dONLNdÊŒl⁄É(◊lbefor_†°dONLNdÎŒÉ⁄™)
  9897. e calling ≥ °dONLNdıŒ™⁄)'AEProcessAppleEvent¨°dONLNdŒ⁄')r. T·¿°dONLNd Œ&⁄M)
  9898.     o dispatcÕ °dONLNdŒN⁄\)(h hÔ‡°dONLNdŒ\⁄ù)igh-level eventd °dONLNd&Œû⁄¢)Bs° °dONLNd'Œ¢⁄æ) that d°dONLNd.Œø⁄Ã)o nŸ‡°dONLNd1ŒÃ⁄ˆ)
  9899. ot follow °dONLNd;€lÁå(‰lAEIMPˆ`°dONLNd@€ãÁ◊)N, you should check the event class, the event ID, or both for each event to se´Ä°dONLNdé€ÿÁfl(‰ÿe °dONLNdêËlÙò(Òl    whether yQ °dONLNdôËôÙ)-our application can handle©`°dONLNd≥ËÙ<)v  the event.T°dONLNdæË=Ù?). °dONLNd¿˙lâ(lAfter rfi¿°dONLNd«˙â8))eceiving a high-level event (and, if apprE‡°dONLNd˙9)∞opriate, checkinh‡°dONLNd˙è)Fg wœ°dONLNd˙è¿)hether it is 
  9900.  °dONLNd˙¡»)2a °dONLNdlq(lhQ`°dONLNdrò)    igh-level¯`°dONLNdòö)& x`°dONLNdõÛ)event other than an c@°dONLNd1ÛÃ)X3Apple event), your application typically calls the °dONLNddl fi(lAEProcessAppleEventx‡°dONLNdwfi )r function. The B‡°dONLNdÜ ê)@AEProcessAppleEvent;¿°dONLNdôê Ó)r function determines °dONLNdÆ!l-ù(*l the type of †°dONLNd∫!ù-Ÿ)1Apple event ru`°dONLNd«!⁄-N)=eceived, gets the event buf$†°dONLNd‚!O-)u%fer that contains the parameters and °dONLNd.l:¥(7lattributes of the ‡°dONLNd.¥::)HApple event, and calls the corr0Ä°dONLNd8.;:l)á
  9901. esponding `°dONLNdB.l:√)1Apple event handleA†°dONLNdT.√:Ã)Wr iú†°dONLNdW.Ã:Î)    n your °dONLNd^;lG†(Dl application.°dONLNdkMlYr*Y@Ä°dONLNdlMrY´) ou should pr`°dONLNdxM´YΔ)9ovide |‡°dONLNd~MΔY”)an o‡°dONLNdÅM”Y)Apple event h °dONLNdéMY*)?andle´ °dONLNdìM*Y3)r fq†°dONLNdñM4YV)
  9902. or each ܆°dONLNdûMVYÓ)""Apple event that your application °dONLNd¿Zlfì(clsupports؇°dONLNd»Zìf’)'. This handler i‡°dONLNdÿZ÷f‡)Cs rdONLNd€Z‡fá)
  9903. &esponsible for performing the action rõ°dONLNdZáfœ)ßequested by the °dONLNdglsá(plApple˝Ä°dONLNdgásâ) }Ä°dONLNdgäsü)evenà`°dONLNdgüs©)t aJ¿°dONLNdg™s) nd if necessary can rK`°dONLNd3gsS)Zeturn data in the r‹¿°dONLNdFgSsh)Oeply A†°dONLNdKgis§)Apple event. 
  9904. ≤*πß4≥*πß"¥*_ˇ@r@ˇ ˇˇˇˇ@
  9905. ˇ·ˇ‚7^
  9906. 4H\, Palatino&e.3+ä"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@äResponding to ,): Apple Events4⁄ä˙(‡ä    Handling ê)& Apple Events
  9907. , (‡    4-7
  9908. ˇˇˇˇˇˇˇˇ4l4älòÄ.lBäoMM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""lBäolBäo$””””””””””””””””””””””””””””””òÄ
  9909. l6ä@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""l6ä@l6ä@˜˜˜˜˜˜˜˜˜˜˜˜˜¸ˇˇ˛¸˛ˇˇ¸ˇˇˇ˛˙ˇ˛˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜
  9910. 4è4Ö?òÄ
  9911. è6Ö@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""è6Ö@è6Ö@$˛˙ˇ˚ˇˇ˚ˇˇ˚ˇˇ    ˛˛ˇˇˇ˜˝˛ˇ˛
  9912. ˛ˇˇˇˇ
  9913. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜    ˛ˇˇ˛
  9914. ˛ˇˇˇˇ
  9915. ˛ˇˇˇˇ    ˝ˇˇˇ˙ˇˇ
  9916. ˛ˇ˛ˇˇ
  9917. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  9918. ˛ˇ˛ˇˇ
  9919. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝˛ˇ˛
  9920. ˛ˇ˛ˇˇ
  9921. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˜˜˜˝¸ˇ
  9922. ˛ˇ˛ˇˇ˝˛ˇ˛
  9923. ˛ˇ˛ˇˇ
  9924. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  9925. ˛ˇ˛ˇˇ
  9926. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  9927. ˛ˇ˛ˇˇ
  9928. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  9929. ˛ˇˇˇˇ
  9930. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  9931. ˛ˇˇˇ
  9932. ˛ˇˇˇ
  9933. ˛ˇˇˇ
  9934. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  9935. ˛ˇˇˇˇ
  9936. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  9937. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  9938. ˛ˇˇˇˇ
  9939. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähˆ(eäIf the client application r™°dONLNd\ˆh$)l equests a r^‡°dONLNd&\%h8)/eplyÜ`°dONLNd*\7hL), the Ö`°dONLNd0\Lh¸)&Apple Event Manager passes a default rÁ °dONLNdV\¸h)∞eply °dONLNd[iäu(räApple event to your handler¶¿°dONLNdviu†)}&. If the client application does not rÒ‡°dONLNdúi†u )ô
  9940. equest a ri¿°dONLNd¶iÀufi)+eplyë@°dONLNd™i›uÚ), the ê@°dONLNd∞iÚu)Apple °dONLNd∂väÇ>(ä(Event Manager passes a null descriptor rº†°dONLNdfiv>ÇP)¥ecor1°dONLNd‚vQÇó)d (a descriptor rˇ‡°dONLNdÛvóÇ©)Fecort@°dONLNd˜v™Ç)d of descriptor type ,
  9941. Courier°dONLNd Éäè∫(åätypeNull}°dONLNdÉ∫èœ)0 and j °dONLNdÉ–è›)a d‡°dONLNdÉfiè )
  9942. ata handle8¿°dONLNd&É èR). whose value is b°dONLNd6ÉRèd)FNIL`‡°dONLNd9Édè)') to your handler instead of a default °dONLNd`êäúç(ôärE°dONLNdaêéú£)eply ©‡°dONLNdfê£ú€) Apple event.°dONLNds¢äÆÊ(´äAfter your handler fià°dONLNdà¢ÊÆ)\    nishes prù‡°dONLNdë¢ÆF)(ocessing the è °dONLNdû¢FÆ )8+Apple event and adds any parameters to the °dONLNd…Øäªç(∏ärE°dONLNd Ø骣)eply ©‡°dONLNdœØ£ª)Apple event, it must r>‡°dONLNdÂت))a    eturn a r€°dONLNdÓØ)ªc)%esult code to Ä°dONLNd¸Ødª÷);AEProcessAppleEvent`°dONLNdØ÷ªÙ)r    . If the °dONLNdºä»¢(≈äclientû`°dONLNdº¢»§) `°dONLNdº•»!)application is waiting for a rΔ@°dONLNd=º!»4)|eplyÌ¿°dONLNdAº3»H), the Ï¿°dONLNdGºH»∞)Apple Event Manager r‡†°dONLNd\º∞»‚)h eturns the ró °dONLNdhº„»¯)3eply °dONLNdm…ä’¯(“äApple event to the client.
  9943. ˙H4˚H ¸ä¸
  9944. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNdàÎä˙*$Installing Entries in the …,°dONLNd¢Î˙ú)åApple Event Dispatch MÚ°dONLNd∑Îù˙•)áT* °dONLNd∏Χ˙ƒ)ablesˇˇˇˇˇˇ€r)j4
  9945. °dONLNdøäˆ(
  9946. äWhen your application rʆ°dONLNd÷ˆ%)l eceives an Ú`°dONLNd·%Ç)/Apple event, use the (@°dONLNdˆÉı)^AEProcessAppleEvent! °dONLNd    ı˜)r °dONLNd
  9947. ä¿(äfunction to r  °dONLNd¡)7etrieve the data bufú °dONLNd+})Ufer of the event and to r
  9948. @°dONLNdD~§)h    oute the ‡°dONLNdM§¯)&Apple event to the °dONLNd`ä'û($äapprI@°dONLNddü'¿)opriate …Ä°dONLNdl¿'w)!)Apple event handler in your application. ∏¿°dONLNdïw'})∑Yy@°dONLNdñ}'¯)our application supplies an °dONLNd≤(ä4•(1äApple˝Ä°dONLNd∑(•4ß) }Ä°dONLNd∏(®44) event dispatch table to map the °dONLNdÿ(54Ú)ç*Apple events your application supports to °dONLNd5äAó(>äthe]`°dONLNd5òAö) °dONLNd5öA)Apple event handlers pr1°dONLNd5AÄ)lovided by your application.°dONLNd9GäSê(PäTµ¿°dONLNd:GèS2)(o install entries in your application’s     °dONLNdbG3S–)§$Apple event dispatch table, use the °dONLNdÜTä`(]äAEInstallEventHandlerx °dONLNdõT`4)~  function. ÿ¿°dONLNd¶T4`:),Yô@°dONLNdßT:`·)*ou usually install entries for all of the _°dONLNd—T·`˛)ßApple °dONLNd◊aämë(jä=events that your application accepts into your application’s °dONLNdaím(jíApple event dispatch table. °dONLNd1säê(|äTµ¿°dONLNd2sè¡)o install an ( °dONLNd?s¬…)3AÔ`°dONLNd@s…)pple event handlec`°dONLNdQs0)Pr in yû‡°dONLNdWs0A)our /¿°dONLNd[sB≥)Apple event dispatch tablÙ °dONLNdts≥Ì)qe, you must sa°dONLNdÅsÓ    );pecify,Zapf Dingbats°dONLNdàâäêè(èän
  9949. °dONLNdäÜñíÙ) the event class of the E†°dONLNd°ÜÙí*)^ Apple event°dONLNd≠õä¢è(°än
  9950. °dONLNdØòñ§Í) the event ID of the é¿°dONLNd√òͧ )T Apple event°dONLNdœ≠ä¥è(≥än
  9951. °dONLNd—™ñ∂ª) the addrŸ‡°dONLNdŸ™ª∂Ê)% ess of the ‡°dONLNd‰™Ê∂c)+Apple event handler for the Œ¿°dONLNd™c∂ô)} Apple event°dONLNd øäΔè(≈än
  9952. °dONLNdºñ»°) a r≈°dONLNdº°»±) eferq °dONLNdº≤»Ì)ence constant°dONLNd#ÕäŸê(÷äY@Ä°dONLNd$ÕêŸß)ou pr@°dONLNd)Õ®Ÿ()ovide this information to the ˜Ä°dONLNdGÕ(Ÿ¶)ÄAEInstallEventHandlerÔ†°dONLNd\Õ¶Ÿ)~ function. In addition, °dONLNdt⁄äʪ(„ä you indicat|@°dONLNd⁄ºÊÀ)2e w‡°dONLNdÇ⁄ÃÊø)7hether the entry should be added to your application’s T†°dONLNdπ⁄øʘ)Û Apple event °dONLNd≈ÁäÛ÷(ädispatch table or ´`°dONLNd◊Á÷Û·)Lto „@°dONLNd⁄Á·Û) the system K`°dONLNdÂÁÛé)2Apple event dispatch table. °dONLNd˘äù(äThe ª¿°dONLNd˘ù9)!system Apple event dispatch tableS@°dONLNd'˘:ˆ)ù- is a table in the system heap that contains °dONLNdTä´(äsystem ä¿°dONLNd[´Z)!%Apple event handlers—handlers that ar∞‡°dONLNdÄZÔ)Ø$e available to all applications and °dONLNd§äì(äprG °dONLNd¶î∫)
  9953.     ocesses r’¿°dONLNdØ∫>)&unning on the same computerÀ†°dONLNd >›)Ñ%. The handlers in your application’s º`°dONLNdÔ›˙)üApple °dONLNdı ä,Ó()äevent dispatch table arUÄ°dONLNd  Ó,ò)d)e available only to your application. If ≠†°dONLNd5 ò,
  9954. )™AEProcessAppleEvent¶Ä°dONLNdH 
  9955. , )r °dONLNdI-ä9∞(6äcannot fi◊†°dONLNdR-∞9
  9956. )&nd a handler for the ‚‡°dONLNdg-
  9957. 9†)Z"Apple event in your application’s BÄ°dONLNdâ-°9Ÿ)ó Apple event °dONLNdï:äF≤(Cä    dispatch «@°dONLNdû:≤F,)(table, it looks in the system Ø`°dONLNdº:,FÙ)z.Apple event dispatch table for a handler (see °dONLNdÎGäSß(Pä“How øÄ°dONLNdGßS#)Apple Event Dispatching W#°dONLNd        G#Sc)|orks” on page y°dONLNd    GcSp)@4-9Ç°dONLNd    GpS‚) for details). If it doesn’t fiÔ°dONLNd    9G‚S˜)rnd a °dONLNd    >Tä`¯(]ähandler for the event, it rπÄ°dONLNd    YT¯`&)n eturns the ´°dONLNd    dT'`ü)/errAEEventNotHandled£Ä°dONLNd    xTü`•)x rËÄ°dONLNd    zT•`÷) esult code. °dONLNd    áfär#(oä#If you add a handler to the system ¯¿°dONLNd    ™f#rÕ)ô&Apple event dispatch table, the handleT†°dONLNd    –fŒrÿ)´r s@°dONLNd    ”fŸr˘) hould rõ`°dONLNd    ⁄f˘r) eside °dONLNd    ‡sä¸(|äin the system heap. If therÚ °dONLNd    ˚s¸#)r    e was alr˝ °dONLNd
  9958. s#ü)'eady an entry in the system ƒ°dONLNd
  9959.  sü)|Apple event dispatch °dONLNd
  9960. 5Ääåa(âä4table for the same event class and event ID, it is r˚ °dONLNd
  9961. iÄaå˝)◊$eplaced unless you chain it to your °dONLNd
  9962. ççäô…(ñäsystem handleY†°dONLNd
  9963. öç ôÕ)@r釰dONLNd
  9964. õçÕô„). See ·‡°dONLNd
  9965. °ç„ôÛ)“CrΩ‡°dONLNd
  9966. §çÛôd)eating and Managing the ùÄ°dONLNd
  9967. ºçdôŒ)qApple Event Dispatch Tÿ‡°dONLNd
  9968. “çÕô¯)i
  9969. ables” on °dONLNd
  9970. ‹ö䶰(£äpage Z‡°dONLNd
  9971. ·ö¢¶¥)4-61Æ¿°dONLNd
  9972. Âö¥¶Â) for details.ˇ∏@ˇ ˇˇˇˇ@
  9973. ˇ·ˇ‚7^
  9974. 4*\¯, Palatino&e.3+l"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@lResponding to ,): Apple Events4⁄*˙¯
  9975. (‡*4-8    )B    Handling ê)& Apple Events4^*¿¯
  9976. j*p¯4j*p¯ klk¯
  9977. ˇ·ˇ‚7^ °dONLNd\ljo(flI’Ä°dONLNd\oj )#nstalling Entries for the Required â°dONLNd$\ jf)± Apple Eventsˇˇˇˇˇˇ‘@)—4
  9978. °dONLNd2pl|ö(yl Listing 4-3 @°dONLNd=põ|D)/) illustrates how to add entries for the rF °dONLNdfpD|[)©equir]`°dONLNdkp[|h)ed d`°dONLNdnph|«)Apple events to your °dONLNdÉ}lâß(Ülapplication’s \¿°dONLNdë}ßâ );Apple event dispatch table.    °dONLNd≠¢l≠ò(™l Listing 4-3°dONLNdπ¢∞≠+)D Adding entries for the required à°dONLNdŸ¢+≠•){Apple events to an application’i`°dONLNd¯¢•≠¨)zs Í°dONLNd˙¢´≠›) Apple event °dONLNd¨∞∑Á(¥∞dispatch table,
  9979. Courier
  9980. °dONLNdƒl–å(Õl0myErr := AEInstallEventHandler(kCoreEventClass, °dONLNdP“ fi&+¥ †°dONLNdQ“&fiû)kAEOpenApplication, °dONLNdp‡ Ï&(È  †°dONLNdq‡&Ïb)
  9981. @MyHandleO{‡°dONLNd{‡bÏz)<App,z`°dONLNd‡zϺ)  0, FALSE);°dONLNdãÓl˙P(˜l&IF myErr <> noErr THEN DoError(myErr);°dONLNd≤¸lÄ*.myErr := AEInstallEventHandler(kCoreEventClassn¿°dONLNd‡¸Äå(Ä, °dONLNdÌ
  9982.  &(  †°dONLNdÓ
  9983. &,)k@°dONLNdÔ
  9984. ,Ü)AEOpenDocumentsy†°dONLNd˛
  9985. Üí)Z, °dONLNd  $&(!  †°dONLNd &$Ä)@MyHandleODoc,0z°dONLNdÄ$∂)Z    , FALSE);°dONLNd%&l2P(/l&IF myErr <> noErr THEN DoError(myErr);°dONLNdL4l@å*0myErr := AEInstallEventHandler(kCoreEventClass, °dONLNdáB N&+¥ †°dONLNdàB&Nò)kAEPrintDocuments, °dONLNd¶P \&(Y  †°dONLNdßP&\b)
  9986. @MyHandleP{‡°dONLNd±Pb\z)<Doc,z`°dONLNdµPz\º)  0, FALSE);°dONLNd¡^ljP(gl&IF myErr <> noErr THEN DoError(myErr);°dONLNdËllxÜ*/myErr := AEInstallEventHandler(kCoreEventClass,°dONLNd"z Ü&+¥ †°dONLNd#z&Üí)kAEQuitApplicationx‡°dONLNd5zíÜò)l,°dONLNdAà î&(ë  †°dONLNdBà&îÄ)@MyHandleQuit, z°dONLNdQàÄî¬)Z 0, FALSE); °dONLNd]ñl¢\(ül(IF myErr <> noErr THEN DoError(myErr);  °dONLNdÜÆl∫°* The code in @†°dONLNdíÆ¢∫–)6 Listing 4-3‡‡°dONLNdùÆ–∫⁄). crñ °dONLNd†Æ€∫I) eates entries for all four r¸†°dONLNdºÆI∫`)nequir‡°dONLNd¡Æa∫n)ed ‡°dONLNdƒÆn∫Δ)Apple events in the [`°dONLNdÿÆΔ∫„)XApple °dONLNdfiªl«d(ƒl9event dispatch table. (For examples of handlers that corr°dONLNdªd«fi)¯espond to these entries, see °dONLNd4»l‘Ã(—l“Handling the Requirí`°dONLNdH»Ã‘Ÿ)`ed ô`°dONLNdK»Ÿ‘)Apple Events,”Û@°dONLNdY»‘i)C which begins on c†°dONLNdj»j‘Å)Npage >Ä°dONLNdo»Ç‘è)4-1¿°dONLNdr»è‘î)1¿°dONLNds»î‘µ).) The fi¢ °dONLNd|»µ‘‹)!
  9987. rst entry °dONLNdÜ’l·t(filcrµ@°dONLNdà’t·Ó)eates an entry for the Open ¨`°dONLNd§’Ó·Ô)z;Application event. The entry indicates the event class and °dONLNdfl‚lÓÀ(Îlevent ID of the Open *`°dONLNdÙ‚ÀÓl)_$Application event, supplies the addro`°dONLNd‚lÓÀ)°ess of the handler for °dONLNd/Ôl˚}(¯lthat÷ °dONLNd3Ô}˚) V °dONLNd4ÔÄ˚Õ)event, and specifi~†°dONLNdFÔÕ˚)Mes 0 as the rd†°dONLNdSÔ˚)3efer¿°dONLNdWÔ˚Q)ence constant. °dONLNdgl(
  9988. lThe ]`°dONLNdk)Apple Event Manager passes thel`°dONLNdâ)ë r±`°dONLNdã&)efer]Ä°dONLNdè'_) ence constan∫@°dONLNdõ_h)8t tø°dONLNdûh•)    o your handle£`°dONLNd´¶±)>r efl†°dONLNdƱ) ach time your °dONLNdºlπ(lhandler is called. @°dONLNdœ∫¿)NY¡¿°dONLNd–ø?)our application can use this rµ`°dONLNdÓ?O)ÄeferaÄ°dONLNdÚP‚)"ence constant for any purpose. If °dONLNdl'($l"your application doesn’t use the rÿ@°dONLNd6')îeferÑ`°dONLNd:'§)#ence constant, use 0 as the value. °dONLNd^-l9‹(6lThe last parameter to the I¿°dONLNdx-›9[)qAEInstallEventHandlerA‡°dONLNdç-[9Í)~" function is a Boolean value that °dONLNdØ:lFV(Cl4determines whether the entry is added to the system Ÿ °dONLNd„:VFÊ)Í!Apple event dispatch table or to °dONLNdGlSæ(Plyour application’s € °dONLNdGæS?)RApple event dispatch table. Tû‡°dONLNd4G?S‚)Å&o add the entry to your application’s °dONLNdZTl`˘(]l Apple event dispatch table, use õ¿°dONLNdzT˘`)çFALSEô‡°dONLNdT`ú) as the value of this parameterÈ¿°dONLNdûTõ`fi)Ñ. If you specify °dONLNdØalmÑ(jlTRUE~Ä°dONLNd≥aÑm)!, the entry is added to the syste߆°dONLNd‘am)âm ù@°dONLNd÷am) AdÄ°dONLNd◊a mÈ)-pple event dispatch table. The code shown in °dONLNdnlzö(wl Listing 4-3 @°dONLNdnõz,)/# adds entries to the application’s E¿°dONLNd2n,z•)ëApple event dispatch table.
  9989. ¨*≥ß4≠*≥ß"Æ*_ˇ46@ˇ ˇˇˇˇ@
  9990. ˇ·ˇ‚7^
  9991. 4H\, Palatino&e.3+ä"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@äResponding to ,): Apple Events4⁄ä˙(‡ä    Handling ê)& Apple Events
  9992. , (‡    4-9
  9993. ˇˇˇˇˇˇˇˇ4l4älòÄ.lBäoMM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""lBäolBäo$””””””””””””””””””””””””””””””òÄ
  9994. l6ä@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""l6ä@l6ä@˜˜˜˜˜˜˜˜˜˜˜˜˜¸ˇˇ˛¸˛ˇˇ¸ˇˇˇ˛˙ˇ˛˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜
  9995. 4è4Ö?òÄ
  9996. è6Ö@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""è6Ö@è6Ö@$˛˙ˇ˚ˇˇ˚ˇˇ˚ˇˇ    ˛˛ˇˇˇ˜˝˛ˇ˛
  9997. ˛ˇˇˇˇ
  9998. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜    ˛ˇˇ˛
  9999. ˛ˇˇˇˇ
  10000. ˛ˇˇˇˇ    ˝ˇˇˇ˙ˇˇ
  10001. ˛ˇ˛ˇˇ
  10002. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  10003. ˛ˇ˛ˇˇ
  10004. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝˛ˇ˛
  10005. ˛ˇ˛ˇˇ
  10006. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˜˜˜˝¸ˇ
  10007. ˛ˇ˛ˇˇ˝˛ˇ˛
  10008. ˛ˇ˛ˇˇ
  10009. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  10010. ˛ˇ˛ˇˇ
  10011. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  10012. ˛ˇ˛ˇˇ
  10013. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  10014. ˛ˇˇˇˇ
  10015. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  10016. ˛ˇˇˇ
  10017. ˛ˇˇˇ
  10018. ˛ˇˇˇ
  10019. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  10020. ˛ˇˇˇˇ
  10021. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  10022. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  10023. ˛ˇˇˇˇ
  10024. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  10025. jHp4jHp käk
  10026. ˇ·ˇ‚7^ °dONLNd\äjˆ(fäInstalling Entries for ÑÄ°dONLNd\ˆj)lApplÜ¿°dONLNd\j&)e Evâ°dONLNd\&j6)ent6°dONLNd"\7jO)s Se8@°dONLNd&\Oj◊)nt by the Edition Managerˇˇˇˇˇˇ‘@)¿4
  10027. °dONLNdApä|ç(yäIfiÄ°dONLNdBpç|c)/f your application supports the Edition Manager[°dONLNdqpc|)÷&, you should also add entries to your °dONLNdó}äâ≈(Üäapplication’s \¿°dONLNd•}≈â]);#Apple event dispatch table for the •¿°dONLNd»}]â˘)ò#Apple events that your application °dONLNdÎääñç(ìärE°dONLNdÏäéñ∑)
  10028. eceives frv†°dONLNdˆä∑ñ"))om the Edition ManagerɆ°dONLNd ä"ñ')k. Ɇ°dONLNdä'ñU) Listing 4-4#‡°dONLNdäVñÂ)/  shows how to add these entries.    °dONLNd:Øä∫∂(∑ä Listing 4-4°dONLNdFØŒ∫)DAdding entries for P°dONLNdYØ∫)I;Apple events sent by the Edition Manager to an application’n°dONLNdîØ∫
  10029. )Ïs °dONLNdñπŒƒ7(¡ŒApple event dispatch table,
  10030. Courier
  10031. °dONLNd±—ä›»(⁄ä5myErr := AEInstallEventHandler(sectionEventMsgClass, °dONLNdÒfl>ÎD+¥ †°dONLNdÚflDÎ∞)sectionReadMsgID, °dONLNdÌ>˘D(ˆ> †°dONLNdÌD˘Ê)@MyHandleSectionReadEvent, °dONLNd6˚>D(> †°dONLNd7˚DÄ)
  10032. 0, FALSE);°dONLNdB    än(ä&IF myErr <> noErr THEN DoError(myErr);°dONLNdiä#»*5myErr := AEInstallEventHandler(sectionEventMsgClass, °dONLNd©%>1D+¥ †°dONLNd™%D1∂)sectionWriteMsgID, °dONLNd»3>?D(<> †°dONLNd…3D?Ï)@MyHandleSectionWriteEvent, °dONLNdA>MD(J> †°dONLNdÒADMÄ)
  10033. 0, FALSE);°dONLNd¸Oä[n(Xä&IF myErr <> noErr THEN DoError(myErr);°dONLNd#]äi»*5myErr := AEInstallEventHandler(sectionEventMsgClass, °dONLNd_kˆw+l  °dONLNdek>wD)H †°dONLNdfkDwº)sectionScrollMsgID, °dONLNdÖy>ÖÚ(Ç> @MyHandleSectionScrollEvent, °dONLNdÆá>ìD* †°dONLNdØáDìÄ)
  10034. 0, FALSE);°dONLNd∫ïä°n(ûä&IF myErr <> noErr THEN DoError(myErr);°dONLNd·≠äπõ*See ”°dONLNdÂ≠õπÃ)
  10035. “Handling d`°dONLNdÔ≠Õπ∂)22Apple Events Sent by the Edition Manager” on page ¿°dONLNd!≠∑π…)Í4-20h†°dONLNd%≠…πÎ)     for the °dONLNd.∫äΔÖ(√ä9parameters associated with these events. See the chapter Ú°dONLNdg∫ÖΔê)˚“E¿°dONLNdi∫ëΔ) dition Manager” in this book °dONLNdÜ«ä”e(–ä0for information on how your application should reÄ°dONLNd∂«e”£)€espond to the á¿°dONLNdƒ«£”)>Apple events sent by the °dONLNd›‘䇑(›äEdition Managerf °dONLNdÏ‘‘‡÷)J.Ê °dONLNdÌ‘÷‡ÿ) 
  10036. ˛H4ˇH ä
  10037. ˇ·ˇ‚7^ °dONLNdÔÒ䡕(˚äHow ,°dONLNdÛÒ•ˇ6)Apple Event Dispatching WR¿°dONLNd Ò6ˇL)ëorksˇˇˇˇˇˇ‘@)Ÿ4
  10038. °dONLNdäŸ(äIn addition to the x@°dONLNd%Ÿ)OGApple event handler dispatch tables, applications can add entries to a °dONLNdlä(äspecial handler dispatch tableÕ¿°dONLNdä )à: in either the application heap or the system heap. These °dONLNdƒä+◊((ädispatch tables ar≈@°dONLNd÷◊+©)M0e used for various specialized handlers; for mor1`°dONLNd™+˚)”e information, see °dONLNd,ä8ö(5ä“Cr\°dONLNd,ö8Ñ)2eating and Managing the Special Handler Dispatch TË °dONLNdN,É8†)Èables,”fi¿°dONLNdU,°8Ó) which begins on °dONLNdf9äE°(Bäpage Z‡°dONLNdk9¢E¥)4-99Æ¿°dONLNdo9¥Eπ). °dONLNdrKäW˛(TäWhen an application calls Ú†°dONLNdåK˛Wp)tAEProcessAppleEventÎÄ°dONLNdüKpWr)r,kÄ°dONLNd†KsWu) ÎÄ°dONLNd°KuWØ)the function løÄ°dONLNdØK∞WÕ);ooks fi`°dONLNd∂KŒW˜) rst in the °dONLNd¡Xäd˘(aäVapplication’s special handler dispatch table for an entry that was installed with the °dONLNdeäq±*    constant J@°dONLNd e≤q)(keyPreDispatchE°dONLNd.eq)T?. If the application’s special handler dispatch table does not °dONLNdmrä~>({ä*include such a handler or if the handler r†°dONLNdór?~])µeturns •¿°dONLNdûr]~’)errAEEventNotHandledû@°dONLNd≤r’~)x, the function °dONLNd¡äã˙(àälooks in the application’s `°dONLNd‹˚ã)q?Apple event dispatch table for an entry that matches the event °dONLNdåäò(ïä class and event ID of the specifiΩ†°dONLNd<åò")ãed ƒ†°dONLNd?å"ò])Apple event. 
  10039. πH¿≈4∫H¿≈"ªH_ˇ Ç@ˇ ˇˇˇˇ@
  10040. ˇ·ˇ‚7^
  10041. 4*\¯, Palatino&e.3+l"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@lResponding to ,): Apple Events4⁄*˙¯
  10042. (‡*4-10    )B    Handling ê)& Apple Events4^*¿¯
  10043. °dONLNd\lh¿(elIf the application’s ÏÄ°dONLNd\¿hÌ)TEApple event dispatch table does not include such a handler or if the °dONLNdZiluî(rl    handler r( °dONLNdciïu≥))eturns ,
  10044. Courierº@°dONLNdji≥u+)errAEEventNotHandled¥¿°dONLNd~i+u@)x, the  °dONLNdÑiAu≥)AEProcessAppleEvent °dONLNdói≥u˜)r function looks °dONLNdßvlÇ‹(lVin the system special handler dispatch table for an entry that was installed with the °dONLNd˝Élèì*    constant J@°dONLNdÉîèË)(keyPreDispatchE°dONLNdÉËè÷)T8. If the system special handler dispatch table does not °dONLNdLêlú (ôl*include such a handler or if the handler r†°dONLNdvê!ú?)µeturns •¿°dONLNd}ê?ú∑)errAEEventNotHandledû@°dONLNdëê∑úÛ)x, the function °dONLNd†ùl©√(¶llooks in the system A`°dONLNd¥ù√©Ô)WEApple event dispatch table for an entry that matches the event class °dONLNd˘™l∂fl(≥land event ID of the specifik°dONLNd™‡∂Ì)ted r°dONLNd™Ì∂()Apple event. °dONLNd%ºl»õ(≈l If the syste$‡°dONLNd1ºú»ß)0m Ä°dONLNd3ºß»Â) Apple event d°dONLNd@ºÊ»¨)?-ispatch table does not include such a handlerÙ°dONLNdmº´»¿)≈, the Û°dONLNdsº¿»›)Apple °dONLNdy…l’∂(“lEvent Manager rv`°dONLNdà…∂’Ë)J eturns the r,‡°dONLNdî…È’)3 esult code 0Ä°dONLNdü…’ê)/errAEEventNotHandled)°dONLNd≥…ê’À)x to the server °dONLNd¬÷l‚f(fll=application and, if the client application is waiting for a r‡°dONLNdˇ÷g‚z)˚eply+`°dONLNd÷y‚Â), to the client application‡°dONLNd÷Ê‚Ë)m.
  10045. *˛¯4Ò*˛¯,Zapf Dingbats°dONLNd X˙`(¯Xs°dONLNd!Òl˘u(˜lWú°dONLNd"Òu˘†)    ARNING
  10046. ˇ·ˇ‚7^
  10047. °dONLNd)¸lÉ(lBeforÛ¿°dONLNd.¸Éè)e a=`°dONLNd1¸ê )n application calls a system N`°dONLNdN¸ f){Apple event handler懰dONLNda¸ej)Z, 懰dONLNdc¸jã)system °dONLNdjlç(lsoftwar‰¿°dONLNdqçΔ)!e has set up tQ`°dONLNd«‘):he °dONLNdÇ‘Á)A5 r@°dONLNdÜÁ)egiste§`°dONLNdå    )r fj‡°dONLNdè
  10048. °)
  10049. %or the calling application. For this °dONLNd¥l o(lrE°dONLNdµp ¥)eason, if you pr°†°dONLNd≈¥ ¯)Dovide a system dONLNd‘¯ S)DApple event handler`°dONLNdÁS Æ)[, it should never use °dONLNd˝ l,û()lFA5 global variables or anything that depends on a particular context; °dONLNdC,l8é* Botherwise, the application that calls the system handler may crashq‡°dONLNdÖ,è8ë(5è.Ò‡°dONLNdá/ñ7ù)s
  10050. °dONLNdâ=lIq(FlF °dONLNdä=rIÕ)or any entry in your †°dONLNdü=ÕI∏)[5Apple event dispatch table, you can specify a wildcar© °dONLNd‘=∏I€)Îd value °dONLNd‹JlVx(Slfor<°dONLNdflJyV{) º°dONLNd‡J{V)$the event class, event ID, or both. m†°dONLNdJV)ïY. °dONLNdJVn)ou specify a wildcarÁ‡°dONLNdJnVƒ)Xd by supplying the °dONLNd,Wlc¥(`l typeWildCard{Ä°dONLNd8W¥cp)H, constant when installing an entry into the ˝°dONLNddWpcÎ)ºApple event dispatch table. °dONLNdÄdlps(mlAG@°dONLNdÅdtpv) :†°dONLNdÇdvpó)wildcar≥`°dONLNdâdóp@)!&d value matches all possible values. W@°dONLNdØdApZ)™ildcar#°dONLNdµdZp›)ds make it possible to supply °dONLNd”ql}|(zloneêÄ°dONLNd÷q|}~) ≤ °dONLNd◊q~}F)-Apple event handler that dispatches several rÄ°dONLNdqG}d)…elated ‡°dONLNd qd}°)Apple events.†°dONLNdq°}£)= °dONLNdÉlè4(ål.For example, if you specify an entry with the fl°dONLNdHÉ4è|)» typeWildCard⁄Ä°dONLNdTÉ|è‘)H event class and the °dONLNdiêlúÃ(ôlkAEOpenDocumentsz°dONLNdyêÃú    )` event ID, the ‚°dONLNdàê    úû)=Apple Event Manager dispatches `°dONLNdßêüúÁ)ñApple events of °dONLNd∑ùl©(¶l$any event class with an event ID of W@°dONLNd€ù    ©i)ùkAEOpenDocumentsQ@°dONLNdÎùi©Ê)` to the handler for that entryü °dONLNd    ù©Í)|. °dONLNd Ølª¯(∏l!If you specify an entry with the cÄ°dONLNd-Ø˘ªS)çkCoreEventClass]‡°dONLNd<ØSª´)Z event class and the °dONLNdQºl»¥(≈l typeWildCard{Ä°dONLNd]º¥»∂)H ˚Ä°dONLNd^º∂»Ò)event ID, the „Ä°dONLNdlºÒ»Ü);Apple Event Manager dispatches ‡°dONLNdãºá»œ)ñApple events of °dONLNdõ…l’y(“lthe]`°dONLNdû…z’|) ›`°dONLNdü…|’÷)kCoreEventClass◊¿°dONLNdÆ…÷’◊)Z< event class with any event ID to the handler for that entryb °dONLNdÍ…◊’‹(“◊. °dONLNdÌ€lÁ¯(‰l!If you specify an entry with the cÄ°dONLNd€˘ÁA)ç typeWildCard_°dONLNd€AÁô)H event class and the …`°dONLNd/€ôÁ·)X typeWildCardƒ‡°dONLNd;€·Á„)H °dONLNd<ËlÙß(Òlevent ID, the h°dONLNdJËßÙI);#Apple Event Manager dispatches all ◊ °dONLNdmËIÙÈ)¢$Apple events of any event class and °dONLNdëıl"(˛l*any event ID to the handler for that entryó`°dONLNdªı!#)µ.°dONLNdΩlÇ(lIf an •`°dONLNd√Çü)Apple ¢‡°dONLNd…†∫)event p °dONLNdœª’)Adispatch table contains one entry for an event class and a specifiõ¿°dONLNd    ’ˆ(’c event °dONLNd    l ß(lKID, and also contains another entry that is identical except that it specifi†°dONLNd    e® ‹(® es a wildcará°dONLNd    q‹ ‰)4d °dONLNd    s!l-L(*l6value for either the event class or the event ID, the H °dONLNd    ©!L-©)‡Apple Event Manage`°dONLNd    ª!™-∂)^r dí¿°dONLNd    æ!∂-’) ispatch>@°dONLNd    ≈!÷-fl) esD‡°dONLNd    «!fl-Ò)     the °dONLNd    Ã.l:~(7lmoréÄ°dONLNd    œ.~:°)e specifiF@°dONLNd    ÿ.¢:¿)$c entryy‡°dONLNd    fl.ø:). For example, if an ¿°dONLNd    Ù.:˜)W3Apple event dispatch table includes one entry that °dONLNd
  10051. ';lGà(DlspecifiÓ °dONLNd
  10052. .;àG·)es the event class as Ø°dONLNd
  10053. D;‚G*)Z kAECoreSuite™Ä°dONLNd
  10054. P;*GÑ)H and the event ID as °dONLNd
  10055. e;ÖGª)[    kAEDelete†°dONLNd
  10056. n;ªG”)6, and °dONLNd
  10057. tHlTé(Qlanotherñ‡°dONLNd
  10058. {HéTê)" ‡°dONLNd
  10059. |HëT€)entry that specifi:@°dONLNd
  10060. éH€T4)Jes the event class as ˚ °dONLNd
  10061. §H4T|)Y kAECoreSuiteˆ†°dONLNd
  10062. ∞H|T÷)H and the event ID as °dONLNd
  10063. ≈Ula¥(^l typeWildCard{Ä°dONLNd
  10064. —U¥a…)H, the zÄ°dONLNd
  10065. ◊U…ay)&Apple Event Manager will dispatch the ¿°dONLNd
  10066. ˝Uya÷)∞Apple event handler °dONLNd bln(kl%associated with the entry that specifi√¿°dONLNd 7bn])°es the event ID as Õ¿°dONLNd Jb]nì)P    kAEDelete `°dONLNd Sbìnò)6. ˇ;∞@ˇ ˇˇˇˇ@
  10067. ˇ·ˇ‚7^
  10068. 4H\, Palatino&e.3+ä"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@äResponding to ,): Apple Events4⁄ä˙(‡ä    Handling ê)& Apple Events
  10069. , (‡4-11
  10070. ˇˇˇˇˇˇˇˇ4l4älòÄ.lBäoMM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""lBäolBäo$””””””””””””””””””””””””””””””òÄ
  10071. l6ä@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""l6ä@l6ä@˜˜˜˜˜˜˜˜˜˜˜˜˜¸ˇˇ˛¸˛ˇˇ¸ˇˇˇ˛˙ˇ˛˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜
  10072. 4è4Ö?òÄ
  10073. è6Ö@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""è6Ö@è6Ö@$˛˙ˇ˚ˇˇ˚ˇˇ˚ˇˇ    ˛˛ˇˇˇ˜˝˛ˇ˛
  10074. ˛ˇˇˇˇ
  10075. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜    ˛ˇˇ˛
  10076. ˛ˇˇˇˇ
  10077. ˛ˇˇˇˇ    ˝ˇˇˇ˙ˇˇ
  10078. ˛ˇ˛ˇˇ
  10079. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  10080. ˛ˇ˛ˇˇ
  10081. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝˛ˇ˛
  10082. ˛ˇ˛ˇˇ
  10083. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˜˜˜˝¸ˇ
  10084. ˛ˇ˛ˇˇ˝˛ˇ˛
  10085. ˛ˇ˛ˇˇ
  10086. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  10087. ˛ˇ˛ˇˇ
  10088. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  10089. ˛ˇ˛ˇˇ
  10090. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  10091. ˛ˇˇˇˇ
  10092. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  10093. ˛ˇˇˇ
  10094. ˛ˇˇˇ
  10095. ˛ˇˇˇ
  10096. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  10097. ˛ˇˇˇˇ
  10098. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  10099. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  10100. ˛ˇˇˇˇ
  10101. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  10102. ^Hk4^Hk°dONLNd_äg©(eäIMPORTç°dONLNd_©gπ)ANT
  10103. ˇ·ˇ‚7^
  10104. °dONLNdiäu˙(räIf your application sends ∫°dONLNd.i˙u|)pApple events to itself using a ,
  10105. Courier°dONLNdMuäÅ(~ätypeProcessSerialNumberw`°dONLNdduÅ+)ä addrÛ‡°dONLNdiu+Ån)ess descriptor r¿°dONLNdyuoÅÅ)Decorã °dONLNd}uÅÅ∞) d with the °dONLNdàÅäç“(ää lowLongOfPSN{Ä°dONLNdîÅ“ç◊)H f‡°dONLNdñÅÿç) ield set to V‡°dONLNd¢Åç_)-kCurrentProcessQ@°dONLNd±Å_çt)Z, the P@°dONLNd∑ÅtçÆ) Apple Event °dONLNd√çäôfi(ñäManager jumps dirL °dONLNd‘çflô&)Uectly to the appr`°dONLNdÂç'ôH)Hopriate û†°dONLNdÌçHôÀ)!Apple event handler without °dONLNd    ôä•≤(¢ä    going thr&@°dONLNdô≥•$))ough the normal event-pr懰dONLNd*ô$•t)qocessing sequence,‡°dONLNd;ôu•¢)Q . For this r"@°dONLNdGô¢•¿)-eason, °dONLNdN•ä±*(Æä%your application will not appear to r%†°dONLNds•+±K)°un mor冰dONLNdy•K±±) e slowly when it sends °dONLNdê±äΩÍ(∫äApple events to itself.≠@°dONLNdß±ÍΩ)` For mor≥°dONLNdرΩa)&e information, see @°dONLNd¬±bΩ~)R“AddrðdONLNd«±~Ω©)
  10106. essing an ÀÄ°dONLNd—±©ΩΔ)+Apple °dONLNd◊Ωä…√(ΔäEvent for DirF°dONLNd‰Ωƒ…5):ect Dispatching” on page †°dONLNd˝Ω6…H)r5-13iÄ°dONLNdΩH…J).,Zapf DingbatsÈÄ°dONLNd¿O»V)s
  10107.  ç°dONLNdΩW…Y) 
  10108. ÌHÙ4ÓHÙ ÔäÔ
  10109. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNdfiäÌ(ÈäHandling the Required Ã°dONLNdfiÌe)ã Apple Eventsˇˇˇˇˇˇ€r)˘4
  10110. °dONLNd*Ùä(˝äThis section describes the r@°dONLNdFÙ)wequir5Ä°dONLNdKÙ%)ed <Ä°dONLNdNÙ%y)Apple events—the √@°dONLNd_Ùy)TApple events your application °dONLNd}äÀ(
  10111. ämust support t¿°dONLNdãÃÙ)BBo be compatible with System 7 and later versions of system softwar¨‡°dONLNdÕÙ(
  10112. Ùe—°dONLNdœäh(ä4and the descriptor types for all parameters of the rÖÄ°dONLNdh)fiequirú¿°dONLNdå)ed £¿°dONLNd å) Apple events. It also describes °dONLNd+ä'n($ä5how to write the handlers for these events, and it prÄ°dONLNd`o'»)Âovides sample code.°dONLNdt-ä9ê(6äTµ¿°dONLNdu-è9–)o support the r@Ä°dONLNdÑ-—9Ë)BequirW¿°dONLNdâ-Ë9ı)ed ^¿°dONLNdå-ı9≥)*Apple events, you must set the necessary fl–Ä°dONLNd∑-≥9fl)æ ags in the ≥¿°dONLNd¬-‡9)-'SIZE'±Ä°dONLNd»-9)$ °dONLNd…:äFç(CärE°dONLNd :éF¶)esourç@°dONLNdœ:¶F¶)>ce of your application, install entries in your application’s #Ä°dONLNd:ßF(CßApple event dispatch °dONLNd"GäSÇ(Pä:table, add code to the event loop of your application to r≤ °dONLNd\GÇS˚)¯ecognize high-level events, °dONLNdxTä`ö(]äandm °dONLNd{Tõ`ù) Ì °dONLNd|Tù`ø)    call the  Ä°dONLNdÖT¿`2)#AEProcessAppleEvent`°dONLNdòT2`¢)r function, as described in ‰°dONLNd≥T¢`„)p“Accepting an U¿°dONLNd¡T‰`)BApple °dONLNd«aäm´(jäEvent,”ü`°dONLNdŒa´m¯)! which begins on ¿°dONLNdfla˘m)Npage ͆°dONLNd‰am)4-5>Ä°dONLNdÁam6), and ´†°dONLNdÌa6m§)“Installing Entries in the æ`°dONLNda§m)nApple Event Dispatch °dONLNdnäzê(wäTµ¿°dONLNdnèz¨)ables,”¨`°dONLNd%n≠z˙) which begins on ¿°dONLNd6n˚z)Npage ˜†°dONLNd;nz)4-7KÄ°dONLNd>n z%). ‡°dONLNd@n%z+)Yfi`°dONLNdAn*zÕ)%ou must also write handlers for each `°dONLNdfnŒz    )§Apple event; °dONLNds{äág(Ñä3this section describes how to write these handlers.
  10113. •H¨4¶H¨ ßäß
  10114. ˇ·ˇ‚7^ °dONLNdßòä¶æ*    Required Ÿ@°dONLNd∞òΩ¶)3 Apple Eventsˇˇˇˇˇˇ‘@(¢4
  10115. °dONLNdæ¨ä∏(µäWhen a user opens or prints a fi_ °dONLNdfi¨∏()çle fr™°dONLNd„¨(∏f)om the Finder4`°dONLNd¨f∏)>%, the Finder sets up the information °dONLNdπä≈J(¬ä*your application uses to determine which fi“`°dONLNd@πJ≈¶)¿les to open or print. IC`°dONLNdWπß≈∫)]n Syc†°dONLNd[π∫≈Δ)ste¨†°dONLNd^πΔ≈) m 7 and later °dONLNdlΔä“∂(œä versions, it °dONLNdwΔ∑“)-Lf your application supports high-level events, the Finder communicates this °dONLNd√”äfl%(‹ä#information to your application thrÅ@°dONLNdÊ”%flR)õ
  10116. ough the r¿°dONLNd”Sflj).equir°dONLNdı”jflw)ed °dONLNd¯”wfl±) Apple events¶¿°dONLNd”±fl∂):. °dONLNdÂäÒı(ÓäThe Finder sends these r6`°dONLNdˆÒ)lequirM†°dONLNd$ÂÒ)ed T†°dONLNd'ÂÒΩ)%Apple events to your application to rF`°dONLNdLÂΩÒÏ)£ equest the °dONLNdWÚä˛õ(˚äcorr`°dONLNd[Úú˛Ó)esponding actions:    °dONLNdn ä¢(äApplef°dONLNds £•) Ê!°dONLNdt •º)eventò¿°dONLNdz Ì)H    Requestedj °dONLNdÉ ). Í@°dONLNdÑ 7)action
  10117. °dONLNdåä%§("äOpen †°dONLNdë•%Ÿ) Applicationò¿°dONLNdùÌ%)H=Perform tasks your application normally performs when a user ò¿°dONLNd⁄$Ì0Á* 7opens your application without opening or printing any ò¿°dONLNd/Ì;*     documents°dONLNd?äK◊(HäOpen Documentsò¿°dONLNd+?ÌK4)cOpen the specifi]@°dONLNd;?5Ku)Hed documents °dONLNdJOä[’(XäPrint Documentsò¿°dONLNdZOÌ[2)cPrint the specifi‹†°dONLNdkO2[p)E ed documents°dONLNdy_äk†(häQuit Ø`°dONLNd~_†k‘) Applicationò¿°dONLNdä_ÌkZ)MPerform tasks—such as rA‡°dONLNd°_[k¶)neleasing memoryÄ°dONLNd∞_¶kÆ)K, r’Ä°dONLNd≥_Æk )equesting the user to ò¿°dONLNd…jÌv“(sÌ1save documents, and so on—associated with quittin-@°dONLNd˙j”vÚ)Êg befor°dONLNd    jÚv    )e the ò¿°dONLNd    uÌÅá(~Ì"Finder terminates your applicationˇV@ˇ ˇˇˇˇ@
  10118. ˇ·ˇ‚7^
  10119. 4*\¯, Palatino&e.3+l"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@lResponding to ,): Apple Events4⁄*˙¯
  10120. (‡*4-12    )B    Handling ê)& Apple Events4^*¿¯
  10121. °dONLNd\lhÈ(elWIn System 7 and later versions, the Finder uses these events as part of the mechanisms °dONLNdWiluÛ*Wfor launching and terminating applications. When the Finder launches your application, °dONLNdÆvlÇ¥*the application rŸ@°dONLNdøv¥Ç)Heceives the Open Í°dONLNd–vÇÊ)M0Application, Open Documents, or Print Documents °dONLNdÉlèû(ålEevent. When the Finder terminates your application, the application rõ¿°dONLNdEÉûè–(åû eceives the °dONLNdQêlúÇ(ôlQuit Ø`°dONLNdVêÇú›)KApplication event. This method of communicating Finder information to your °dONLNd°ùl©§(¶lapplication r{‡°dONLNdÆù§©«)8Aeplaces the mechanisms used in earlier versions of system softwar:¿°dONLNdÔù»©œ(¶»e.°dONLNdÚØlªî(∏lEApplications that do not support high-level events can still use the ,
  10122. CourierÜÄ°dONLNd7Ø(∏îCountAppFilesņ°dONLNdDØ‚ªÁ)N, °dONLNdFºl»Æ(≈l GetAppFiles{‡°dONLNdQºÆ»Δ)B, and È°dONLNdWºΔ») ClrAppFiles‰‡°dONLNdbº»)B pr,°dONLNdeº»3)ocedur√@°dONLNdkº3»^) es (or the „@°dONLNdvº^»†)+ GetAppParmsfl °dONLNdź†»¨)B pr&@°dONLNdѺ≠»À)ocedurΩÄ°dONLNdäºÀ»)
  10123. e) to get °dONLNdî…l’0(“l-the Finder information. See the chapter “Intr„†°dONLNd¡…0’ƒ)ƒ oduction to File Management” in °dONLNd·÷l‚Ñ(fllInsideÒÄ°dONLNdÁ÷Ñ‚Ü) qÄ°dONLNdË÷á‚…)Macintosh: FilesF‡°dONLNd¯÷ ‚>)C for information on these r. °dONLNd÷>‚i)t
  10124. outines. T„@°dONLNd÷h‚÷)*o make your application °dONLNd5„lÔt(Ïl;compatible with System 7 and with earlier and later versionㆰdONLNdp„tÔx(Ïts»†°dONLNdq„xÔô), you m(`°dONLNdx„öÔˆ)"ust support both the °dONLNdçl¸fl(˘lold and new mechanisms.°dONLNd•lè*Use the +@°dONLNd≠ê∫)$Gestalt(†°dONLNd¥∫V)*# function to determine whether the k °dONLNd◊VÕ)úApple Event Manager is prÄ°dONLNdŒÈ)xesent. °dONLNd˜lr(lIf2`°dONLNd˘su) ≤`°dONLNd˙u´)it is and the Õ°dONLNd´))6isHighLevelEventAware≈ °dONLNd)1)~ flQ‡°dONLNd 2µ)     ag is set in your application’s ¬†°dONLNd@µŸ)É'SIZE'¿`°dONLNdFŸ€)$ °dONLNdGl(o(%lrE°dONLNdHp(à)esourç@°dONLNdMà(Â)ce, your application rA`°dONLNdcÊ(|)^"eceives the Finder information thrlÄ°dONLNdÖ|(©)ñ
  10125. ough the rÏ°dONLNdè©(¿)-equir@°dONLNdî¡(Œ)ed °dONLNdó)l5á(2lApple˝Ä°dONLNdú)á5â) }Ä°dONLNdù)ä5´)events. °dONLNd¶;lGå(DlDIf your application accepts high-level events, it must be able to pr•°dONLNdÍ;åGÆ(Dåocess thb °dONLNdÚ;ØGπ)#e fˇ†°dONLNdı;πGŒ)
  10126. our r≥‡°dONLNd˙;œGÊ)equirÀ °dONLNdˇ;ÊGÛ)ed °dONLNdHlT¢(Ql Apple event ¿°dONLNdH¢T´)6s. ⁄ °dONLNdH´T±)    Yö†°dONLNdH±T˚)our application rÖ¿°dONLNd"H˚T1)Jeceives the r¿‡°dONLNd/H1TH)6equirÿ °dONLNd4HHTU)ed fl °dONLNd7HUTô)Apple events frˇ¿°dONLNdFHôTÂ)Dom the Finder in °dONLNdWUla≥(^lthese situations:,Zapf Dingbats°dONLNdiklrq*n
  10127. °dONLNdkhxt©) FIf your application is not open and the user opens your application frëÄ°dONLNd±h©tÈ(q©om the Finder °dONLNdøtxÄÂ(}xPwithout opening or printing any documents, the Finder launches your application °dONLNdÄxå€* and sends it the Open @†°dONLNd%Ä€å,)cApplication event.°dONLNd8ïlúq(õln
  10128. °dONLNd:íxûΔ) MIf your application is not open and the user opens one of your application’s °dONLNdáûx™≤* documents fr‡°dONLNdìû≥™Ò);om the Finderö@°dONLNd†û™‚)=8, the Finder launches your application and sends it the °dONLNdÿ™x∂‚(≥xOpen Documents event.°dONLNdÓølΔq(≈ln
  10129. °dONLNdºx»Δ) NIf your application is not open and the user prints one of your application’s °dONLNd>»x‘≤* documents fr‡°dONLNdJ»≥‘Ò);om the Finderö@°dONLNdW»‘‚)=8, the Finder launches your application and sends it the °dONLNdè‘x‡‚(›xPrint Documents event. 0Ä°dONLNd¶‘„‡È)kYÒ°dONLNdߑˇ‰)8our application should print the selected documents and °dONLNdfl‡xÏ{(ÈxrE°dONLNd‡‡|Ï÷)emain open until it rä`°dONLNdı‡÷Ï)Zeceives a Quit RÄ°dONLNd‡ÏL)@ Application P†°dONLNd‡MÏo)7event fr6¿°dONLNd‡oÏ≠)"om the Finder¡ °dONLNd%‡¨ÏÆ)=.°dONLNd'ıl¸q(˚ln
  10130. °dONLNd)Úx˛fi) SIf your application is open and the user opens or prints any of your application’s °dONLNd|˛x
  10131. ≤* documents fr‡°dONLNdà˛≥
  10132. Ò);om the Finderö@°dONLNdï˛
  10133. Ï)=7, the Finder sends your application the Open Documents °dONLNdÃ
  10134. xÏ(xor Print Documents event.°dONLNdÊl&q(%ln
  10135. °dONLNdËx(∂) HIf your application is open and the user chooses Restart or Shut Down fr=Ä°dONLNd    0∑(ÿ(%∑om the °dONLNd    7(x4ï(1xFinder^@°dONLNd    =(ñ4û)<’s Special menu, the Finder sends your application the Quit  °dONLNd    y(û4‘(1û Application @°dONLNd    Ö(’4Ì)7eventaÄ°dONLNd    ä(Ì4Ô).ˇ2n@ˇ ˇˇˇˇ@
  10136. ˇ·ˇ‚7^
  10137. 4H\, Palatino&e.3+ä"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@äResponding to ,): Apple Events4⁄ä˙(‡ä    Handling ê)& Apple Events
  10138. , (‡4-13
  10139. ˇˇˇˇˇˇˇˇ4l4älòÄ.lBäoMM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""lBäolBäo$””””””””””””””””””””””””””””””òÄ
  10140. l6ä@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""l6ä@l6ä@˜˜˜˜˜˜˜˜˜˜˜˜˜¸ˇˇ˛¸˛ˇˇ¸ˇˇˇ˛˙ˇ˛˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜
  10141. 4è4Ö?òÄ
  10142. è6Ö@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""è6Ö@è6Ö@$˛˙ˇ˚ˇˇ˚ˇˇ˚ˇˇ    ˛˛ˇˇˇ˜˝˛ˇ˛
  10143. ˛ˇˇˇˇ
  10144. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜    ˛ˇˇ˛
  10145. ˛ˇˇˇˇ
  10146. ˛ˇˇˇˇ    ˝ˇˇˇ˙ˇˇ
  10147. ˛ˇ˛ˇˇ
  10148. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  10149. ˛ˇ˛ˇˇ
  10150. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝˛ˇ˛
  10151. ˛ˇ˛ˇˇ
  10152. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˜˜˜˝¸ˇ
  10153. ˛ˇ˛ˇˇ˝˛ˇ˛
  10154. ˛ˇ˛ˇˇ
  10155. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  10156. ˛ˇ˛ˇˇ
  10157. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  10158. ˛ˇ˛ˇˇ
  10159. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  10160. ˛ˇˇˇˇ
  10161. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  10162. ˛ˇˇˇ
  10163. ˛ˇˇˇ
  10164. ˛ˇˇˇ
  10165. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  10166. ˛ˇˇˇˇ
  10167. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  10168. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  10169. ˛ˇˇˇˇ
  10170. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\äh©(eäUpon r’@°dONLNd\©h)eceiving any of the r|Ä°dONLNd\h)Zequirì¿°dONLNd \h')ed ö¿°dONLNd#\'h
  10171. )2Apple events, your application should perform the °dONLNdUiäu´(räaction r¶‡°dONLNd]i´u!)!equested by the event. Her‡Ä°dONLNdwi!u…)v'e is a summary of the contents of the r„¿°dONLNdûi…u‡)®equir˚°dONLNd£i‡u )
  10172. ed events °dONLNd≠väÇÈ(äand the actions they rö‡°dONLNd√vÈÇr)_equest applications to perform:    °dONLNd„èäö†(óäOpenh±°dONLNdÁè°ö£) ì·°dONLNdËè£ö˛)Application—perform3”°dONLNd˚èˇö)\ ≥Û°dONLNd¸èö)tasksû‡°dONLNdèö) °dONLNdèöI)
  10173. associatedrÌ°dONLNd èIöK). Û°dONLNdèKö\)withfl_°dONLNdè]ö_) _°dONLNdè`öÇ)opening:S°dONLNdèÉöÖ)# ∫s°dONLNdèÖöè)an0#°dONLNdèêöí)  ∞C°dONLNdèíö√) application 
  10174. °dONLNd,ùä©∫(¶ä Event class,
  10175. Courier( °dONLNd8ùÍ©D)`kCoreEventClass°dONLNdI≠äπ±(∂äEvent ID( °dONLNdR≠ÍπV)`kAEOpenApplication°dONLNdfΩä…ª(Δä
  10176. Parameters( °dONLNdqΩÍ…)`None°dONLNdwÕ䟒(÷äRequested action( °dONLNdàÕÍŸÔ)`7Perform any tasks—such as opening an untitled document ( °dONLNdøÿ͉* 9window—that you would normally perform when a user opens ( °dONLNd¯„ÍÔ˚* ;your application without opening or printing any documents.    °dONLNd6ä†( äOpenh±°dONLNd:°£) Ë—°dONLNd;£Ú)Documents—open„°dONLNdIÛı)P ó°dONLNdJı)thed°dONLNdM) àÑ°dONLNdN!)specifiÌS°dONLNdU!+)edc°dONLNdW,.)  „#°dONLNdX.])    documents
  10177. °dONLNdeä∫(ä Event classŸ°dONLNdr˘S)okCoreEventClass°dONLNdÉ"ä.±(+äEvent IDŸ°dONLNdç"˘.Y)okAEOpenDocuments°dONLNdü2ä>ß(;äRequirE@°dONLNd•2®>‚) ed parameter°dONLNd∂BûN¡(KûKeywor¨`°dONLNdºB¡N…)#d:Ÿ°dONLNdøB˘NS)8keyDirectObject°dONLNd—Rû^Â([ûDescriptor type:Ÿ°dONLNd‚R˘^5)[
  10178. typeAEList°dONLNdÔbûnµ(kûData:Ÿ°dONLNdıb˘n)[A†°dONLNdˆbn9) list of alias rˇ‡°dONLNdb8nJ)7ecort@°dONLNd
  10179. bKn„)!ds for the documents to be opened°dONLNd-rä~’({äRequested actionŸ°dONLNd?r˘~t)oOpen the documents specifiÄ°dONLNdYru~õ)|    ed in theë°dONLNdbrõ~ù)& °dONLNdcrû~˛)keyDirectObject Ÿ°dONLNds}˘â&(ܢ    parameter¨†°dONLNd|}&â()-.    °dONLNdÄûä©(¶ä Print Documents—print the specifiÁ“°dONLNd°û©Y)ì ed documents
  10180. °dONLNd±¨ä∏∫(µä Event classŸ°dONLNdæ¨˘∏S)okCoreEventClass°dONLNdœºä»±(≈äEvent IDŸ°dONLNdŸº˘»_)okAEPrintDocuments°dONLNdÏÃäÿß(’äRequirE@°dONLNdÚîÿ‚) ed parameter°dONLNd‹ûË¡(ÂûKeywor¨`°dONLNd    ‹¡Ë…)#d:Ÿ°dONLNd ‹˘ËS)8keyDirectObject°dONLNdÏû¯Â(ıûDescriptor type:Ÿ°dONLNd/Ï˘¯5)[
  10181. typeAEList°dONLNd<¸ûµ(ûData:Ÿ°dONLNdB¸˘)[A†°dONLNdC¸9) list of alias rˇ‡°dONLNdS¸8J)7ecort@°dONLNdW¸K„)"ds for the documents to be printed°dONLNd{ ä’(äRequested actionŸ°dONLNdç ˘q)oPrint the documents specifi쇰dONLNd® rö)y
  10182. ed in the ê`°dONLNd≤ õı))keyDirectObjectä¿°dONLNd¡ ı˜)Z Ÿ°dONLNd¬˘#ˆ( ˘5parameter without opening windows for the documents.     °dONLNd˙8äCû(@äQuit ï°dONLNdˇ8ûC|)2Application—perform tasks associated with quitting0Δ°dONLNdˇˇ)fi 
  10183. °dONLNd?FäR∫(Oä Event class◊@°dONLNdKF¯RR)nkCoreEventClass°dONLNd\Väb±(_äEvent ID◊@°dONLNdeV¯bd)nkAEQuitApplication°dONLNdyfärª(oä
  10184. Parameters◊@°dONLNdÑf¯r)nNoneˇ§@ˇ ˇˇˇˇ@
  10185. ˇ·ˇ‚7^
  10186. 4*\¯, Palatino&e.3+l"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@lResponding to ,): Apple Events4⁄*˙¯
  10187. (‡*4-14    )B    Handling ê)& Apple Events4^*¿¯
  10188. °dONLNd∏ÿl‰r(·lY@Ä°dONLNdπÿr‰„)our application needs to r†‡°dONLNd”ÿ„‰¿)q2ecognize only two descriptor types to handle the rÔ@°dONLNdÿ¿‰◊)›equirÄ°dONLNd
  10189. ÿÿ‰Â)ed °dONLNdÂlÒ(Ól*Apple events: descriptor lists and alias ro°dONLNd7ÂÒ/)±ecor„`°dONLNd;Â/ÒË)'ds. The Open Documents event and Print °dONLNdbÚl˛-(˚l,Documents event use descriptor lists to stor冰dONLNdéÚ-˛˜)¡-e a list of documents to open. Each document °dONLNdªˇl í(l    is specifiìÄ°dONLNd≈ˇí “)&ed as an alias rZ°dONLNd’ˇ” Â)AecorŒ`°dONLNdŸˇÂ K)d in the descriptor list. °dONLNdÙlr(lY@Ä°dONLNdırï)ou can r√¿°dONLNd˝ï )#etrieve the data that specifi‰°dONLNd Æ)w%es the document to open as an alias r-†°dONLNd?Ø¡)£ecor¢°dONLNdC¡Î)
  10190. d, or you °dONLNdMl*Å('lcan r†°dONLNdRÇ*≈)equest that the †°dONLNdb≈*;)CApple Event Manager coer±‡°dONLNdz;*q)vce the alias r‡°dONLNdàr*Ñ)7ecorê@°dONLNdåÑ*•)d to a fi†°dONLNdï•*–)!
  10191. le system °dONLNdü+l7à(4lspecifiÓ °dONLNd¶+à7®)cation (,
  10192. Courier£‡°dONLNdÆ+©7Õ)!FSSpec°†°dONLNd¥+Õ7÷)$) r:Ä°dONLNd∑+◊7È)
  10193. ecorƇ°dONLNdª+È7)d. The fi °dONLNdƒ+7V)%le system specifi`°dONLNd’+V7w)Hcation rC@°dONLNd›+w7â)!ecor∑†°dONLNd·+â7õ)d prÄ°dONLNdÂ+ú7‰)ovides a standarrÄ°dONLNdı+‰7Ï)Hd °dONLNd˜8lD’(Almethod of identifying fiÄ°dONLNd8÷DÁ)jles ie‡°dONLNd8ÁD@)n System 7 and later˜@°dONLNd(8@Dg)Y     versionsÉ°dONLNd18hDj)(.°dONLNd28kD~) See ÷°dONLNd78~D€)Inside Macintosh: Filesú‡°dONLNdN8‹Dı)^ for a °dONLNdUElQ(Nl(complete description of how to specify fiKÄ°dONLNd~E QO)¥ les using fi‘@°dONLNdäEOQó)/le system specifi›Ä°dONLNdõEóQ∏)Hcation r`°dONLNd£EπQÀ)"ecorx¿°dONLNdßEÀQ◊)ds.
  10194. o*v¯4p*v¯ qlq¯
  10195. ˇ·ˇ‚7^ °dONLNd´blp”(llHandling the Open 5Ä°dONLNdΩb”p/)gApplication Eventˇˇˇˇˇˇ‘@(lÒ4
  10196. °dONLNd–vlÇv(lW°dONLNd—vvÇy)
  10197. ;hen the user opens your application, the Finder uses the PrD°dONLNd vzÇÈ(zocess Manager to launch °dONLNd$Élèƒ(ålMyour application. On startup, your application typically performs any needed °dONLNdqêlú*%initialization, and then begins to prÅ@°dONLNdñêúÔ)õ6ocess events. If your application supports high-level °dONLNdÃùl©…(¶levents, and if the useû¿°dONLNd‚ù…©‘)]r o܇°dONLNdÂù’©) >pens your application without selecting any documents to open °dONLNd#™l∂‚(≥lor print, your application r”@°dONLNd?™‚∂/)veceives the Open ‰°dONLNdP™/∂Ä)MApplication event.°dONLNdcºl»r(≈lTµ¿°dONLNddºq»≈)o handle the Open ì¿°dONLNdvº≈»Â)TAApplication event, your application should do just what the user °dONLNd∑…l’fi(“lSexpects it to do when it is opened. For example, your application might open a new °dONLNd
  10198. ÷l‚»*untitled window in rã °dONLNd÷»‚!)\esponse to an Open Ö@°dONLNd1÷!‚r)YApplication event.°dONLNdDËlÙö(Òl Listing 4-5 @°dONLNdOËõÙ)/ shows a handler that pr8Ä°dONLNdgËÙT)kocesses the Open ‡Ä°dONLNdxËSÙÁ)M!Application event. This handler fi≥@°dONLNdöËËÙı)ïrst °dONLNdûıl’(˛lcalls an application-defiÃ@°dONLNd∑ı’,)ined function called 7†°dONLNdÀı-ô)XMyGotRequiredParam0‡°dONLNd›ıôü)ls0Ä°dONLNdfiıüΔ)    , which cs °dONLNdÁıΔ⁄)'heckÄ°dONLNdÎı€·)s °dONLNdÌlñ( l    whether t`°dONLNdˆó§)+he ¡°dONLNd˘£) Apple event contains any r°Ä°dONLNd1)wequir∏¿°dONLNd1u)ed parameters. Ï °dONLNd'uΔ)DIf so, the handler r÷Ä°dONLNd;ΔÒ)Q
  10199. eturns an °dONLNdElx(lerr@°dONLNdHyÇ)or¨°dONLNdJÅ∂) , because by°dONLNdV∑ )6 defiÑ °dONLNd[ )nition, the Open ßÄ°dONLNdl—)J*Application event should not contain any rd°dONLNdñ“È)æequir{@°dONLNdõȈ)ed °dONLNdûl(ô(%l    parameter°dONLNdßö(†).s.Œ°dONLNd©†(–)
  10200.  Otherwise?‡°dONLNd≥—(”)1,ø‡°dONLNd¥”(ò)( the handler opens a new document windowä°dONLNd‹ò(ö)≈.°dONLNdvlÇ∑(lRequested action◊@°dONLNdv⁄Ç´)n.Perform any tasks that your application would ◊@°dONLNd?Å⁄ç* normallyD†°dONLNdGÅç)) ƒ†°dONLNdHÅç€)/perform when the user chooses Quit. Such tasks ◊@°dONLNdwå⁄òË(ï⁄<typically include asking the user whether to save documents ◊@°dONLNd≥ó⁄£y* !that have been changed. When appr°dONLNd‘óz£Í)†opriate, the Finder sends ◊@°dONLNdÓ¢⁄ÆÛ(´⁄Bthis event to an application immediately after sending it a Print ◊@°dONLNd0≠⁄π∞* /Documents event (unless the application was alrΰdONLNd_≠∞πÔ)÷eady open) or ◊@°dONLNdm∏⁄ƒó(¡⁄+if the user chooses Restart or Shut Down frƒ@°dONLNdò∏óƒ’)Ωom the Finder…`°dONLNd•∏÷ƒfl)?’s ◊@°dONLNd®√⁄œ(Ã⁄Special menu.    °dONLNdˇˇ(plQuit ï°dONLNdˇˇ)2Application—perform tasks associated with quitting0Δ°dONLNdˇˇ)fi  (continued)ˇ1–@ˇ ˇˇˇˇ@
  10201. ˇ·ˇ‚7^
  10202. 4H\, Palatino&e.3+ä"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@äResponding to ,): Apple Events4⁄ä˙(‡ä    Handling ê)& Apple Events
  10203. , (‡4-15
  10204. ˇˇˇˇˇˇˇˇ4l4älòÄ.lBäoMM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""lBäolBäo$””””””””””””””””””””””””””””””òÄ
  10205. l6ä@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""l6ä@l6ä@˜˜˜˜˜˜˜˜˜˜˜˜˜¸ˇˇ˛¸˛ˇˇ¸ˇˇˇ˛˙ˇ˛˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜
  10206. 4è4Ö?òÄ
  10207. è6Ö@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""è6Ö@è6Ö@$˛˙ˇ˚ˇˇ˚ˇˇ˚ˇˇ    ˛˛ˇˇˇ˜˝˛ˇ˛
  10208. ˛ˇˇˇˇ
  10209. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜    ˛ˇˇ˛
  10210. ˛ˇˇˇˇ
  10211. ˛ˇˇˇˇ    ˝ˇˇˇ˙ˇˇ
  10212. ˛ˇ˛ˇˇ
  10213. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  10214. ˛ˇ˛ˇˇ
  10215. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝˛ˇ˛
  10216. ˛ˇ˛ˇˇ
  10217. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˜˜˜˝¸ˇ
  10218. ˛ˇ˛ˇˇ˝˛ˇ˛
  10219. ˛ˇ˛ˇˇ
  10220. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  10221. ˛ˇ˛ˇˇ
  10222. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  10223. ˛ˇ˛ˇˇ
  10224. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  10225. ˛ˇˇˇˇ
  10226. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  10227. ˛ˇˇˇ
  10228. ˛ˇˇˇ
  10229. ˛ˇˇˇ
  10230. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  10231. ˛ˇˇˇˇ
  10232. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  10233. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  10234. ˛ˇˇˇˇ
  10235. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  10236. gHn4gHn"hH_
  10237. ˇ·ˇ‚7^    °dONLNd\äg∂(dä Listing 4-5°dONLNd \Œg‘)DA0°dONLNd\‘g+) handler for the Open 
  10238. @°dONLNd#\+go)WApplication event,
  10239. Courier
  10240. °dONLNd6väÇh(ä%FUNCTION MyHandleOApp (theAppleEvent,r °dONLNd[vhÇn)fi q¿°dONLNd\vnLJ)reply: AppleEvent; °dONLNdtÑ“êÿ(ç“ °dONLNdxÑê)6 †°dONLNdyÑê) @°dONLNdzÑêŒ)handlerRefcon: LongInt): OSErr;°dONLNdöíäûú(õäVAR°dONLNdü†ú¨¢+m†°dONLNd††¢¨®)y@°dONLNd°†®¨¥)Er~Ä°dONLNd£†¥¨Ã) r: O}°dONLNd߆èÍ)SErr;°dONLNd≠Æä∫®(∑äBEGIN°dONLNd¥ºú»§+,myErr := MyGotRequiredParams(theAppleEvent);°dONLNd‚ ú÷*IF myErr = noErr THENx °dONLNd˜ ÷ )~ °dONLNd˚ÿƉ¥(·ÆD†°dONLNd¸ÿ¥‰“)oNew;°dONLNdÊúÚ (ÔúMyHandleOApp := myErr;°dONLNdÙä¢(˝äEND;°dONLNd äÚ*For a description of the `°dONLNd8 Ûe)iMyGotRequiredParamsx@°dONLNdK e°)r function, see V¿°dONLNdZ ¢–)= Listing 4-1j`°dONLNde –’).1j`°dONLNdf ’Â) on ±@°dONLNdj ¸)page å °dONLNdo ˝)4-35‡°dONLNds ). °dONLNduä%˛("äFor information about the V†°dONLNdèˇ%)ureplyT¿°dONLNdî%2) and A‡°dONLNdô3%Å)handlerRefcon=°dONLNd¶Å%‘)N parameters for an :°dONLNdπ‘% )S Apple event °dONLNd≈&ä2¨(/ähandler%¿°dONLNdÃ&¨2¡)", see v°dONLNd“&¡2–)“W∏†°dONLNd‘&œ2È)riting @Ä°dONLNd€&Í2z)Apple Event Handlers” on page ü@°dONLNd˘&z2å)ê4-33Û °dONLNd˝&å2é).s °dONLNd˛&è2ë) 
  10241. PHW4QHW RäR
  10242. ˇ·ˇ‚7^ °dONLNdCäQP(Mä!Handling the Open Documents Eventˇˇˇˇˇˇ‘@(M4
  10243. °dONLNd#Wäcê(`äTµ¿°dONLNd$Wèc)So handle the Open Documents event, your application should open the documents that °dONLNdwdäp!(mäthe Open Documents event specifi*@°dONLNdód"pR)òes in its dirõÄ°dONLNd§dRpé)0ect parameterk`°dONLNd±dépì)<. =¿°dONLNd≥dìpô)Y˛@°dONLNd¥dòp)our application extracts this °dONLNd“qä}4(zä%information and then opens the specifiÚ`°dONLNd¯q4}r)™ ed documentsN¿°dONLNdqs}x)?. N¿°dONLNdqx}¶) Listing 4-6Ô°dONLNdq¶}). shows a handler for the °dONLNd*~ääÚ(áäOpen Documents eventfi¿°dONLNd>~Úä˜)h. 
  10244. ≠Hµ4ÆHµ"ÆH_
  10245. ˇ·ˇ‚7^    °dONLNdA£äÆ∂(´ä Listing 4-6°dONLNdM£ŒÆ‘)DA0°dONLNdN£‘Æq)% handler for the Open Documents event
  10246. °dONLNduΩä…h(Δä%FUNCTION MyHandleODoc (theAppleEvent,r °dONLNdöΩh…n)fi q¿°dONLNdõΩn…⁄)reply: AppleEvent;°dONLNd∞ÀÆ◊∫(‘Æ  °dONLNd≥À¿◊Δ) °dONLNd∏À◊)H †°dONLNdπÀ◊) @°dONLNd∫À◊‘)  handlerRefcon: LongInt): OSErr;°dONLNd€ŸäÂú(‚äVAR°dONLNd‡ÁúÛΔ+myFSS: °dONLNdÍÁ“Ûÿ)6 °dONLNdÔÁÛD)HFSSpec;°dONLNd¯ıú“(˛ú    docList: °dONLNdı“ÿ)6 °dONLNd    ı\)H AEDescList;°dONLNdú( úmyErr, ignoreErr: y@°dONLNd+)l °dONLNd08)OSErr~ °dONLNd58>);°dONLNd8ú¢(úi†°dONLNd9¢)ndex, itemsInList:°dONLNdRJ)xLongInt;°dONLNd\ú+‰((ú actualSize: °dONLNdn+)l °dONLNdp+8)Size;°dONLNdw-ú9Δ(6úkeywd: °dONLNdÅ-“9ÿ)6 °dONLNdÜ-9V)H
  10247. AEKeyword;°dONLNdí;úG(DúreturnedType: z¿°dONLNd°;Gˆ)T °dONLNd®;GJ)*DescType}°dONLNd∞;JGP)0;°dONLNd≤IäUê(RäB†°dONLNd≥IêU®)EGIN°dONLNdπWúc¯+ :{get the direct parameter--a descriptor list--and put it }°dONLNdıeúqˆ*{ into docList}°dONLNdsúÊ*7myErr := AEGetParamDesc(theAppleEvent, keyDirectObject,°dONLNdGÅ,ç™+êtypeAEList, docList);ˇ:@ˇ ˇˇˇˇ@
  10248. ˇ·ˇ‚7^
  10249. 4*\¯, Palatino&e.3+l"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@lResponding to ,): Apple Events4⁄*˙¯
  10250. (‡*4-16    )B    Handling ê)& Apple Events4^*¿¯,
  10251. Courier
  10252. °dONLNd\~h®(e~IF myEr}`°dONLNd\®hΔ)*r = n{Ä°dONLNd \Δh)
  10253. oErr THEN °dONLNdj~vñ(s~BEGI~Ä°dONLNdjñvú)N°dONLNd xêÑñ(Åê{†°dONLNd!xñÑt)%check for missing required parametersq¿°dONLNdFxtÑz)fi}°dONLNdJÜêíñ(èêm†°dONLNdKÜñíò)+yErr := MyGotRequiredParams(theAppleEvent);°dONLNdyîê†∫(ùêIF myEr}`°dONLNdÄî∫†ÿ)*r = n{Ä°dONLNdÖîÿ†)
  10254. oErr THEN °dONLNdí¢êÆ®(´êBEGI~Ä°dONLNdñ¢®ÆÆ)N°dONLNdõ∞¢º®(π¢{†°dONLNdú∞®º⁄)3count the number of descriptor records in the list}°dONLNd”梠\(«¢myErr := AECountItems (docList,t`°dONLNdÚæ\ b)∫ t°dONLNdÛæb ∞)itemsInList);°dONLNdâÿ(’¢IF myErr = no{ °dONLNdÃÿ)NErr Ty@°dONLNdÃÿ )HEN°dONLNd⁄¥Ê¬(„¥-{now get each descriptor record from the listo °dONLNdK⁄¬Ê‘(„¬, }°dONLNdSË¥Ù¿(Ò¥{ @°dONLNdUË¿Ù) coerce the { °dONLNd`ËÙ‡)B%returned data to an FSSpec record, anm@°dONLNdÖˇÙÚ)fid }°dONLNd爥¿(ˇ¥{ @°dONLNd舿ˆ)     open the {‡°dONLNdòˆˆV)6associated file}°dONLNd≠¥t(¥ FOR index := 1 TO itemsInList DO°dONLNd“¥“*BEGIN°dONLNd› Δ,Œ+,myErr := AEGetNthPtr(docList, index, typeFSSoÄ°dONLNd     Œ,⁄()Œ, °dONLNd.D:n(7Dkeywd, }`°dONLNd.n:Ú)*returnedType, @myFSS, °dONLNdB<DH‡(EDSizeof(myFSS),actualSize);°dONLNdbJΔV(SΔIF myEr}`°dONLNdiJV)*r = n{Ä°dONLNdnJV>)oErr THExÄ°dONLNdvJ>VD)0N°dONLNd}XΔd‰(aΔBEGIN°dONLNdâfÿrÄ+myErr := MyOpenFile(@myFSS);°dONLNd¨tÿÄ*IF myEr}`°dONLNd≥tÄ&)*r <> n{ °dONLNdπt&ÄV)$oErr THEx °dONLNd¡tVÄb)0N °dONLNdÀÇÍé™(ãÍ ; {handle error from MyOpenFile}°dONLNdÒêΔúÿ(ôΔEND°dONLNd˙ûΔ™fi*ELSE°dONLNd¨ÿ∏û+!; {handle error from AEGetNthPtr}°dONLNd+∫¥Δ∫(√¥E†°dONLNd,∫∫ΔÃ)ND;~Ä°dONLNd/∫ÃΔ8) {of For index Do}°dONLNdD»ê‘¢(—êEND°dONLNdJ÷ê‚®*ELSE°dONLNdR‰¢ò+); {handle error from MyGotRequiredParams}°dONLNd~Úê˛“(˚ê ignoreErr :{‡°dONLNdâÚ“˛b)B= AEDisposeDesc(docList)r‡°dONLNd°Úb˛h)ê;°dONLNd§~ ê(    ~END°dONLNd©~ñ*ELSE°dONLNd∞ê(∞+0; {failed to get direct parameter, handle error}°dONLNd‚*~6Ñ(3~M†°dONLNd„*Ñ6ˆ)yHandleODoc := myErxÄ°dONLNdˆ*ˆ6)rr;°dONLNd˘8lDÑ(AlEND;°dONLNd˛Pl\Ø*The handler in ÿ†°dONLNdPØ\›)C Listing 4-6x‡°dONLNdPfi\Ê)/ fi†°dONLNdPÁ\)    rst uses the ¿°dONLNd(P\o)4AEGetParamDescÄ°dONLNd6Po\—)T function to get the dir¢@°dONLNdNP—\fl)bect °dONLNdR]liª(flparameter (specifiS°dONLNdd]ºiÁ)P
  10255. ed by the ¨Ä°dONLNdn]ÁiA)+keyDirectObject¶‡°dONLNd}]Aie)Z keywor†@°dONLNdÑ]eik)$dº°dONLNdÖ]kiê)
  10256. ) out of tZ†°dONLNdè]ëiû)&he @°dONLNdí]ûiŸ)Apple event. °dONLNdüjlv|(slThe;¿°dONLNd¢j}v) ª¿°dONLNd£jvß)    handler rc‡°dONLNd¨j®vfl))equests that ©‡°dONLNdπjflv3)7AEGetParamDesc§†°dONLNd«j3v9)T rȆ°dONLNd…j9vµ)eturn a descriptor list in the ¬@°dONLNdËj∂v‡)}docListø†°dONLNdÔj‡v‚)* °dONLNdwlɸ(Äl variable. The handler then checkì °dONLNdw¸É)ês tíÄ°dONLNdwÉ4)
  10257. hat it has r$`°dONLNdw5Éà)/etrieved all of the rù °dONLNd4wàÉü)Sequir¥`°dONLNd9wüÉÓ)ed parameters by °dONLNdJÑlêú(çl calling the Á@°dONLNdVÑúê)0MyGotRequiredParams‡ °dONLNdiÑêO)r function. (See @°dONLNdyÑPê~)B Listing 4-1(‡°dONLNdÑÑ~ê´).
  10258. 1 on page J†°dONLNdéÑ´ê≥)-4-ûÄ°dONLNdêÑ≥êΩ)35ûÄ°dONLNdíÑΩê÷)
  10259.  for a °dONLNdôëlùÈ(öldescription of this function.)ˇ@§@ˇ ˇˇˇˇ@
  10260. ˇ·ˇ‚7^
  10261. 4H\, Palatino&e.3+ä"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@äResponding to ,): Apple Events4⁄ä˙(‡ä    Handling ê)& Apple Events
  10262. , (‡4-17
  10263. ˇˇˇˇˇˇˇˇ4l4älòÄ.lBäoMM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""lBäolBäo$””””””””””””””””””””””””””””””òÄ
  10264. l6ä@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""l6ä@l6ä@˜˜˜˜˜˜˜˜˜˜˜˜˜¸ˇˇ˛¸˛ˇˇ¸ˇˇˇ˛˙ˇ˛˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜
  10265. 4è4Ö?òÄ
  10266. è6Ö@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""è6Ö@è6Ö@$˛˙ˇ˚ˇˇ˚ˇˇ˚ˇˇ    ˛˛ˇˇˇ˜˝˛ˇ˛
  10267. ˛ˇˇˇˇ
  10268. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜    ˛ˇˇ˛
  10269. ˛ˇˇˇˇ
  10270. ˛ˇˇˇˇ    ˝ˇˇˇ˙ˇˇ
  10271. ˛ˇ˛ˇˇ
  10272. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  10273. ˛ˇ˛ˇˇ
  10274. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝˛ˇ˛
  10275. ˛ˇ˛ˇˇ
  10276. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˜˜˜˝¸ˇ
  10277. ˛ˇ˛ˇˇ˝˛ˇ˛
  10278. ˛ˇ˛ˇˇ
  10279. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  10280. ˛ˇ˛ˇˇ
  10281. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  10282. ˛ˇ˛ˇˇ
  10283. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  10284. ˛ˇˇˇˇ
  10285. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  10286. ˛ˇˇˇ
  10287. ˛ˇˇˇ
  10288. ˛ˇˇˇ
  10289. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  10290. ˛ˇˇˇˇ
  10291. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  10292. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  10293. ˛ˇˇˇˇ
  10294. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähÓ(eäOnce the handler has r{°dONLNd\Óhk)detrieved the descriptor list fr‡°dONLNd5\lhç)~om the ‡`°dONLNd<\åhÂ) Apple event, it uses ,
  10295. Courier°dONLNdQiäu“(rä AECountItems{Ä°dONLNd]i“uœ)H< to count the number of descriptors in the list. Using the ry °dONLNdôiœuÙ)˝eturned °dONLNd°väÇπ(äEnumber as an index, the handler can get the data of each descriptor rS °dONLNdÊvπÇÀ(πecor«Ä°dONLNdÍvÀÇ)d in the list. °dONLNd˘Éäè»(åäThis handler rø†°dONLNdÉ»è)>equests that the c°dONLNdÉèR)H AEGetNthPtr^‡°dONLNd#ÉRèé)B function coer·Ä°dONLNd1Ééè )<ce the data in the descriptor °dONLNdOêäúç(ôärE°dONLNdPêéú†)ecorπ`°dONLNdTê†ú¡)d to a fi¿°dONLNd]ê¬ú
  10296. )"le system specifi#°dONLNdnê
  10297. ú+)Hcation rI‡°dONLNdvê+ú=)!ecoræ@°dONLNdzê=ú–)!d. The handler can then use the fi· °dONLNdúê–ú˚)ì
  10298. le system °dONLNd¶ù䩶(¶äspecifiÓ °dONLNd≠ù¶©«)cation r°dONLNdµù»©⁄)"ecorâ`°dONLNdπù⁄©X)d as a parameter to its own ru†°dONLNd÷ùX©≤)~outine for opening fi\@°dONLNdÎù≥©¡)[les.°dONLNdØäª≠(∏äFor mor¿°dONLNd˜Øƪ
  10299. )$e information on the Ø°dONLNd Ø
  10300. ª^)\AEGetParamDesc©¿°dONLNdØ^ªì)T function, se>†°dONLNd'Øîªõ)6e à@°dONLNd)Øõª≤)page c °dONLNd.Ø≥ª≈)4-69∑°dONLNd2Ø≈ª«).7°dONLNd3Ø»ªÓ) For mor<¿°dONLNd;ØÓªı)&e °dONLNd=ºä»fl(≈äinformation on the fl†°dONLNdPºfl»!)U AEGetNthPtr€Ä°dONLNd[º!»6)B and »†°dONLNd`º7») AECountItemsƒ °dONLNdlº»∏)H functions, señ°dONLNdzºπ»¿):e fl†°dONLNd|º¿»)“Getting Data Out °dONLNdé…ä’ (“äof a Descriptor List” on page *`°dONLNd¨… ’)Ç4-31~@°dONLNd∞…’ ).°dONLNd≤€äÁË(‰äAfter extracting the fi&†°dONLNd…€ÈÁ1)_le system specifi/‡°dONLNd⁄€1ÁR)Hcation rV¿°dONLNd‚€RÁd)!ecorÀ °dONLNdÊ€dÁ)'d that describes the document to open, °dONLNdËäÙ(Òäyour application can use this r¿°dONLNd,ËÙ")Üecorw °dONLNd0Ë"Ùd)d to open the fiGÄ°dONLNd@ËeÙ∏)Cle. For example, in $‡°dONLNdTËπÙÁ)T Listing 4-6≈ °dONLNd_ËÁÙ). , the code °dONLNdjıäø(˛ä passes the fiχ°dONLNdwıø)5le system specifiˆ °dONLNdàı()Hcation r°dONLNdêı);)"ecorë`°dONLNdîı;_)
  10301. d to its r¿°dONLNdûı`∫)%outine for opening fi¯`°dONLNd≥ı∫€)Z    les, the °dONLNdºäΔ( ä
  10302. MyOpenFile|@°dONLNdΔΔÚ)<  function. °dONLNd“ä ù(äThe ª¿°dONLNd÷ù Ÿ)
  10303. MyOpenFile∏°dONLNd‡Ÿ ∑)<4 function should be designed so that it can be calle» °dONLNd∑ ¬)fid iL@°dONLNd√ œ) n rb†°dONLNdœ ) esponse to °dONLNd%!ä-£(*äboth tS@°dONLNd+!§-π);he Open Documents event and to events generated by the user¡Ä°dONLNdf!∏-¯(*∏. For example, °dONLNdu.ä:¢(7äwhenC`°dONLNdy.£:•) √`°dONLNdz.•:)the user chooses Open fr£@°dONLNdí.:)m7om the File menu, the code that handles the mouse-down °dONLNd…;äG (Däevent uses the u`°dONLNdÿ;ÀG%)AStandardGetFileo¿°dONLNdÁ;%G1)Z pr∂‡°dONLNdÍ;1GO) ocedurN °dONLNd;PGƒ)e to let the user choose a fia¿°dONLNd;ƒGÔ)t le; it then °dONLNdHäTù(Qäcalls˛°dONLNdHùTü) ~°dONLNdH†T‹)
  10304. MyOpenFilez@°dONLNd)H‹T)<, passing the fi)`°dONLNd9HTd)@le system specifi2†°dONLNdJHdTÖ)Hcation rYÄ°dONLNdRHÖTó)!ecorÕ‡°dONLNdVHóT£)d r.†°dONLNdYH§T÷) eturned by °dONLNddUäa‰(^äStandardGetFilez`°dONLNdsU‰aÅ)Z%. By isolating code that performs a r•`°dONLNdòUÅaœ)ùequested action fr8`°dONLNd™U–a )Oom code that °dONLNd∑bänÏ(käinteracts with the userÄ°dONLNdŒbÏn≈)b2, you can easily adapt your application to handle Ƈ°dONLNdb≈n)ŸApple events °dONLNdoä{°(xäthat r °dONLNdo¢{)equest the same actionÁ‡°dONLNd)o{
  10305. )c. °dONLNd,Åäçõ(ääNotÜ¿°dONLNd/Åõç∏)e the u4‡°dONLNd6Åπçƒ)se ªÄ°dONLNd9Ńçœ) of ‡°dONLNd<Å–ç‡) the b@°dONLNd@Ňç.)AEDisposeDesc]`°dONLNdMÅ.ç)N6 function to dispose of the descriptor list when your °dONLNdÉéäöfl(óähandler no longer rȆ°dONLNdñéflöˆ)Uequir‡°dONLNdõé˜ö?)es the data in it. ˘‡°dONLNdÆé>öD)GY∫`°dONLNdØéDö≥)our handler should also r{¿°dONLNd»é¥öŸ)p    eturn a r‡°dONLNd—é⁄ö    )& esult code.
  10306. ∏Hø4πHø ∫ä∫
  10307. ˇ·ˇ‚7^ °dONLNd›´äπK(µä"Handling the Print Documents Eventˇˇˇˇˇˇ‘@(µ4
  10308. °dONLNdøäÀê(»äTµ¿°dONLNdøèÀ)Vo handle the Print Documents event, your application should extract information about °dONLNdXÃäÿ(’äthe documents to be printed frÆ°dONLNdvÃÿ>)Ü
  10309. om the dirº†°dONLNdÄÃ>ÿz).ect parameteråÄ°dONLNdçÃzÿ⁄)<, then print the specifi˜†°dONLNd•Ã⁄ÿÁ)`ed °dONLNd®ŸäÂø(‚ä documents. °dONLNd¥Îä˜N*.If your application can interact with the userá¿°dONLNd‚ÎN˜‡)ƒ!, it should open windows for the °dONLNd¯äY(ä/documents, display a Print dialog box for the fig °dONLNd3¯ZÛ)–#rst document, and use the settings °dONLNdVä†(äenterÏ°dONLNd[†)ed by the user for the fil°dONLNdt)g@rst document to print all the documents. If user interaction is °dONLNd¥äE(ä*not allowed, your application may either rk@°dONLNdfiE|)ªeturn the err°°dONLNdÎ|á)7or â °dONLNdÓà ) errAENoUserInteractionć°dONLNd     )Ñ °dONLNd    ä+g((ä3or print the documents using default settings. See     ¿°dONLNd    8h+©)fi“Interacting W' °dONLNd    F©+‹)A ith the User¿°dONLNd    R‹+„)3,”É¿°dONLNd    T„+) which °dONLNd    [,ä8∑(5ä
  10310. begins on û°dONLNd    e,∑8Œ)-page x‡°dONLNd    j,œ8·)4-45ÿ°dONLNd    n,·8s)", for information about using the u °dONLNd    ê,t8‡)ìAEInteractWithUsern`°dONLNd    ¢,‡8)l function to °dONLNd    Ø9äEË(Bäinteract with the userfiÄ°dONLNd    ≈9ÁEÈ)].^Ä°dONLNd    Δ9ÍEÏ) °dONLNd    »KäW(Tä Note that your application can r‚`°dONLNd    ËKWn)çemain open after prÊ°dONLNd    ˚KnW)W$ocessing the Print Documents event; °dONLNd
  10311. Xäd∫(aä    when appr冰dONLNd
  10312. (X∫dì)02opriate, the Finder sends your application a Quit ˛‡°dONLNd
  10313. ZXìd‰)ŸApplication event °dONLNd
  10314. leäqy(nä5immediately after sending it a Print Documents event.°dONLNd
  10315. ¢wäÉu*3The handler for the Print Documents event shown in ¸`°dONLNd
  10316. ’wuÉ£)Î Listing 4-7ú†°dONLNd
  10317. ‡w§É©)/ i°dONLNd
  10318. ‚w™É)s similar to the handler °dONLNd
  10319. ˚Ñäê(çäfor the Open Documents even5¿°dONLNd Ñêr)Öt, except that it prints tŸ‡°dONLNd 0Ñrê∂)che documents r0‡°dONLNd >Ñ∑êÀ)Eeferrœ†°dONLNd CÑÀêˇ)ed to in the °dONLNd Pëäùñ(öädirI °dONLNd Sëóù”)ect parameter°dONLNd `ë”ù’)<.ˇ†@ˇ ˇˇˇˇ@
  10320. ˇ·ˇ‚7^
  10321. 4*\¯, Palatino&e.3+l"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@lResponding to ,): Apple Events4⁄*˙¯
  10322. (‡*4-18    )B    Handling ê)& Apple Events4^*¿¯
  10323. g*n¯4g*n¯"h*_
  10324. ˇ·ˇ‚7^°dONLNd\lgò(dl Listing 4-7°dONLNd \∞g∂)DA0°dONLNd\∂gP)& handler for the Print Documents event,
  10325. Courier
  10326. °dONLNd5vlÇJ(l%FUNCTION MyHandlePDoc (theAppleEvent,r °dONLNdZvJÇP)fi q¿°dONLNd[vPǺ)reply: AppleEvent;°dONLNdpÑêêñ(çê °dONLNdvÑÍê)Z †°dONLNdwÑêˆ) @°dONLNdxшê∞)handlerRefcon: LongInt): OSErr;°dONLNdòílû~(õlVAR°dONLNdù†~¨®+myFSS: °dONLNd߆¥¨∫)6 °dONLNd¨†¸¨&)HFSSpec;°dONLNdµÆ~∫¥(∑~    docList: °dONLNd¡Æ¥∫∫)6 °dONLNdΔƸ∫>)H AEDescList;°dONLNd”º~»Í(≈~myErr, ignoreErr: y@°dONLNd˺ͻ)l °dONLNd̺¸» )OSErr;°dONLNdı ~÷(”~index, itemsInList:°dONLNd ¸÷,)~LongInt;°dONLNdÿ~‰Δ(·~ actualSize: °dONLNd+ÿ͉)l °dONLNd-ÿ¸‰)Size;°dONLNd4Ê~Ú®(Ô~keywd: °dONLNd>Ê¥Ú∫)6 °dONLNdCʸÚ8)H
  10327. AEKeyword;°dONLNdOÙ~“(˝~returnedType: z¿°dONLNd^Ù“ÿ)T °dONLNdeÙ¸2)*    DescType;°dONLNdolä( lBEGIN°dONLNdv~⁄+:{get the direct parameter--a descriptor list--and put it }°dONLNd≤~*ÿ*{ into docList}°dONLNd√,~8»*7myErr := AEGetParamDesc(theAppleEvent, keyDirectObject,°dONLNd:Få+êtypeAEList, docList);°dONLNdH~T(Q~IF myErr = noErr THEN °dONLNd3V~bú*BEGIN°dONLNd;dêpz+'{check for missing required parameters}°dONLNderê~ò*,myErr := MyGotRequiredParams(theAppleEvent);°dONLNdîÄêå*IF myErr = noErr THEN °dONLNd≠éêöÆ*BEGIN°dONLNd∂ú¢®⁄+4{count the number of descriptor records in the list}°dONLNdÓ™¢∂∞*-myErr := AECountItems (docList, itemsInList);°dONLNd∏¢ƒ*IF myErr = no{ °dONLNd,∏ƒ)NErrz°dONLNd/∏ƒ ) THEN°dONLNd9Δ¥“‘(œ¥0{now get each descriptor record from the list, }°dONLNdn‘¥‡Ú*5{ coerce the returned data to an FSSpec record, and }°dONLNd®‚¥Ó\*{ print the associated file}°dONLNd…¥¸t* FOR index := 1 TO itemsInList DO°dONLNdÓ˛¥
  10328. “*BEGIN°dONLNd˘ Δ⁄+.myErr := AEGetNthPtr(docList, index, typeFSS, °dONLNd4D&Ú+~keywd, returnedType, @myFSS, °dONLNd^(D4ò*Sizeof(myFSS),z¿°dONLNdl(ò4û)T z`°dONLNdm(û4Ê) actualSize);°dONLNd6ΔB>(?ΔIF myErr = noErr THExÄ°dONLNdì6>BD)xN°dONLNdöDΔPÃ(MΔB†°dONLNdõDÃP‰)EGIN°dONLNd¶Rÿ^Ü+ myErr := MyPrintFile(@myFSS);°dONLNd `ÿlb*IF myErr <> noErr THEN °dONLNdÈnÍz™+ ; {handle error from MyOpenFile}°dONLNd|Δàÿ(ÖΔEND°dONLNdäΔñfi*ELSE°dONLNd#òÿ§û+!; {handle error from AEGetNthPtr}°dONLNdI¶¥≤8(Ø¥END; {of For index Do}°dONLNdb¥ê¿¢(ΩêENDˇ,6@ˇ ˇˇˇˇ@
  10329. ˇ·ˇ‚7^
  10330. 4H\, Palatino&e.3+ä"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@äResponding to ,): Apple Events4⁄ä˙(‡ä    Handling ê)& Apple Events
  10331. , (‡4-19
  10332. ˇˇˇˇˇˇˇˇ4l4älòÄ.lBäoMM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""lBäolBäo$””””””””””””””””””””””””””””””òÄ
  10333. l6ä@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""l6ä@l6ä@˜˜˜˜˜˜˜˜˜˜˜˜˜¸ˇˇ˛¸˛ˇˇ¸ˇˇˇ˛˙ˇ˛˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜
  10334. 4è4Ö?òÄ
  10335. è6Ö@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""è6Ö@è6Ö@$˛˙ˇ˚ˇˇ˚ˇˇ˚ˇˇ    ˛˛ˇˇˇ˜˝˛ˇ˛
  10336. ˛ˇˇˇˇ
  10337. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜    ˛ˇˇ˛
  10338. ˛ˇˇˇˇ
  10339. ˛ˇˇˇˇ    ˝ˇˇˇ˙ˇˇ
  10340. ˛ˇ˛ˇˇ
  10341. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  10342. ˛ˇ˛ˇˇ
  10343. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝˛ˇ˛
  10344. ˛ˇ˛ˇˇ
  10345. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˜˜˜˝¸ˇ
  10346. ˛ˇ˛ˇˇ˝˛ˇ˛
  10347. ˛ˇ˛ˇˇ
  10348. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  10349. ˛ˇ˛ˇˇ
  10350. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  10351. ˛ˇ˛ˇˇ
  10352. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  10353. ˛ˇˇˇˇ
  10354. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  10355. ˛ˇˇˇ
  10356. ˛ˇˇˇ
  10357. ˛ˇˇˇ
  10358. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  10359. ˛ˇˇˇˇ
  10360. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  10361. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  10362. ˛ˇˇˇˇ
  10363. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿,
  10364. Courier°dONLNd\ÆhΔ(eÆELSE°dONLNdj¿v∂+); {handle error from MyGotRequiredParams}°dONLNd4xÆÑÜ(ÅÆ$ignoreErr := AEDisposeDesc(docList);°dONLNdZÜúíÆ(èúEND°dONLNd_îú†¥*ELSE°dONLNdf¢ÆÆŒ+0; {failed to get direct parameter, handle error}°dONLNdò∞úº (πúMyHandlePDoc := myErr;°dONLNdØæä ¢(«äEND;
  10365. ÈH4ÍH ÎäÎ
  10366. ˇ·ˇ‚7^ °dONLNd¥‹äÍÍ*Handling the Quit ›@°dONLNdΔ‹ÈÍE)_Application Eventˇˇˇˇˇˇ‘@(Ê4
  10367. °dONLNdŸä¸ê(˘äTµ¿°dONLNd⁄è¸fi)o handle the Quit (Ä°dONLNdÏfl¸)PCApplication event, your application should take any actions that arm‡°dONLNd/¸(˘e °dONLNd1˝ä    Œ(änecessary befor∞@°dONLNd@˝Œ    ≈)D8e it is terminated (such as saving any open documents). ˛‡°dONLNdx˝≈    Û)˜ Listing 4-8ü °dONLNdÉ˝Ù    )/ shows °dONLNdä
  10368. ä-(ä%an example of a handler for the Quit A°dONLNdØ
  10369. -~)£Application event.°dONLNd¬ä(ª(%ä    When appr5†°dONLNdÀº(ï)22opriate, the Finder sends your application a Quit ߇°dONLNd˝ï(Ê)ŸApplication event °dONLNd)ä5(2äTimmediately after a Print Documents event. The Finder also sends your application a °dONLNdc6äB†*Quit Ø`°dONLNdh6†BÆ)=Application event if the user chooses Restart or Shut Down frg¿°dONLNd•6ØBÌ(?Øom the Finderl‡°dONLNd≤6ÓB˜)?’s °dONLNdµCäO (LäSpecial menu. 
  10370. rHz4sHz"sH_
  10371. ˇ·ˇ‚7^    °dONLNdƒhäs∂*$ Listing 4-8°dONLNd–hŒs‘)DA0°dONLNd—h‘s&) handler for the Quit à°dONLNdÁh%si)QApplication event
  10372. °dONLNd˙Çäéh(ãä%FUNCTION MyHandleQuit (theAppleEvent,r °dONLNdÇhén)fi q¿°dONLNd Çné⁄)reply: AppleEvent;°dONLNd7ê“úÿ(ô“ °dONLNd;êú)6 †°dONLNd<êú) @°dONLNd=êúŒ)handlerRefcon: LongInt): OSErr;°dONLNd]ûä™ú(ßäVAR°dONLNdb¨ú∏¿+myErr:°dONLNdm¨ˆ∏)ZOSErr;°dONLNdu∫úΔÍ(√úuserCanceled:°dONLNdá∫ˆΔ&)ZBoolean;°dONLNdê»ä‘®(—äBEGIN°dONLNdó÷ú‚Ü+'{check for missing required parameters}°dONLNd¿‰ú§*,myErr := MyGotRequiredParams(theAppleEvent);°dONLNdÓÚú˛Δ*IF myEr}`°dONLNdıÚΔ˛‰)*r = n{Ä°dONLNd˙Ú‰˛)oErr THExÄ°dONLNdÚ˛ )0N °dONLNdú ∫(    úBEGIN°dONLNdÆå+%userCanceled := MyPrepareToTerminate;°dONLNd6Æ(&*IF userCanceled THEN°dONLNdN*¿6n+MyHandleQuit := kUserCanceled°dONLNdn8ÆDΔ(AÆELSE°dONLNdvF¿RD+MyHandleQuit := noErr;°dONLNdéTú`Æ(]úEND°dONLNdìbún¥*ELSE°dONLNdöpÆ|¥+M†°dONLNdõp¥|)yHandleQuit :z¿°dONLNd®p|2)N= myErr;°dONLNd±~ää¢(áäEND;ˇ"@ˇ ˇˇˇˇ@
  10373. ˇ·ˇ‚7^
  10374. 4*\¯, Palatino&e.3+l"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@lResponding to ,): Apple Events4⁄*˙¯
  10375. (‡*4-20    )B    Handling ê)& Apple Events4^*¿¯
  10376. °dONLNd\lhØ(elThe handler in ÿ†°dONLNd\Øh›)C Listing 4-8x‡°dONLNd\fih¿)/5 calls another function supplied by the application, °dONLNdOiluy(rlthe]`°dONLNdRizu|) ,
  10377. Courier›`°dONLNdSi|uÙ)MyPrepareToTerminate’‡°dONLNdgiÙufi)x5 function. This function saves the documents for any °dONLNdúvlÇÇ(lopen톰dONLNd†vÇÇÑ) †°dONLNd°vÖÇ»)windows and r˙¿°dONLNdÆv«Ç£)B2eturns a Boolean value that indicates whether the e°dONLNd‡v§ÇÚ)›user canceled the °dONLNdÚÉlèß(ålQuit operatio·‡°dONLNdˇÉßèØ);n.3@°dONLNdÉ∞èÁ)    I This is another example of isolating code for interacting with the user °dONLNdJêlús(ôlfrò‡°dONLNdLêsú˛)om the code that performs the r¿°dONLNdkêˇúC)åequested action‡°dONLNdzêDú^)E. By st≥ °dONLNdÅê^úa)rë¿°dONLNdÇêbúÙ)"ucturing your application in this °dONLNd§ùl©y(¶lwa◊°dONLNd¶ùy©~)yJ`°dONLNdßù~©Á), you can use the same r¢Ä°dONLNdøùÁ©)i outine to ra¿°dONLNd ù©Ä).espond to a user action (; °dONLNd„ùÅ©fi)lsuch as choosing the °dONLNd¯™l∂Ä(≥lQuitç¿°dONLNd¸™Ä∂Ç) ¿°dONLNd˝™É∂π)
  10378. command fr!Ä°dONLNd™π∂E)6 om the File menu) or to the corrV†°dONLNd'™E∂v)å
  10379. esponding ,Ä°dONLNd1™v∂Õ)1Apple event. (For a °dONLNdE∑l√º(¿ldescription of the à °dONLNdX∑º√.)PMyGotRequiredParamsÅ°dONLNdk∑.√c)r function, se‡°dONLNdx∑d√k)6e _Ä°dONLNdz∑k√z)“W¢ °dONLNd|∑y√ì)riting *°dONLNdÉ∑î√Œ) Apple Event °dONLNdèƒl–¬(ÕlHandlers” on page ¡‡°dONLNd°ƒ¬–‘)V4-33¿°dONLNd•ƒ’–◊).ï¿°dONLNd¶ƒ◊–⁄))
  10380. fi*ϯ4fl*ϯ°dONLNd®fllÁã(ÂlIMPORTç°dONLNdÆflãÁõ)ANT
  10381. ˇ·ˇ‚7^
  10382. °dONLNd≤Ílˆ‚(ÛlWhen your application is rå°dONLNdÃÍ‚ˆg)v!eady to quit, it should call the [†°dONLNdÌÍhˆ™)Ü ExitToShellWÄ°dONLNd¯Í™ˆ¨)B °dONLNd˘ˆlu(ˇlprG °dONLNd˚ˆvî)
  10383. ocedurfi`°dONLNdˆî¢)e fr@‡°dONLNdˆ£))om the main event loop, not fr:`°dONLNd#ˆ)¨)Üom your handler for the Quit °dONLNd@l¿( lApplication event. ù¿°dONLNdS¿Δ)TY^@°dONLNdTΔ£)3our application should quit only after the handler °dONLNdálo(lrE°dONLNdàpé)eturns Ÿ °dONLNdèé¨)noErr◊@°dONLNdî¨Ú) as its function rO@°dONLNd¶Û
  10384. )Gesult.,Zapf Dingbats¿°dONLNd≠)s
  10385. >*E¯4?*E¯ @l@¯
  10386. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNdØ/l>•(:l    Handling ò~°dONLNd∏/•>¶)9(Apple Events Sent by the Edition Managerˇˇˇˇˇˇ€r(:4
  10387. °dONLNd‚ElQ (NlIf your application pr.¿°dONLNd¯EÀQ‡)_@ovides publish and subscribe capabilities, it should handle the °dONLNd8Rl^{([l=Apple events sent by the Edition Manager in addition to the rfl@°dONLNduR{^í([{equirˆÄ°dONLNdzRí^ü)ed ˝Ä°dONLNd}Rü^fi)Apple events. W†°dONLNdãRfl^Â)@Y °dONLNdåRÂ^ˆ)our °dONLNdê_lk(hl%application should also handle the Cr
  10388. ¿°dONLNdµ_k‡)¶0eate Publisher event, which is described in the °dONLNdÂllxπ(ul“Handling the Cr© °dONLNdılπx)Meate Publisher Event”Q‡°dONLNd
  10389. lxJ)`  section on @°dONLNdlKxb)2page ‹ °dONLNdlbxt)4-220°dONLNdluxw).°dONLNd!~lä3(ál+The Edition Manager sends your application ʇ°dONLNdL~3ä)«(Apple events to communicate information °dONLNdtãló¬(îlLabout the publishers and subscribers in your application’s documents. Specifi™`°dONLNd¡ã¬ó÷(î¬cally^¿°dONLNdΔã÷óÎ), the °dONLNdÃòl§Œ(°lEdition Manager uses ‡°dONLNd·òœ§)c(Apple events to notify your application °dONLNd
  10390. Ælµq(¥ln
  10391. °dONLNd ´x∑D) -when the information in an edition is updated°dONLNd:¿l«q(Δln
  10392. °dONLNd<Ωx…M) 0when your application needs to write the data fr@°dONLNdlΩN… )÷om a publisher to an edition°dONLNdâ“lŸq(ÿln
  10393. °dONLNdãœx€û) Bwhen your application should locate a particular publisher and scrfl`°dONLNdÕœû€∏(ÿûoll thr~`°dONLNd‘œπ€‚)    ough the °dONLNd›€xÁ„(‰xdocument to that locatio6`°dONLNdı€‰ÁÈ)lnˇ1"@ˇ ˇˇˇˇ@
  10394. ˇ·ˇ‚7^
  10395. 4H\, Palatino&e.3+ä"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@äResponding to ,): Apple Events4⁄ä˙(‡ä    Handling ê)& Apple Events
  10396. , (‡4-21
  10397. ˇˇˇˇˇˇˇˇ4l4älòÄ.lBäoMM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""lBäolBäo$””””””””””””””””””””””””””””””òÄ
  10398. l6ä@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""l6ä@l6ä@˜˜˜˜˜˜˜˜˜˜˜˜˜¸ˇˇ˛¸˛ˇˇ¸ˇˇˇ˛˙ˇ˛˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜
  10399. 4è4Ö?òÄ
  10400. è6Ö@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""è6Ö@è6Ö@$˛˙ˇ˚ˇˇ˚ˇˇ˚ˇˇ    ˛˛ˇˇˇ˜˝˛ˇ˛
  10401. ˛ˇˇˇˇ
  10402. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜    ˛ˇˇ˛
  10403. ˛ˇˇˇˇ
  10404. ˛ˇˇˇˇ    ˝ˇˇˇ˙ˇˇ
  10405. ˛ˇ˛ˇˇ
  10406. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  10407. ˛ˇ˛ˇˇ
  10408. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝˛ˇ˛
  10409. ˛ˇ˛ˇˇ
  10410. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˜˜˜˝¸ˇ
  10411. ˛ˇ˛ˇˇ˝˛ˇ˛
  10412. ˛ˇ˛ˇˇ
  10413. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  10414. ˛ˇ˛ˇˇ
  10415. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  10416. ˛ˇ˛ˇˇ
  10417. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  10418. ˛ˇˇˇˇ
  10419. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  10420. ˛ˇˇˇ
  10421. ˛ˇˇˇ
  10422. ˛ˇˇˇ
  10423. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  10424. ˛ˇˇˇˇ
  10425. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  10426. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  10427. ˛ˇˇˇˇ
  10428. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  10429. jHp4jHp käk
  10430. ˇ·ˇ‚7^ °dONLNd\äj'(fäThe Section Read, Section W®@°dONLNd\'j«)ùrite, and Section Scroll Eventsˇˇˇˇˇˇ‘@)Ë4
  10431. °dONLNd<pä|E(yä+The following descriptions identify the thrφ°dONLNdgpE|Q)ªee °Ä°dONLNdjpQ|) )Apple events sent by the Edition Manager—°dONLNdì}äâÙ(ÜäSection Read, Section W,Ä°dONLNd™}ÙâK)jrite, and Section Scr`‡°dONLNdø}Kâ)W.oll—and the actions they tell applications to °dONLNdÌääñ∞(ìäperform.°dONLNdVhätœ(qäSee the chapter Ú¿°dONLNdfhœt⁄)E“EÄ°dONLNdhh€t¸) Adition Manager” in this book for details on how your application °dONLNd©uäÅØ(~äshould rT °dONLNd±uØÅ)%espond to these events.    °dONLNdˆ£äÆT(´ä-Section Read—read information into the specifi∞√°dONLNd$£TÆÄ) 
  10432. ed sectionì°dONLNd.£ÅÆÉ)- Ç3°dONLNdˇˇ) 
  10433. °dONLNd>±äΩ∫(∫ä Event class,
  10434. CourierŸ°dONLNdK±˘Ωq)oSectionEventMsgClass°dONLNda¡äÕ±( äEvent IDŸ°dONLNdk¡˘ÕY)oSectionReadMsgID°dONLNd}—ä›ß(⁄äRequirE@°dONLNdÉ—®›‚) ed parameter°dONLNdî·ûÌ¡(ÍûKeywor¨`°dONLNdö·¡Ì…)#d:Ÿ°dONLNdù·˘ÌS)8keyDirectObject°dONLNdØÒû˝Â(˙ûDescriptor type:Ÿ°dONLNd¿Ò˘˝A)[ typeSectionH°dONLNdœûµ(
  10435. ûData:Ÿ°dONLNd’˘)[A†°dONLNd÷e) handle to the section rF‡°dONLNdÓew)decorª@°dONLNdÚw )"d of the subscriber whose edition Ÿ°dONLNd ˘|(˘contains updated information°dONLNd2ä(’(%äRequested actionŸ°dONLNdD˘(ÿ)o1Update the subscriber with the new information fr∂ °dONLNduÿ(˘)flom the Ÿ°dONLNd|'˘3(0˘edition.    °dONLNdáHäSµ(Pä    Section W™!°dONLNdêHµS)+rite—write the specifiO°dONLNd¶HSt)[ed section to an edition
  10436. °dONLNd¬Väb∫(_ä Event classŸ°dONLNdœV˘bq)oSectionEventMsgClass°dONLNdÂfär±(oäEvent IDŸ°dONLNdÔf˘r_)oSectionWriteMsgID°dONLNdväÇß(äRequirE@°dONLNdv®Ç‚) ed parameter°dONLNdÜûí¡(èûKeywor¨`°dONLNdÜ¡í…)#d:Ÿ°dONLNd"ܢíS)8keyDirectObject°dONLNd4ñû¢Â(üûDescriptor type:Ÿ°dONLNdEñ˘¢A)[ typeSectionH°dONLNdT¶û≤µ(ØûData:Ÿ°dONLNdZ¶˘≤)[A†°dONLNd[¶≤e) handle to the section rF‡°dONLNds¶e≤w)decorª@°dONLNdw¶w≤≈)d of the publisher°dONLNdã∂䬒(øäRequested actionŸ°dONLNdù∂˘¬)oW†°dONLNdû∂¬N)
  10437. rite the publisher…†°dONLNd∞∂O¬®)L’s data to its edition.    °dONLNd ◊ä‚Ç(flä8Section Scroll—scroll through the document to the specifiÅ°dONLNd◊Ç‚Æ)¯
  10438. ed section
  10439. °dONLNdÂäÒ∫(Óä Event classŸ°dONLNd¢Òq)oSectionEventMsgClass°dONLNd4ıä±(˛äEvent IDŸ°dONLNd>ı˘e)oSectionScrollMsgID°dONLNdRäß(äRequirE@°dONLNdX®‚) ed parameter°dONLNdiû!¡(ûKeywor¨`°dONLNdo¡!…)#d:Ÿ°dONLNdr˘!S)8keyDirectObject°dONLNdÑ%û1Â(.ûDescriptor type:Ÿ°dONLNdï%˘1A)[ typeSectionH°dONLNd§5ûAµ(>ûData:Ÿ°dONLNd™5˘A)[A†°dONLNd´5Ae) handle to the section rF‡°dONLNd√5eAw)decorª@°dONLNd«5wAfl)d of the publisher to scrT °dONLNd‡5‡Aˆ)ioll to°dONLNdËEäQ’(NäRequested actionŸ°dONLNd˙E˘Q)oScrN°dONLNd˝EQ)oll @°dONLNdEQ")thrÌ°dONLNdE!Q:) ough J °dONLNd    E;Q‚)%the document to the publisher identifi˘†°dONLNd/E‚Q)ß
  10440. ed by the Ÿ°dONLNd9P˘\(Y˘specifiG °dONLNd@P\H) ed section r⁄°dONLNdLPH\Z)2ecorN`°dONLNdPP[\f)d. ˇ~@ˇ ˇˇˇˇ@
  10441. ˇ·ˇ‚7^
  10442. 4*\¯, Palatino&e.3+l"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@lResponding to ,): Apple Events4⁄*˙¯
  10443. (‡*4-22    )B    Handling ê)& Apple Events4^*¿¯
  10444. j*p¯4j*p¯ klk¯
  10445. ˇ·ˇ‚7^ °dONLNd\lj.(fl#Handling the Create Publisher Eventˇˇˇˇˇˇ‘@(fÒ4
  10446. °dONLNd%pl|Ù(yl[If your application supports publish and subscribe capabilities, it should also handle the °dONLNdÄ}lâw*Cr\°dONLNdÇ}wâ“) eate Publisher event.,
  10447. Courier2†°dONLNdˇˇ)\ 2@°dONLNdˇˇ) ≤@°dONLNdˇˇ) °dONLNdÙºl»ÿ(≈lWhen your application rʆ°dONLNd ºÿ»)leceives the Cr8¿°dONLNdº»¶)>"eate Publisher event, it should cr~Ä°dONLNd;º¶»¡)êeate a °dONLNdB…l’ò(“l
  10448. publisher ,@°dONLNdL…ô’)-and write the publisherû`°dONLNdc…’Ã)h0’s data to an edition. The data of the publisher¯‡°dONLNdì…À’Û) 
  10449. , and the °dONLNdù÷l‚(fll$location and name of the edition, arG°dONLNd¡÷    ‚!)ùe defiÇ¿°dONLNd«÷!‚R) ned by the O@°dONLNd“÷R‚±)1Apple event. If the Cr¿°dONLNdË÷≤‚Û)`eate Publisher °dONLNd˜„lÔ∂(Ïlevent includes a â °dONLNd„∂Ô)JkeyDirectObjectÉÄ°dONLNd„Ô@)Z
  10450.  parameter◊ °dONLNd!„?ÔÍ)/', then your application should publish °dONLNdHl¸    (˘l#the data contained in the parameter>‡°dONLNdk    ¸')ù    . If the Œ†°dONLNdt'¸Å)keyDirectObject…°dONLNdÉŸ‰)Z parameter is missing, °dONLNdö˝l    5(l-then your application should publish the currÔÄ°dONLNd«˝5    Ù)…,ent selection. If the document doesn’t have °dONLNdÛ
  10451. lÖ(la curr/°dONLNd˘
  10452. Ü])2ent selection, your handler for the event should r√ °dONLNd+
  10453. ]ù)◊eturn a nonzerA °dONLNd9
  10454. û©)Ao r˚†°dONLNd<
  10455. ©ÿ) esult code.°dONLNdHl(ê(%l    If the Crο°dONLNdQê()$ eate Publisher event includes a ˛@°dONLNdq(ç)ãkeyAEEditionFileLoc˜ °dONLNdÑç(Ω)r
  10456.  parameterJ¿°dONLNdéΩ(Ÿ)0, your °dONLNdï)l5Ô(2lWapplication should use the location and name contained in the parameter as the default °dONLNdÏ6lB*)location and name of the edition. If the ¿°dONLNd6Bå)ÆkeyAEEditionFileLoc
  10457. †°dONLNd(6åBÔ)r parameter is missing, °dONLNd?ClOÁ(LlTyour application should use the default location and name your application normally °dONLNdìPl\
  10458. *%uses to specify the edition container‡°dONLNd∏P
  10459. \ )û.°dONLNd∫blnö(kl Listing 4-9 @°dONLNd≈bõn)/ shows a handler for the Cr†°dONLNd‡bnÎ)x2eate Publisher event. This handler checks for the °dONLNdol{Δ(xlkeyDirectObjectz`°dONLNd!oΔ{)Z parameter and the ’‡°dONLNd4o{é)VkeyAEEditionFileLocŒ¿°dONLNdGoé{æ)r
  10460.  parameter"`°dONLNdQoæ{Û)0. If either of °dONLNd`|làº(Ölthese is not specifi¿°dONLNdt|Ωàπ)Q:ed, the handler uses default values. The handler uses the °dONLNdÆâlï±(ílapplication-defi|‡°dONLNdæâ≤ïÏ)Fned function A‡°dONLNdÀâÌïA);DoNewPublisher<†°dONLNdŸâAïF)T tˇ°dONLNd€âFïV)o cr)¿°dONLNdflâWïÏ)$eate the publisher and its edition, °dONLNd    ñl¢t(ülcrµ@°dONLNd    ñt¢µ)eate a section r∏`°dONLNd    ñµ¢«)Aecor,¿°dONLNd    ñ»¢C)d, and update other data strh@°dONLNd    5ñC¢Z){ucturÓ °dONLNd    :ñZ¢Ó)!es associated with the document. °dONLNd    [£lر(¨lSee the chapter Ú¿°dONLNd    k£±غ)E“EÄ°dONLNd    m£ΩØ) dition Manager”ñ@°dONLNd    |£Ø)I in–°dONLNd    £Ø)  P°dONLNd    Ä£Ø?)
  10461. this book 䇰dONLNd    ä£?Øü)+for an example of the π`°dONLNd    †£üØÛ)`DoNewPublisher¥ °dONLNd    Æ£ÛØı)T °dONLNd    Ø∞lºë(πlfunctioné@°dONLNd    ∑∞ëºì)%.    °dONLNdòñl°(ûl"Create Publisher—create a publisheÈŸ°dONLNd∫ñ°)ôr
  10462. °dONLNdø§l∞ú(≠l Event classŸ°dONLNdç€∞/)okAEMiscStdSuit”¿°dONLNd⁄§/∞5)Te°dONLNd›¥l¿ì(ΩlEvent IDŸ°dONLNdÁ¥€¿A)okAECreatePublishe“†°dONLNd¯¥A¿G)fr°dONLNd˚ƒl–â(ÕlRequirE@°dONLNdƒä–ƒ) ed parameterŸ°dONLNdƒ€–Û)QNone°dONLNd‘l‡√(›lOptional parameter°dONLNd,‰Ä£+Keywor¨`°dONLNd2‰£´)#d:Ÿ°dONLNd5‰€5)8keyDirectObject°dONLNdGÙÄ«(˝ÄDescriptor type:Ÿ°dONLNdXÙ€M)[typeObjectSpecifier°dONLNdnÄó(ÄData:Ÿ°dONLNdt€#)[An object specifi؇°dONLNdÖ$3)Ier r± °dONLNdâ3E)ecor%Ä°dONLNdçF~)d that specifiÄ°dONLNdõö)9es the ã °dONLNd¢öÔ)Apple event object Ÿ°dONLNdµ€Í(€Aor objects to publish. If this parameter is omitted, publish the Ÿ°dONLNdˆ€&Ì* curr°dONLNd˙Ó&')ent selection.°dONLNd
  10463. *l6√(3lOptional parameter°dONLNd!:ÄF£+Keywor¨`°dONLNd':£F´)#d:Ÿ°dONLNd*:€FM)8keyAEEditionFileLoc°dONLNd@JÄV«(SÄDescriptor type:Ÿ°dONLNdQJ€V)[    typeAlias°dONLNd]ZÄfó(cÄData:Ÿ°dONLNdcZ€f)[
  10464. An alias rD`°dONLNdmZf)+ecor∏¿°dONLNdqZfœ),d that contains the location of the edition Ÿ°dONLNdùe€q(n€container to cr5†°dONLNd¨eqÚ)@4eate. If this parameter is omitted, use the default Ÿ°dONLNd‡p€|&(y€edition containerJÄ°dONLNdÒp&|()K.°dONLNdÙÄlå∑(âlRequested action∑Ÿ°dONLNdÄ€åÊ)oCrµ°dONLNdÄÊåk) eate a publisher for the specifiπÛ°dONLNd(Äkå÷)Öed data using the specifi8œ°dONLNdAÄ◊å˘)led loca-‘¯Ÿ°dONLNdIå€ò](ï€tion for the edition container)`°dONLNdgå]ò«)Ç. If the data isn’t specifiÆò°dONLNdÇå«ò˘)j ed, publishX9Ÿ°dONLNdéò€§˛(°€the currΩô°dONLNdñò˛§Î)#:ent selection. If the location of the edition isn’t specifisö°dONLNd—òϧ˘)Óed,Ÿ°dONLNd’§€∞D(≠€use the default location.ˇ*˙@ˇ ˇˇˇˇ@
  10465. ˇ·ˇ‚7^
  10466. 4H\, Palatino&e.3+ä"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@äResponding to ,): Apple Events4⁄ä˙(‡ä    Handling ê)& Apple Events
  10467. , (‡4-23
  10468. ˇˇˇˇˇˇˇˇ4l4älòÄ.lBäoMM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""lBäolBäo$””””””””””””””””””””””””””””””òÄ
  10469. l6ä@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""l6ä@l6ä@˜˜˜˜˜˜˜˜˜˜˜˜˜¸ˇˇ˛¸˛ˇˇ¸ˇˇˇ˛˙ˇ˛˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜
  10470. 4è4Ö?òÄ
  10471. è6Ö@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""è6Ö@è6Ö@$˛˙ˇ˚ˇˇ˚ˇˇ˚ˇˇ    ˛˛ˇˇˇ˜˝˛ˇ˛
  10472. ˛ˇˇˇˇ
  10473. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜    ˛ˇˇ˛
  10474. ˛ˇˇˇˇ
  10475. ˛ˇˇˇˇ    ˝ˇˇˇ˙ˇˇ
  10476. ˛ˇ˛ˇˇ
  10477. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  10478. ˛ˇ˛ˇˇ
  10479. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝˛ˇ˛
  10480. ˛ˇ˛ˇˇ
  10481. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˜˜˜˝¸ˇ
  10482. ˛ˇ˛ˇˇ˝˛ˇ˛
  10483. ˛ˇ˛ˇˇ
  10484. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  10485. ˛ˇ˛ˇˇ
  10486. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  10487. ˛ˇ˛ˇˇ
  10488. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  10489. ˛ˇˇˇˇ
  10490. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  10491. ˛ˇˇˇ
  10492. ˛ˇˇˇ
  10493. ˛ˇˇˇ
  10494. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  10495. ˛ˇˇˇˇ
  10496. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  10497. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  10498. ˛ˇˇˇˇ
  10499. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  10500. gHn4gHn"hH_
  10501. ˇ·ˇ‚7^    °dONLNd\äg∂(dä Listing 4-9°dONLNd \Œg‘)DA0°dONLNd\‘gn)' handler for the Create Publisher event,
  10502. Courier
  10503. °dONLNd6väÇ»(ä5FUNCTION MyHandleCreatePublisherEvent (theAppleEvent,°dONLNdyÑtêÊ+Íreply: AppleEvent; °dONLNdöítû¯*handlerRefcon: LongIntw¿°dONLNd∞í¯û˛)Ñ)°dONLNdø†t¨Ä(©t: @°dONLNd¡†Ĩ§) OSErr;°dONLNd»Æä∫ú(∑äVAR°dONLNdœºú»Δ+myErr: °dONLNdfiº,»P)êOSErr;°dONLNdÊ ú÷Í(”úreturnedType:°dONLNd˚ ,÷b)ê    DescType;°dONLNdÿú‰(·úthePublisherDataDesc:°dONLNd#ÿ,‰V)êAEDesc;°dONLNd,ÊúÚfi(Ôú actualSize:°dONLNd;ʉÚÍ)H °dONLNd@Ê,Ú\)HLongInt;°dONLNdJÙú¸(˝úpromptForDialog:°dONLNdbÙ,\)êBoolean;°dONLNdlú( úthisDocument: °dONLNdÇ,ò)êMyDocumentInfoPtr;°dONLNdñú“(ú    preview: °dONLNdß,\)êHandle; °dONLNd±ú*ˆ('úpreviewFormat: °dONLNd»,*t)ê FormatType; °dONLNd÷,ú8(5údefaultLocation: °dONLNdÔ,,8™)êEditionContainerSpec;°dONLNd:äF®(CäBEGIN°dONLNd HúTV+MyGetDocumentPtr(thisDocument);°dONLNd-VúbÏ*8myErr := AEGetParamDesc(theAppleEvent, keyDirectObject, °dONLNdod,p™+êtypeObjectSpecifier, °dONLNdér,~∞*thePublisherDataDesc);°dONLNd¶ÄúåÍ(âúCASE myErr OF°dONLNd∂éÆö +errAEDescNotFound: °dONLNdÃúÆ®Ã*BEGIN°dONLNd’™¿∂+8{use the current selection as the publisher and set up }°dONLNd∏¿ƒ*6{ info for later when DoNewPublisher displays preview}°dONLNdKΔ¿“Ï*2preview := MyGetPreviewForSelection(thisDocument);°dONLNdÅ‘¿‡P*previewFormat := 'TEXT';°dONLNdú‚ÆÓΔ(ÎÆEND;°dONLNd£Ƹÿ*noErr: °dONLNdÆ˛¿
  10504. Ú+3{use the data in keyDirectObject parameter as the }°dONLNd ¿™*'{ publisher (which is returned in the }°dONLNd¿&
  10505. *7{ thePublisherDataDesc variable), and set up info for }°dONLNdK(¿4Œ*-{ later when DoNewPublisher displays preview}°dONLNd|6¿B*8MySetInfoForPreview(thePublisherDataDesc, thisDocument, °dONLNdªDˆP¸+6 °dONLNdøD,P2)6 †°dONLNd¿D2P») preview, previewFormat);°dONLNd‹RÆ^‰([Æ    OTHERWISE°dONLNdË`ÆlÃ*BEGIN°dONLNdÒn¿z§+&MyHandleCreatePublisherEvent := myErr;°dONLNd|¿àí*#Exit(MyHandleCreatePublisherEvent);°dONLNdAäÆñÃ(ìÆEND; °dONLNdHòú§¥(°úEND;°dONLNdN¶ú≤™*-myErr := AEDisposeDesc(thePublisherDataDesc);ˇf@ˇ ˇˇˇˇ@
  10506. ˇ·ˇ‚7^
  10507. 4*\¯, Palatino&e.3+l"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@lResponding to ,): Apple Events4⁄*˙¯
  10508. (‡*4-24    )B    Handling ê)& Apple Events4^*¿¯,
  10509. Courier
  10510. °dONLNd\~h‡(e~;myErr := AEGetParamPtr(theAppleEvent, keyAEEditionFileLoc, °dONLNdDj¸vå+~ typeFSS, returnedType, °dONLNdex¸Ñò* @defaultLocation.theFile,°dONLNdàܸí™* SizeOf(FSSpec), actualSize);°dONLNdßî~†Ã(ù~CASE myErr OF°dONLNd∑¢êÆ+errAEDescNotFound: °dONLNdŒ∞¢º‘+3{use the default location as the edition container}°dONLNd楠Œ+/myErr := MyGetDefaultEditionSpec(thisDocument, °dONLNdEÃzÿ‡+ΔdefaultLocation);°dONLNdY⁄êÊ∫(„ênoErr: °dONLNdcËêÙÆ*BEGIN°dONLNdn˸Ù‘)l${the keyAEEditionFileLoc parameter }°dONLNdõˆ¸∞*{ contains a default location}°dONLNdΩ¢ò(¢)defaultLocation.thePart := kPartsNotUsed;°dONLNdÍ¢¬*0defaultLocation.theFileScript := smSystemScript;°dONLNd ê,®()êEND;°dONLNd$.ê:Δ*    OTHERWISE°dONLNd0<êHÆ*BEGIN°dONLNd9J¢VÜ+&MyHandleCreatePublisherEvent := myErr;°dONLNdcX¢dt*#Exit(MyHandleCreatePublisherEvent);°dONLNdâfêrÆ(oêEND; °dONLNdêt~Äñ(}~END;°dONLNdñÇ~éÜ*,myErr := MyGotRequiredParams(theAppleEvent);°dONLNdƒê~ú*IF myErr <> noErr THEN°dONLNd‹û~™ú*BEGIN°dONLNd‰¨ê∏t+&MyHandleCreatePublisherEvent := myErr;°dONLNd∫êΔb*#Exit(MyHandleCreatePublisherEvent);°dONLNd2»~‘ñ(—~END;ˇ˛Öˇ°dONLNd8÷~‚€*;myErr := AEInteractWithUser(kAEDefaultTimeout, gMyNotifyRec˚›°dONLNds÷€‚Ì(fl€Ptr˙Ω°dONLNdv÷Ì‚˜), °dONLNdщ2ò(Ì2@MyIdleFunction);°dONLNdóÚ~˛Ü(˚~,IF myErr = noErr THEN promptForDialog := TRUoÄ°dONLNd√Úܲå(˚ÜE°dONLNdÀÿ fi(    ÿ †°dONLNdÃfi ‰) @°dONLNdÕ‰ ò)ELSE promptForDialog := FALSE;°dONLNdÌ~»(~7myErr := DoNewPublisher(thisDocument, promptForDialog, °dONLNd.(û+êpreview, previewFormat, °dONLNdP*6t*defaultLocation);°dONLNdc8~DÏ(A~={add keyErrorNumber and keyErrorString parameters if desired}°dONLNd°FlR~(OlEND~‡°dONLNd§F~RÑ);°dONLNd¶^lj®(glNote that the ‡°dONLNd¥^©jQ)=MyHandleCreatePublisherEvent˘`°dONLNd–^PjÇ)ß  handler in ñ@°dONLNd‹^Éj±)3 Listing 4-96Ä°dONLNdÁ^≤j⁄)/
  10511.  uses the °dONLNdÒklwÿ(tlAEInteractWithUsery@°dONLNdkÿwfi)l< function to determine whether user interaction is allowed. °dONLNd?xlÑu(ÅlIf ≤`°dONLNdBxuÑÉ)    so, d‡°dONLNdFxÑÑ‹)the handler sets the ¿°dONLNd[x›Ñ7)YpromptForDialog °dONLNdjx7Ñj)Z variable to ı‡°dONLNdwxjÑÇ)3TRUEÙ`°dONLNd{xÇÑ⁄), indicating that the °dONLNdëÖlë¿(élDoNewPublisherz¿°dONLNdüÖ¿ëª)T; function should display the publisher dialog box. If not, ˇ;@ˇ ˇˇˇˇ@
  10512. ˇ·ˇ‚7^
  10513. 4H\, Palatino&e.3+ä"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@äResponding to ,): Apple Events4⁄ä˙(‡ä    Handling ê)& Apple Events
  10514. , (‡4-25
  10515. ˇˇˇˇˇˇˇˇ4l4älòÄ.lBäoMM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""lBäolBäo$””””””””””””””””””””””””””””””òÄ
  10516. l6ä@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""l6ä@l6ä@˜˜˜˜˜˜˜˜˜˜˜˜˜¸ˇˇ˛¸˛ˇˇ¸ˇˇˇ˛˙ˇ˛˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜
  10517. 4è4Ö?òÄ
  10518. è6Ö@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""è6Ö@è6Ö@$˛˙ˇ˚ˇˇ˚ˇˇ˚ˇˇ    ˛˛ˇˇˇ˜˝˛ˇ˛
  10519. ˛ˇˇˇˇ
  10520. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜    ˛ˇˇ˛
  10521. ˛ˇˇˇˇ
  10522. ˛ˇˇˇˇ    ˝ˇˇˇ˙ˇˇ
  10523. ˛ˇ˛ˇˇ
  10524. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  10525. ˛ˇ˛ˇˇ
  10526. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝˛ˇ˛
  10527. ˛ˇ˛ˇˇ
  10528. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˜˜˜˝¸ˇ
  10529. ˛ˇ˛ˇˇ˝˛ˇ˛
  10530. ˛ˇ˛ˇˇ
  10531. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  10532. ˛ˇ˛ˇˇ
  10533. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  10534. ˛ˇ˛ˇˇ
  10535. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  10536. ˛ˇˇˇˇ
  10537. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  10538. ˛ˇˇˇ
  10539. ˛ˇˇˇ
  10540. ˛ˇˇˇ
  10541. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  10542. ˛ˇˇˇˇ
  10543. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  10544. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  10545. ˛ˇˇˇˇ
  10546. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\äh‚(eäthe handler sets the ,
  10547. Courier#‡°dONLNd\„h=)YpromptForDialog@°dONLNd$\=hp)Z variable to °dONLNd1\qhè)4FALSE °dONLNd6\èh∑)
  10548. , and the Ÿ†°dONLNd@\∑h )(DoNewPublisher‘`°dONLNdN\ h)T °dONLNdOiäu„(räfunction does not prˆÄ°dONLNdci„uÚ)Y>ompt the user for the location or name of the edition. For mor~`°dONLNd°iÛu˙(rÛe °dONLNd£väÇ›(äinformation about Ç°dONLNdµv›ÇI)SAEInteractWithUserΩ‡°dONLNd«vHÇ])k, see  °dONLNdÕv^Çü)“Interacting W+Ä°dONLNd€vüÇ“)A ith the User °dONLNdÁv“ÇŸ)3,”à °dONLNdÈvŸÇ˘) which °dONLNdÉäè∑(åä
  10549. begins on û°dONLNd˙É∑èŒ)-page x‡°dONLNdˇÉœè·)4-45ÿ°dONLNdÉ·èÊ). ÿ°dONLNdÉÊèË) 
  10550. ¥Hª4µHª ∂ä∂
  10551. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd•ä¥œ(∞ä Getting Dat¿˙°dONLNd•œ¥ )E
  10552. a Out of a“Δ°dONLNd• ¥)<n rb°dONLNd•¥_) Apple Eventˇˇˇˇˇˇ€r)¯4
  10553. °dONLNd+ªä«ê(ƒäT†¿°dONLNd,ªê«ù)he ]`°dONLNd/ªù«)Apple Event Manager storF °dONLNdGª«∫)u'es the parameters and attributes of an Ÿ °dONLNdnª∫«)®Apple event in a °dONLNd»ä‘(—äformat that is internal to the v‡°dONLNdû»‘i)~Apple Event Managerh`°dONLNd±»i‘n)a. :¿°dONLNd≥»n‘t)Y˚@°dONLNd¥»s‘í)ou use '@°dONLNdª»ì‘˜) Apple Event Manager °dONLNdœ’ä·ƒ(fiäfunctions to rH °dONLNd›’≈·);etrieve the data fr=°dONLNd’·1)Nom an ˘Ä°dONLNdˆ’0·Ä)Apple event and rˆ`°dONLNd’Ä·)P eturn it to your application in °dONLNd'‚äÓè(Îäa°dONLNd(‚èÓë) °dONLNd)‚íÓ!) format your application can use.°dONLNdJÙä¡(˝äMost of the fd¿°dONLNdWÙ¬)8unctions that rw@°dONLNdfÙ?)@etrieve data fr¿°dONLNduÙ@P)>om y‡°dONLNdxÙPˆ)$Apple event parameters and attribute˙@°dONLNdúÙˆ)¶s a∑@°dONLNdüÙ) r|@°dONLNd†Ù)e °dONLNd¢ä(
  10554. ä"available in two forms: one that rq‡°dONLNdƒ`)íeturns the desir3 °dONLNd‘a≥)Eed data in a specifiûÄ°dONLNdË≥œ)Red buf∏‡°dONLNdÓœ) fer and one °dONLNd˙ä°(äthat r °dONLNd¢˚)eturns a descriptor réÄ°dONLNd˚)Yecor‡°dONLNd÷)-d containing the same data. For example, the °dONLNdFä'ÿ($äAEGetParamPtr{ °dONLNdSÿ'9)N function uses a specifY‡°dONLNdj9'X)aied buf\†°dONLNdqX'u)fer to rȆ°dONLNdyu'¸)eturn the data contained in an °dONLNdò(ä4(1äApple event parameter`°dONLNd≠(4)f
  10555. , and the ˇ°dONLNd∑(4l)(AEGetParamDesc„†°dONLNd≈(l4ö)T  function r∂‡°dONLNd–(ö4¯).eturns the descriptor °dONLNdÊ5äAç(>ärE°dONLNdÁ5éA†)ecorπ`°dONLNdÎ5†A€)d for a specifi@°dONLNd˙5‹A)< ed parameter∏@°dONLNd5A):. °dONLNd    GäSê(PäY@Ä°dONLNd
  10556. GêS’)ou can also use I°dONLNdG’Sz)E#Apple Event Manager functions to ge”¿°dONLNd=GzS∏)•t data out of d`°dONLNdLGπSÊ)? escriptor r[‡°dONLNdWGÊS¯)-ecor–@°dONLNd[G¯S)ds, °dONLNd_Tä`„(]ädescriptor lists, and ∂ °dONLNduT„`˜)YAE rfi °dONLNdyT˜`    )ecorRÄ°dONLNd}T
  10557. `)ds. }†°dONLNdÅT`)Y> °dONLNdÇT`)5ou use similar functions to put data into descriptor °dONLNd∑aämç(järE°dONLNd∏aém†)ecorπ`°dONLNdºa†m)ds, descriptor lists, and H@°dONLNd÷a    m)iAE rp@°dONLNd⁄am/)ecor‰†°dONLNdfia/m;)ds.°dONLNd‚säÁ(|äWhen your handler r퇰dONLNdısÁ)] eceives an û†°dONLNdsØ)/#Apple event, you typically use the l`°dONLNd#s∞˛)öAEGetParamPtr™ °dONLNd0s˝)M, °dONLNd2Ääå(âäAEGetAttributePtrº@°dONLNdCÄÔåÙ)e, º@°dONLNdEÄÙåH)AEGetParamDesc∑°dONLNdSÄHåX)T, or ü °dONLNdXÄYå≈)AEGetAttributeDescò`°dONLNdjÄ≈å
  10558. )l function to get °dONLNd{çäôì(ñäthì¿°dONLNd}çìôœ)    e data out of tÜ@°dONLNdåç–ô›)=he B‡°dONLNdèç›ô) Apple event.°dONLNdúüä´§(®äSome ÙÄ°dONLNd°ü§´ë)4Apple Event Manager functions let your application r›@°dONLNd’üë´˜)Ìequest that the data be °dONLNd̨ä∏ç(µärE°dONLNdÓ¨é∏h)4eturned using any descriptor type, even if it is difh °dONLNd"¨h∏t)⁄ferJ†°dONLNd%¨t∏ã) ent fr¿‡°dONLNd+¨ã∏)om the original descriptor °dONLNdFπä≈(¬ä&type. If the original data is of a dif&°dONLNdlπ ≈,)ñferÄ°dONLNdoπ,≈î) ent descriptor type, the ú`°dONLNdàπî≈¯)hApple Event Manager °dONLNdúΔä“–(œäattempts to coerP °dONLNd¨Δ—“")Gce the data to the rü¿°dONLNd¿Δ"“î)Qequested descriptor type. °dONLNd€ÿä‰÷(·äFor example, the œ°dONLNdÏÿ÷‰$)LAEGetParamPtr  °dONLNd˘ÿ$‰ª)N$ function lets you specify the desir°dONLNdÿº‰)òed descriptor type °dONLNd0ÂäÒ©(Óäof the rο°dONLNd8©Ò)esulting data as follows:°dONLNdR¸äú(äVAR°dONLNdW
  10559. ú+theAppleEvent:°dONLNdk
  10560. J)l AppleEvent;°dONLNdxú$Í(!úreturnedType:°dONLNdäˆ$¸)Z °dONLNdå$>)    DescType;°dONLNdó&ú2fi(/ú multResult:°dONLNd®&28)lLongInt;°dONLNd≤4ú@‰(=ú actualSize: °dONLNdƒ4@&)lSize;°dONLNdÀBúN¿(KúmyErr:°dONLNd”B¿NΔ)$ °dONLNdÿBN,)HOSErr;°dONLNdflZäf»(cä5myErr := AEGetParamPtr(theAppleEvent, keyMultResult, °dONLNdht+~ †°dONLNdht) @°dONLNdhtŒ)typeLongInteger, returnedType, °dONLNdEvÇ( †°dONLNdFvÇ) @°dONLNdGvÇ‘) @multResult, SizeOf(multResult),°dONLNdoÑê(ç †°dONLNdpÑê) @°dONLNdqÑê\) actualSize);ˇ%x@ˇ ˇˇˇˇ@
  10561. ˇ·ˇ‚7^
  10562. 4*\¯, Palatino&e.3+l"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@lResponding to ,): Apple Events4⁄*˙¯
  10563. (‡*4-26    )B    Handling ê)& Apple Events4^*¿¯
  10564. °dONLNd\lh€(elIn this example, the desirêÄ°dONLNd\€h$)oed type is specifi&†°dONLNd,\%h])Jed in the thir‰@°dONLNd:\]h≥)8d parameter by the ,
  10565. Courier°dONLNdMiluΔ(rltypeLongIntegerz`°dONLNd\iΔu*)Z descriptor type. This ré`°dONLNdti*uq)dequests that the ”`°dONLNdÖiqu’)GApple Event Manager °dONLNdôvlÇ~(lcoerÙ`°dONLNdùv~Çâ)ce Æ@°dONLNd†väÇ2) +the data to a long integer if it is not alr4 °dONLNdÀv3Çá)©eady of this type. T˛ °dONLNdflvÜÇó)So pr∫¿°dONLNd„vòÇ≈)
  10566. event coer¸`°dONLNdÌv≈ÇÌ)-    cion and °dONLNdˆÉlèÑ(ålensur$ °dONLNd˚ÉÖè)#e that the descriptor type of the rƒÄ°dONLNdÉèÊ)ê3esult is of the same type as the original, specify °dONLNdQêlú¥(ôl typeWildCard{Ä°dONLNd]ê¥úÊ)H for the thirV°dONLNdjêÊú)2 d parameter≈`°dONLNduêú)5.°dONLNdw¢lÆ(´lThe ]`°dONLNd{¢ÆÁ)Apple Event Manager rQ@°dONLNdê¢ÁÆ˛)heturn(`°dONLNdï¢ˇÆ#)
  10567. s, in the ¸Ä°dONLNdü¢#Æk)$ returnedType¯°dONLNd´¢kÆõ)H
  10568.  parameterK†°dONLNdµ¢õÆ£)0, té°dONLNd∏¢£Æı)he descriptor type °dONLNdÀØlªã(∏lof the rο°dONLNd”Ø㪺) esulting da‡°dONLNdfiØΩª«)2ta.À@°dONLNd·Ø«ªé)
  10569. - This is useful information when you specify ( °dONLNdØèª◊)» typeWildCard#†°dONLNdØ◊ªı)H as the °dONLNd"ºl»Å(≈ldesirO¿°dONLNd'ºÇ»¢)Bed descriptor type; you can determine the descriptor type of the rv°dONLNdiº¢»Î(≈¢esulting data by °dONLNdz…l’›(“lexamining this parameterU†°dONLNdí…›’fl)q.°dONLNdî€lÁ(‰lThe ]`°dONLNdò€Á)Apple Event Manager can coer¬@°dONLNd¥€Á:)à ce many dif[°dONLNdø€;ÁG)4fer=Ä°dONLNd¬€GÁ·) $ent types of data. For example, the °dONLNdÊËlÙ (Òl'Apple Event Manager can convert alias rü@°dONLNdË Ù2)¥ecor†°dONLNdË3ÙQ)ds to fi1°dONLNdËQÙô)le system specifi:@°dONLNd*ËôÙ∫)Hcation ra °dONLNd2Ë∫ÙÃ)!ecor’Ä°dONLNd6ËÃÙ€)ds, °dONLNd:ılˆ(˛l[integers to Boolean data types, and characters to numeric data types, in addition to other °dONLNdïlÆ*Kdata type conversions. For a complete list of the data types for which the Ï°dONLNd‡ÆË( Æ Apple Event °dONLNdÏl†(l
  10570. Manager prY °dONLNdˆ†“)4 ovides coert°dONLNd“$)2cion handling, see ”Ä°dONLNd$*)RT    @°dONLNd*t)able 4-1 on page 8Ä°dONLNd&t|)J4-å`°dONLNd(|Ü)43å`°dONLNd*Üà)
  10571. .°dONLNd,!l-r(*lTµ¿°dONLNd-!q-»)o perform data coerà°dONLNd@!»-)Wcions that the ˝¿°dONLNdO!-⁄)=-Apple Event Manager doesn’t perform, you can °dONLNd|.l:u(7lprG °dONLNd~.v:—)
  10572. ovide your own coer¡@°dONLNdë.—:#)[cion handlers. See ”‡°dONLNd§.#:2)R“WÄ°dONLNd¶.2:°)riting and Installing CoerÕ‡°dONLNd¿.°:Ê)ocion Handlers,”çÄ°dONLNdœ.Á:È)F °dONLNd–;lG∂(Dlwhich begins on p`°dONLNd‡;∑GŒ)Kpage K@°dONLNdÂ;œG·)4-41ü °dONLNdÈ;·GD), for information on pr§Ä°dONLNd;DG©)coviding your own coerù‡°dONLNd;©GÁ)ecion handlers.°dONLNd$MlY‚(VlApple event parameters ar]¿°dONLNd=M‚Y
  10573. )ve keywor ¿°dONLNdEM Y0))d-specifi˛Ä°dONLNdNM0Yp)%ed descriptor r√ °dONLNd]MqYÉ)Aecor7Ä°dONLNdaMÑYì)ds. b†°dONLNdeMìYô)Y# °dONLNdfMôY∏)ou can °dONLNdmZlf{(cluseç¿°dONLNdpZ{f}) ¿°dONLNdqZ~f“)AEGetParamDescÄ°dONLNdZ“f3)T to get the descriptor rò °dONLNdóZ3fE)aecor Ä°dONLNdõZFfé)d of a parameterE@°dONLNd´Zéf’)H, or you can use °dONLNdºgls∫(plAEGetParamPtr{ °dONLNd…g∫s‡)N
  10574.  to get tha‡°dONLNd”g·s)'e data out of tT`°dONLNd‚gs^)=he descriptor rŒ†°dONLNdÒg^sp)@ecorC°dONLNdıgqsπ)d of a parameter{¿°dONLNdgπs‘)H. If an ° °dONLNdg‘sÒ)Apple °dONLNdtlÄ-(}l,event parameter consists of an object specifi– °dONLNd@t-Ä<)¡er r—`°dONLNdDt<ÄN)ecorE¿°dONLNdHtOÄê)d, you can use <†°dONLNdWtëÄ«)B    AEResolve9@°dONLNd`t«ÄÙ)6
  10575.  and your °dONLNdjÅlç(äl"own object accessor functions to r¬`°dONLNdåÅçg)îesolve the object specifi2`°dONLNd•Åhçw)her r3†°dONLNd©Åwçâ)ecor®°dONLNd≠ÅâçÒ)d—that is, to locate the °dONLNdΔélö(ól(Apple event object it describes. For mor«@°dONLNdÓéöu)Øe information about ‡°dONLNdévö¨)[    AEResolveÄ°dONLNd é¨öfi)6  and object °dONLNdõlß—(§laccessor functions, see '¿°dONLNd/õ“ß·)f“Wj`°dONLNd1õ‡ß)riting Object ®¿°dONLNd?õßu)9Accessor Functions,”Ç¿°dONLNdSõvß√)] which begins on Û °dONLNddõ√ß⁄)Mpage Œ°dONLNdiõ€ßÌ)6-28!‡°dONLNdmõÓßÛ). °dONLNdo®l¥§(±lAttributes ar√¿°dONLNd|®§¥·)8e also keywor°†°dONLNdâ®·¥)=d-specifi`°dONLNdí®¥G)&ed descriptor rD°dONLNd°®H¥Z)Aecor∏`°dONLNd•®Z¥‘)ds, and you can use similar °dONLNd¡µl¡o(ælrE°dONLNd¬µp¡Ú)outines to get the descriptor rT°dONLNd·µÚ¡)Çecor»`°dONLNdµ¡Ì)9d of an attribute or to get the data out of an attribute.°dONLNd«l”/(–l+The following sections show how to use the ,Ä°dONLNdJ«0”~)ƒAEGetParamPtrj@°dONLNdW«}”Ç)M, j@°dONLNdY«Ç”Ë)AEGetAttributePtr¶Ä°dONLNdj«Á”Ï)e, °dONLNdl‘l‡¿(›lAEGetParamDescz¿°dONLNdz‘¿‡–)T, or b‡°dONLNd‘—‡=)AEGetAttributeDesc\ °dONLNdë‘=‡“)l$ function to get the data out of an °dONLNdµ·lÌá(ÍlApple˝Ä°dONLNd∫·áÌâ) }Ä°dONLNdª·ä̧)event.
  10576.  *¯4 *¯ l¯
  10577. ˇ·ˇ‚7^ °dONLNd¬˛l Á(lGetting Data Out of an 6Ä°dONLNdŸ˛Á c){Apple Event Parameterˇˇˇˇˇˇ‘@(Ò4
  10578. °dONLNdlr(lY@Ä°dONLNdÒr≥)ou can use the ȇ°dONLNd    ≥)AAEGetParamPtr°dONLNd    )N or M °dONLNd    d)AEGetParamDescG‡°dONLNd    dÏ)T! function to get the data out of °dONLNd    @l+y((lan s°dONLNd    Cy+fl)Apple event parameter`°dONLNd    Xfl+)f
  10579. . Use the º†°dONLNd    b+U)(AEGetParamPtr∑¿°dONLNd    oU+û)N function (or the _`°dONLNd    Åü+·)J AEGetKeyPtr[@°dONLNd    å·+„)B °dONLNd    ç,l8#(5l(function, which works the same way) to r⁄¿°dONLNd    µ,#8—)∑'eturn the data contained in a parameter`°dONLNd    ‹,“8Í)Ø. Use °dONLNd    ‚9lE|(Blthe ›`°dONLNd    Ê9|E–)AEGetParamDescÿ °dONLNd    Ù9–E†)T/ function when you need to get the descriptor r≈Ä°dONLNd
  10580. #9†E≤)–ecor9‡°dONLNd
  10581. '9≥EŒ)d of a °dONLNd
  10582. .FlR*(Ol.parameter or to extract the descriptor list frÎÄ°dONLNd
  10583. \F*Ro)æom a parameter†°dONLNd
  10584. jFpRr)F.°dONLNd
  10585. lXldß(alFor example, q†°dONLNd
  10586. yX®d˛)<suppose you need tц°dONLNd
  10587. ãX˛dÔ)V8o get the data out of a Section Read event. The Edition °dONLNd
  10588. √elq—(nlQManager sends your application a Section Read event to tell your application to r
  10589. †°dONLNd e“q‰(n“ead °dONLNd rl~“({lupdated information fr°°dONLNd .r“~R)fom an edition into the specifi8`°dONLNd LrS~ç)Åed subscriberx@°dONLNd Yrç~≤):    . The dir} °dONLNd br≤~Ò)%ect parameter °dONLNd plãá(àlof the »`°dONLNd wáãP).Apple event contains a handle to the section r6†°dONLNd •Qãc) ecor´°dONLNd ©cã¥)d of the subscriber»°dONLNd º¥ãπ)Q. ö`°dONLNd æπãø)YZ‡°dONLNd øøã) ou can use °dONLNd  ålò|(ïlthe ›`°dONLNd Œå|ò )AEGetParamPtrÿÄ°dONLNd €å òb)N% function to get the data out of the ¸†°dONLNd åbòö)ò Apple event.ˇ@ˆ@ˇ ˇˇˇˇ@
  10590. ˇ·ˇ‚7^
  10591. 4H\, Palatino&e.3+ä"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@äResponding to ,): Apple Events4⁄ä˙(‡ä    Handling ê)& Apple Events
  10592. , (‡4-27
  10593. ˇˇˇˇˇˇˇˇ4l4älòÄ.lBäoMM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""lBäolBäo$””””””””””””””””””””””””””””””òÄ
  10594. l6ä@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""l6ä@l6ä@˜˜˜˜˜˜˜˜˜˜˜˜˜¸ˇˇ˛¸˛ˇˇ¸ˇˇˇ˛˙ˇ˛˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜
  10595. 4è4Ö?òÄ
  10596. è6Ö@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""è6Ö@è6Ö@$˛˙ˇ˚ˇˇ˚ˇˇ˚ˇˇ    ˛˛ˇˇˇ˜˝˛ˇ˛
  10597. ˛ˇˇˇˇ
  10598. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜    ˛ˇˇ˛
  10599. ˛ˇˇˇˇ
  10600. ˛ˇˇˇˇ    ˝ˇˇˇ˙ˇˇ
  10601. ˛ˇ˛ˇˇ
  10602. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  10603. ˛ˇ˛ˇˇ
  10604. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝˛ˇ˛
  10605. ˛ˇ˛ˇˇ
  10606. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˜˜˜˝¸ˇ
  10607. ˛ˇ˛ˇˇ˝˛ˇ˛
  10608. ˛ˇ˛ˇˇ
  10609. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  10610. ˛ˇ˛ˇˇ
  10611. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  10612. ˛ˇ˛ˇˇ
  10613. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  10614. ˛ˇˇˇˇ
  10615. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  10616. ˛ˇˇˇ
  10617. ˛ˇˇˇ
  10618. ˛ˇˇˇ
  10619. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  10620. ˛ˇˇˇˇ
  10621. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  10622. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  10623. ˛ˇˇˇˇ
  10624. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähê(eäY@Ä°dONLNd\êh–)ou specify the Ä°dONLNd\–hj)@#Apple event that contains the desir>¿°dONLNd3\jh§)ö ed parameterw¿°dONLNd?\§h€): , the keyworNÄ°dONLNdK\€hˇ)7    d of the °dONLNdTiäuü(rädesirO¿°dONLNdYi†u⁄) ed parameterà¿°dONLNdei⁄uÆ):2, the descriptor type the function should use to r#°dONLNdóiØu˘)’eturn the data, a °dONLNd©väÇò(äbuf5°dONLNd¨vôÇ√) fer to stor∂‡°dONLNd∑v√ÇW)*$e the data, and the size of this buf≠°dONLNd€vWÇ¡)îfer as parameters to the ,
  10625. Courier›`°dONLNdÙv¡Ç)jAEGetParamPtrÿÄ°dONLNdvÇ)N °dONLNdÉäè«(åäfunction. The  °dONLNdÉ«è)=AEGetParamPtr≈ °dONLNdÉèC)N  function rò`°dONLNd(ÉCè◊).#eturns the descriptor type of the r≠ °dONLNdKÉ◊è)îesulting data °dONLNdYêäú`(ôä4and the actual size of the data, and it places the r¸ °dONLNdçê`ú◊)÷equested data in the specifi˜¿°dONLNd©êÿúÙ)xed buf °dONLNdØêıú)ferd‡°dONLNd≤êú) .°dONLNd¥ßä≥ú(∞äVAR°dONLNdπµú¡“+    sectionH:°dONLNd»µ¡\)lSectionHandle;°dONLNdÿ√úœ(ÃútheAppleEvent:°dONLNdÏ√œJ)l AppleEvent;°dONLNd˘—ú›(⁄úreturnedType: °dONLNd—›>)l    DescType;°dONLNdflúΉ(Ëú actualSize: °dONLNd*flÎ&)lSize;°dONLNd1Ìú˘¿(ˆúmyErr:°dONLNd9Ì¿˘Δ)$ °dONLNd>Ì˘,)HOSErr;°dONLNdEä‘(ä7myErr := AEGetParamPtr(theAppleEvent, keyDirectObject, °dONLNdÑ+~ †°dONLNdÖ) @°dONLNdܲ)'typeSectionH, returnedType, @sectionH, °dONLNdµ!-(* †°dONLNd∂!-) @°dONLNd∑!-»)SizeOf(sectionH), actualSize);°dONLNd÷9äE„(BäIn this example, the ¿¿°dONLNdÎ9„E=)YkeyDirectObjectª °dONLNd˙9=Ea)Z keywor¥Ä°dONLNd9aEÜ)$d specifiæ`°dONLNd
  10626. 9ÜEµ)% es that the xÄ°dONLNd9∂E)0AEGetParamPtrs†°dONLNd#9E)N °dONLNd$FäR1(Oä&function should extract information frÀÄ°dONLNdJF1R_)ß
  10627. om the dirªÄ°dONLNdTF_R†).ect parameter; H¿°dONLNdcF°RÔ)BAEGetParamPtrC‡°dONLNdpFÔRı)N rà‡°dONLNdrFıR)eturns °dONLNdySä_⁄(\äthe data in the buf†°dONLNdåS€_)Q
  10628. fer specifi‡°dONLNdóS_1)+
  10629. ed by the _`°dONLNd°S1_a)+sectionH\`°dONLNd©Sa_å)0  variable. °dONLNdµeäqê(näY@Ä°dONLNd∂eêq≥)ou can r√¿°dONLNdæe≥qˆ)#equest that the À¿°dONLNdŒeˆq^)CApple Event Manager rø†°dONLNd„e^q)h)eturn the data using the descriptor type °dONLNd rä~({ä!of the original data or you can r °dONLNd-r~Y)åequest that the      °dONLNd=rY~œ)CApple Event Manager coer¨`°dONLNdUrœ~)vce the data into °dONLNdfäã(àäa descriptor type that is dif]`°dONLNdÉã)wfer?‡°dONLNdÜã$) ent fr∂ °dONLNdå$ãg)om the original^¿°dONLNdõhãs)D. TîÄ°dONLNdûrãÉ)
  10630. o prQ °dONLNd¢Ñã±)
  10631. event coerí¿°dONLNd¨±ãÃ)-cion, so@°dONLNd≥Õã˙) pecify the °dONLNdæåäòü(ïädesirO¿°dONLNd√å†ò˛)ed descriptor type as )†°dONLNdŸåˇòG)_ typeWildCard% °dONLNdÂåGòI)H.°dONLNdÁûä™ù(ßäThe ª¿°dONLNdÎûù™Â) typeSectionH∑@°dONLNd˜û™I)H descriptor type specifi\‡°dONLNdûJ™})ees that the r‹°dONLNdû}™¯)3eturned data should be coerK`°dONLNd7û˘™)|ced to °dONLNd>´ä∑Í(¥äa handle to a section r’‡°dONLNdU´Í∑¸)`ecorJ@°dONLNdY´˝∑)d. 8`°dONLNd\´∑) Y¯‡°dONLNd]´∑â)ou can use the information r¢†°dONLNdy´ä∑ )}eturned in the v@°dONLNdà´À∑˚)AsectionHs@°dONLNdê´˚∑˝)0 °dONLNdë∏äƒ8(¡ä)variable to identify the subscriber and r«°dONLNd∫∏8ƒ§)Æead in the information fr¿°dONLNd”∏•ƒÁ)mom the edition.°dONLNd„ ä÷„(”äIn this example, the ¿¿°dONLNd¯ „÷1)YAEGetParamPtrª‡°dONLNd 1÷_)N  function rè °dONLNd _÷{).eturns£@°dONLNd {÷}),#@°dONLNd ~÷ú) in the :`°dONLNd ú÷‰) returnedType5‡°dONLNd+ ‰÷
  10632. )H     variablep¿°dONLNd4 
  10633. ÷ )&,¿°dONLNd5  ÷) °dONLNd6◊䄡(‡äthe descriptor type of the r†°dONLNdR◊„∂)v+esulting data. The descriptor type of the rø °dONLNd}◊∂„Ò)∂esulting data °dONLNdã‰ä≈(Ìämatches the rÅ°dONLNdò‰≈c);$equested descriptor type unless the ‘@°dONLNdº‰c)û#Apple Event Manager wasn’t able to °dONLNdflÒä˝ú(˙äcoerÙ`°dONLNd„Òú˝)ce the data to the specifiÌ °dONLNd˝Ò˝î)j ed descriptor type or you specifiÏ°dONLNdÒï˝»)è ed the desir~Ä°dONLNd*Ò…˝)4ed descriptor °dONLNd8˛ä
  10634. ´(ätype as Z@°dONLNd@˛¨
  10635. Ù)" typeWildCardU¿°dONLNdL˛Ù
  10636. %)H. If the coerY‡°dONLNdY˛%
  10637. a)1cion fails, the ⁄°dONLNdi˛a
  10638. …)<Apple Event Manager rÕ‡°dONLNd~˛…
  10639. ˜)h eturns the °dONLNdâ ä(äerrAECoercionFaily†°dONLNdö ˆ)f r憰dONLNdú ˆ%) esult code.°dONLNd®ä)ù(&äThe ª¿°dONLNd¨ù)Î)AEGetParamPtr∂‡°dONLNdπÎ))N  function rä °dONLNdƒ)5).eturnsû@°dONLNd 5)7),@°dONLNdÀ8):) û@°dONLNdÃ:)U)in the 5`°dONLNd”V)í)
  10640. actualSize1†°dONLNd›í)Õ)< variable, the …‡°dONLNdÏÕ));actual size of °dONLNd˚*ä6(3ä#the data (that is, the size of coerï°dONLNd*6m)ãced data, if any coerŸ‡°dONLNd3*m6≈)Xcion was performedA °dONLNdE*Δ6À)Y).°dONLNdG*Ã6) If the value °dONLNdU7äCç(@ärE°dONLNdV7éC∂)    eturned ii‡°dONLNd_7∂C÷)(n this v†°dONLNdg7◊C
  10641. )!ariable is gr®¿°dONLNdt7
  10642. C)39eater than the amount your application allocated for the °dONLNd≠DäPò(Mäbuf5°dONLNd∞DôP›)fer to hold the rÍ`°dONLNd¡D›Pâ)D'eturned data, your application can incr͇°dONLNdËDâPÈ)¨ease the size of its buf̆°dONLNd    DÈP)` fer to this °dONLNd     Qä](Zä amount, and get the data again. √`°dONLNd    ,Q])éYɇ°dONLNd    -Q]ü)ou can also choose to use the 3@°dONLNd    KQ†]Ù)ÇAEGetParamDesc.°dONLNd    YQÙ]ˆ)T °dONLNd    Z^äj¨(gäAfunction when your application doesn’t know the size of the data.°dONLNd    úpä|›*In general, use the È¿°dONLNd    ∞p›|+)SAEGetParamPtr‰‡°dONLNd    Ωp+|≈)N& function to extract data that is of fi4†°dONLNd    ‰pΔ|)õxed length or °dONLNd    Ú}äâ (Üäknown maximum length, and the @°dONLNd
  10643. }!âu)óAEGetParamDesc˛°dONLNd
  10644. }tâ)S% function to extract data that is of °dONLNd
  10645. Cääñ‰(ìävariable length. The ‡°dONLNd
  10646. XäÂñ9)[AEGetParamDesc†°dONLNd
  10647. fä9ñg)T  function r͇°dONLNd
  10648. qäfñ»)-eturns the descriptor r;†°dONLNd
  10649. àä…ñ€)cecor∞°dONLNd
  10650. åä€ñ˜)d for aá¿°dONLNd
  10651. ìä¯ñ˝)nY °dONLNd
  10652. îä˛ñ) °dONLNd
  10653. ïóä£(†äApple event parameter`°dONLNd
  10654. ™ó£
  10655. )fD. This function is useful, for example, for extracting a descriptor °dONLNd
  10656. Ó§ä∞°(≠älist fri°dONLNd
  10657. ı§°∞Ê)om a parameterÜ °dONLNd §Ê∞Ë)E. °dONLNd §È∞Î) ˇ∂@ˇ ˇˇˇˇ@
  10658. ˇ·ˇ‚7^
  10659. 4*\¯, Palatino&e.3+l"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@lResponding to ,): Apple Events4⁄*˙¯
  10660. (‡*4-28    )B    Handling ê)& Apple Events4^*¿¯
  10661. °dONLNd\lhr(elY@Ä°dONLNd\rhü)
  10662. ou specifye¿°dONLNd \ûh†),,¿°dONLNd \†h¢) e¿°dONLNd\£hÓ)as parameters to ,
  10663. Courier®†°dONLNd\ÓhB)KAEGetParamDesc£`°dONLNd,\BhG)T, £`°dONLNd.\GhW)the ¢`°dONLNd2\Wh€)Apple event that contains the °dONLNdPiluÅ(rldesirO¿°dONLNdUiÇuº) ed parameterà¿°dONLNdaiºuÛ): , the keywor_Ä°dONLNdmiÛu-)7d of the desirq¿°dONLNd{i-ug): ed parameter™¿°dONLNdáigu“):, the descriptor type the °dONLNd°vlÇ’(lfunction should use to r®°dONLNdπv’Ç3)ieturn the descriptor rª¿°dONLNdœv3ÇE)^ecor0 °dONLNd”vFÇz) d, and a bufÓ°dONLNdflvzǧ)4 fer to storo‡°dONLNdÍv•Ç¿)+e the r€‡°dONLNdÒv¿ÇÂ)eturned °dONLNd˘Élèü(ål descriptor rfl@°dONLNdÉüè±)3ecorS†°dONLNd    É≤è∫)d.Ô`°dONLNd É∫èœ) The ´ °dONLNdÉ–è$)AEGetParamDesc•‡°dONLNdÉ$èR)T  function ry °dONLNd)ÉRè¥).eturns the descriptor r…‡°dONLNd@É¥èΔ)becor>@°dONLNdDÉ«èÍ)d using °dONLNdLêlúò(ôl
  10664. the specifiKÄ°dONLNdWêôúÓ)-ed descriptor type. °dONLNdl¢lÆ≈(´lFor example, the dirò °dONLNdÄ¢≈ÆÈ)Y@ect parameter of the Open Documents event contains a descriptor °dONLNd¿Ølª¨(∏llist that specifiî`°dONLNd—بª!)@es the documents to open.  @°dONLNdÎØ"ª()vYÿ°dONLNdÏØ'ªh)ou can use the v °dONLNd˚ØiªΩ)BAEGetParamDescp‡°dONLNd    ØΩªÚ)T function to °dONLNdºl»(≈l&get the descriptor list out of the dir¿°dONLNd<º»B)öect parameter·†°dONLNdIºA»C);.°dONLNdK”lfl~(‹lVAR°dONLNdP·~ÌÆ+docList:°dONLNd^·ÍÌ,)l AEDescList;°dONLNdkÔ~˚“(¯~theAppleEvent:°dONLNdÔÍ˚,)l AppleEvent;°dONLNdå˝~    ¢(~myErr:°dONLNdî˝¢    ®)$ °dONLNdô˝Í    )HOSErr;°dONLNd†l!º(l8myErr := AEGetParamDesc(theAppleEvent, keyDirectObject, °dONLNd·#¸/z+êtypeAEList, docList);°dONLNd˜;lG≈(DlIn this example, the b`°dONLNd ;≈G)YApple event specifiõ@°dONLNd;Gk)Ued by the variable /†°dONLNd2;lG∫)RtheAppleEvent*¿°dONLNd?;∫Gº)N °dONLNd@HlTê(Qlcontainsp@°dONLNdHHëTì)% @°dONLNdIHìT†)theÕ†°dONLNdLH°T£) M†°dONLNdMH§Tπ)desir`°dONLNdRH∫TÙ) ed parameterV`°dONLNd^HÙT ):. The í °dONLNddH Tf)keyDirectObjectåÄ°dONLNdsHfTä)Z keyworÖ‡°dONLNdzHäTØ)$d specifiè¿°dONLNdÉHØTfi)% es that the °dONLNdèUla¿(^lAEGetParamDescz¿°dONLNdùU¿a_)T% function should get the descriptor ro‡°dONLNd¬U_aq)üecor‰@°dONLNdΔUqa¢) d of the dirÔ‡°dONLNd“U¢afi)1ect parameterø¿°dONLNdflUfia„)<. °dONLNd·bln|(klThe;¿°dONLNd‰b}n) ª¿°dONLNdÂbnª)
  10665. typeAEList∏°dONLNdÔbªn)< descriptor type specifi]†°dONLNdb nÉ)ees that the descriptor rw°dONLNdbÉnï)cecorÎ`°dONLNd#bïnœ)d should be r,Ä°dONLNd0b–nı);eturned °dONLNd8ol{(xl+as a descriptor list. In this example, the Ë °dONLNdco{n)ÆAEGetParamDesc‚‡°dONLNdqon{ú)T  function r∂ °dONLNd|oú{Ò).eturns a descriptor °dONLNdê|làó(Öl list in the Á@°dONLNdú|óà¡)+docList‰†°dONLNd£|¡àÈ)*
  10666.  variable.°dONLNdÆélö<(ól3The descriptor list contains a list of descriptor rè °dONLNd·é<öN)–ecorÄ°dONLNdÂéOöd)ds. Tí°dONLNdÍécöæ)o get the descriptor r_@°dONLNdéøö—)\ecor”†°dONLNdé—öÒ)ds and °dONLNd õlß (§l-their data out of a descriptor list, use the t`°dONLNd8õ!ßi)µ AECountItemso‡°dONLNdDõiߧ)H function to fi¬¿°dONLNdSõ§ßÛ);nd the number of °dONLNdd®l¥ü(±l descriptor rfl@°dONLNdp®ü¥±)3ecorS†°dONLNdt®≤¥‰)ds in the lis—@°dONLNdÅ®‰¥Ó)2t a솰dONLNdѮԥ2) nd then make r°@°dONLNdí®2¥å)Cepetitive calls to the @°dONLNd©®ç¥œ)[ AEGetNthPtr  °dONLNd¥®œ¥—)B °dONLNdµµl¡;(æl1function to get the data out of each descriptor r†°dONLNdʵ<¡N)–ecorÑ°dONLNd͵N¡j)d. See Ú¿°dONLNdÒµj¡–)“Getting Data Out of a °dONLNd¬lŒ⁄(ÀlDescriptor List” on page a°dONLNd!¬€ŒÌ)o4-31¥‡°dONLNd%¬ÌŒ) for mor`°dONLNd-¬ŒO)$e information.°dONLNd<‘l‡®(›lNote that the ‡°dONLNdJ‘©‡˝)=AEGetParamDesc˛†°dONLNdX‘¸‡à)S! function copies the descriptor r `°dONLNdy‘â‡õ)çecorî¿°dONLNd}‘õ‡™)d frI`°dONLNdÅ‘´‡Ã)om the °dONLNdà·lÌô(Íl    parameterS†°dONLNdë·ôÌ“)- . When you’rÿ°dONLNdù·“ÌC)9e done with a descriptor rÄ@°dONLNd∑·DÌV)recorÙ†°dONLNdª·VÌ∂)d that you obtained fri¿°dONLNd—·∑Ì«)aom °dONLNd‘Ól˙¿(˜lAEGetParamDescz¿°dONLNd‚Ó¿˙g)T(, you must dispose of it by calling the Ä°dONLNd
  10667. Óh˙∂)®AEDisposeDesc†°dONLNdÓ∂˙‡)N
  10668.  function.°dONLNd"l Ç(    lIf an •`°dONLNd(Ç a)2Apple event parameter consists of an object specifiÛ°dONLNd[a p)fler rÙ@°dONLNd_p Ç)ecorh†°dONLNdcÉ ƒ)d, you can use °dONLNdrl¢(l    AEResolve|†°dONLNd{¢≥)6 to r˘Ä°dONLNdÄ≥)esolve the object specifÅ °dONLNdò*)eier rj¿°dONLNdù*<)ecorfl °dONLNd°<î)d (that is, locate the #`°dONLNd∏ïÚ)YApple event object it °dONLNdŒl&‚(#ldescribes), as explained in ¬`°dONLNdÍ‚& )v    “Finding ëÄ°dONLNdÛ &ì)*Apple Event Objects” on page C†°dONLNdî&¶)à3-46óÄ°dONLNd¶&®).
  10669. D*K¯4E*K¯ FlF¯
  10670. ˇ·ˇ‚7^ °dONLNd7lEÁ(AlGetting Data Out of an 6Ä°dONLNd-7ÁE){    Attributeˇˇˇˇˇˇ‘@(AÒ4
  10671. °dONLNd8KlWr(TlY@Ä°dONLNd9KrW≥)ou can use the ȇ°dONLNdHK≥W)AAEGetAttributePtr„Ä°dONLNdYKW')f or K†°dONLNd]K(Wî)AEGetAttributeDescD‡°dONLNdoKîWÈ)l function to get the °dONLNdÑXldÙ(al!data out of the attributes of an 7¿°dONLNd•XÙd,)à Apple event.Ä°dONLNd±X-d/)9 ˇ9¯@ˇ ˇˇˇˇ@
  10672. ˇ·ˇ‚7^
  10673. 4H\, Palatino&e.3+ä"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@äResponding to ,): Apple Events4⁄ä˙(‡ä    Handling ê)& Apple Events
  10674. , (‡4-29
  10675. ˇˇˇˇˇˇˇˇ4l4älòÄ.lBäoMM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""lBäolBäo$””””””””””””””””””””””””””””””òÄ
  10676. l6ä@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""l6ä@l6ä@˜˜˜˜˜˜˜˜˜˜˜˜˜¸ˇˇ˛¸˛ˇˇ¸ˇˇˇ˛˙ˇ˛˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜
  10677. 4è4Ö?òÄ
  10678. è6Ö@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""è6Ö@è6Ö@$˛˙ˇ˚ˇˇ˚ˇˇ˚ˇˇ    ˛˛ˇˇˇ˜˝˛ˇ˛
  10679. ˛ˇˇˇˇ
  10680. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜    ˛ˇˇ˛
  10681. ˛ˇˇˇˇ
  10682. ˛ˇˇˇˇ    ˝ˇˇˇ˙ˇˇ
  10683. ˛ˇ˛ˇˇ
  10684. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  10685. ˛ˇ˛ˇˇ
  10686. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝˛ˇ˛
  10687. ˛ˇ˛ˇˇ
  10688. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˜˜˜˝¸ˇ
  10689. ˛ˇ˛ˇˇ˝˛ˇ˛
  10690. ˛ˇ˛ˇˇ
  10691. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  10692. ˛ˇ˛ˇˇ
  10693. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  10694. ˛ˇ˛ˇˇ
  10695. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  10696. ˛ˇˇˇˇ
  10697. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  10698. ˛ˇˇˇ
  10699. ˛ˇˇˇ
  10700. ˛ˇˇˇ
  10701. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  10702. ˛ˇˇˇˇ
  10703. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  10704. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  10705. ˛ˇˇˇˇ
  10706. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähê(eäY@Ä°dONLNd\êhΩ)
  10707. ou specifye¿°dONLNd \ºhæ),,¿°dONLNd \æh¿) e¿°dONLNd\¡h )as parameters to ,
  10708. Courier®†°dONLNd\ hr)KAEGetAttributePtr‰‡°dONLNd/\qhy)e, t'@°dONLNd2\zhá)    he „‡°dONLNd5\Üh
  10709. ) Apple event that contains the °dONLNdSiäuü(rädesirO¿°dONLNdXi†u
  10710. )ed attribute, the keyworÜ`°dONLNdpi
  10711. uD)jd of the desirò†°dONLNd~iDu
  10712. ):/ed attribute, the descriptor type the function °dONLNd≠väÇÀ(äshould use to r¿°dONLNdºvÃÇ%)Beturn the data, a bufa`°dONLNd—v%ÇO)Y fer to stor„@°dONLNd‹vOÇ„)*$e the data, and the size of this bufŸ`°dONLNdv„ÇÎ)îfeˆ‡°dONLNdvÎÇÓ)r, °dONLNdvÔÇÒ).¨ °dONLNdvÒÇ) The °dONLNd    Éäè(åäAEGetAttributePtry†°dONLNdÉè)f  function rL‡°dONLNd%Éè≤).#eturns the descriptor type of the ra†°dONLNdHÉ≤è)îeturned data and the °dONLNd]êäú‰(ôäactual size of the dat°dONLNdsêÂúÒ)[a añ°dONLNdvêÒúˆ) ng`°dONLNdwê˜ú)d p@°dONLNdzêú2) laces the r‡°dONLNdÖê2ú©),equested data in the specifiÄ°dONLNd°ê™úΔ)xed buf‡°dONLNdßêΔú“)fero†°dONLNd™ê—ú”) .°dONLNd¨¢äÆW(´ä0For example, this code gets the data out of the Ô@°dONLNd‹¢WÆ√)ÕkeyEventSourceAttrËÄ°dONLNdÓ¢√Æ)l attribute of an °dONLNdˇØäªΩ(∏ä
  10713. Apple evenà`°dONLNd    ØΩª¬)3t.°dONLNd Δä“ú(œäVAR°dONLNd‘ú‡+theAppleEvent:°dONLNd%‘‡J)l AppleEvent;°dONLNd2‚úÓ(ÎúreturnedType: °dONLNdF‚Ó>)l    DescType;°dONLNdQú¸fi(˘ú sourceOfAE:°dONLNdb¸8)lInteger;°dONLNdl˛ú
  10714. fi(ú actualSize:°dONLNd}˛
  10715. &)lSize;°dONLNdÑ ú¿(úmyErr:°dONLNdå ¿Δ)$ °dONLNdë ,)HOSErr;°dONLNdò$ä0˛(-ä>myErr := AEGetAttributePtr(theAppleEvent, keyEventSourceAttr, °dONLNd⁄2¿>Δ+6 °dONLNd·2,>Ï)l typeShortInteger, returnedType, °dONLNd @,LÚ*!@sourceOfAE, SizeOf(sourceOfAE), °dONLNd6N,Zn* actualSize){‡°dONLNdANnZz)B; °dONLNdDfärù(oäThe ª¿°dONLNdHfùr    )keyEventSourceAttrµ°dONLNdZf    r-)l keyworÆ`°dONLNdaf-rR)$d specifi∏@°dONLNdjfRrù)%es the attribute fr/†°dONLNd}fûr)Lom which to get the data. °dONLNdósäù(|äThe ª¿°dONLNdõsù˝)typeShortIntegerµ¿°dONLNd´s˝a)` descriptor type specifi[`°dONLNd√sbŸ)ees that the data should be rô°dONLNdflsŸ)weturned as a °dONLNdÏÄäå◊(âäshort integer; the '`°dONLNdˇÄÿå )N returnedType"‡°dONLNd Ä å)H6 variable contains the actual descriptor type that is °dONLNdAçäôç(ñärE°dONLNdBçéôµ)    eturned. ”‡°dONLNdKçµôª)'Yî`°dONLNdLçªô.)ou also must specify a buf¿°dONLNdfç.ôr)sfer to hold the r5 °dONLNdwçsô)E%eturned data and specify the size of °dONLNdúö䶴(£äthis bufÓ °dONLNd§ö´¶∑)!fer@‡°dONLNdßö∑¶) . If the data is not alr
  10716. ¿°dONLNdøö¶i)[eady a short integer ‡°dONLNd”öi¶~)W, the 
  10717. ‡°dONLNdŸö~¶€)Apple Event Manage« °dONLNdÎö€¶Â)]r c™°dONLNdÓöʶÙ) oerÆ °dONLNdÒöÙ¶˝)ceË°dONLNdÛö˝¶)    s%°dONLNdÙö¶) iç`°dONLNdˆö¶ )t °dONLNd¯ßä≥»(∞äas necessary b@°dONLNdß…≥⁄)?eform@°dONLNd
  10718. ß⁄≥Â)e r{‡°dONLNdßÂ≥,) eturning it. The Ç`°dONLNdß,≥í)GAEGetAttributePtr|°dONLNd/ßí≥¿)f  function rO@°dONLNd:ß¿≥‹).eturnsc`°dONLNd@ß‹≥¸)    , in the °dONLNdI¥ä¿Δ(Ωä
  10719. actualSize|@°dONLNdS¥Δ¿Ò)<  variable, ∑ °dONLNd^¥Ò¿M)+the actual size of the L`°dONLNdu¥N¿Q)]r`°dONLNdv¥R¿w)eturned M‡°dONLNd~¥w¿Ö)%dat¨°dONLNdÅ¥Ö¿ë)a a,°dONLNdÑ¥í¿∂)    fter coerr‡°dONLNdç¥∂¿)$cion has taken place. °dONLNd£¡äÕê( äY@Ä°dONLNd§¡êÕ,)#ou can check this value to make sur†°dONLNd«¡-Õå)ùe you got all the data.°dONLNdfl”äflø(‹ä As with the 4¿°dONLNdΔ¿fl)6AEGetParamPtr/‡°dONLNd¯”flc)N function, you can r–Ä°dONLNd ”cflñ)U equest that ŸÄ°dONLNd”ñfl¸)3AEGetAttributePtr” °dONLNd)”¸fl˛)f °dONLNd*‡äÏç(ÈärE°dONLNd+‡éÏÕ)Keturn the data using the descriptor type of the original data, or you can r˙†°dONLNdv‡ÕÏ(ÈÕequest that the °dONLNdÜÌä˘(ˆäApple Event Manager coer#@°dONLNdûÌ˘Ω)w.ce the data into a descriptor type that is difÁ†°dONLNdÃÌΩ˘…)ºfer  °dONLNdœÌ…˘‡) ent fr@`°dONLNd’Ì·˘)om the °dONLNd‹˙ä±(ä
  10720. original. °dONLNdÁ ä„*In this example, the ¿¿°dONLNd¸ „I)YAEGetAttributePtr∫`°dONLNd Iw)f  function r熰dONLNd w©). eturns the rD °dONLNd$ ™˝)3equested data as a °dONLNd7ä%‡("äshort integer in the · °dONLNdL‡%)V
  10721. sourceOfAE›`°dONLNdV%)<5 variable, and you can get information about the sourÀ‡°dONLNdã%)Îce °dONLNdé&ä2•(/äof the »`°dONLNdï&•2L)%Apple event by examining this value. ]†°dONLNd∫&M2S)®Y °dONLNdª&S2ô)ou can test the r
  10722.  °dONLNdÃ&ô2 )Feturned value against the °dONLNdÊ3ä?∫(<ä
  10723. values defiéÄ°dONLNdÒ3∫?)0ned by the data type ¥¿°dONLNd3?_)] AEEventSourc∞@°dONLNd3_?e)He؇°dONLNd3e?g).°dONLNdJäV‘(Sä7TYPE AEEventSource = (kAEUnknownSource, kAEDirectCall, °dONLNdTXd+~ †°dONLNdUXd‘)!kAESameProcess, kAELocalProcess, °dONLNd~fr(o †°dONLNdfrz)kAERemoteProcess);ˇ‹@ˇ ˇˇˇˇ@
  10724. ˇ·ˇ‚7^
  10725. 4*\¯, Palatino&e.3+l"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@lResponding to ,): Apple Events4⁄*˙¯
  10726. (‡*4-30    )B    Handling ê)& Apple Events4^*¿¯
  10727. °dONLNd\lhº(elThe constants defiµ °dONLNd\ºh)Pned by the data type ,
  10728. Courier€`°dONLNd'\hg)]AEEventSource÷Ä°dONLNd4\ghÏ)N have the following meanings:°dONLNdœÒl˝(˙l&The next example shows how to use the ‡°dONLNdıÒ˝Ö)≥AEGetAttributePtrÄ°dONLNdÒÖ˝Ò)f function to get data out °dONLNd ˛l
  10729. á(lof the &¿°dONLNd'˛à
  10730. )keyMissedKeywordAttr@°dONLNd;˛
  10731. -)x  attribute. ;`°dONLNdG˛-
  10732. ÷)-&After your handler extracts all known °dONLNdm lß(lparameters frʇ°dONLNdz ß≈);om an £`°dONLNdÄ ≈}))Apple event, it should check whether the “°dONLNd© }ı)∏keyMissedKeywordAttr Ä°dONLNdΩ ı˜)x °dONLNdæl$è(!lHattribute exists. If it does, then your handler did not get all of the rÄ°dONLNdê$ß(!êequir.¿°dONLNd ß$Ë)ed parameters.°dONLNd*l6†(3lNote that if b¿°dONLNd'*°6)5AEGetAttributePtr\`°dONLNd8*6)f r°`°dONLNd:*6;) eturns the 퇰dONLNdE*<6¢)/errAEDescNotFoundåÄ°dONLNdV*¢6®)f r—Ä°dONLNdX*®6Ô)esult code, then °dONLNdi7lC|(@lthe ›`°dONLNdm7|CÙ)keyMissedKeywordAttr’‡°dONLNdÅ7ÙC‚)x8 attribute does not exist—that is, your application has °dONLNdπDlPƒ(Mlextracted all of the r{¿°dONLNdœDƒP€)Xequirì°dONLNd‘D€P()ed parameters. If ¯¿°dONLNdÊD(Pé)MAEGetAttributePtrÚ`°dONLNd˜DéPî)f r7`°dONLNd˘DïP≥)eturns ÀÄ°dONLNdD≥P—)noErr @°dONLNdD—PÏ), then °dONLNd Ql]|(Zlthe ›`°dONLNdQ|]Ù)keyMissedKeywordAttr’‡°dONLNd$QÙ])x< attribute does exist—that is, your handler did not get all °dONLNd`^ljw(glof …`°dONLNdc^wjã) the rο°dONLNdh^ãj¢)equir°dONLNdm^£j‰)ed parameters.°dONLNd|ulÅÏ(~l@myErr := AEGetAttributePtr(theAppleEvent, keyMissedKeywordAttr, °dONLNdΔÉèÊ+¢$typeWildCard, returnedType, NIL, 0, °dONLNdÙëùV* actualSize);°dONLNd©lµ∞(≤lThe data in the 1°dONLNd©±µ))EkeyMissedKeywordAttr)Ä°dONLNd%©)µ≠)x attribute contains the keywork°dONLNdC©≠µ—)Ñ    d of the °dONLNdL∂l¬r(ølfiå¿°dONLNdN∂r¬})rst˛¿°dONLNdQ∂}¬)  ~¿°dONLNdR∂ĬÉ)rC¿°dONLNdS∂Ѭõ)equir[°dONLNdX∂õ¬’) ed parameterî°dONLNdd∂’¬Û):, if anyï°dONLNdl∂Ú¬h), that your handler didn’t r Ä°dONLNdà∂i¬Í)wetrieve. If you want this data °dONLNdß√lœo(ÃlrE°dONLNd®√pœœ)eturned, specify a buf˙‡°dONLNdæ√œœˆ)_
  10733. fer to holÚ °dONLNd»√˜œ)(d it a8†°dONLNdŒ√œN)nd specify the «Ä°dONLNd›√Nœ\)@buf|Ä°dONLNd‡√]œk)fer  †°dONLNd‰√lœx)siz2°dONLNdÁ√xœ) e.{†°dONLNdÈ√œfi) Otherwise, as in this °dONLNd–l‹∏(Ÿlexample, specify æ¿°dONLNd–∏‹ )LNIL_@°dONLNd– ‹˜)  as the bufƆ°dONLNd–˜‹z)- fer and 0 as the size of the buf°dONLNd?–{‹á)Ñferc¿°dONLNdB–Ü‹à) .°dONLNdD‚lÓ (Îl"This example shows how to use the ͆°dONLNdf‚ Óq)üAEGetAttributePtr‰@°dONLNdw‚qÓ€)f function to get the addrü`°dONLNdê‚‹Ó˜)kess of °dONLNdóÔl˚µ(¯lthe sender of an I¿°dONLNd®Ôµ˚ı)IApple event fr-`°dONLNd∂Ôı˚)@om the T@°dONLNdΩÔ˚j)!keyAddressAttrO°dONLNdÀÔj˚∞)T attribute of the 뇰dONLNd›Ô∞˚Ë)F Apple event:°dONLNdÍl~(lVAR°dONLNdÔ~ ÿ+theAppleEvent: z`°dONLNdˇÿ )Z AppleEvent;°dONLNd "~.“(+~returnedType: °dONLNd"ÿ.)Z    DescType;°dONLNd*0~<Ã(9~addressOfAE: °dONLNd<0ÿ<)Z    TargetID;°dONLNdG>~JΔ(G~ actualSize: °dONLNdX>ÿJˆ)ZSize;°dONLNd_L~X®(U~myErr: °dONLNdkLÿXˆ)ZOSErr~ °dONLNdpLˆX¸);°dONLNdshlt»(ql:myErr := AEGetAttributePtr(theAppleEvent, keyAddressAttr, °dONLNd∑vÇ∂+¢typeTargetID, returnedType, °dONLNd›Ñê‡*#@addressOfAE, SizeOf(addressOfAE), °dONLNd
  10734. íûV* actualSize);    °dONLNdRulÄï(}l    Constant °dONLNd\u‡Ä)tMeaning
  10735. °dONLNdeÉlèÃ(ålkAEUnknownSource°dONLNdvɇèÙ)tSour`°dONLNdzÉıè )ce of ¶@°dONLNdÄÉ èn)Apple event unknown°dONLNdïìlü∫(úlkAEDirectCall°dONLNd£ì‡üÁ)tA∫†°dONLNd§ìÁüˆ) dir¿°dONLNd®ì˜üÉ) ect call that bypassed the PPC Tÿ°dONLNd»ìÇüü)ãoolbox°dONLNd–£lØ¿(¨lkAESameProcess°dONLNdfl£‡ØÊ)tTµ¿°dONLNd‡£ÂØÌ)arz¿°dONLNd‚£ÓØt)     get application is also the souri°dONLNd£tر)Üce application°dONLNd≥løΔ(ºlkAELocalProcess°dONLNd"≥‡øÙ)tSour`°dONLNd&≥ıøm)ce application is another prıÄ°dONLNdB≥løˆ)wocess on the same computer as °dONLNd`懠¸(«‡the tar‰¿°dONLNdg渠=)get application°dONLNdxŒl⁄Ã(◊lkAERemoteProcess°dONLNd⌇⁄Ù)tSour`°dONLNdçŒı⁄P)ce application is a prfi†°dONLNd£ŒO⁄Å)Z ocess on a r쇰dONLNdØŒÇ⁄Î)3emote computer on the °dONLNd≈Ÿ‡Â(‚‡networkˇ<|@ˇ ˇˇˇˇ@
  10736. ˇ·ˇ‚7^
  10737. 4H\, Palatino&e.3+ä"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@äResponding to ,): Apple Events4⁄ä˙(‡ä    Handling ê)& Apple Events
  10738. , (‡4-31
  10739. ˇˇˇˇˇˇˇˇ4l4älòÄ.lBäoMM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""lBäolBäo$””””””””””””””””””””””””””””””òÄ
  10740. l6ä@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""l6ä@l6ä@˜˜˜˜˜˜˜˜˜˜˜˜˜¸ˇˇ˛¸˛ˇˇ¸ˇˇˇ˛˙ˇ˛˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜
  10741. 4è4Ö?òÄ
  10742. è6Ö@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""è6Ö@è6Ö@$˛˙ˇ˚ˇˇ˚ˇˇ˚ˇˇ    ˛˛ˇˇˇ˜˝˛ˇ˛
  10743. ˛ˇˇˇˇ
  10744. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜    ˛ˇˇ˛
  10745. ˛ˇˇˇˇ
  10746. ˛ˇˇˇˇ    ˝ˇˇˇ˙ˇˇ
  10747. ˛ˇ˛ˇˇ
  10748. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  10749. ˛ˇ˛ˇˇ
  10750. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝˛ˇ˛
  10751. ˛ˇ˛ˇˇ
  10752. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˜˜˜˝¸ˇ
  10753. ˛ˇ˛ˇˇ˝˛ˇ˛
  10754. ˛ˇ˛ˇˇ
  10755. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  10756. ˛ˇ˛ˇˇ
  10757. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  10758. ˛ˇ˛ˇˇ
  10759. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  10760. ˛ˇˇˇˇ
  10761. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  10762. ˛ˇˇˇ
  10763. ˛ˇˇˇ
  10764. ˛ˇˇˇ
  10765. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  10766. ˛ˇˇˇˇ
  10767. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  10768. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  10769. ˛ˇˇˇˇ
  10770. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähù(eäThe ,
  10771. Courierª¿°dONLNd\ùhÒ)keyAddressAttr∂Ä°dONLNd\Òh)T keywor؇°dONLNd\h:)$d specifiπ¿°dONLNd"\:h«)%#es the attribute to get the data frø†°dONLNdE\«hÌ)çom. The °dONLNdMiäu“(rä typeTargetID{Ä°dONLNdYi“u3)H descriptor type specif8¿°dONLNdpi4uÆ)bies that the data should be r^¿°dONLNdçiÆuÚ)zeturned as a tarfl†°dONLNdùiÚu)Dget ID °dONLNd§väÇç(ärE°dONLNd•védž)ecorπ`°dONLNd©v†Çª)d; the 2Ä°dONLNd∞vºÇ) returnedType.°dONLNdºvÇË)H7 variable contains the actual descriptor type that is r–†°dONLNdÛvËÇ)‰    eturned. °dONLNd¸Éäèê(åäY@Ä°dONLNd˝Éêè˝)ou can examine the addr"@°dONLNdÉ˝è)mess r™‡°dONLNdÉèP)eturned in the ~Ä°dONLNd(ÉQèì)A addressOfAEz`°dONLNd3Éìè)B variable to determine the °dONLNdNêäú≈(ôäsender of the ¯`°dONLNd\ê≈ú˝); Apple event.°dONLNdi¢äÆ©(´äThe tar√ °dONLNdp¢©Æ )get ID r?°dONLNdx¢ÀÆ›)"ecor≥`°dONLNd|¢›ÆÈ)d r °dONLNd¢ÍÆ*)eturned in the Á¿°dONLNdé¢*Æl)@ addressOfAE„†°dONLNdô¢lÆÍ)B variable contains the senderŸÄ°dONLNd∂¢ÎÆ    )’s port °dONLNdæØäª(∏ä"name, port location, and session rΩ`°dONLNd‡Øª.)îeferiÄ°dONLNd‰Ø/ªh) ence numberÒ`°dONLNdÔØgªr)8. T' °dONLNdÚØrª§) o get the pr\@°dONLNd˛Ø§ª)2ocess serial number for a °dONLNdºä»ì(≈äprG °dONLNdºî»h)
  10772. 0ocess on the local machine, pass the port name r`°dONLNdJºh»µ)‘eturned in the tar˘`°dONLNd\º¥»’)Lget ID ru@°dONLNddº÷»Ë)"ecorȆ°dONLNdhºË» )    d to the °dONLNdq…ä’V(“ä"GetProcessSerialNumberFromPortNames@°dONLNdì…V’Ç)à  function. ”‡°dONLNdû…Ç’à),Yî`°dONLNdü…à’Ó)ou can then pass the pr¢°dONLNd∂…Ó’)focess °dONLNdº÷ä‚Â(fläserial number to the œ†°dONLNd—÷‚c)[GetProcessInformation«¿°dONLNdÊ÷c‚û)~ function to fi†°dONLNdı÷ü‚Δ)<    nd the cr`°dONLNd˛÷Δ‚)'eator signatur¢‡°dONLNd ÷‚
  10773. )=e °dONLNd„äÔ≈(Ïäfor a given pr;‡°dONLNd„ΔÔfl)<ocess.Â@°dONLNd"„flÔ)     (For mor>‡°dONLNd+„    Ô)*<e information about these functions, see the chapter “Event °dONLNdg七(˘ä Manager” in À¿°dONLNdsƒ¸    ):Inside Macintosh≠¿°dONLNdÉ
  10774. ¸)F: M°dONLNdÜ¸C)
  10775. acintosh T@°dONLNdêB¸[))oolbox◊@°dONLNdñ[¸Ü)  Essentials„@°dONLNd°ܸà)+.c@°dONLNd¢â¸å))°dONLNd§ä≠( äFor mor¿°dONLNd´Æ)$e information about tarX¿°dONLNd¬9)fget addrp`°dONLNd 9d)% esses, see 
  10776. ‡°dONLNd’e®),“Specifying a T–†°dONLNd‰ßØ)BardONLNdÊ∞¿)    get R`°dONLNdÍ¿◊)Addr °dONLNdÓÿ˙)ess” on °dONLNdˆä°(äpage Z‡°dONLNd˚¢¥)5-10Æ¿°dONLNdˇ¥∂).
  10777. 9H@4:H@ ;ä;
  10778. ˇ·ˇ‚7^ °dONLNd,ä:K(6ä%Getting Data Out of a Descriptor Listˇˇˇˇˇˇ‘@(64
  10779. °dONLNd(@äLê(IäY@Ä°dONLNd)@êL—)ou can use the ȇ°dONLNd8@—L)A AECountItemsÂ`°dONLNdD@L)H7 function to count the number of items in a descriptor °dONLNd{MäYÊ(Välist, and you can use `°dONLNdëMÁY/)] AEGetNthDesc‡°dONLNdùM/Y=)H or |°dONLNd°M=Y) AEGetNthPtrw‡°dONLNd¨MY◊)B to get a descriptor r* °dONLNd¬MÿYÍ)YecorûÄ°dONLNdΔMÍY )    d or its °dONLNdœZäf(cädata out of a descriptor list.°dONLNdÓläxD*'The Open Documents event contains a dirS‡°dONLNdlDx≥)∫ect parameter that specifi•`°dONLNd/l≥xÈ)oes the list of °dONLNd>yäÖ—(ÇäLdocuments to open. The list of documents is contained in a descriptor list. Ä°dONLNdäy“ÖÎ(Ç“After °dONLNdêÜäí(èä!extracting the descriptor list fr`°dONLNd±Üí^)Üom the parameter˝‡°dONLNd¡Ü]í)M(, you can determine the number of items °dONLNdÈìäüI(úä.in the list and then extract each descriptor r«Ä°dONLNdìIü[)øecor;‡°dONLNdì\ük)d frÄ°dONLNdìküÿ)om the descriptor list. Se  °dONLNd9ìŸü‡)ne T¿°dONLNd;ì‡ü¯)Figur'Ä°dONLNd@ì¯ü)e 3-9 °dONLNdF†ä¨Ø(©äon page !¿°dONLNdN†∞¨∏)&3-u†°dONLNdP†∏¨¬)19u†°dONLNdR†¬¨«)
  10780.  fIÄ°dONLNdT†»¨é)+or a depiction of the Open Documents event.°dONLNdÄ≤äæ!(ªä For example, when your handler r€Ä°dONLNd†≤!æ)ó1eceives an Open Documents event, you can use the °dONLNd—øäÀfi(»äAEGetParamDescz¿°dONLNdfløfiÀ)T function to rÖ‡°dONLNdÌøÀN)9eturn the dirÄ°dONLNd˙øOÀ„)8$ect parameter as a descriptor list. 
  10781. Ä°dONLNdø„ÀÈ)îYÀ°dONLNdøËÀ)ou can °dONLNd&Ãäÿ±(’ä    then use <Ä°dONLNd/Ã≤ÿ˙)( AECountItems8°dONLNd;Ã˙ÿ )H to r¥‡°dONLNd@à ÿô) eturn the number of descriptor rÇ`°dONLNd`Ãöÿ¨)èecorˆ¿°dONLNddèÿ‰)ds in the list.°dONLNdt„äÔú(ÏäVAR°dONLNdyÒú˝+theAppleEvent:°dONLNdçÒ˝J)l AppleEvent;°dONLNdöˇú Ã(údocList:°dONLNd®ˇ J)l AEDescList;°dONLNdµú‰(ú itemsInList:°dONLNd«8)lLongInt;°dONLNd—ú'¿($úmyErr:°dONLNd›',)lOSErr;°dONLNd‰3ä?‘(<ä7myErr := AEGetParamDesc(theAppleEvent, keyDirectObject,°dONLNd$AMò+êtypeAEList, docList);°dONLNd:Oä[í(Xä,myErr := AECountItems(docList, itemsInList);°dONLNdggäsù*The ª¿°dONLNdkgùsÒ)AEGetParamDesc∂Ä°dONLNdygÒs)T  function râ¿°dONLNdÑgs1).eturèÄ°dONLNdàg1s=)ns,‡°dONLNdãg>s\) in the 5°dONLNdìg\sÜ)docList2`°dONLNdögÜs¨)*     variablem@°dONLNd£g¨sÆ)&,Ì@°dONLNd§gÆs∞) m@°dONLNd•g±s€)
  10782. a copy of -†°dONLNdØg‹sÏ)+the °dONLNd≥täÄ–(}ädescriptor list fr@°dONLNd≈t—ġ)G
  10783. om the dirÛ@°dONLNdœt˛ÄΔ)-+ect parameter of the Open Documents event. ÿ`°dONLNd˙tΔÄÃ)»Yò‡°dONLNd˚tÃÄ)ou specify this °dONLNd     Åäçµ(ää list to the Â`°dONLNd    ŵç˝)+ AECountItems‡‡°dONLNd    #Å˝ç')H
  10784.  function.ˇ#í@ˇ ˇˇˇˇ@
  10785. ˇ·ˇ‚7^
  10786. 4*\¯, Palatino&e.3+l"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@lResponding to ,): Apple Events4⁄*˙¯
  10787. (‡*4-32    )B    Handling ê)& Apple Events4^*¿¯
  10788. °dONLNd\lhr(elY@Ä°dONLNd\rh†)Eou specify the descriptor list whose items you want to count in the fiF°dONLNdG\†hÈ(e†rst parameter to ,
  10789. Courier°dONLNdXilu¥(rl AECountItems{Ä°dONLNddi¥uÃ)H. The X‡°dONLNdjiÃu4)Apple Event Manager rL¿°dONLNdi4uP)heturns`‡°dONLNdÖiPuR),‡‡°dONLNdÜiRuT) `‡°dONLNdáiUuø)in the second parameter% °dONLNdûiøuƒ)j, % °dONLNd†iƒu‘)the °dONLNd§vlÇÿ(lnumber of items in the li'°dONLNdΩvŸÇ‚)mst.&`°dONLNd¿v„Çt)
  10790. ! When extracting the descriptor rÚ °dONLNd·vtÇÜ)ëecorfÄ°dONLNdÂváÇõ)ds frX °dONLNdÍvõÇÚ)om a list, you often °dONLNdˇÉlè1(ål,use the number of items as a loop index. Her‰Ä°dONLNd+É1èt)≈e’s an example:°dONLNd;öl¶,(£l FOR index := 1 TO itemsInList DO°dONLNd]®~¥ú+BEGIN°dONLNdd∂~¬¬*6{for each descriptor record in the list, get its data}°dONLNdúƒ~–ñ*END;°dONLNd°‹lËÓ(ÂlThe format of the descriptor r °dONLNdø‹ÔË)ÉecoràÄ°dONLNd√‹Ëß)*ds in a descriptor list is private to the q°dONLNdÌ‹ßË·)¶ Apple Event °dONLNd˘Èlıì(ÚlManagerT†°dONLNdÈìıò)'. '°dONLNdÈòıû)YÁÄ°dONLNdÈùıÂ)ou must use the ©¿°dONLNdÈÊı()I AEGetNthPtr•†°dONLNdÈ(ı6)B or ¿°dONLNd"È7ı) AEGetNthDesc    @°dONLNd.Èı‘)H function to extract °dONLNdCˆlü(ˇl descriptor rfl@°dONLNdOˆü±)3ecorS†°dONLNdSˆ≤Δ)ds frE@°dONLNdXˆΔ)om a descriptor list.˘ °dONLNdmˆ)W y °dONLNdnˆ ") °dONLNdplr(lY@Ä°dONLNdqrS)6ou specify the descriptor list that contains the desir<¿°dONLNdßSì)·ed descriptor r`°dONLNd∂î¶)Aecoru¿°dONLNd∫¶Ó)ds and an index °dONLNd l!«(las parameters to the  @°dONLNdfl»!
  10791. )\ AEGetNthPtr °dONLNdÍ
  10792. !i)B function. The index rÚ‡°dONLNdh!v)^eprɆ°dONLNdw!∏)esents a specifi¿°dONLNdπ!Ô)Bc descriptor °dONLNd "l.o(+lrE°dONLNd!"p.Ç)ecorπ`°dONLNd%"Ç.Ë)d in the descriptor list. ÷†°dONLNd?"Ë.˚)fThe `°dONLNdC"¸.>) AEGetNthPtr@°dONLNdN">.@)B é@°dONLNdO"@.g)    function Ä°dONLNdX"h.k)(r·Ä°dONLNdY"k.®)eturns the dat1 °dONLNdg"©.¬)>a for t/Ä°dONLNdn"√.–)he °dONLNdq/l;ü(8l descriptor rfl@°dONLNd}/ü;±)3ecorS†°dONLNdÅ/≤;æ)d r¥`°dONLNdÑ/æ;Ã) eprE °dONLNdá/Õ;+)esented by the specifi¿°dONLNdù/+;V)^
  10793. ed index. °dONLNd®AlMr(JlY@Ä°dONLNd©ArMÖ)@ou also specify the descriptor type the function should use to r∂†°dONLNdÈAÖMfi(JÖeturn the data, a buf˛@°dONLNd˛AfiMÏ)Yfer °dONLNdNlZà(Wlto storq¿°dONLNd    NàZ)$e the data, and the size of this bufg‡°dONLNd-NZ()îfer∫†°dONLNd0N'Za) . If the specifi∏Ä°dONLNd@NbZ¢);ed descriptor r} °dONLNdON£Zµ)AecorÒÄ°dONLNdSNµZÎ)d exists, the °dONLNda[lgÆ(dl AEGetNthPtr{‡°dONLNdl[Æg‹)B  function rO °dONLNdw[‹g,).eturns the keywor∫°dONLNdà[,g})Pd of the parameter– °dONLNdö[}gÛ)Q, the descriptor type of the °dONLNd∑hlto(qlrE°dONLNd∏hptÑ)Beturned data, and the actual size of the data, and it places the r[¿°dONLNd˙hÑtfl(qÑequested data in the °dONLNdulÅà(~lspecifiÓ °dONLNduàŧ)ed bufÄ°dONLNdu•ű)fer[@°dONLNdu∞Å≤) .°dONLNd!álì}(êlHer`°dONLNd$á}ì˙)e’s an example that uses the ˜‡°dONLNdAá˙ì<)} AEGetNthPtrÛ¿°dONLNdLá<ìº)B function to extract an item frF`°dONLNdkáΩìfi)Åom the °dONLNdrîl†”(ùldescriptor list in the dirJ†°dONLNdåì)h(ect parameter of the Open Documents even°dONLNd¥îî†ô)¿t:°dONLNd∑´l∑™(¥l5myErr := AEGetNthPtr(docList, index, typeFSS, keywd, °dONLNdÙπÍ≈»+~%returnedType, @myFSS, Sizeof(myFSS), °dONLNd!«Í”2* actualSize);°dONLNd.fllÎ(ËlThe ª¿°dONLNd2flΩ)docListπ °dONLNd9fl©ÎÓ)* variable specifi‚ °dONLNdJflÓÎP)Ees the descriptor list frI`°dONLNdcflQÎ)c
  10794. om the dir9`°dONLNdmflΟ).ect parameter of the °dONLNdÇÏl¯Ñ(ılOpen˘°dONLNdÜÏѯÜ) y°dONLNdáÏá¯Ï)Documents event. The Ä°dONLNdúÏ̯ )findex†°dONLNd°Ï ¯P) variable specifiA†°dONLNd≤ÏP¯÷)E es the index of the descriptor rs`°dONLNd“Ï÷¯Ë)ÜecorÁ¿°dONLNd÷Ï˯)d °dONLNdÿ˘lö(l to extract. d °dONLNd‰˘ö†).Y$†°dONLNd¢†·)ou can use the Œ°dONLNdÙ˘· )AtypeFSSÀ`°dONLNd˚˘ Í)*6 descriptor type, as in this example, to specify that °dONLNd1l¢(lthe data be rQ¿°dONLNd>£·)7eturned as a fiÿ°dONLNdM·))>le system specifi·@°dONLNd^)J)Hcation r °dONLNdfK])"ecor|Ä°dONLNdj]{)d. The u†°dONLNdq{fl)Apple Event Manager °dONLNdÖlΩ(lautomatically coer@°dONLNdóæ~)R.ces the original data type of the descriptor rY†°dONLNd≈~ê)¿ecorŒ°dONLNd…êü)d frdž°dONLNdÕ†‘) om an alias °dONLNdŸ l,o()lrE°dONLNd⁄ p,Ç)ecorπ`°dONLNdfi Ç,à)d’ °dONLNdfl à,ä) U °dONLNd‡ ã,£)to a fi¿°dONLNdÁ §,Ï)le system specifi#°dONLNd¯ Ï,)Hcation rI‡°dONLNd ,)!ecoræ@°dONLNd ,=)d. The ¿°dONLNd  >,Ä) AEGetNthPtr†°dONLNd Ä,Æ)B  function r‰‡°dONLNd! ≠,ƒ)-eturnº°dONLNd& ≈,Œ)s tª`°dONLNd) œ,‹)
  10795. he °dONLNd,-l9ç(6lkeywor˘`°dONLNd2-ç9û)!d of^Ä°dONLNd6-ü9°) fiÄ°dONLNd7-°9⁄) the paramete⁄@°dONLNdC-€9j):"r and the descriptor type of the r:†°dONLNde-k9©)êesulting data iÄ°dONLNdt-™9¬)?n the ±@°dONLNdz-¬9‡)keywdØ`°dONLNd-‡9‚) °dONLNdÄ:lF(Cland Ì °dONLNdÑ:F«) returnedTypeˆ°dONLNdê:«Fœ)H v‡°dONLNdí:–FÈ)    ariablY‡°dONLNdò:ÈF˙)es, r%Ä°dONLNdù:˚F,) espectively^Ä°dONLNd®:+F-)0.fiÄ°dONLNd©:-F/) °dONLNd´LlXr(UlY@Ä°dONLNd¨LrX)ou = °dONLNdØLÄXî)also X°dONLNd¥LîXÃ)specify a bufQ`°dONLNd¡LÃX")8fer to hold the desirÄ°dONLNd÷L#X”)W*ed data and the size (in bytes) of the buf´Ä°dONLNd    L”X€)∞fe…°dONLNd    L€Xfi)r˛@°dONLNd    LfiX‡).~@°dONLNd    L·XÔ) In °dONLNd    Yleπ(blthis example, the ‡°dONLNd    Y∫eÿ)NmyFSS°dONLNd    Yÿe) variable specifi8°dONLNd    0YeG)E
  10796. es the buf—°dONLNd    :YGeS)*fer#¿°dONLNd    =YSeñ) . The function r≤¿°dONLNd    MYñeı)Ceturns the actual size °dONLNd    dflrπ(olof the data in the ú°dONLNd    wfπrı)M
  10797. actualSizeò@°dONLNd    Åfıre)< variable. If this size is larÄ`°dONLNd    üfer⁄)pger than the size of the bufŸ°dONLNd    ªf⁄rË)ufer °dONLNd    øslâ(|lyou pr“‡°dONLNd    ≈sâ√)Iovided, you know that you didn’t get all of the data for the descriptor r◊°dONLNd
  10798. s√’(|√ecorK`°dONLNd
  10799. s÷fi)d.°dONLNd
  10800. Ölëü(él Listing 4-10 @°dONLNd
  10801. !Ö†ë⁄)4  shows a morΔ†°dONLNd
  10802. -Ö⁄ë†):-e complete example of extracting the items frÏ@°dONLNd
  10803. ZÖ†ëÁ)Δom a descriptor °dONLNd
  10804. jílû(õl!list in the Open Documents event.ˇ4Æ@ˇ ˇˇˇˇ@
  10805. ˇ·ˇ‚7^
  10806. 4H\, Palatino&e.3+ä"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@äResponding to ,): Apple Events4⁄ä˙(‡ä    Handling ê)& Apple Events
  10807. , (‡4-33
  10808. ˇˇˇˇˇˇˇˇ4l4älòÄ.lBäoMM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""lBäolBäo$””””””””””””””””””””””””””””””òÄ
  10809. l6ä@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""l6ä@l6ä@˜˜˜˜˜˜˜˜˜˜˜˜˜¸ˇˇ˛¸˛ˇˇ¸ˇˇˇ˛˙ˇ˛˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜
  10810. 4è4Ö?òÄ
  10811. è6Ö@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""è6Ö@è6Ö@$˛˙ˇ˚ˇˇ˚ˇˇ˚ˇˇ    ˛˛ˇˇˇ˜˝˛ˇ˛
  10812. ˛ˇˇˇˇ
  10813. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜    ˛ˇˇ˛
  10814. ˛ˇˇˇˇ
  10815. ˛ˇˇˇˇ    ˝ˇˇˇ˙ˇˇ
  10816. ˛ˇ˛ˇˇ
  10817. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  10818. ˛ˇ˛ˇˇ
  10819. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝˛ˇ˛
  10820. ˛ˇ˛ˇˇ
  10821. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˜˜˜˝¸ˇ
  10822. ˛ˇ˛ˇˇ˝˛ˇ˛
  10823. ˛ˇ˛ˇˇ
  10824. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  10825. ˛ˇ˛ˇˇ
  10826. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  10827. ˛ˇ˛ˇˇ
  10828. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  10829. ˛ˇˇˇˇ
  10830. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  10831. ˛ˇˇˇ
  10832. ˛ˇˇˇ
  10833. ˛ˇˇˇ
  10834. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  10835. ˛ˇˇˇˇ
  10836. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  10837. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  10838. ˛ˇˇˇˇ
  10839. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  10840. gHn4gHn"hH_
  10841. ˇ·ˇ‚7^    °dONLNd\ägª(dä Listing 4-10°dONLNd\Œga)D'Extracting items from a descriptor list,
  10842. Courier
  10843. °dONLNd6väÇú(äVAR°dONLNd;Ñúê¿+index:°dONLNdGÑê8)lLongInt;°dONLNdQíúûÍ(õúitemsInList: °dONLNddíû8)lLongInt;°dONLNdn†ú¨Ã(©údocList:°dONLNd|†¨J)l AEDescList;°dONLNdâÆú∫Δ(∑úkeywd: °dONLNdñÆ∫D)l
  10844. AEKeyword;°dONLNd¢ºú»(≈úreturnedType: °dONLNd∂º»>)l    DescType;°dONLNd¡ ú÷¿(”úmyFSS:°dONLNdÕ ÷2)lFSSpec;°dONLNd÷ÿú‰‰(·ú actualSize: °dONLNdËÿ‰&)lSize;°dONLNdÔÊúÚ¿(ÔúmyErr:°dONLNd˜Ê¿ÚΔ)$ °dONLNd¸ÊÚ,)HOSErr;°dONLNdäJ( ä FOR index := 1 TO itemsInList DO°dONLNd&ú∫+BEGIN°dONLNd.Æ*Ï+5myErr := AEGetNthPtr(docList, index, typeFSS, keywd, °dONLNdm,,8
  10845. +~%returnedType, @myFSS, Sizeof(myFSS), °dONLNdú:,Ft* actualSize);°dONLNd´HÆTí(QÆ&IF myErr <> noErr THEN DoError(myErr);°dONLNd‘VÆbV*myErr := MyOpenFile(@myFSS);°dONLNdÛdÆpí*&IF myErr <> noErr THEN DoError(myErr);°dONLNdrú~¥({úEND;°dONLNd ÄäåP(âä!myErr := AEDisposeDesc(docList); s†°dONLNdAÄPåV)Δ 
  10846. ≤Hπ4≥Hπ ¥ä¥
  10847. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNdC£ä≤ó(ÆäWS°dONLNdD£ó≤∏)riting À°dONLNdK£∑≤;) Apple Event Handlersˇˇˇˇˇˇ€r(Æ4
  10848. °dONLNdaπä≈≤(¬ä    For each $ °dONLNdjπ≤≈ô)(2Apple event your application supports, you must pr`°dONLNdúπô≈)Áovide a function called °dONLNd¥Δä“î(œäanQ`°dONLNd∂Δï“ó)  s°dONLNd∑Δó“Ú)Apple event handler„Ä°dONLNd ΔÒ“    )Z. The @°dONLNd–Δ
  10849. “|)AEProcessAppleEvent °dONLNd„Δ|“Ò)r function calls one of your @°dONLNdˇΔÒ“)uApple °dONLNd”äfl˚(‹äevent handlers when it pr"†°dONLNd”¸fl,)r ocesses an ≈†°dONLNd)”+flf)/Apple event. ‚¿°dONLNd6”ffll);Y£@°dONLNd7”lfl})our 4 °dONLNd;”~fl)Apple event handlers should °dONLNdW‡äÏÂ(Èäperform any action rU¿°dONLNdk‡ÂÏ-)[equested by the ¿°dONLNd{‡-Ïœ)H$Apple event, add parameters to the rÆ@°dONLNdü‡œÏ‰)¢eply  °dONLNd§‡ÂÏ)Apple °dONLNd™Ì䢬(ˆäevent if appr“¿°dONLNd∑̬˘˝)8opriate, and rcÄ°dONLNd≈Ì˛˘#)<    eturn a rˇ†°dONLNdŒÌ#˘R)% esult code.°dONLNd⁄ˇä ù(äThe ]`°dONLNdfiˇù j)-Apple Event Manager uses dispatch tables to r‘ °dONLNd ˇj Ä)Õoute ~`°dONLNdˇÄ Ì)Apple events to the appr‰†°dONLNd(ˇÌ )mopriate °dONLNd0 äÂ(äApple event handlerÄ°dONLNdC ‰È)Z. ¬‡°dONLNdE ÈÔ)YÉ`°dONLNdF ÔD)ou must supply an ç`°dONLNdX D)U+Apple event handler for each entry in your °dONLNdÉä%≈("äapplication’s \¿°dONLNdë≈%˚);FApple event dispatch table. Each handler must be a function that uses °dONLNd◊&ä2ö(/äthisπ °dONLNd€&ö2ú) 9 °dONLNd‹&ù2º)syntax:°dONLNd‰=äIΔ(Fä
  10850. FUNCTION M|@°dONLNdÓ=ΔI“)<yE{Ä°dONLNd=“Iº) 'ventHandler (theAppleEvent: AppleEvent;l‡°dONLNd=ºI¬)Í °dONLNd!KW (T †°dONLNd"K W&)r@°dONLNd#K&Wå)eply: AppleEvent;x‡°dONLNd4KåWí)f °dONLNd>Ye (b †°dONLNd?Y e&)h@°dONLNd@Y&e‡)andlerRefcon: LongInt): OSErr; °dONLNd`qä}ï(zäThr °dONLNdbqñ}Õ) e parameter ÿ°dONLNdnqÕ})7theAppleEvent«‡°dONLNd{q})N G‡°dONLNd|q}8)is the Ï@°dONLNdÉq7}û)Apple event to handle. 1¿°dONLNdöqü}•)hYÚ@°dONLNdõq§})our handler uses 1°dONLNd¨qÒ})MApple °dONLNd≤~ää∂(áäCEvent Manager functions to extract any parameters and attributes frz`°dONLNdı~∂ä◊(á∂om the B‡°dONLNd¸~◊ä)! Apple event °dONLNdãäó&(îä"and then performs the necessary prú`°dONLNd*ã&óP)ú
  10851. ocessing. †°dONLNd4ãQó¸)+(If any of the parameters include object °dONLNd\ò䧶(°äspecifiÓ °dONLNdcò¶§µ)er rÔ`°dONLNdgòµ§«)ecorc¿°dONLNdkò»§F)ds, your handler should call Ó °dONLNdàòF§|)~    AEResolveÍ¿°dONLNdëò|§ç)6 to rg†°dONLNdñòé§)esolve them—that is, to locate °dONLNdµ•ä±ö(Æäthe °dONLNdπ•ö±V)*Apple event objects they describe. For mor°dONLNd„•W±)Ω*e information, see the chapter “Resolving °dONLNd≤äæ®(ªäand Cr… °dONLNd≤®æ)eating Object Specifi≈`°dONLNd(≤æ&)Zer Recor$°dONLNd0≤'æo)%ds” in this book.ˇ!˙@ˇ ˇˇˇˇ@
  10852. ˇ·ˇ‚7^
  10853. 4*\¯, Palatino&e.3+l"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@lResponding to ,): Apple Events4⁄*˙¯
  10854. (‡*4-34    )B    Handling ê)& Apple Events4^*¿¯
  10855. °dONLNd\lhr(elT†¿°dONLNd\rh)he ,
  10856. Courierª¿°dONLNd\hù)replyπ‡°dONLNd    \ùh) parameter is the default r˝¿°dONLNd$\h.)reply prà °dONLNd+\/hn) ovided by the £ °dONLNd9\nhœ)?Apple Event ManagerdONLNdL\œh‘)a. °dONLNdNiluo(rl(”‡°dONLNdOiou∑)“Replying to an ∏‡°dONLNd_i∑uˆ)HApple Event,”’¿°dONLNdliˆuC)? which begins on F °dONLNd}iDu[)Npage !°dONLNdÇi\un)4-36t‡°dONLNdÜinus), t‡°dONLNdàisuy)dꆰdONLNdâiyu”)escribes how to add °dONLNdùvlÇ·(lparameters to the default r`°dONLNd∏v‚Çı)veply:‡°dONLNdºvÙÇ).) The  Ä°dONLNd√vÇ])handlerRefcon≈†°dONLNd–v]Ç≠)N parameter is the r`°dONLNd„vÆÇæ)Qefer Ä°dONLNdÁvæÇ‘)ence °dONLNdÏÉlè§(ålconstant stor °dONLNd˘É•èÕ)9
  10857. ed in the ¢@°dONLNdÉÕè)()Apple event dispatch table entry for the  `°dONLNd,Éè∫)≤Apple event. ÁÄ°dONLNd9É∫è¿);Y®°dONLNd:É¿èˆ) our handler °dONLNdFêlú≠(ôlcan check the rÓ†°dONLNdUê≠úΩ)Aeferö¿°dONLNdYêæú2)ence constant, if necessary´°dONLNdtê1ú®)s, for information about the Ë°dONLNdêê®ú‡)w Apple event.°dONLNdù¢lÆr(´lY@Ä°dONLNdû¢rÆ∑)ou can use the rƇ°dONLNdÆ¢∑Æ«)Eefer[°dONLNd≤¢»Æ·)?ence constant for anything you wish. For example, if you want t3Ä°dONLNdÒ¢‚ÆÈ(´‚o °dONLNdÛØlªfl(∏luse the same handler for s!‡°dONLNd؇ª˝)teveral X°dONLNdØ˝ª3) Apple event¢¿°dONLNdØ3ª9)6s,_¿°dONLNd!Ø:ªÎ)+ you can install entries for each event in °dONLNdLºl»æ(≈lyour application’s € °dONLNd_ºæ»ÿ)R@Apple event dispatch table that specify the same handler but difö@°dONLNdüºŸ»Â(≈Ÿfer|¿°dONLNd¢º»ı) ent °dONLNd¶…l’o(“lrE°dONLNdß…p’Ä)eferÒ °dONLNd´…Ä’ƒ)ence constants. ü†°dONLNdª…≈’À)EY` °dONLNdº…À’O)our handler can then use the r”°dONLNd⁄…O’_)Ñefer °dONLNdfi…`’Ì)!ence constant to distinguish the °dONLNdˇ÷l‚x(flldif™`°dONLNd÷x‚Ñ) fer凰dONLNd÷Ñ‚î) ent ㇰdONLNd    ÷)Apple events it handles.°dONLNd"ËlÙr(ÒlTµ¿°dONLNd#ËqÙÇ)o prr`°dONLNd'ËÉÙ´)    ovide an Œ‡°dONLNd0Ë´Ù;)( Apple event handler in C, be sur߇°dONLNdPË;Ùt)êe to include t͆°dONLNd^ËtÙÍ)9he Pascal declaration befor&¿°dONLNdyËÎÙÚ)we °dONLNd{ıl“(˛lthe handler declarationb¿°dONLNdíı”C)g. This is the syntax for an ¥Ä°dONLNdÆıC∑)pApple event handler in C: °dONLNd… lr(lp†°dONLNd  r)ascal OSErr MyEventHandlev@°dONLNd„ ‡)ñ$r (const AppleEvent *theAppleEvent, °dONLNd&+ †°dONLNd&) @°dONLNd&∞)const AppleEvent *reply, °dONLNd6(4(1 †°dONLNd7(4) @°dONLNd8(4í)long handlerRefcon);°dONLNdM@lL(Il(After extracting all known parameters frÚÄ°dONLNdu@L?)≤om the ª°dONLNd|@?L€)!"Apple event, every handler should °dONLNdûMlY”(Vldetermine whether the |`°dONLNd¥M”Yk)g"Apple event contains any further r˙Ä°dONLNd÷MkYÇ)òequir¿°dONLNd€MÉY«)ed parameters. Ä°dONLNdÍM«YÕ)DYÿ°dONLNdÎMÃY›)our °dONLNdÔZlf(cl"handler can determine whether it r뇰dONLNdZfN)öetrieved all the r¡@°dONLNd#ZNfe)HequirÿÄ°dONLNd(Zef÷)ed parameters by checkinÁ°dONLNd@Z÷ffi)qg °dONLNdBglsñ(pl    whether t`°dONLNdKgós§)+he `°dONLNdNg§s)keyMissedKeywordAttr‡°dONLNdbgsÒ)x6 attribute exists. If the attribute exists, then your °dONLNdòtlÄ∑(}lhandler has not rø¿°dONLNd©t∑ġ)Ketrieved all the rÔ °dONLNdªtˇÄ)Hequir`°dONLNd¿tÄÀ)&ed parameters and should immediately r\†°dONLNdÊtÀÄÚ)¥    eturn an °dONLNdÔÅlçx(älerr@°dONLNdÚÅyçÇ)or¨°dONLNdÙÅÅç0),. If the attribute does not exist, then the _ °dONLNd Å0çŸ)Ø$Apple event does not contain any morm@°dONLNdDÅŸç‡)©e °dONLNdFélöo(ólrE°dONLNdGépöá)equir\@°dONLNdLéáö¬)Fed parameters, although it may contain additional optional parameters.°dONLNdì†l¨(©lThe ]`°dONLNdó†¨r)2Apple Event Manager determines which parameters arj°dONLNd…†r¨∑)Ûe optional accor @°dONLNdŸ†∏¨Í)F ding to the °dONLNdÂ≠lπç(∂lkeywor˘`°dONLNdÎ≠çπ–)!ds listed in the ¿°dONLNd¸≠—πU)DkeyOptionalKeywordAttrÄ°dONLNd≠Uπ©)Ñ attribute. The sourK`°dONLNd&≠©πÚ)Tce application is °dONLNd8∫lΔo(√lrE°dONLNd9∫pΔ)"esponsible for adding these keyworç`°dONLNd[∫Δ5)ù
  10858. ds to the ˚`°dONLNde∫5Δπ)(keyOptionalKeywordAttrÛ °dONLNd{∫πΔÊ)Ñ  attribute, °dONLNdá«l”õ(–l but is not rD¿°dONLNdì«ú”≥)0equir\°dONLNdò«≥”å)5ed to do so, even if that parameter is listed in the ›@°dONLNdÕ«å”Ë)ŸApple Event Registry: °dONLNd„‘l‡¨(›lStandard Suites6‡°dONLNdÚ‘≠‡)A as an optional parameterÍÄ°dONLNd ‘‡N)o. If the sour¯‡°dONLNd‘N‡⁄)2 ce application does not add the °dONLNd8·lÌ∫(Ílnecessary keyworJ°dONLNdH·ªÌfl)O    d to the {°dONLNdQ·flÌc)$keyOptionalKeywordAttrr¿°dONLNdg·cÌ≠)Ñ attribute, the tarR°dONLNdz·≠ÌÒ)Jget application °dONLNdäÓl˙s(˜ltrá`°dONLNdåÓs˙÷)eats the parameter as r@¿°dONLNd£Ó◊˙Ó)dequirX°dONLNd®ÓÓ˙) ed for that q °dONLNd¥Ó˙)0Apple event. If the tarS°dONLNdÀÓ˙Ì)aget application supports °dONLNd‰˚l©(lthe parameter±°dONLNdÒ˚©    )=, it should handle the Z`°dONLNd    ˚    q)`Apple event as the souræ °dONLNd    ˚q)hce application expects. If the °dONLNd    >lx(ltará`°dONLNd    Ax¬) Jget application does not support the parameter and checks whether it has rP†°dONLNd    ã√Ù(√ eceived all °dONLNd    ól!Ä(lthe r¢`°dONLNd    úÄ!ó)equirπ†°dONLNd    °ó!È)ed parameters, it fi§Ä°dONLNd    µÍ!")Snds that ther« °dONLNd    ¬"!√)8&e’s another parameter that the client °dONLNd    Ë"l.≈(+lapplication consider=¿°dONLNd    ¸"Δ.◊)Zed rh °dONLNd
  10859. "◊.Ó)equir`°dONLNd
  10860. "Ó.6)ed, and should r¶°dONLNd
  10861. "6.d)H eturn the rÄ°dONLNd
  10862.  "e.î)/ esult code # °dONLNd
  10863. +"î.Ù)/errAEParamMissed °dONLNd
  10864. ;"Ù.ˆ)` °dONLNd
  10865. </l;(8l'without attempting to handle the event.dONLNd
  10866. c/;)∞ °dONLNd
  10867. eAlMö(Jl Listing 4-1솰dONLNd
  10868. pAöMü).1솰dONLNd
  10869. qAüM9)$ shows a function that checks for a Ä°dONLNd
  10870. ïA:M≤)õkeyMissedKeywordAttr °dONLNd
  10871. ©A≤Mfl)x  attribute. ( °dONLNd
  10872. µAflMÊ)-Ab¿°dONLNd
  10873. ∂AÊMË) °dONLNd
  10874. ∑NlZ7(Wl2handler calls this function after getting all the œÄ°dONLNd
  10875. ÈN7Z:)ÀrîÄ°dONLNd
  10876. ÍN;ZR)equir´¿°dONLNd
  10877. ÔNRZ_)ed  °dONLNd
  10878. ÚN`Zfl)parameters it knows about fr”`°dONLNd NflZÔ)om °dONLNd [lgy(dlan s°dONLNd [yg±) Apple event.ˇ4Ä@ˇ ˇˇˇˇ@
  10879. ˇ·ˇ‚7^
  10880. 4H\, Palatino&e.3+ä"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@äResponding to ,): Apple Events4⁄ä˙(‡ä    Handling ê)& Apple Events
  10881. , (‡4-35
  10882. ˇˇˇˇˇˇˇˇ4l4älòÄ.lBäoMM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""lBäolBäo$””””””””””””””””””””””””””””””òÄ
  10883. l6ä@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""l6ä@l6ä@˜˜˜˜˜˜˜˜˜˜˜˜˜¸ˇˇ˛¸˛ˇˇ¸ˇˇˇ˛˙ˇ˛˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜
  10884. 4è4Ö?òÄ
  10885. è6Ö@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""è6Ö@è6Ö@$˛˙ˇ˚ˇˇ˚ˇˇ˚ˇˇ    ˛˛ˇˇˇ˜˝˛ˇ˛
  10886. ˛ˇˇˇˇ
  10887. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜    ˛ˇˇ˛
  10888. ˛ˇˇˇˇ
  10889. ˛ˇˇˇˇ    ˝ˇˇˇ˙ˇˇ
  10890. ˛ˇ˛ˇˇ
  10891. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  10892. ˛ˇ˛ˇˇ
  10893. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝˛ˇ˛
  10894. ˛ˇ˛ˇˇ
  10895. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˜˜˜˝¸ˇ
  10896. ˛ˇ˛ˇˇ˝˛ˇ˛
  10897. ˛ˇ˛ˇˇ
  10898. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  10899. ˛ˇ˛ˇˇ
  10900. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  10901. ˛ˇ˛ˇˇ
  10902. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  10903. ˛ˇˇˇˇ
  10904. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  10905. ˛ˇˇˇ
  10906. ˛ˇˇˇ
  10907. ˛ˇˇˇ
  10908. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  10909. ˛ˇˇˇˇ
  10910. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  10911. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  10912. ˛ˇˇˇˇ
  10913. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  10914. gHn4gHn"hH_
  10915. ˇ·ˇ‚7^    °dONLNd\ägª(dä Listing 4-11°dONLNd\Œg‘)DA0°dONLNd\‘g=) function that checks for a ,
  10916. Courier    ∞°dONLNd*\=g°)ikeyMissedKeywordAttr°dONLNd>\©gÃ)l
  10917.  attribute
  10918. °dONLNdJväÇ
  10919. (ä@FUNCTION MyGotRequiredParams (theAppleEvent: AppleEvent): OSErr;°dONLNdãÑäêú*VAR°dONLNdêíúû¿+myErr:°dONLNdúíû,)lOSErr;°dONLNd§†ú¨Í(©úreturnedType:°dONLNd∑†¨>)l    DescType;°dONLNd¬Æú∫fi(∑ú actualSize:°dONLNd”Æ∫&)lSize;°dONLNdŸºä»®(≈äBEGIN°dONLNd‡ ú÷ò+*myErr := AEGetAttributePtr(theAppleEvent, °dONLNdÿ>‰D+¢ †°dONLNdÿD‰»)keyMissedKeywordAttr, °dONLNd3ʈÚ(Ôˆ  °dONLNd9Ê>ÚD)H †°dONLNd:ÊDÚÏ)typeWildCard, returnedType, °dONLNdaÙ>D(˝> †°dONLNdbÙDº)NIL, 0, actualSize);°dONLNdxúb( ú!IF myErr = errAEDescNotFound THEN°dONLNd§bh)Δ °dONLNd®Æå(Æ%{you got all the required parameters}°dONLNd–Æ*V*MyGotRequiredParams := noErr°dONLNdÓ,ú8>(5úELSE IF myErr = noErr THEN °dONLNd,b8h)Δ °dONLNd:ÆFt(CÆ!{you missed a required parameter}°dONLNd<HÆTû*(MyGotRequiredParams := errAEParamMissed;°dONLNdeVäb¢(_äEND;°dONLNdjnäzø* The code in @†°dONLNdvn¿zÓ)6 Listing 4-1T@°dONLNdÅnÓzÛ).1T@°dONLNdÇnÛz)
  10920.  uses the ¸`°dONLNdånzÅ)(AEGetAttributePtrˆ°dONLNdùnÅz÷)f function to get the °dONLNd≤{äá(ÑäkeyMissedKeywordAttrxÄ°dONLNdΔ{á®)x) attribute. This attribute contains the f˜°dONLNdÔ{®áº)¶irst rñ`°dONLNdı{Ωá‘)equir≠†°dONLNd˙{‘á) ed parameterʆ°dONLNd{á):, °dONLNdàäî£(ëäif anyÅ°dONLNdà¢î), that your handler didn’t r¯Ä°dONLNd*àîD)v etrieve. If K`°dONLNd6àEî´)-AEGetAttributePtrE°dONLNdGà´î±)f rä°dONLNdIà±îfl) eturns the °dONLNdTïä°(ûäerrAEDescNotFoundy†°dONLNdeï°ˆ)f r憰dONLNdg7)esult code, the A@°dONLNdwï8°æ)BApple event doesn’t contain a °dONLNdï¢äÆ(´äkeyMissedKeywordAttrxÄ°dONLNd©¢ÆI)x attribute. If the $`°dONLNdº¢IÆ)G,Apple event doesn’t contain this attribute, °dONLNdËØäªÈ(∏äRthen your handler has extracted all of the parameters that the client application °dONLNd:ºä»Ø*consider‡°dONLNdBº∞»¡)&ed r1@°dONLNdFº¡»ÿ)equirHÄ°dONLNdKºÿ»Á)ed. °dONLNdPŒä⁄£(◊äIf the ¿°dONLNdWŒ§⁄
  10921. )AEGetAttributePtr    `°dONLNdhŒ
  10922. ⁄8)f  function r‹†°dONLNdsŒ7⁄U)-eturns p¿°dONLNdzŒV⁄t)noErrn‡°dONLNdŒt⁄ñ)     as the rŒ@°dONLNdàŒñ⁄Ó)"esult code, then the °dONLNdù€äÁ◊(‰äNattribute does exist, meaning that your handler has not extracted all of the ro@°dONLNd΀◊ÁÓ(‰◊equirÜÄ°dONLNd€ÓÁ˚)ed °dONLNdÛËäÙX(Òä/parameters. In this case, your handler should rcÄ°dONLNd"ËXÙå)Œ eturn an errç@°dONLNd.ËåÙΔ)4or and not pr≤‡°dONLNd;ËΔÙ):
  10923. ocess the °dONLNdEıä•(˛äApple˝Ä°dONLNdJı•ß) }Ä°dONLNdKı®¬)event.°dONLNdRä£(äThe fi»Ä°dONLNdX£¥)rst rÄ°dONLNd]µÂ)
  10924. emaining rd¿°dONLNdg¸)0equir|°dONLNdl¸_)ed parameter is specifi‡°dONLNdÉ`º)ded by the data of the °dONLNdôä (äkeyMissedKeywordAttrxÄ°dONLNd≠ ë)x# attribute. If you want this data r¯ °dONLNd–ë )èeturned, specify a bufÆ°dONLNdÊÒ 
  10925. )`fer to °dONLNdÌ!ä-(*ä"hold the data. Otherwise, specify º¿°dONLNd!-0)îNIL]@°dONLNd!0-])  as the buf¨†°dONLNd!]-‡)- fer and 0 as the size of the buf°dONLNd=!·-Ì)Ñfera¿°dONLNd@!Ï-)     . If you °dONLNdI.ä:¬(7äspecify a bufy`°dONLNdV.¬:£)85fer to hold the data, you can check the value of the É`°dONLNdã.£:fl)·
  10926. actualSize†°dONLNdï.fl:)<  parameter °dONLNd†;äGÍ(Däto see if the data is larR†°dONLNdπ;ÍG0)`ger than the bufïÄ°dONLNd…;0G|)Ffer you allocated.°dONLNd‹MäY≠(VäFor mor¿°dONLNd„MÆY8)$e information about specifying @°dONLNdM8YË)ä'Apple event parameters as optional or r‘¿°dONLNd)MÁY˛)ØequirÏ°dONLNd.M˛Y)ed, °dONLNd2Zäfö(cäsee –@°dONLNd6ZöfJ)'“Specifying Optional Parameters for an ¿°dONLNd]ZKffi)±Apple Event” beginning on page ¿°dONLNd|ZflfÏ)î5-7c†°dONLNdZÏfÒ). ˇ'†@ˇ ˇˇˇˇ@
  10927. ˇ·ˇ‚7^
  10928. 4*\¯, Palatino&e.3+l"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@lResponding to ,): Apple Events4⁄*˙¯
  10929. (‡*4-36    )B    Handling ê)& Apple Events4^*¿¯
  10930. k*r¯4l*r¯ mlm¯
  10931. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd\lk«(glReplying to an ˝í°dONLNd\Δk)Z Apple Eventˇˇˇˇˇˇ€r(g4
  10932. °dONLNdrl~r({lY@Ä°dONLNdrr~¨)our handler r◊‡°dONLNd*r¨~):outine for a particular È¿°dONLNdBr~U)cApple event is r‡°dONLNdRrV~€)Gesponsible for performing the °dONLNdplãç(àlaction r¶‡°dONLNdxçã’)!equested by the T‡°dONLNdà’ãi)H!Apple event, and can optionally r\Ä°dONLNd©iãØ)îeturn data in a rÄ°dONLNd∫∞ã≈)Geply u`°dONLNdø≈ã‚)Apple °dONLNd≈ålòú(ïl event. The ™†°dONLNd–åúòL)0&Apple Event Manager passes a default r `°dONLNdˆåMòb)±eply q@°dONLNd˚åbòfl)Apple event to your handlerò°dONLNdåflò˜)}. The °dONLNdôl•ë(¢l    default r0 °dONLNd%ôí•ß)&eply ï°dONLNd*ôß•Δ)?Apple event has no parameters when it is passed to your handler‘°dONLNdiôΔ•À(¢Δ. ¶`°dONLNdkôÀ•—)Yf‡°dONLNdlô—•‚)our °dONLNdp¶l≤
  10933. (Øl#handler can add parameters to the rÑÄ°dONLNdì¶
  10934. ≤)ûeply È`°dONLNdò¶≤Δ)(Apple event. If the client application r^ °dONLNd¿¶«≤Ò)®    equested °dONLNd…≥løw(ºla r≈°dONLNdÃ≥wøä) eplyÏÄ°dONLNd–≥âøû), the ÎÄ°dONLNd÷≥ûø)Apple Event Manager rfl`°dONLNdÎ≥ø8)h eturns the rdONLNd˜≥9øN)3eply ˙¿°dONLNd¸≥Nøø)Apple event to the client. °dONLNd≈l—É(ŒlThe rÄ¿°dONLNd≈É—ò)eply †°dONLNd"≈ò—˙)Apple event is identifi,`°dONLNd9≈˚—&)c
  10935. ed by the ,
  10936. CourierÖ‡°dONLNdC≈&—Ä)+kCoreEventClassÄ@°dONLNdR≈Ä—Ê)Z event class and by the °dONLNdj“lfi¢(€l    kAEAnswer|†°dONLNds“¢fiÃ)6
  10937.  event ID.e†°dONLNd}“ÕfiQ)+! If the client application specif–`°dONLNdû“Qfiq)Ñied the {Ä°dONLNd¶“rfiÆ)!
  10938. kAENoReplyw¿°dONLNd∞“Æfi≥)< f °dONLNd≤“¥fifl) lag in the °dONLNdΩfllÎä(Ëlreply~ °dONLNd¬fläÎÿ) parameter of the µ‡°dONLNd‘flÿθ)NAESend≥†°dONLNd⁄fl¸Î8)$ function, the @‡°dONLNdÈfl9Î◊)="Apple Event Manager passes a null °dONLNd Ïl¯ü(ıl descriptor rfl@°dONLNdÏü¯±)3ecorS†°dONLNdÏ≤¯¯)d (a descriptor r"Ä°dONLNd,Ï˘¯ )Gecorñ‡°dONLNd0Ï ¯5)
  10939. d of type ô@°dONLNd:Ï5¯_)*typeNulñ†°dONLNdAÏ_¯e)*lñ@°dONLNdBÏe¯fl) whose data handle has the °dONLNd]˘lÜ(lvalue _`°dONLNdc˘áô)NIL^@°dONLNdf˘ôú))≤ °dONLNdg˘úA)' to your handler instead of a default r„Ä°dONLNdé˘AV)•eply H`°dONLNdì˘Wí)Apple event. eÄ°dONLNd†˘íò);Y&°dONLNd°˘òÔ)our handler should °dONLNd¥l˝(l"check the descriptor type of the rã@°dONLNd÷˝)ëeply  °dONLNd€a)Apple event beforöÄ°dONLNdÏbŒ)Pe attempting to add any °dONLNdlÍ(lattributes or parameters to it–@°dONLNd"ÍÔ)~. q‡°dONLNd$Ô)An aäÄ°dONLNd()ttempØ°dONLNd-')t t≥¿°dONLNd0'O)        o add an S¿°dONLNd9PÌ))#Apple event attribute or parameter °dONLNd\ l,Δ()lto a null descriptor r¿`°dONLNdr Δ,ÿ)Zecor4¿°dONLNdv Ÿ,Á)d g_†°dONLNdy Á,)enerate¬‡°dONLNdÄ , ) sˇ‡°dONLNdÅ  ,') an errRÄ°dONLNdà (,1)or˝@°dONLNdä 0,5). °dONLNdç2l>ÿ(;lIf the client application r™°dONLNd®2ÿ>)l equests a r^‡°dONLNd≥2>)/eplyÜ`°dONLNd∑2>.), the Ö`°dONLNdΩ2.>ú)Apple Event Manager pr{`°dONLNd”2ú>Ø)nepar  °dONLNd◊2∞>Δ)es a r◊¿°dONLNd›2Δ>€)eply °dONLNd‚?lK>(Hl1Apple event for the client by passing a default ré`°dONLNd?>KS)“eply Û@°dONLNd?SK–)Apple event to your handler°dONLNd3?—K‹)~. T:¿°dONLNd6?‹KÈ) he °dONLNd9LlXë(Ul    default r0 °dONLNdBLíXß)&eply ï°dONLNdGLßXΔ)?Apple event has no parameters when it is passed to your handler‘°dONLNdÜLΔXÀ(UΔ. ¶`°dONLNdàLÀX—)Yf‡°dONLNdâL—X‚)our °dONLNdçYle(bl'handler can add any parameters to the re°dONLNd¥Ye2)±eply …‡°dONLNdπY2e”)&Apple event. If your application is a °dONLNdflflr≥(olspelling checker+‡°dONLNdÔf≥r)G, for example, you can rÙ†°dONLNdfrö)geturn a list of misspelled worØ°dONLNd%fõrË)Åds in a parameter °dONLNd6fËrÌ)M. °dONLNd9xlÑÀ(ÅlWhen your handler fi⁄†°dONLNdMxÀÑÛ)_    nishes prÄ°dONLNdVxÛÑ()( ocessing an ’¿°dONLNdbx(Ño)5Apple event, it rê@°dONLNdsxpÑö)H
  10940. eturns a ri`°dONLNd}xöÑ‘)*esult code to °dONLNdãÖlëÿ(élAEProcessAppleEveny@°dONLNdùÖÿëfi)ltx‡°dONLNdûÖfië)    , which r@°dONLNdßÖë:)'eturns this r"Ä°dONLNd¥Ö:ë≠)5esult code as its function r °dONLNd–Ö≠ëÁ)sesult. If your °dONLNdflílûî(õl    handler r( °dONLNdËíïûŸ))eturns a nonzer„ °dONLNd˜íŸû‰)Do rù†°dONLNd˙íÂûª) /esult code, and if you have not added your own °dONLNd)ül´¿(®lkeyErrorNumberz¿°dONLNd7ü¿´)T
  10941.  parameterŒ`°dONLNdAüÔ´)/, the Õ`°dONLNdGü´Ä)Apple Event Manager also r‹ °dONLNdaüÄ´µ)|eturns this rÓ`°dONLNdnüµ´‰)5 esult code °dONLNdy¨l∏t(µlto7‡°dONLNd{¨u∏w)     ∑‡°dONLNd|¨w∏)'the client application by putting the r˙Ä°dONLNd£¨∏e)§esult code into a o¿°dONLNdµ¨f∏∫)KkeyErrorNumberjÄ°dONLNd√¨∫∏Ï)T  parameter °dONLNdŒπl≈è(¬l    for the rfi`°dONLNd◊πè≈§)#eply C@°dONLNd‹π•≈fl)IApple event. The client can check for the existence of this parameter to °dONLNd%Δl“>(œl-determine whether the handler performed the rî°dONLNdRΔ>“Ö)“equested action.°dONLNdcÿl‰Í(·lThe client application specifiˇ °dONLNdÅÿ͉N)~es whether it wants a rfl@°dONLNdòÿN‰c)deply D °dONLNdùÿd‰˜)!Apple event or not by specifying °dONLNdæÂlÒr(Ólflå¿°dONLNd¿ÂrÒä)ags (rÒ¿°dONLNdΔÂäÒò)eprÇÄ°dONLNd…ÂôÒ)esented by constants) in the T‡°dONLNdÊÂÒF)}sendModeQ‡°dONLNdÓÂFÒî)0 parameter of the ↰dONLNd    ÂîÒ∏)NAESendá`°dONLNd    Â∏Ò‚)$
  10942.  function.°dONLNd    ˜lº(lIf the client specifi@°dONLNd    &˜Ωÿ)Qes the @°dONLNd    -˜Ÿ!) kAEWaitReply˚¿°dONLNd    9˜ ()G flàÄ°dONLNd    <˜)Q)    
  10943. ag in the .¿°dONLNd    F˜RÇ))sendMode+¿°dONLNd    N˜Ç≤)0
  10944.  parameter`°dONLNd    X˜±Δ)/, the ‹¿°dONLNd    ^˜ΔÍ)AESend⁄Ä°dONLNd    d˜ÍÏ)$ °dONLNd    elø(lfunction does not rÙ`°dONLNd    xøB)Seturn until the timeout specifiä°dONLNd    óCn)Ñ
  10945. ed by the „Ä°dONLNd    °n¬)+timeoutInTicksfi@°dONLNd    Ø¬Ù)T  parameter °dONLNd    ∫lÇ(lexpir!¿°dONLNd    øÉË)es or the server applica‡°dONLNd    ◊ÈÙ)ftioØ °dONLNd    ⁄Ù) n r≈Ä°dONLNd    ›*)
  10946. eturns a rû†°dONLNd    Á*=)*eplyΔ °dONLNd    Î<ƒ). When the server application rÁÄ°dONLNd
  10947.  
  10948. ƒÍ)à    eturns a °dONLNd
  10949. l*o('lrE°dONLNd
  10950. p*É)eplylÄ°dONLNd
  10951. Ç*ó), the …‡°dONLNd
  10952. ó*µ)reply»°dONLNd
  10953. #µ*Ú) parameter to ꇰdONLNd
  10954. 1Û*)>AESend醰dONLNd
  10955. 7*U)$ contains the r°@°dONLNd
  10956. FU*j)>eply  °dONLNd
  10957. Kk*Ù)Apple event that your handler °dONLNd
  10958. i+l7o(4lrE°dONLNd
  10959. j+p7∞)eturned to the ¿°dONLNd
  10960. y+±7#)AAEProcessAppleEvent†°dONLNd
  10961. å+#7J)r     functionù‡°dONLNd
  10962. ï+J7u)'    . When thû°dONLNd
  10963. û+u7¬)+e client applicatiokÄ°dONLNd
  10964. ±+√7¯)N n no longer °dONLNd
  10965. Ω8lDã(Alneeds tˇ¿°dONLNd
  10966. ƒ8ãDΩ) he original æ °dONLNd
  10967. –8ΩD)2Apple event and the r`°dONLNd
  10968. Â8DH)a    eply evenÊÄ°dONLNd
  10969. Ó8HD¬)*t, it must dispose of them, bo‡°dONLNd 8√Dfl){ut the °dONLNd ElQ(Nl Apple Event Manager disposes of t†°dONLNd 2EQ*)ò    both the Ä°dONLNd ;E+Qã)'Apple event and the r^¿°dONLNd PEãQ€)`eply event for the °dONLNd cRl^([l"server application when the serverLÄ°dONLNd ÖR^8)ö ’s handler rx‡°dONLNd ëR8^a)2
  10970. eturns to D‡°dONLNd õRb^‘)*AEProcessAppleEvent=¿°dONLNd ÆR‘^÷)r.Ω¿°dONLNd ØR÷^ÿ) =¿°dONLNd ∞RŸ^€) ˇ=¥@ˇ ˇˇˇˇ@
  10971. ˇ·ˇ‚7^
  10972. 4H\, Palatino&e.3+ä"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@äResponding to ,): Apple Events4⁄ä˙(‡ä    Handling ê)& Apple Events
  10973. , (‡4-37
  10974. ˇˇˇˇˇˇˇˇ4l4älòÄ.lBäoMM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""lBäolBäo$””””””””””””””””””””””””””””””òÄ
  10975. l6ä@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""l6ä@l6ä@˜˜˜˜˜˜˜˜˜˜˜˜˜¸ˇˇ˛¸˛ˇˇ¸ˇˇˇ˛˙ˇ˛˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜
  10976. 4è4Ö?òÄ
  10977. è6Ö@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""è6Ö@è6Ö@$˛˙ˇ˚ˇˇ˚ˇˇ˚ˇˇ    ˛˛ˇˇˇ˜˝˛ˇ˛
  10978. ˛ˇˇˇˇ
  10979. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜    ˛ˇˇ˛
  10980. ˛ˇˇˇˇ
  10981. ˛ˇˇˇˇ    ˝ˇˇˇ˙ˇˇ
  10982. ˛ˇ˛ˇˇ
  10983. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  10984. ˛ˇ˛ˇˇ
  10985. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝˛ˇ˛
  10986. ˛ˇ˛ˇˇ
  10987. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˜˜˜˝¸ˇ
  10988. ˛ˇ˛ˇˇ˝˛ˇ˛
  10989. ˛ˇ˛ˇˇ
  10990. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  10991. ˛ˇ˛ˇˇ
  10992. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  10993. ˛ˇ˛ˇˇ
  10994. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  10995. ˛ˇˇˇˇ
  10996. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  10997. ˛ˇˇˇ
  10998. ˛ˇˇˇ
  10999. ˛ˇˇˇ
  11000. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  11001. ˛ˇˇˇˇ
  11002. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  11003. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  11004. ˛ˇˇˇˇ
  11005. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\äh⁄(eäIf the client specifi@°dONLNd\€h¯)Qed the ,
  11006. Courierfl°dONLNd\¯hF)kAEQueueReply⁄ °dONLNd)\FhN)N flf‡°dONLNd,\Ohç)    ag, the client r∂¿°dONLNd<\çh√)>eceives the rÒ‡°dONLNdI\√h)6eply event at a °dONLNdYiäu(rälater time during its normal pr2Ä°dONLNdxiu})áocessing of other events.=‡°dONLNdëi}u)l °dONLNdì{äáê(ÑäY@Ä°dONLNdî{êáP),our handler should always set its function r±Ä°dONLNd¿{Pár)¿    esult to °‡°dONLNd…{sáë)#noErr†°dONLNdŒ{ëá‹) if it successfully °dONLNd„àäîø(ëä handles the ¨Ä°dONLNdÔàøî)5Apple event. If an err¸@°dONLNdàî´)^ or occurs, your handler should r¶¿°dONLNd%à¨î‚)èeturn either °dONLNd2ïä°(ûäerrAEEventNotHandledxÄ°dONLNdFï°b)x or some other nonzer °dONLNd[ïc°n)ao r◊†°dONLNd^ïn°≈) esult code. If the errl@°dONLNdtïΔ°—)Xor °dONLNdx¢äÆ°(´ä>occurs because your application cannot understand the event, rË¿°dONLNd∂¢°Æª(´°eturn °dONLNdºØäª(∏äerrAEEventNotHandledxÄ°dONLNd–تL)x. This allows the i@°dONLNd‚ØLª )J*Apple Event Manager to look for a handler °dONLNd ºä»9(≈ä(in the system special handler or system  °dONLNd4º:»    )∞/Apple event dispatch tables that might be able °dONLNdc…ä’ï(“äto ∑‡°dONLNdf…ï’    ) handle the event. If the errd°dONLNdÇ…
  11007. ’˘)u7or occurs because the event is impossible to handle as °dONLNdπ÷䂶(fläspecifiÓ °dONLNd¿÷¶‚π)ed, ròÄ°dONLNd≈÷∫‚Ë) eturn the r°dONLNd–÷È‚)/ esult code r⁄†°dONLNd‹÷‚Î)2.eturned by whatever function caused the failur∫‡°dONLNd
  11008. ÷΂)–e, or °dONLNd„äÔ”(Ïäwhatever other r!`°dONLNd „‘Ô!)Jesult code is appr솰dONLNd2„!ÔB)Mopriate.°dONLNd;ıä¿(˛ä For exampleq†°dONLNdFı¡Ú)7 , suppose yE@°dONLNdQıÛ=)2our application r0`°dONLNdbı=•)Jeceives a Get Data evenÄ¿°dONLNdyı•Æ)ht r °dONLNd|ıØ»)
  11009. equesx†°dONLNdÅı»fl)ting tΔ@°dONLNdáıfl) he name of °dONLNdíä¨( äthe curr `°dONLNdö≠‹)# ent printerYÄ°dONLNd•€π).1, and your application cannot handle such an even@°dONLNd÷∫ )flt. In this situation, °dONLNdÏäè(äy °dONLNdÌê¬) ou should rfl‡°dONLNd¯¬‹)2eturn 7°dONLNd˛›U)errAEEventNotHandled/Ä°dONLNdU)x* in case another handler available to the °dONLNd<ä((%äApple Event Manager can handl`°dONLNdY(π)ê%e the Get Data event. This strategy al °dONLNd~π()üllows users to take °dONLNdí)ä5#(2ä#advantage of system capabilities fr^`°dONLNdµ)#5¸)ô0om within your application via system handlers. °dONLNdÊ;äGí(DäH—`°dONLNdÁ;íG≤)owever †°dONLNdÌ;≥G±)!;, if your application cannot handle a Get Data event that rN†°dONLNd(;±GÍ)˛equests the fi(†°dONLNd6;ÎG˘):fth °dONLNd:HäTˇ(QäPparagraph in a document because the document contains only four paragraphs, you °dONLNdäUäaØ*should rT °dONLNdíUØa)%eturn some other nonzerÁ¿°dONLNd©Ua/)lo err^Ä°dONLNdÆU0a9)or    @°dONLNd∞U9af)     , because f¨`°dONLNdªUfa)-#urther attempts to handle the eventÌ°dONLNdfiUa)ú ar2°dONLNd·Ua) e °dONLNd„bän±(kä    pointless¿°dONLNdÏb≤n¥)(.°dONLNdÓtäÄ™(}äIf your “`°dONLNdˆt™Ä.) Apple event handler calls the €†°dONLNdt.Äd)Ñ    AEResolveÿ@°dONLNdtdÄ°)6 function and S†°dONLNd+t¢Äÿ)>    AEResolveP@°dONLNd4tÿÄ˝)6
  11010.  calls an °dONLNd>Åäçœ(ääLobject accessor function in the system object accessor dispatch table, your ™Ä°dONLNdäÅœç(äœ Apple event °dONLNdñéäöŸ(óähandler may not rÄ°dONLNdßé⁄öî)P+ecognize the descriptor type of the token r9°dONLNd“éîö¸)∫eturned by the functionw‡°dONLNdÈé¸ö )h. In °dONLNdÓõäß±(§ä
  11011. this case,0°dONLNd¯õ≤ß)( your handler should r†°dONLNdõßC)c eturn the r_ °dONLNdõDßs)/ esult code b¿°dONLNd$õsߘ)/errAEUnknownObjectTypeZÄ°dONLNd:õ˜ß¸)Ñ. °dONLNd<®ä¥Á(±äWhen your handler r퇰dONLNdO®Á¥)]eturns this r• °dONLNd\®¥])5esult code, the '¿°dONLNdl®^¥)B'Apple Event Manager attempts to locate °dONLNdìµä¡≤(æä    a system 
  11012. ¿°dONLNdúµ≥¡:))Apple event handler that can r`°dONLNd∫µ:¡µ)áecognize the token. For mor`°dONLNd’µµ¡){e information, see °dONLNdˬäŒ(Àä"“Installing Entries in the Object I@°dONLNd
  11013. ¬Œp)çAccessor Dispatch T;@°dONLNd¬pŒç)Yables,”1‡°dONLNd$¬éŒ€) which begins on ¢@°dONLNd5¬€ŒÚ)Mpage } °dONLNd:¬ÛŒ)6-21—°dONLNd>¬Œ).°dONLNd@‘ä‡ê(›äT†¿°dONLNdA‘ê‡ù)he ]`°dONLNdD‘ù‡â)1Apple Event Manager automatically adds any nonzer°dONLNdu‘ä‡ï)Ìo r–Ä°dONLNdx‘ï‡) esult code that your handler °dONLNdï·äÌç(ÍärE°dONLNdñ·éÌø) eturns to a ë°dONLNd¢·øÌ)1keyErrorNumberã¿°dONLNd∞·Ìe)T parameter in the rx‡°dONLNd√·eÌz)Reply ›¿°dONLNd»·zÌÙ)Apple event. In addition to °dONLNd‰Óä˙ç(˜ärE°dONLNdÂÓé˙¬) eturning a r*°dONLNdÒÓ¬˙Y)4#esult code, your handler can also r∞†°dONLNd    ÓY˙ç)ó eturn an err⁄`°dONLNd     Óç˙–)4or string in the °dONLNd    1˚äfi(äkeyErrorStringz¿°dONLNd    ?˚fi0)T parameter of the rwÄ°dONLNd    R˚0E)Reply ‹`°dONLNd    W˚EÄ)Apple event. ˘Ä°dONLNd    d˚ÄÜ);Y∫°dONLNd    e˚ÜÁ)our handler should prb†°dONLNd    z˚Ë)bovide °dONLNd    ÄäÓ(ämeaningful text in the â`°dONLNd    óÓB)dkeyErrorStringÑ °dONLNd    •Br)T
  11014.  parameter◊¿°dONLNd    Øq)/&, so that the client can display this °dONLNd    ’ä!ˆ(ästring to the user if desir\Ä°dONLNd    ˆ!)led.¡‡°dONLNd    Û!) °dONLNd    ı'ä3Ω(0ä Listing 4-12 @°dONLNd
  11015. 'æ3ƒ)4 s›@°dONLNd
  11016. 'ƒ3#)hows how to add the ¢¿°dONLNd
  11017. '$3x)`keyErrorStringùÄ°dONLNd
  11018. %'x3 )T parameter to the rà¿°dONLNd
  11019. 8' 3fl)Reply ̆°dONLNd
  11020. ='fl3¸)Apple °dONLNd
  11021. C4ä@∏(=ä event. See  @°dONLNd
  11022. N4π@/)/“Adding Parameters to an h@°dONLNd
  11023. g4/@ì)vApple Event” on page &‡°dONLNd
  11024. |4î@°)e5-5z¿°dONLNd
  11025. 4°@
  11026. ) for a description of the °dONLNd
  11027. ôAäMÿ(JäAEPutParamPtr{ °dONLNd
  11028. ¶AÿM)N
  11029.  function.ˇ v@ˇ ˇˇˇˇ@
  11030. ˇ·ˇ‚7^
  11031. 4*\¯, Palatino&e.3+l"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@lResponding to ,): Apple Events4⁄*˙¯
  11032. (‡*4-38    )B    Handling ê)& Apple Events4^*¿¯
  11033. g*n¯4g*n¯"h*_
  11034. ˇ·ˇ‚7^°dONLNd\lgù(dl Listing 4-12°dONLNd\∞g›)D Adding the ,
  11035. CourierP°dONLNd\fig$).keyErrorStringö0°dONLNd&\)gÜ)K parameter to the reply –°dONLNd>\Ügµ)] Apple event
  11036. °dONLNdKvlÇÚ(lAFUNCTION MyHandler (theAppleEvent: AppleEvent; reply: AppleEvent;°dONLNdìÑÿêfi+l †°dONLNdîÑfiê‰) @°dONLNdïщê§) handlerRefcon: LongInt): OSErr; °dONLNd∂ílû~(õlVAR°dONLNdª†~¨¢+myErr:°dONLNd≈†Δ¨Í)HOSErr;°dONLNdÕÆ~∫®(∑~errStr:°dONLNdÿÆΔ∫)HStr255;°dONLNd‡ºl»ä(≈lBEGIN°dONLNdÁ ~÷2+{handle your Apple event here}°dONLNdÊ~Ú‡*;{if an error occurs when handling an Apple event, set the }°dONLNdEÙ~ò*/{ function result and error string accordingly}°dONLNdv~*IF myErr <> noErr THEN°dONLNdé~ú*BEGIN°dONLNdñê*+MyHandler := myErr;x‡°dONLNd™*‘)r# {result code to be returned--the }°dONLNd◊,8‘+ !{ Apple Event Manager adds this }°dONLNd:F⁄*"{ result code to the reply Apple }°dONLNd.HT¬*{ event as the keyErrorNumber t¿°dONLNdLH¬T»)¥}°dONLNdWVbV(_ { parameter}°dONLNdfdêpV(mê!IF (reply.dataHandle <> NIL) THEN°dONLNdärê~∂*1{add error string parameter to the default reply}°dONLNdæÄêåÆ*BEGIN°dONLNd«é¢ö¬+0{strings should normally be stored in resources}°dONLNd˚ú¢®\*errStr := 'Why error occurred';°dONLNd™¢∂∂*.myErr := AEPutParamPtr(reply, keyErrorString, °dONLNdX∏2ƒŒ+êtypeIntlText, @errStr[1], °dONLNd~Δ2“í*length(errStr));°dONLNdë‘ꇮ(›êEND;°dONLNdó‚~Óä(Î~EN@°dONLNdô‚äÓê) D°dONLNdú~¸ñ(˘~ELSE°dONLNd£˛ê
  11037. +MyHandler := noErr;°dONLNd∑ lÑ(lEND;°dONLNdº$l0‹*If your handler needs to rN °dONLNd÷$›0√)q7eturn data to the client, it can add parameters to the °dONLNd1l=o(:lrE°dONLNd1p=É)eplyà@°dONLNd1É=Ö) ©‡°dONLNd1Ö=¿)Apple event. Ù†°dONLNd 1¿=Û); Listing 4-13dONLNd,1Ù=ª)4, shows how a handler for the Multiply event °dONLNdX>lJz(Gl(an•@°dONLNd[>zJ|) %@°dONLNd\>}J≠)
  11038. imaginary Õ‡°dONLNdf>¨JÕ)/@Apple event that asks the server to multiply two numbers) might °dONLNd¶KlWo(TlrE°dONLNdßKpWá)eturn °dONLNd¨KàWä) ú °dONLNd≠KäWû)the ræÄ°dONLNd≤KûWL)+esults of the multiplication to the client.ˇ7@ˇ ˇˇˇˇ@
  11039. ˇ·ˇ‚7^
  11040. 4H\, Palatino&e.3+ä"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@äResponding to ,): Apple Events4⁄ä˙(‡ä    Handling ê)& Apple Events
  11041. , (‡4-39
  11042. ˇˇˇˇˇˇˇˇ4l4älòÄ.lBäoMM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""lBäolBäo$””””””””””””””””””””””””””””””òÄ
  11043. l6ä@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""l6ä@l6ä@˜˜˜˜˜˜˜˜˜˜˜˜˜¸ˇˇ˛¸˛ˇˇ¸ˇˇˇ˛˙ˇ˛˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜
  11044. 4è4Ö?òÄ
  11045. è6Ö@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""è6Ö@è6Ö@$˛˙ˇ˚ˇˇ˚ˇˇ˚ˇˇ    ˛˛ˇˇˇ˜˝˛ˇ˛
  11046. ˛ˇˇˇˇ
  11047. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜    ˛ˇˇ˛
  11048. ˛ˇˇˇˇ
  11049. ˛ˇˇˇˇ    ˝ˇˇˇ˙ˇˇ
  11050. ˛ˇ˛ˇˇ
  11051. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  11052. ˛ˇ˛ˇˇ
  11053. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝˛ˇ˛
  11054. ˛ˇ˛ˇˇ
  11055. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˜˜˜˝¸ˇ
  11056. ˛ˇ˛ˇˇ˝˛ˇ˛
  11057. ˛ˇ˛ˇˇ
  11058. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  11059. ˛ˇ˛ˇˇ
  11060. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  11061. ˛ˇ˛ˇˇ
  11062. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  11063. ˛ˇˇˇˇ
  11064. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  11065. ˛ˇˇˇ
  11066. ˛ˇˇˇ
  11067. ˛ˇˇˇ
  11068. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  11069. ˛ˇˇˇˇ
  11070. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  11071. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  11072. ˛ˇˇˇˇ
  11073. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  11074. gHn4gHn"hH_
  11075. ˇ·ˇ‚7^    °dONLNd\ägª(dä Listing 4-13°dONLNd\ŒgK)DAdding parameters to the reply á°dONLNd,\Kgz)} Apple event,
  11076. Courier
  11077. °dONLNd9väÇ(äFUNCTION MyMultHandlerw¿°dONLNdOvÇ)Ñ w`°dONLNdPvǺ)(theAppleEvent: AppleEvent; °dONLNduÑêå+reply: AppleEvent; °dONLNdëíû⁄* handlerRefcon: LongInt): OSErr; °dONLNd≤†ä¨ú(©äVAR°dONLNd∑Æú∫¿+myErr:°dONLNd√Æ∫,)lOSErr;°dONLNdÀºú»¸(≈únumber1,number2:°dONLNd·º»8)lLongInt;°dONLNdΠú÷‰(”ú replyResult:°dONLNd˝ ÷8)lLongInt;°dONLNdÿú‰fi(·ú actualSize:°dONLNdÿ‰&)lSize;°dONLNdÊúÚÍ(ÔúreturnedType:°dONLNd2ÊÚ>)l    DescType;°dONLNd<Ùä®(˝äBEGIN°dONLNdCúÚ+9{get the numbers to multiply from the parameters of the }°dONLNd~úÏ*8{ Apple event; put the numbers in the number1 and numberk°dONLNd∂Ï˛(Ï2 }°dONLNdªú*Ï('ú8{ variables and then perform the requested multiplicatiok°dONLNdÛÏ*¯('Ïn}°dONLNd˜,ú8∞(5ú.myErr := MyDoMultiply(theAppleEvent, number1, °dONLNd/:,F™+ênumber2, replyResult)x °dONLNdD:™F∞)~;°dONLNdGHúT¢(QúI†°dONLNdHH¢TΔ)F myEr}`°dONLNdNHΔT‰)$r = n{Ä°dONLNdSH‰T)oErr THExÄ°dONLNd[HT )0N °dONLNd`VÆbt(_Æ!IF (reply.dataHandle <> NIL) THEN°dONLNdÖd¿p+9{return result of the multiplication in the reply Apple }°dONLNd¬r¿~Í*{ event}`°dONLNd…rÍ~)*}°dONLNdŒÄ¿åÍ(â¿myErr :}`°dONLNd’ÄÍåt)*= AEPutParamPtr(reply, t¿°dONLNdÏÄtå‘)äkeyDirectObject,n¿°dONLNd¸Ä‘å⁄)` °dONLNd    éPöV(óPt†°dONLNd
  11078. éVö)ypeLongInteger, @replyResult,t¿°dONLNd'éö
  11079. )Æ °dONLNd4úP®V(•PS†°dONLNd5úV®Œ)izeOf(replyResult));°dONLNdK™ú∂&(≥úMyMultHandler := myErr;°dONLNdd∏úƒû*+{if an error occurs, set the error string }°dONLNdëΔú“>*{ accordingly, as shown in u‡°dONLNd¨Δ>“Ü)¢ Listing 4-12q`°dONLNd∏ΔÜ“å)H}°dONLNd∫‘䇢(›äEND;
  11080. H4H ä
  11081. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNdø˜äŸ*%Disposing of –∂°dONLNdØÿÑ)NApple Event Data Structuresˇˇˇˇˇˇ€r(4
  11082. °dONLNdÈä&(ä#Whenever a client application uses Z °dONLNd &…)ú#Apple Event Manager functions to cr¡`°dONLNd/…)£eate a descriptor °dONLNdAä&ç(#ärE°dONLNdBé&†)ecorπ`°dONLNdF†&¯)d, descriptor list, or I@°dONLNd]˘&5)YApple event rŸ°dONLNdj5&G)<ecorM`°dONLNdnH&c)d, the h °dONLNduc&Ô)Apple Event Manager allocates °dONLNdì'ä3˚(0ämemory for these data strE°dONLNd¨'¸3)ructur ‡°dONLNd±'3)es—Ä°dONLNd≥'3®)    " in the client’s application heap.fl@°dONLNd’'®3Í)å Likewise, wheÙ °dONLNd„'Í3˘)Bn a °dONLNdÁ4ä@‡(=äserver application e\@°dONLNd˚4·@˙)WxtractlÄ°dONLNd4˙@˛)s©Ä°dONLNd4˛@;) a descriptor r¿°dONLNd4<@N)>ecor} °dONLNd4N@V)d ‡°dONLNd4W@^)    fr1¿°dONLNd4^@|)om an Ó@°dONLNd4{@≥) Apple event π°dONLNd+4¥@‹)9    by using ˛`°dONLNd44‹@˘)(Apple °dONLNd:AäM(JäEvent Manager functions, the ˚†°dONLNdWAMz)ÑApple Event Manager cr_¿°dONLNdmA{M˛)meates a copy of the descriptor °dONLNdåNäZç(WärE°dONLNdçNéZ†)ecorπ`°dONLNdëN†Z¶)d’ °dONLNdíN¶Z®),U °dONLNdìN©Z´) ’ °dONLNdîN´ZY)(including the data to which its handle r∂@°dONLNdºNYZs)Æefers, Õ°dONLNd√NsZ©)in the server}@°dONLNd–N´Z)8’s application heap.°dONLNdÂ`äl”(iäWhenever you fi1°dONLNdÙ`‘l?)Jnish using a descriptor re`°dONLNd`?lQ)kecorŸ¿°dONLNd`QlÏ)%d or descriptor list that you have cr `°dONLNd6`Ìl)ú    eated or °dONLNd?mäyº(vä extracted frÿ °dONLNdKmºy⁄)2om an dONLNdQm⁄y )Apple event, yo‰°dONLNd`m yO)F
  11083. u should dñ°dONLNdjmPyΩ)0ispose of the descriptor rø†°dONLNdÑmΩyœ)mecor4°dONLNdàm–yÛ)d—and °dONLNdézäÜõ(Éäther"`°dONLNdízúÜy)1eby deallocate the memory it uses—by calling the ‰`°dONLNd√zyÜ«)›AEDisposeDescflÄ°dONLNd–z«ÜÓ)N     functionm¿°dONLNdŸzÔÜ)(    . If the °dONLNd‚áäìΩ(êä descriptor rfl@°dONLNdÓáΩìœ)3ecorS†°dONLNdÚá–ì)d you pass to Ø °dONLNdáì[)=AEDisposeDesc™@°dONLNdá[ìê)N (such as an 3‡°dONLNdáëì…)6 Apple event ˛†°dONLNd&á…ìÃ)8r√†°dONLNd'áÕìfl)ecor8°dONLNd+á‡ìË)d ”¿°dONLNd-áËì)or an °dONLNd3îä†ó(ùäAEc°dONLNd5îò†ö) „°dONLNd6îö†ù)r®°dONLNd7îû†∞)ecor`°dONLNd;Q)%d) includes other nested descriptor rl`°dONLNd`îQ†c)†ecor‡¿°dONLNddîc†°)ds, one call to ¬‡°dONLNdt)?AEDisposeDescæ°dONLNdÅî†)N will °dONLNdá°ä≠›(™ädispose of them all
  11084. ‡°dONLNdö°fi≠„)T. ˇ"∫@ˇ ˇˇˇˇ@
  11085. ˇ·ˇ‚7^
  11086. 4*\¯, Palatino&e.3+l"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@lResponding to ,): Apple Events4⁄*˙¯
  11087. (‡*4-40    )B    Handling ê)& Apple Events4^*¿¯
  11088. °dONLNd\lh2(el-When a client application adds a descriptor rï`°dONLNd-\2hD)Δecor    ¿°dONLNd1\Ehf)d to an –`°dONLNd9\ehˆ) Apple event (for example, when °dONLNdXilu}(rlit cr`°dONLNd]i}u–)eates a descriptor r—‡°dONLNdqi–u‚)SecorF@°dONLNdui„u)d by calling ,
  11089. Courierdž°dONLNdÇiua)6 AECreateDesc~ °dONLNdéiauÚ)H# and then puts a copy of it into a °dONLNd±vlÇ¥(lparameter of an Õ`°dONLNd¡v¥Ç)HApple event by calling 8¿°dONLNdÿvÇo)gAEPutParamDesc3Ä°dONLNdÊvodž)T), it is still rU°dONLNdˆv†Ç‡)1esponsible for °dONLNdÉlè(ål&disposing of the original descriptor rF`°dONLNd+Éè )¢ecor∫¿°dONLNd/É è+)d. x °dONLNd2É+è≤)  After a client application has fi@°dONLNdSÉ≥è )ànisheî°dONLNdXÉ èÌ)d using °dONLNd`êlúq(ôlb†°dONLNdaêrúì)oth the ‡°dONLNdiêìúË)!Apple event specifiH¿°dONLNd|êËú)U
  11090. ed in the E@°dONLNdÜêú5))AESendC°dONLNdåê5úÜ)$ function and the r‡¿°dONLNdüêÜúõ)Qeply E†°dONLNd§êúúfl)Apple event, it °dONLNd¥ùl©(¶l$should dispose of their descriptor rØÄ°dONLNdÿù©)õecor#‡°dONLNd‹ù© )d?†°dONLNd›ù ©T)s by calling ù@°dONLNdÍùT©Z)4Aú‡°dONLNdÎùZ©ú) EDisposeDesò¿°dONLNdˆùú©¢)Bcò`°dONLNd˜ù¢©§).`°dONLNd¯ù•©’)  The client °dONLNd™l∂*(≥l+application should dispose of them even if «@°dONLNd/™*∂N)æAESend≈°dONLNd5™N∂T)$ r
  11091. °dONLNd7™U∂ô)eturns a nonzer≈°dONLNdF™ô∂§)Do rÄ°dONLNdI™•∂÷) esult code. °dONLNdVºl»(≈lThe ]`°dONLNdZº»U)1Apple event that a server application’s handler r=@°dONLNdãºU»‡)÷"eceives is a copy of the original °dONLNd≠…l’è(“levent crÇÄ°dONLNdµ…è’ø)#Feated by the client application. When a server application’s handler rh†°dONLNd˚…ø’Ë(“ø
  11092. eturns to °dONLNd÷l‚fi(fllAEProcessAppleEventx‡°dONLNd÷fi‚Û)r, the w‡°dONLNd÷Û‚∂)*Apple Event Manager disposes of the server„°dONLNdH÷∑‚–)ƒ’s copO °dONLNdN÷—‚˜)
  11093. y (in the °dONLNdX„lÔá(Ïlserverô °dONLNd^„àÔ·)’s application heap) ≈@°dONLNds„·Ô)Y of both the ûÄ°dONLNd„Ôs)2Apple event and the r¯¿°dONLNdî„sÔ◊)`eply event. The server °dONLNd´l¸≠(˘lapplication is r!@°dONLNdªƸm)B,esponsible for disposing of any descriptor r”†°dONLNdÁm¸)øecorH°dONLNdÎĸï)ds crV°dONLNd︠) eated while °dONLNd¸˝l    ∑(lextracting data fr¿°dONLNd˝∏    Ÿ)Lom the ‚@°dONLNd˝ÿ    )     Apple eve@°dONLNd˝     ).n͆°dONLNd˝     )t-°dONLNd ˝    t) or adding data to the rÕ‡°dONLNd8˝t    §)e eply event.°dONLNdDl…(lIn general, outputs frfl °dONLNdZ…Ÿ)]om J@°dONLNd]⁄r) Apple Event Manager functions ar    `°dONLNd}sÕ)ôe your application’s °dONLNdíl(o(%lrE°dONLNdìp(®)esponsibility∞Ä°dONLNd†ß(≥)7. Oå`°dONLNd£¥(fl)    nce you fi∞ °dONLNd≠fl(_)+nish using them, you should QÄ°dONLNd…`(q)Åuse fl@°dONLNdÕq(ø)AEDisposeDesc⁄`°dONLNd⁄ø(“)N to dÆ°dONLNdfl”(Ò)ispose °dONLNdÊ)l5ä(2lof any KÄ°dONLNdÌ)ä5‰)Apple event data strR`°dONLNd)‰5˚)Zucturÿ@°dONLNd)˚5)es crî °dONLNd )59)
  11094. eated or r≤†°dONLNd)95±)*eturned by these functions:°dONLNd»ìlü(úl)If you attempt to dispose of descriptor rD‡°dONLNdÒìü.)∞ecorπ@°dONLNdıì.ü>)ds rW°dONLNd˘ì?ü€)%eturned by successful calls to these °dONLNd†l¨ÿ(©lfunctions without using Í`°dONLNd6†ÿ¨&)lAEDisposeDescÂÄ°dONLNdC†&¨fi)N), your application may not be compatible °dONLNdl≠lπÄ(∂lwith” °dONLNdp≠ÄπÇ) S °dONLNdq≠Éπô)futurº†°dONLNdv≠ôπ„)e versions of the ⁄`°dONLNdà≠„πD)JApple Event ManagerÀ‡°dONLNdõ≠Dπr)a    . HoweverXÄ°dONLNd§≠rπ„)., if any of these functions °dONLNd¿∫lΔo(√lrE°dONLNd¡∫pΔÇ)eturJ¿°dONLNd≈∫ÇΔè)n aú °dONLNd»∫èΔ∞) nonzer√°dONLNdœ∫∞Δª)!o r}Ä°dONLNd“∫ºΔ˚) esult code, thefiÄ°dONLNd·∫˚Δ)?y r≤†°dONLNd‰∫Δp) eturn a null descriptor r@°dONLNd˝∫qΔÉ)jecor܆°dONLNd∫ÉΔ˜)d, which does not need to °dONLNd«l”†(–l be disposed,`°dONLNd&«°”¨)5 ofu¿°dONLNd)«¨”±) . °dONLNd,ŸlÂö(‚l
  11095. Outputs frΔ‡°dONLNd6Ÿö‘). om functions€†°dONLNdBŸ‘Â˚):
  11096. , such as û`°dONLNdLŸ¸Â>)( AEGetKeyPtr‹‡°dONLNdWŸ=Â?)A,\‡°dONLNdXŸ@Â~) that use a bufu¿°dONLNdgŸ~˜)>fer rather than a descriptor °dONLNdÑÊlÚo(ÔlrE°dONLNdÖÊpÚÇ)ecorπ`°dONLNdâÊÇÚô)d to rR°dONLNdèÊöÚ¬)    eturn dat@°dONLNdòÊ√Ú–))a d£°dONLNdõÊ–ÚÏ)o not rf¿°dONLNd¢ÊÌÚ)equir~°dONLNdßÊÚ8)e the use of ¸ °dONLNd¥Ê8ÚÜ)4AEDisposeDesc˜@°dONLNd¡ÊÜÚØ)N . It is ther_‡°dONLNdÕÊ∞Ú¡)*efor∑‡°dONLNd—Ê¡Ú“)e pr»†°dONLNd’Ê“Ú˜)    eferable °dONLNdfiÛlˇT(¸l7to use these functions for any data that is not identifi ‡°dONLNdÛTˇô)Ëed by a handle. °dONLNd'lå(l@Some of the functions described in the chapter “Resolving and CrC¿°dONLNdgçÊ(çeating Object Specifi@°dONLNd|ÁÚ)Zer °dONLNdlÖ(lRecor¢`°dONLNdÑÖÈ)ds” in this book also cr?‡°dONLNdúÍ1)eeate descriptor rÙ¿°dONLNd≠1C)Gecori °dONLNd±Dè)ds. If you set the ¶`°dONLNdƒè›)KdisposeInputs°Ä°dONLNd—›fl)N °dONLNd“l+ß((lparameter to »‡°dONLNdflß+≈);FALSE«°dONLNd‰≈+◊)? for any of the following functions, you should dispose of any °dONLNd    #,l8á(5lApple˝Ä°dONLNd    (,á8â) }Ä°dONLNd    ),ä8Δ)event data str܇°dONLNd    7,Δ8›)<uctur ¿°dONLNd    <,fi8)es that they crã@°dONLNd    K,8?)=    eate or ré°dONLNd    T,?8Y)$eturn:°dONLNd    ¥flrr(olY@Ä°dONLNd    µfrrŸ)our application is also r·°dONLNd    ŒfŸr∏)g4esponsible for disposing of some of the tokens it crT`°dONLNd
  11097. fπrÌ)‡eates in the °dONLNd
  11098. slu(|lprG °dONLNd
  11099. svû)
  11100.  
  11101. ocess of r˛‡°dONLNd
  11102. sû )(esolving an object specifi‚ °dONLNd
  11103. 5s )ner r„`°dONLNd
  11104. 9s-)ecorW¿°dONLNd
  11105. =s.Î)+d. For information about token disposal, se3Ä°dONLNd
  11106. hsÏÛ)æe °dONLNd
  11107. jÄlåÉ(âl“Defi†°dONLNd
  11108. oÄÑå†)ning T„†°dONLNd
  11109. uÄüåÂ)okens” on page ‚°dONLNd
  11110. ÑÄÊå¯)G6-395‡°dONLNd
  11111. àĢå˚).µ‡°dONLNd
  11112. âÄ˚å˝) °dONLNd0;lG¥(Dl AECoerceDesc°dONLNd=;ÏGF)ÄAEDuplicateDesc°dONLNdNKlWÆ(Tl AECoercePtr°dONLNdZKÏWX)ÄAEGetAttributeDesc°dONLNdn[lgÿ(dlAECreateAppleEvent°dONLNdÅ[Ïg4)Ä AEGetKeyDesc°dONLNdèklw¥(tl AECreateDesc°dONLNdúkÏw4)Ä AEGetNthDesc°dONLNd™{lá¥(Ñl AECreateList°dONLNd∑{Ïá@)ÄAEGetParamDesc°dONLNd    Z>lJ‰(GlCreateCompDescriptor°dONLNd    o>
  11113. Jv)ûCreateObjSpecifier°dONLNd    ÉNlZˆ(WlCreateLogicalDescriptorˇ˙?°dONLNd    õN
  11114. Zà)ûCreateRangeDescriptor ˇCT@ˇ ˇˇˇˇ@
  11115. ˇ·ˇ‚7^
  11116. 4H\, Palatino&e.3+ä"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@äResponding to ,): Apple Events4⁄ä˙(‡ä    Handling ê)& Apple Events
  11117. , (‡4-41
  11118. ˇˇˇˇˇˇˇˇ4l4älòÄ.lBäoMM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""lBäolBäo$””””””””””””””””””””””””””””””òÄ
  11119. l6ä@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""l6ä@l6ä@˜˜˜˜˜˜˜˜˜˜˜˜˜¸ˇˇ˛¸˛ˇˇ¸ˇˇˇ˛˙ˇ˛˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜
  11120. 4è4Ö?òÄ
  11121. è6Ö@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""è6Ö@è6Ö@$˛˙ˇ˚ˇˇ˚ˇˇ˚ˇˇ    ˛˛ˇˇˇ˜˝˛ˇ˛
  11122. ˛ˇˇˇˇ
  11123. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜    ˛ˇˇ˛
  11124. ˛ˇˇˇˇ
  11125. ˛ˇˇˇˇ    ˝ˇˇˇ˙ˇˇ
  11126. ˛ˇ˛ˇˇ
  11127. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  11128. ˛ˇ˛ˇˇ
  11129. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝˛ˇ˛
  11130. ˛ˇ˛ˇˇ
  11131. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˜˜˜˝¸ˇ
  11132. ˛ˇ˛ˇˇ˝˛ˇ˛
  11133. ˛ˇ˛ˇˇ
  11134. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  11135. ˛ˇ˛ˇˇ
  11136. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  11137. ˛ˇ˛ˇˇ
  11138. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  11139. ˛ˇˇˇˇ
  11140. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  11141. ˛ˇˇˇ
  11142. ˛ˇˇˇ
  11143. ˛ˇˇˇ
  11144. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  11145. ˛ˇˇˇˇ
  11146. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  11147. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  11148. ˛ˇˇˇˇ
  11149. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  11150. kHr4lHr mäm
  11151. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd\äkó(gäWS°dONLNd\ók~)'riting and Installing Coercion Handlersˇˇˇˇˇˇ€r(g4
  11152. °dONLNd*rä~4({ä&When your application extracts data frØÄ°dONLNdPr4~y)™om a parameterÆ°dONLNd^ry~ú)E
  11153. , it can r˛°dONLNdhrú~fl)#equest that the °dONLNdxr‡~˝)DApple °dONLNd~äã‘(àäEvent Manager rv`°dONLNdç‘ã¶)J2eturn the data using a descriptor type that is difÛ`°dONLNdø¶ã≤)“fer’‡°dONLNd¬≤ã…) ent frL °dONLNd» ã)om the original °dONLNdÿåäòu(ïä5descriptor type. For example, when extracting data frÜ@°dONLNdåuò£)Î
  11154. om the dirv@°dONLNdå£ò˝).ect parameter of the °dONLNd,ôä• (¢äOpen Documents event, you can rÒ °dONLNdKô •})ñequest that the alias r™@°dONLNdbô~•ê)^ecor†°dONLNdfôë•Æ)ds be r熰dONLNdmôÆ•Â) eturned as fi쇰dONLNdzô•)7
  11155. le system °dONLNdѶä≤¶(ØäspecifiÓ °dONLNd㶶≤«)cation r°dONLNd춻≤⁄)"ecorâ`°dONLNdó¶⁄≤¸)ds. The øÄ°dONLNdü¶¸≤√)"*Apple Event Manager can automatically coer2@°dONLNd…¶ƒ≤˜)» ce many difÀ°dONLNd‘¶˜≤)3fer≠Ä°dONLNd◊¶≤) ent °dONLNd€≥äøÃ(ºätypes of data fr†°dONLNdÎ≥Õø)Com one to another°dONLNd¸≥ø")P. °dONLNd˛≥"ø()T;¿°dONLNdˇ≥'øq)able 4-1 on page k°dONLNd≥qøy)J4-懰dONLNd≥yøÉ)43懰dONLNd≥Éø)
  11156.   shows descriptor types and the °dONLNd4¿äÃ√(…äkinds of coer_`°dONLNdA¿√ø)9cion that the T°dONLNdO¿¸Ãñ)9Apple Event Manager can perform퇰dONLNdn¿ñÃò)ö.°dONLNdp“äfiê(€äY@Ä°dONLNdq“êfiÕ)ou can also pr‡¿°dONLNd“Õfi)=ovide your own r´Ä°dONLNdè“fiC)M
  11157. outines, rÔ‡°dONLNdô“CfiW))eferr醰dONLNdû“Xfi|)    ed to as ˇ°dONLNdß“|fiœ)$coercion handlers,5‡°dONLNdπ“–fi)T to coerb °dONLNd¡“fi) ce data °dONLNd…fläÎ(Ëä!into any other descriptor type. Tч°dONLNdÍflÎ})éo install your own coer‡°dONLNdfl~·)fcion handlers, use the ,
  11158. Courier°dONLNdÏä¯(ıäAEInstallCoercionHandlerw°dONLNd0ϯF)ê  function. ◊†°dONLNd;ÏF¯L),Yò °dONLNd<ÏL¯˛))ou specify as parameters to this function,Zapf Dingbats°dONLNdfä    è(än
  11159. °dONLNdhˇñ 0) $the descriptor type of the data coeré °dONLNdåˇ0 Ç)öced by the handler°dONLNdüäè(än
  11160. °dONLNd°ñ ) the descriptor type of the r†°dONLNdΩ E)vesulting data°dONLNdÀ&ä-è(,än
  11161. °dONLNdÕ#ñ/ª) the addrŸ‡°dONLNd’#ª/˘)%ess of the coer∏†°dONLNd‰#˘/ò)>%cion handler for this descriptor type°dONLNd
  11162. 8ä?è(>än
  11163. °dONLNd 5ñA°) a r≈°dONLNd5°A±) eferq °dONLNd5≤AÌ)ence constant°dONLNd!JäQè(Pän
  11164. °dONLNd#GñSm) 0a Boolean value that indicates whether your coerÎÄ°dONLNdSGmS)◊$cion handler expects the data to be °dONLNdwSñ_≤(\ñspecifiÓ °dONLNd~S≤_)ed as a descriptor rÔ¿°dONLNdíS_)Tecord °dONLNdñS_Ø)$d or as a pointer to the actual data°dONLNdªhäoè(nän
  11165. °dONLNdΩeñqm) 0a Boolean value that indicates whether your coerÎÄ°dONLNdÌemq˛)◊ cion handler should be added to °dONLNdqñ}˚(zñyour application’s coer≠‡°dONLNd$q˚})ecion Õ`°dONLNd)q};)
  11166. dispatch tW°dONLNd3q<}°),able or the system coer3†°dONLNdJq°}∂)ecion S °dONLNdOq∂}fi)    dispatch ö`°dONLNdXqfi}Û)(table°dONLNd^Çäéù(ãäThe ª¿°dONLNdbÇùé()system coercion dispatch table”‡°dONLNdÄÇ(éˆ)ã1 is a table in the system heap that contains coerM`°dONLNd±Ç˜é )œcion °dONLNd∂èäõK(òä-handlers available to all applications and prÄ°dONLNd„èLõr)¬    ocesses rê °dONLNdÏèrõˆ)&unning on the same computerÜ°dONLNdèˆõ)Ñ. The °dONLNdúä®ú(•äcoerÙ`°dONLNdúú®J)(cion handlers in your application’s coerõ†°dONLNd9úK®©)Øcion dispatch table ar√`°dONLNdOú©®)^e available only to your °dONLNdh©äµ’(≤äapplication. Whe—‡°dONLNdx©’µ‚)Kn a#@°dONLNd{©„µ/)ttempting to coerˇ@°dONLNdå©.µM)Kce data@°dONLNdì©Nµc) , the @°dONLNdô©cµ )Apple Event Manager fiÄ°dONLNdÆ© µ )girst looks for a °dONLNdø∂ä¬ú(øäcoerÙ`°dONLNd√∂ú¬F)'cion handler in your application’s coer^†°dONLNdÍ∂G¬◊)´#cion dispatch table. If it cannot fiv °dONLNd∂◊¬)ênd a handler °dONLNd√äœd(Ãä4for the descriptor type, it looks in the system coerè¿°dONLNdO√dœÚ)⁄!cion dispatch table for a handlerT@°dONLNdp√Úœ)é. If it °dONLNdx–ä‹≤(Ÿä    doesn’t fi†°dONLNdÇ–≥‹ˇ))nd a handler therÚ@°dONLNdì–ˇ‹ú)L&e, it attempts to use the default coer°dONLNdπ–ù‹    )ûcion handling described °dONLNd—›äÈó(Êäby ¿°dONLNd‘›òÈû)TLÄ°dONLNd’›ùÈÁ)able 4-1 on page {¿°dONLNdÊ›ÁÈÔ)J4-œ†°dONLNdË›ÔÈ˘)43œ†°dONLNdÍ›˘È-)
  11167. . If it can’t fiÑ¿°dONLNd˙›.È^)5
  11168. nd an appr Ä°dONLNd›_ȵ)1opriate default coerJ†°dONLNd›µÈÏ)V cion handler‡°dONLNd$›ÏÈ˘)7, it °dONLNd)Íäˆç(ÛärE°dONLNd*Í鈺) eturns the 6Ä°dONLNd5ÍΩˆ)/errAECoercionFai0Ä°dONLNdE͈#)`l0 °dONLNdFÍ#ˆ)) ru °dONLNdHÍ)ˆZ) esult code. °dONLNdU¸ä•(äAny h˘ °dONLNdZ¸•ƒ)andler 
  11169. ‡°dONLNda¸≈) that you add $@°dONLNdn¸O);to the system coeró°dONLNdĸOù)Ocion dispatch tabl∞ °dONLNdí¸ù®)Ne s6¿°dONLNd︩…) hould rÕ‡°dONLNdú¸…˝) eside in the °dONLNd©    ä·(äsystem heap. If ther[°dONLNdΩ    ·)W    e was alrf°dONLNdΔ    ñ)' eady an entry in the system coerˇ†°dONLNdÊ    ñ˙)écion dispatch table for °dONLNd˛ä"ó(äthe]`°dONLNd    ò"ö) ›`°dONLNd    ö")same descriptor type, it is rц°dONLNd    "M)xeplaced. Ther °dONLNd    ,N"_)<eforg °dONLNd    0_"É)
  11170. e, if therè`°dONLNd    :É"¯)$e is an entry in the system °dONLNd    V#ä/ú(,äcoerÙ`°dONLNd    Z#ú/Ì)Ncion dispatch table for the same descriptor type, you should chain it to your °dONLNd    ®0ä<®(9äsystemi °dONLNd    Æ0©<´) È °dONLNd    Ø0´<Ω)coer]Ä°dONLNd    ≥0æ<4)cion handler as explained i`°dONLNd    Œ05<=)wn R¿°dONLNd    –0=<M)“Cr.¿°dONLNd    ”0M<”)eating and Managing the CoerᇰdONLNd    Ô0”<)Ücion Handler °dONLNd    ¸=äI∫(Fä
  11171. Dispatch TûÄ°dONLNd
  11172. =πI÷)/ables,”ï °dONLNd
  11173. =◊I$) which begins on Ä°dONLNd
  11174. =%I<)Npage ‡`°dONLNd
  11175. #=<IN)4-964@°dONLNd
  11176. '=OIQ).
  11177. WHe4XHe°dONLNd
  11178. )Wva~(_vs°dONLNd
  11179. *Xä`ì(^äWú°dONLNd
  11180. +Xì`æ)    ARNING
  11181. ˇ·ˇ‚7^
  11182. °dONLNd
  11183. 2cäo°(läBeforÛ¿°dONLNd
  11184. 7c°o;)$e an application calls a system coer! °dONLNd
  11185. [c<os)õ cion handlerÊ`°dONLNd
  11186. gcroπ)6, system softwar¥@°dONLNd
  11187. wc∫o¡)He °dONLNd
  11188. yoä{…(xähas set up the _†°dONLNd
  11189. ào…{‹)?A5 rk‡°dONLNd
  11190. åo‹{w)&egister for the calling application. FQ‡°dONLNd
  11191. ≤ox{ö)ú    or this r∏ °dONLNd
  11192. ªoö{¡)"
  11193. eason, if °dONLNd
  11194. ≈{äáß(Ñäyou pr“‡°dONLNd
  11195. À{ßá˝)ovide a system coerô‡°dONLNd
  11196. fi{˛á5)W cion handler_ °dONLNd
  11197. Í{5áê)7, it should never use ≈‡°dONLNd {êáΩ)[
  11198. A5 global °dONLNd
  11199. áäìø(êäGvariables or anything that depends on a particular context; otherwise, °dONLNd Qìäü<* *the application that calls the system coer#@°dONLNd {ì=ü§)≥cion handler may crashz@°dONLNd ëì§ü¶)g.˙@°dONLNd ìñ´û≤)sˇ! @ˇ ˇˇˇˇ@
  11200. ˇ·ˇ‚7^
  11201. 4*\¯, Palatino&e.3+l"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@lResponding to ,): Apple Events4⁄*˙¯
  11202. (‡*4-42    )B    Handling ê)& Apple Events4^*¿¯
  11203. °dONLNd\lhr(elY@Ä°dONLNd\rhõ)    ou can pr≈‡°dONLNd
  11204. \õh–)) ovide a coer#¿°dONLNd\—hQ)6cion handler that expects to r'°dONLNd4\Qh€)Ä!eceive the data in a descriptor rW@°dONLNdU\€hÌ)äecorÀ†°dONLNdY\Ìhı)d °dONLNd[ilué(rlor a bufù °dONLNdciéu†)"fer rÚ@°dONLNdhi†u¥)eferrë°dONLNdmiµu)ed to by a pointer∑†°dONLNdiu)M. When you install your coer¨`°dONLNdõiu∂)} cion handlerq†°dONLNdßi∂u)7, you specify °dONLNdµvlÇÓ(lhow your handler wishes to r–†°dONLNd—vÓÇ/)Çeceive the datag‡°dONLNd‡v0ÇD)B. Wh9@°dONLNd‰vEÇÙ)'enever possible, you should write your °dONLNd Élè~(ålcoerÙ`°dONLNdÉ~èj)8cion handler so that it can accept a pointer to the data˛°dONLNdGÉjè∂)Ï, because it’s mor
  11205. ¿°dONLNdYÉ∑èΔ)Me efD@°dONLNd]ÉΔèÃ)fiQ°dONLNd_ÉÃèÚ)
  11206. cient for °dONLNdiêlú|(ôlthe °dONLNdmê|úı)Apple Event Manager to pr¨‡°dONLNdÜêıú:)yovide your coer     °dONLNdïê;úÁ)F(cion handler with a pointer to the data.°dONLNdæ¢lÆs(´lA∫†°dONLNdø¢sÆà) coerØ°dONLNdƒ¢àÆÏ)Rcion handler that accepts a pointer to data must be a function with the following °dONLNdØlªã(∏lsyntax:,
  11207. Courier°dONLNdΔl“º*8FUNCTION MyCoercePtr (typeCode: DescType; dataPtr: Ptr; °dONLNd^‘͇+~ †°dONLNd_‘‡º)"dataSize: Size; toType: DescType; °dONLNdâ‚ÍÓ(ÎÍ †°dONLNdä‚Óz)handlerRefcon: LongInt;°dONLNd©͸(˘Í †°dONLNd™¸ò)VAR result: AEDesc): OSErr; °dONLNd«l(lThe ª¿°dONLNdÀØ)typeCode∏¿°dONLNd”Ø≠)0< parameter is the descriptor type of the original data. The F`°dONLNdÆÿ)ˇdataPtrC¿°dONLNdÿ⁄)* °dONLNdl!(l*parameter is a pointer to the data to coerÜ°dONLNdA!=)≥ce; the @°dONLNdI>!n)dataSize@°dONLNdQn!Ê)0 parameter is the length, in °dONLNdn"l.œ(+lbytes, of the data. The  `°dONLNdÜ"–.Ù)dtoType °dONLNdå"Ù.V)$ parameter is the desirņ°dONLNd£"V.»)bed descriptor type of the r
  11208. @°dONLNdæ"….Ô)s    esulting °dONLNd«/l;ó(8l
  11209. data. The ‡°dONLNd—/ò;Ê),handlerRefcon°dONLNdfi/Ê;-)N parameter is a rê`°dONLNdÔ/-;=)Gefer<Ä°dONLNdÛ/>;v) ence constanô@°dONLNdˇ/v;)8t sò†°dONLNd/Ä;å)
  11210. torÄ°dONLNd/ç;»)ed in the coerÜ`°dONLNd/»;ı); cion table °dONLNd<lH](El7entry for the handler and passed to the handler by the 8`°dONLNdU<]HÔ)ÒApple Event Manager whenever °dONLNdrIlU›(Rlthe handler is called. The »°dONLNdçI›U)qresult≈¿°dONLNdìIUF)$ parameter is th‡°dONLNd£IGUT)Fe du@°dONLNd¶ITUÅ) escriptor r∏¿°dONLNd±IÅUì)-ecor- °dONLNdµIîU†)d r燰dONLNd∏I†UÍ) eturned by your °dONLNd»Vlb~(_lcoerÙ`°dONLNdÃV~bµ) cion handlerπ†°dONLNdÿVµb∑)7.°dONLNd⁄hltr(qlY@Ä°dONLNd€hrtñ)our coer§ °dONLNd„hñt)$cion handler should coer*@°dONLNd˚htg)nce the data to the desirц°dONLNdhgt—)ced descriptor type and r”†°dONLNd+h—tÎ)jeturn °dONLNd1ulÅu(~lthì¿°dONLNd3uuÅÇ)    e d˘ °dONLNd6uÇŇ)ata in the descriptor r±‡°dONLNdMu·ÅÛ)_ecor&@°dONLNdQuÙÅ)d specifi0 °dONLNdZuÅD)%
  11211. ed by the ↰dONLNdduDÅh)+resultá`°dONLNdjuhÅò)$
  11212.  parameter€°dONLNdtuóÅ·)/. If your handler °dONLNdÜÇléÒ(ãlsuccessfully performs the coer@°dONLNd§ÇÚé)Ü
  11213. cion, it sáÄ°dONLNdÆÇé6)$hould r†°dONLNdµÇ7éa)!
  11214. eturn the ” °dONLNdøÇaé)*noErr—@°dONLNdƒÇéÖ) r@°dONLNdΔÇÜé≠)    esult cod–@°dONLNdœÇ≠éÁ)'e; otherwise, °dONLNd›èlõt(òlit *¿°dONLNd‡èuõö)    should r˛‡°dONLNdËèôõ∏)$eturn aV°dONLNdÔèπõ⁄)  nonzer|‡°dONLNdˆè⁄õÂ)!o r7`°dONLNd˘èÊõ)     esult codÒ`°dONLNdèõ)'e.°dONLNd°l≠s(™lA∫†°dONLNd°s≠à) coerØ°dONLNd °à≠3)(cion handler that accepts a descriptor r†°dONLNd3°4≠F)¨ecorá°dONLNd7°F≠ )d must be a function with the °dONLNdUÆl∫∏(∑lfollowing syntax:°dONLNdg≈l—Œ*;FUNCTION MyCoerceDesc (theAEDesc: AEDesc; toType: DescType;°dONLNd™”Ífl+~ †°dONLNd´”flˆ) @°dONLNd¨”ˆflÄ)handlerRefcon: LongInt;°dONLNdÀ·ÍÌ(ÍÍ †°dONLNd÷̈) @°dONLNdÕ·ˆÌò)VAR result: AEDesc): OSErr;°dONLNdÈ˘lØ(lThe parameter ÿ°dONLNd˜˘ØÂ)C    theAEDesc…`°dONLNd˘Â5)6 is the descriptor r´`°dONLNd˘5G)Pecor¿°dONLNd˘H‹)#d that contains the data to be coer∫‡°dONLNd;˘‹)îced. °dONLNd@l(lThe ª¿°dONLNdD£)toTypeπÄ°dONLNdJ£T)$* parameter is the descriptor type of the rpÄ°dONLNdtU¶)≤esulting data. The  ¿°dONLNdáßı)RhandlerRefcon‡°dONLNdîı˜)N °dONLNdïl±(lparameter is a r{`°dONLNd•±¡)Eefer'Ä°dONLNd©¬˙) ence constanÑ@°dONLNdµ˙)8t sɆ°dONLNd∏)
  11215. torÄ°dONLNdªL)ed in the coerq`°dONLNd…LÍ);%cion table entry for the handler and °dONLNdÓ l,Î()lpassed to the handler by the o†°dONLNd  Î,Ó)8Apple Event Manager whenever the handler is called. The °dONLNdC-l9ê(6lresult}¿°dONLNdI-ê9‡)$ parameter is the r÷Ä°dONLNd\-‡99)Pesulting descriptor r7 °dONLNdq-:9L)Zecor´Ä°dONLNdu-L9T)d.°dONLNdx?lKr(HlY@Ä°dONLNdy?rKñ)our coer§ °dONLNdÅ?ñK)$cion handler should coer*@°dONLNdô?KÖ)nce the data in the descriptor r°dONLNd∏?ÖKó)Åecorä`°dONLNdº?óK—)d to the desirã °dONLNd ?—Kfi):ed °dONLNdÕLlX…(Uldescriptor type and ri†°dONLNd‚L…XÏ)]eturn th‘Ä°dONLNdÍLÏX˘)#e d9‡°dONLNdÌL˙XX)ata in the descriptor rÚ†°dONLNd    LXXj)^ecorg°dONLNd    LkXê)d specifip‡°dONLNd    LêXª)%
  11216. ed by the  `°dONLNd    LªXfl)+result» °dONLNd    !LflX·)$ °dONLNd    "Yleô(bl    parameterS†°dONLNd    +Yôeû)-. &°dONLNd    -Yûe§)YÊÄ°dONLNd    .Y£e˛)our handler should rç°dONLNd    BYˇe;)\eturn an appr˛¿°dONLNd    OY;e`)<    opriate r¢`°dONLNd    XYaeê)& esult code.
  11217. s*ů4t*ů    °dONLNd    drl}(zlNote
  11218. ˇ·ˇ‚7^
  11219. °dONLNd    ilãr*Tµ¿°dONLNd    jqãë)o ensurO`°dONLNd    qíãÕ)!e that no coer™`°dONLNd    Õã¶);2cion is performed and that the descriptor type of °dONLNd    ±ãlóÄ(îlthe r¢`°dONLNd    ∂ãÄóÅ)>esult is of the same descriptor type as the original, specify °dONLNd    Ùól£¥(†l typeWildCard{Ä°dONLNd
  11220. ó¥£Ï)H for the desird†°dONLNd
  11221. óÏ£)8ed type.,Zapf DingbatsÁ@°dONLNd
  11222. ö¢)(uˇ0|@ˇ ˇˇˇˇ@
  11223. ˇ·ˇ‚7^
  11224. 4H\, Palatino&e.3+ä"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@äResponding to ,): Apple Events4⁄ä˙(‡ä    Handling ê)& Apple Events
  11225. , (‡4-43
  11226. ˇˇˇˇˇˇˇˇ4l4älòÄ.lBäoMM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""lBäolBäo$””””””””””””””””””””””””””””””òÄ
  11227. l6ä@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""l6ä@l6ä@˜˜˜˜˜˜˜˜˜˜˜˜˜¸ˇˇ˛¸˛ˇˇ¸ˇˇˇ˛˙ˇ˛˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜
  11228. 4è4Ö?òÄ
  11229. è6Ö@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""è6Ö@è6Ö@$˛˙ˇ˚ˇˇ˚ˇˇ˚ˇˇ    ˛˛ˇˇˇ˜˝˛ˇ˛
  11230. ˛ˇˇˇˇ
  11231. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜    ˛ˇˇ˛
  11232. ˛ˇˇˇˇ
  11233. ˛ˇˇˇˇ    ˝ˇˇˇ˙ˇˇ
  11234. ˛ˇ˛ˇˇ
  11235. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  11236. ˛ˇ˛ˇˇ
  11237. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝˛ˇ˛
  11238. ˛ˇ˛ˇˇ
  11239. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˜˜˜˝¸ˇ
  11240. ˛ˇ˛ˇˇ˝˛ˇ˛
  11241. ˛ˇ˛ˇˇ
  11242. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  11243. ˛ˇ˛ˇˇ
  11244. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  11245. ˛ˇ˛ˇˇ
  11246. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  11247. ˛ˇˇˇˇ
  11248. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  11249. ˛ˇˇˇ
  11250. ˛ˇˇˇ
  11251. ˛ˇˇˇ
  11252. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  11253. ˛ˇˇˇˇ
  11254. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  11255. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  11256. ˛ˇˇˇˇ
  11257. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähê(eäTµ¿°dONLNd\èh±)able 4-1√@°dONLNd    \±h_)"* lists the descriptor types for which the ؆°dONLNd3\_hÕ)ÆApple Event Manager pr•†°dONLNdI\ÕhÏ)novides °dONLNdPiäuú(räcoerÙ`°dONLNdTiúuÆ)cion쇰dONLNdXiØu¥). 
  11258. òH†4ôH† úäú
  11259. ˇ·ˇ‚7^    °dONLNd[éäô±(ñä    Table 4-1°dONLNdeé»ôS)>"Coercion handling provided by the 
  11260. ¿°dONLNdáéSô©)ãApple Event Managerëp°dONLNdˇˇ)V °dONLNd¶¶ä±‹(ÆäOriginal descriptor °dONLNd∫∞äªú*
  11261. typeÌ0°dONLNdæ∞úª÷) of data to be °dONLNdÕ∫ä≈¨(¬äcoerced°dONLNd’∫˛≈b)tDesired descriptor type°dONLNdÌ∫x≈©)z Description,
  11262. Courier
  11263. °dONLNd˙»ä‘∫(—ätypeChar°dONLNd»˛‘@)t typeInteger°dONLNd”˛flX* typeLongInteger°dONLNdfi˛Í4*     typeSMInt°dONLNd&È˛ı@* typeSMFloat°dONLNd1Ù˛^* typeShortInteger°dONLNdAˇ˛ 4*     typeFloat°dONLNdJ
  11264. ˛L* typeLongFloat°dONLNdW˛!R* typeShortFloat°dONLNde ˛,F* typeExtended°dONLNdq+˛7.* typeComp°dONLNdy6˛BL* typeMagnitude°dONLNdá»x‘Á(—xAny string that is a valid °dONLNd¢”xfl{* rE°dONLNd£”|flä)epr’¿°dONLNd¶”äfl)esentation of a number can be °dONLNdƒfixÍä(ÁxcoerÙ`°dONLNd»fiäÍÓ)ced into an equivalent °dONLNdflÈxı∫(Úxnumeric value.°dONLNdHäTÃ(Qä typeInteger°dONLNdSä_Í* typeLongInteger °dONLNd"^äj¿*     typeSMInt°dONLNd+iäuÃ* typeSMFloat°dONLNd6täÄÍ* typeShortInteger°dONLNdFäã¿*     typeFloat°dONLNdOääñê* t†°dONLNdPäêñÿ) ypeLongFloat°dONLNd\ïä°fi(ûätypeShortFloat°dONLNdj†ä¨“* typeExtended°dONLNdv´ä∑∫* typeComp°dONLNd~∂ä¬ÿ* typeMagnitude°dONLNdåH˛T.(Q˛typeChar°dONLNdïHxT )z Any numeric descriptor type can °dONLNdµSx_ó* be coer≈†°dONLNdºSó_)ced into the equivalent text °dONLNdŸ^xjî(gxstring.°dONLNd˙»ä‘Ã(—ä typeInteger°dONLNd”äflÍ* typeLongInteger °dONLNdfiäÍ¿*     typeSMInt°dONLNdÈäıÃ* typeSMFloatˇ˙_°dONLNd)ÙäÍ* typeShortInteger °dONLNd:ˇä ¿*     typeFloat°dONLNdC
  11265. äÿ* typeLongFloat°dONLNdPä!fi* typeShortFloat°dONLNd^ ä,“* typeExtended°dONLNdj+ä7∫* typeComp°dONLNdr6äBÿ* typeMagnitude°dONLNdÄ»˛‘@(—˛ typeInteger°dONLNdã”˛flX* typeLongInteger°dONLNdöfi˛Í4*     typeSMInt°dONLNd£È˛ı@* typeSMFloat°dONLNdÆÙ˛^* typeShortInteger°dONLNdæˇ˛ 4*     typeFloat°dONLNd«
  11266. ˛L* typeLongFloat°dONLNd‘˛!R* typeShortFloat°dONLNd‚ ˛,F* typeExtended°dONLNdÓ+˛7.* typeComp°dONLNdˆ6˛BL* typeMagnitude°dONLNd»x‘ (—x Any numeric descriptor type can °dONLNd$”xfló* be coer≈†°dONLNd+”ófl)ced into any other numeric °dONLNdFfixÍΩ(Áxdescriptor type.°dONLNdpHäT∫(QätypeChar°dONLNdyH˛T.)ttypeType°dONLNdÅS˛_R* typeEnumerated°dONLNdè^˛j@* typeKeyword°dONLNdõi˛uF* typeProperty°dONLNd®HxT†(QxAny fourΩ@°dONLNd∞H†T    )(-character string can be °dONLNd…Sx_ä(\xcoerÙ`°dONLNdÕSä_)ced to one of these descriptor °dONLNdÏ^xjí(gxtypes.°dONLNd{äáfi(ÑätypeEnumerated°dONLNdÜäíÃ* typeKeyword°dONLNdëäù“* typeProperty°dONLNd%úä®∫* typeType°dONLNd.{˛á.(Ñ˛typeChar°dONLNd7{xá)z"Any of these descriptor types can °dONLNdYÜxíó* be coer≈†°dONLNd`Üóí)ced to the equivalent text °dONLNd{ëxùî(öxstring.á∞°dONLNdá∞ıπ+}    continuedˇû@ˇ ˇˇˇˇ@
  11267. ˇ·ˇ‚7^
  11268. 4*\¯, Palatino&e.3+l"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@lResponding to ,): Apple Events4⁄*˙¯
  11269. (‡*4-44    )B    Handling ê)& Apple Events4^*¿¯°dONLNd›jlr(plNOTE\0°dONLNd‚iár5)Some of the descriptor types listed in this table aró=°dONLNdi5r¡)Æ'e synonyms; for example, the constants ,
  11270. Courier°dONLNd=sl{ó(yl    typeSMIntΔ°dONLNdFró{®)+ and O}°dONLNdKs©{ı)typeShortInteger=›°dONLNd[rˆ{;)M have the same fourxÉ°dONLNdnr;{t)E-character code, Cd°dONLNdsu{y):'J°dONLNdÄsz{ç)shorM‚°dONLNdÑsç{ë)'»°dONLNdÖrí{î).
  11271. °dONLNdñl¢¥(ül typeIntlText°dONLNdñ‡¢)ttypeChar°dONLNdñZ¢q)zThe rÄ¿°dONLNdñq¢÷)esult contains text onlyC °dONLNd3ñ÷¢€)e, °dONLNd5°Z≠Œ(™Zwithout the script code or °dONLNdP¨Z∏£* language code fr ¿°dONLNd`¨§∏Í)Jom the original °dONLNdp∑Z√ç(¿Z descriptor rfl@°dONLNd|∑ç√ü)3ecorS†°dONLNdÄ∑†√®)d.°dONLNdÑ…l’ú(“ltypeTrue°dONLNdç…‡’")t typeBoolean°dONLNdô…Z’q)zThe rÄ¿°dONLNdû…q’„)esult is the Boolean value °dONLNdπ‘Z‡r(›ZTRUE~Ä°dONLNdΩ‘r‡t).°dONLNd¿ÊlÚ¢(Ôl    typeFalse°dONLNd Ê‡Ú")t typeBoolean°dONLNd÷ÊZÚq)zThe rÄ¿°dONLNd€ÊqÚ„)esult is the Boolean value °dONLNdˆÒZ˝x(˙ZFALSE~ °dONLNd˚Òx˝z).°dONLNd˛l¿( ltypeEnumerated°dONLNd‡")t typeBoolean°dONLNdZø)zThe enumerated value u@°dONLNd.¿‰)f'true's°dONLNd4‰Ê)$ °dONLNd5Z”(Zbecomes the Boolean value XÄ°dONLNdO‘Ï)zTRUEW°dONLNdSÏÒ). °dONLNdUZ%ø("ZThe enumerated value u@°dONLNdj¿%‰)f'fals's°dONLNdp‰%Ê)$ °dONLNdq$Z0”(-Zbecomes the Boolean value XÄ°dONLNdã$‘0Ú)zFALSEV†°dONLNdê$Ú0Ù).°dONLNdì6lBÆ(?l typeBoolean°dONLNdü6‡B4)ttypeEnumerated°dONLNdÆ6ZBÆ)zThe Boolean value •@°dONLNd¿6ÆBÃ)TFALSE£`°dONLNd≈6ÃBŒ) °dONLNdΔAZMÂ(JZbecomes the enumerated value °dONLNd„LZX~* 'fals'}¿°dONLNdÈL~X◊)$. The Boolean value £°dONLNd˝L◊XÔ)YTRUE°Ä°dONLNdLÔXÒ) °dONLNdWZcÂ(`Zbecomes the enumerated value °dONLNdbZn~* 'true'}¿°dONLNd%b~nÄ)$.°dONLNd(tlÄÃ(}ltypeShortInteger°dONLNd9lã¢*     typeSMInt°dONLNdCt‡Ä"(}‡ typeBoolean°dONLNdOtZÄa)zA∫†°dONLNdPtaÄ)  value of 1 becomes the Boolean °dONLNdpZãt(àZvalue _`°dONLNdvuãç)TRUE]‡°dONLNdzçãí). ˇÄ°dONLNd|ëãò)A: °dONLNd}ôãÒ) value of 0 becomes °dONLNdëäZñ´(ìZthe Boolean value Δ‡°dONLNd£ä´ñ…)QFALSE≈°dONLNd®ä…ñÀ).°dONLNd´úl®Æ(•l typeBoolean°dONLNd∑ú‡®@)ttypeShortIntegerz°dONLNd«ú@®F)` °dONLNd»߇≥(∞‡    typeSMInt°dONLNd“úZ®a(•ZA∫†°dONLNd”úa®â)
  11272.  value of c`°dONLNd›úä®®))FALSEaÄ°dONLNd‚ú®®›)  becomes 0. ¿°dONLNdÓú›®‰)5AO`°dONLNdÔú‰®Ê) °dONLNdßZ≥Ä(∞Z    value of ®¿°dONLNd˘ßÄ≥ò)&TRUEß@°dONLNd˝ßò≥ )  becomes 1.°dONLNd
  11273. πl≈¢(¬l    typeAlias°dONLNdπ‡≈
  11274. )ttypeFSS°dONLNdπZ≈Ñ)z
  11275. An alias rÎ`°dONLNd&πÑ≈ñ)*ecor_¿°dONLNd*πó≈ª)    d is coer@°dONLNd3πº≈È)% ced into a °dONLNd>ƒZ–`(ÕZfiå¿°dONLNd@ƒ`–®)le system specifiñ°dONLNdQƒ®–…)Hcation rº‡°dONLNdYƒ…–€)!ecor1@°dONLNd]ƒ‹–‰)d.°dONLNda÷l‚¿(flltypeAppleEvent°dONLNdp÷‡‚F)ttypeAppParameters°dONLNdÇ÷Z‚j)zAn :@°dONLNdÖ÷j‚ø)Apple event is coer¿°dONLNdò÷ø‚Ï)U ced into a °dONLNd£·ZÌÏ(ÍZ#list of application parameters for °dONLNdΔÏZ¯j* the ›`°dONLNd Ïj¯‹)LaunchParamBlockRec÷@°dONLNd›Ï‹¯fi)r °dONLNdfi˜Z§(Zparameter block.°dONLNd    lπ(lany descriptor type°dONLNd    ‡)t
  11276. typeAEList°dONLNd    Za)zA∫†°dONLNd    aó) descriptor rô‡°dONLNd    ó©)6ecor@°dONLNd!    ™Œ)    d is coer√¿°dONLNd*    ŒÛ)$    ced into °dONLNd3Z ˆ(Z&a descriptor list containing a single °dONLNdYZ+p* item.°dONLNd`1l=®(:l
  11277. typeAEList°dONLNdk1‡=)ttype of list item°dONLNd}1Z=a)zA∫†°dONLNd~1a=€) descriptor list containing a °dONLNdú<ZH™(EZsingle descriptor ró °dONLNdØ<™Hº)Pecor Ä°dONLNd≥<ΩH·)    d is coer¡°dONLNdº<·HÚ)$ced °dONLNd¿GZS®(PZinto a descriptor rP‡°dONLNd”G©Sª)Oecor≈@°dONLNd◊GªS√)d.a°dONLNdŸGƒSΔ)     
  11278. g*n¯4g*n¯ jlj¯
  11279. ˇ·ˇ‚7^    °dONLNdˇˇ(dl    Table 4-1°dONLNdˇˇ)>"Coercion handling provided by the 
  11280. ¿°dONLNdˇˇ)ãApple Event Managerëp°dONLNdˇˇ)V  (continued)°dONLNdˇˇ(|lOriginal descriptor °dONLNdˇˇ*
  11281. typeÌ0°dONLNdˇˇ) of data to be °dONLNdˇˇ(êlcoerced°dONLNdˇˇ)tDesired descriptor type°dONLNdˇˇ)z Descriptionˇ=»@ˇ ˇˇˇˇ@
  11282. ˇ·ˇ‚7^
  11283. 4H\, Palatino&e.3+ä"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@äResponding to ,): Apple Events4⁄ä˙(‡äInteracting WÅ0)5 ith the User
  11284. , (‡4-45
  11285. ˇˇˇˇˇˇˇˇ4l4älòÄ.lBäoMM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""lBäolBäo$””””””””””””””””””””””””””””””òÄ
  11286. l6ä@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""l6ä@l6ä@˜˜˜˜˜˜˜˜˜˜˜˜˜¸ˇˇ˛¸˛ˇˇ¸ˇˇˇ˛˙ˇ˛˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜
  11287. 4è4Ö?òÄ
  11288. è6Ö@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""è6Ö@è6Ö@$˛˙ˇ˚ˇˇ˚ˇˇ˚ˇˇ    ˛˛ˇˇˇ˜˝˛ˇ˛
  11289. ˛ˇˇˇˇ
  11290. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜    ˛ˇˇ˛
  11291. ˛ˇˇˇˇ
  11292. ˛ˇˇˇˇ    ˝ˇˇˇ˙ˇˇ
  11293. ˛ˇ˛ˇˇ
  11294. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  11295. ˛ˇ˛ˇˇ
  11296. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝˛ˇ˛
  11297. ˛ˇ˛ˇˇ
  11298. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˜˜˜˝¸ˇ
  11299. ˛ˇ˛ˇˇ˝˛ˇ˛
  11300. ˛ˇ˛ˇˇ
  11301. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  11302. ˛ˇ˛ˇˇ
  11303. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  11304. ˛ˇ˛ˇˇ
  11305. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  11306. ˛ˇˇˇˇ
  11307. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  11308. ˛ˇˇˇ
  11309. ˛ˇˇˇ
  11310. ˛ˇˇˇ
  11311. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  11312. ˛ˇˇˇˇ
  11313. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  11314. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  11315. ˛ˇˇˇˇ
  11316. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  11317. ^Hx4^Hx
  11318. àHê4âHê äHä
  11319. ˇ·ˇ‚7^ˇˇ©ˇÆ°dONLNduHà™(ÉHInteracting WS-°dONLNdu™à˝)b ith the UserˇˇˇˇˇˇU˛(É4
  11320. °dONLNdô䕈(¢äWhen your application rʆ°dONLNd2ôˆ•%)l eceives an Ú`°dONLNd=ô%•)/2Apple event, it may need to interact with the usera¿°dONLNdoô•)€. °dONLNdq¶ä≤É(Øä8For example, it may need to display a dialog box asking û`°dONLNd©¶É≤®)˘    the user | °dONLNd≤¶©≤Ë)&for additional °dONLNd¡≥äø‚(ºäinformation or config`°dONLNd’≥„ø)YrmatioŒ@°dONLNd€≥ø)n.†°dONLNd›≥    ø )     r°dONLNdfi≥ ø)Y2Ä°dONLNdfl≥øY)ou must use the ,
  11321. CourierÙ¿°dONLNdÔ≥Yø≈)HAEInteractWithUserÓ°dONLNd≥≈ø)l function to make °dONLNd¿äÃò(…äsurâ °dONLNd¿òÃ) e your application is in the forR‡°dONLNd6¿Ã+)Öegrp†°dONLNd9¿+Ã[)
  11322. ound befor:°dONLNdC¿\ÃÛ)1%e it actually interacts with the usercÄ°dONLNdh¿Ûï)ó. °dONLNdk“äfiπ(€äGBoth the client application and the server application specify their prx†°dONLNd≤“πfi…(€πefer$¿°dONLNd∂“ fi    )ences for user °dONLNd≈fläκ(Ëä interaction.ö@°dONLNd—flºÎ—)2 The V°dONLNd÷fl“Î>)AEInteractWithUserO@°dONLNdËfl>ÎÈ)l( function checks the user interaction pr‰@°dONLNdflÈ΢)´eferê`°dONLNdfl˙Î)ences °dONLNdÏä¯Â(ıäSset by each application. If both the client and the server allow user interaction, °dONLNdm˘äˆ*AEInteractWithUsery@°dONLNd˘ˆQ)l usually posts a notifÓ`°dONLNdï˘Qu)[    ication r˝†°dONLNdû˘u—)$equest, and the NotiféÄ°dONLNd≥˘“Ú)]ication °dONLNdªä)(ä$Manager brings the server to the forn‡°dONLNdfl)7)üegr冰dONLNd‚7ë)ound after the user rΆ°dONLNd˜ëÎ)Zesponds to the notifi'†°dONLNd Ï    )[cation °dONLNdäç(ärE°dONLNdéØ)equest. °dONLNd%ä1ù(.äThe ª¿°dONLNd!%ù1    )AEInteractWithUserµ°dONLNd3%    1‚)l3 function can also bring the server application dir°dONLNdf%„1)⁄ectly to the °dONLNds2ä>ñ(;äfor`°dONLNdv2ó>•)egr, °dONLNdy2•>Î)Mound, but only if the client application is the active application on the sam°dONLNdΔ2Ï>Û(;Ïe °dONLNd»?äKº(Hä
  11323. computer a¡†°dONLNd“?ºK)2nd has set two fl!¿°dONLNd„?K1)I ags in the °dONLNdÓ?2Kb)-sendMode°dONLNdˆ?bK∞)0 parameter of the 9¿°dONLNd?∞K‘)NAESend7Ä°dONLNd?‘K)$  function: °dONLNdLäXó(Uäthe]`°dONLNdLòXö) ›`°dONLNdLöX‚) kAEWaitReplyÿ‡°dONLNd)L‚XÍ)H fle†°dONLNd,LÎXß)    .ag, which indicates that it is waiting for a r∞ °dONLNdZLßX∫)ºeply◊†°dONLNd^LπX·)
  11324. , and the °dONLNdhYäe(bäkAECanSwitchLayery†°dONLNdyYeı)f f°dONLNd{Yˆe˜)=lag, which indicates that it wants the server application to °dONLNd∏fär°(oäcome`°dONLNdºf¢r§) É`°dONLNdΩf§r∞)dirLÄ°dONLNd¿f±r)ectly to the for„‡°dONLNd–fr˛)?egr†°dONLNd”fˇrè) ound rather than posting a notifiQ`°dONLNdÙfèr∞)êcation rx@°dONLNd¸f∞rœ)!equest.°dONLNdxäÑê(ÅäTµ¿°dONLNdxèѪ) o specify iX°dONLNdxºÑœ)-ts prÄ°dONLNdx–ч)efer †°dONLNdx‡Ñ)Bences for how the server application should interact with the userî°dONLNd[xÑ(Å,°dONLNd\xÑ) °dONLNd]Öäë(éäthe client application sets v^‡°dONLNdzÖë&)xarious flÄ@°dONLNdÉÖ&ëR)$ ags in the cÄ°dONLNdéÖSëÉ)-sendMode`Ä°dONLNdñÖÉë¿)0 parameter to )`°dONLNd§Ö¡ëÂ)>AESend' °dONLNd™ÖÂë˝)$. The °dONLNd∞íäû#(õä!Apple Event Manager sets the corr؆°dONLNd—í#ûZ)ô esponding fl†°dONLNd›íZûÜ)7 ags in the ”‡°dONLNdËíáûˇ)-keyInteractLevelAttrÃ`°dONLNd¸íˇû)x °dONLNd˝üä´Œ(®äattribute of the B‡°dONLNdüŒ´)D Apple event.°dONLNd±äΩ(∫ä"The server application sets its prÉ@°dONLNd=±Ω))èefer/`°dONLNdA±*Ωk)ences with the Ò¿°dONLNdP±kΩı)AAESetInteractionAllowedÈ °dONLNdg±ıΩ˜)ä °dONLNdhæä («äYfunction. This function lets your application specify whether it allows interaction with °dONLNd¡Àä◊«*the user as a r_¿°dONLNd–À«◊Ì)=
  11325. esult of r&†°dONLNd⁄ÀÓ◊")' eceiving an t†°dONLNdÊÀ"◊b)4Apple event frX@°dONLNdÙÀb◊î)@om itself; fr®@°dONLNdÀî◊È)2om itself and other °dONLNdÿä‰ì(·äprG °dONLNdÿî‰Ê)
  11326. ocesses on the locaÈÄ°dONLNd*ÿʉ)R l computer;ìÄ°dONLNd5ÿ‰.)3 or frÄ°dONLNd;ÿ/‰{)om itself, local prI@°dONLNdNÿ{‰Ω)Locesses, and pr≠Ä°dONLNd]ÿΩ‰Ê)B
  11327. ocesses frv`°dONLNdgÿÁ‰˜)*om °dONLNdjÂäÒ!(Óä another computer on the network.°dONLNdã˜äê*Y@Ä°dONLNdå˜ê¸)our application calls the ¬°dONLNd¶˜¸h)lAEInteractWithUserª@°dONLNd∏˜h©)l function befor© °dONLNd«˜©    )Ae interacting with the °dONLNdfiäù(äuser√°dONLNd‚ú™). If ı`°dONLNdÁ™)AEInteractWithUserÓ†°dONLNd˘)l r3†°dONLNd˚K) eturns the % °dONLNdLj)/noErr#@°dONLNd jp) rh@°dONLNdp)%esult code, then your application is °dONLNd2äú(äcurrØ°dONLNd6ú◊)ently in the fr3‡°dONLNdEÿÛ)<ont anÄ°dONLNdKÙˇ)d f˛ °dONLNdNˇ) r√ °dONLNdOx)ee to interact with the userl¿°dONLNdkxÜ)u. If ü °dONLNdpÜÚ)AEInteractWithUserò`°dONLNdÇÚÙ)l °dONLNdÉä*ç('ärE°dONLNdÑé*º) eturns the 6Ä°dONLNdèΩ*A)/errAENoUserInteraction.@°dONLNd•A*G)Ñ rs@°dONLNdßG*)-esult code, the conditions didn’t allow user °dONLNd‘+ä7´(4äBinteraction and your application should not interact with the user3Ä°dONLNd    +´7≠(4´.°dONLNd    =äI°(FäThe rÄ¿°dONLNd    =°I˝)Test of this section explains how to set user interactions for the client and server °dONLNd    qJäV(Sä!applications and the practical ef†°dONLNd    íJV#)çfec§`°dONLNd    ïJ#V,) t t© °dONLNd    òJ,Vf)    hese settings \°dONLNd    ¶JgV~);have @°dONLNd    ´JVπ) when a serveI¿°dONLNd    ∑JπV≈):r nç¿°dONLNd    ∫J≈V
  11328. ) eeds to interact °dONLNd    ÀWäcª(`ä with a user °dONLNd    ÷WªcΩ)1.ˇ"∂@ˇ ˇˇˇˇ@
  11329. ˇ·ˇ‚7^
  11330. 4*\¯, Palatino&e.3+l"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@lResponding to ,): Apple Events4⁄*˙¯
  11331. (‡*4-46    )BInteracting WÅ0)5 ith the User4^*¿¯
  11332. k*r¯4l*r¯ mlm¯
  11333. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd\lk◊(glSetting the Client ãj°dONLNd\◊k)k Application’/R°dONLNd\k’)Fs User Interaction Preferencesˇˇˇˇˇˇ€r)”4
  11334. °dONLNd?rl~?({l3The client application sets its user interaction pr‡Ä°dONLNdrr?~O)”efer冰dONLNdvrP~û)ences by setting fl@°dONLNdârü~À)O ags in the ,
  11335. Courier°dONLNdîlãú(àlsendMode}°dONLNdúúãÍ)0 parameter to the £@°dONLNdÆÍã)NAESend°°dONLNd¥ãM)$ function. The  †°dONLNd√NãÒ)@"Apple Event Manager automatically °dONLNdÂålò∞(ïladds the specifi@°dONLNdıå±òƒ)Eed fl≤ °dONLNd˙åƒò) ags to the ìÄ°dONLNdåÒòi)-keyInteractLevelAttrå°dONLNdåiòØ)x attribute of the Œ‡°dONLNd+åØòÍ)FApple event. °dONLNd8ôl•é(¢lThese flœ °dONLNd@ôé•®)"ags ar‡@°dONLNdFô®•≥)e rÓ‡°dONLNdIô≥•¡) epr†°dONLNdLô¬•])#esented by the following constants:°dONLNdÁ®l¥«(±lFor example, supposlÄ°dONLNd˙®»¥‘)\e a∂ °dONLNd˝®‘¥Δ) 9 client application sends a Set Data event to a database °dONLNd6µl¡˝(æl application to change a customer`°dONLNdVµˇ¡)ì’s addrï °dONLNd]µ¡ø)%ess. The database application is confi!°dONLNdɵ¿¡œ)£gur|@°dONLNdܵœ¡Á)ed to °dONLNdå¬lŒo(ÀlrE°dONLNdç¬pŒ∫)equest user confiº °dONLNdû¬∫ŒL)J rmation of changes to a customerX@°dONLNdæ¬NŒ[)î’s r°Ä°dONLNd¬¬[Œm)ecor‡°dONLNdΔ¬nŒÍ) d. In this case the client sets °dONLNdÊœl€|(ÿlthe ›`°dONLNdÍœ|€–)kAECanInteractÿ °dONLNd¯œ–€ÿ)T fld‡°dONLNd˚œŸ€˝)    ag beforS†°dONLNdœ˝€‡)$4e sending the event. Thus, the database application °dONLNd7‹lËb(Âl;attempts to interact with the user if interaction is alloweZ`°dONLNdr‹cËt)˜d. If(Ä°dONLNdw‹uËÏ) interaction is not allowed, °dONLNdîÈlıÊ(Últhe database makes the corr.@°dONLNdØÈÁı£){)ection anyway without consulting the userA¿°dONLNdÿÈ£ı—)º    . HoweverŒ`°dONLNd·È–ıÓ)-    , if the °dONLNd͈lp(ˇl<client application sends a Delete event to delete a customer≠@°dONLNd&ˆq~(ˇq’s rˆÄ°dONLNd*ˆ~ê)ecorj‡°dONLNd.ˆëÆ)d entirë`°dONLNd5ˆÆÙ)ely and sets the °dONLNdFl“( lkAEAlwaysInteracty†°dONLNdW“◊)f f°dONLNdYÿ£)0lag, the database application deletes the specifŸ†°dONLNdâ£∑)Àied rÏ`°dONLNdé∑…)ecor`¿°dONLNdí “)d ¸Ä°dONLNdî“Ë)only :‡°dONLNdôÈÒ)if °dONLNdúlÌ(lit can interact with the user fiï°dONLNdºÌ)Å    rst and rπ °dONLNd≈I)% eceives confiï¿°dONLNd“J‚)8$rmation of the decision to delete a °dONLNdˆl)o(&lrE°dONLNd˜p)Ç)ecorπ`°dONLNd˚Ç)∫)Jd. If interaction with the user is not allowed, the database application r…Ä°dONLNd    E∫)Â(&∫
  11336. eturns an °dONLNd    O*l6x(3lerr@°dONLNd    R*y6Ç)or¨°dONLNd    T*Å6ƒ). By setting the àÄ°dONLNd    e*≈6+)DkAEAlwaysInteractÇ °dONLNd    v*+63)f fl‡°dONLNd    y*46ª)     ag, the client application ensurt¿°dONLNd    ô*ª6Í)á es that the °dONLNd    •7lCÄ(@lentir
  11337. ¿°dONLNd    ™7ÅCå)e r`°dONLNd    ≠7åCû) ecorç¿°dONLNd    ±7ûC®)>d won’t be lost if the user sends the Delete event by mistake.°dONLNd    IlUT(Rl8If the client application doesn’t specify any of the thr¸@°dONLNd
  11338. (ITU≠)Ëee user interaction fl∂‡°dONLNd
  11339. >IÆU“)Z    ags, the °dONLNd
  11340. GVlbâ(_lApple }Ä°dONLNd
  11341. MVäb)Event Manager sets either the @°dONLNd
  11342. kVbp)ÜkAENeverInteract@°dONLNd
  11343. {Vpbé)` or the ”¿°dONLNd
  11344. ÉVéb‚)kAECanInteractŒÄ°dONLNd
  11345. ëV‚bÍ)T fl[@°dONLNd
  11346. îVÎb¯)    ag °dONLNd
  11347. ócloá(llin the  °dONLNd
  11348. ûcào)keyInteractLevelAttr†°dONLNd
  11349. ≤coF)x attribute of the RÄ°dONLNd
  11350. ƒcFo—)FApple event, depending on the °dONLNd
  11351. ‚pl|ë(yl    location ?¿°dONLNd
  11352. Îpí|ê)&>of the server application. If the server application is on a rÿ°dONLNd )pê|ÿ)˛emote computerp °dONLNd 7pÿ|›)H,     °dONLNdp≤lΩ~(∫lFlag°dONLNdu≤ÊΩ)z Description
  11353. °dONLNdÇ¿lÃÃ(…lkAENeverInteract°dONLNdì¿Êô)z-The server application should never interact °dONLNd¿ÀÊ◊˙* with” °dONLNdƒÀ˙◊¸) S °dONLNd≈À˝◊
  11354. )the0Ä°dONLNd»À ◊) ∞Ä°dONLNd…À◊ )user∞‡°dONLNdÕÀ ◊") 0‡°dONLNdŒÀ#◊+)in͆°dONLNd–À+◊-) j†°dONLNd—À.◊1)r/†°dONLNd“À2◊f) esponse to tÄ °dONLNdfiÀf◊s)4he <¿°dONLNd·Às◊z)A°dONLNd‚À{◊∑)pple event. If °dONLNdÒ÷Ê‚ˆ(flÊthisπ °dONLNdı÷ˆ‚¯) 9 °dONLNdˆ÷˘‚ˇ)flE‡°dONLNd¯÷ˇ‚    )ag’°dONLNd˙÷    ‚ )
  11355.  U°dONLNd˚÷ ‚)isz`°dONLNd˝÷‚) ˙`°dONLNd˛÷‚#)set,√`°dONLNd÷$‚&) C`°dONLNd÷'‚ì)AEInteractWithUser<†°dONLNd÷ì‚ô)l rņ°dONLNd÷ô‚«) eturns the °dONLNd"·ÊÌj(ÍÊerrAENoUserInteractionw¿°dONLNd8·jÌp)Ñ rº¿°dONLNd:·pÌ∫)esult code. This f¸@°dONLNdL·∫Ì„)J lag is the °dONLNdWÏʯ0(ıÊdefault when an °Ä°dONLNdgÏ0¯ù)JApple event is sent to a r(‡°dONLNdÅÏû¯Ô)nemote application.°dONLNdï¸l¿(lkAECanInteract°dONLNd§¸ÊÃ)z6The server application can interact with the user in r*†°dONLNd⁄¸ÕÚ)Áesponse °dONLNd‚ÊÙ(Êto t˙@°dONLNdÊÙ)he ∂‡°dONLNdÈ)A~ °dONLNdÍ    €)/pple event—by convention, if the user needs to °dONLNdÊu(Ê supply information to the server.‡°dONLNd9uõ)è . If this fl' °dONLNdEúÂ)'ag is set and the °dONLNdWÊ)W(&Êserver allows interaction, P@°dONLNdrX)ƒ)rAEInteractWithUserIÄ°dONLNdу)‚)l either °dONLNdå(Ê4è(1Ê(brings the server application to the forì¿°dONLNd¥(è4ù)©egr±Ä°dONLNd∑(ù4‰)ound or posts a °dONLNd«3Ê?˝(<Ênotifi˛`°dONLNdÕ3˝?)cation r%@°dONLNd’3?\)"equest. This fl|`°dONLNd‰3\?Õ)=ag is the default when an Ø¿°dONLNd˛3Õ?Í)qApple °dONLNd>ÊJ}(GÊ%event is sent to a local application.≤@°dONLNd)>}J)ó °dONLNd,NlZ“(WlkAEAlwaysInteract°dONLNd>NÊZÃ)z6The server application can interact with the user in r*†°dONLNdtNÕZÚ)Áesponse °dONLNd|YÊeÙ(bÊto t˙@°dONLNdÄYÙe)he ∂‡°dONLNdÉYe)A~ °dONLNdÑY    e‚).pple event—by convention, whenever the server °dONLNd≤dÊpò(mÊ(application normally asks a user to confi)Ä°dONLNd€dôp‚)≥rm a decision or °dONLNdÏoÊ{T(xÊinteract in any other way °dONLNdoT{˜)n', even if no additional information is °dONLNd,zÊÜ(ÉÊ    needed fr~†°dONLNd5zÜD)* om the userËÄ°dONLNd@zCÜi)3 . If this fl‡¿°dONLNdLzjÜ)' ag is set and the server allows °dONLNdlÖÊë(éÊinteraction, @°dONLNdyÖëá)5AEInteractWithUserÄ°dONLNdãÖáëÚ)l either brings the server °dONLNd•êÊúB(ôÊapplication to the for⁄Ä°dONLNdªêBúP)\egr¯@°dONLNdæêPúÆ)ound or posts a notifi|Ä°dONLNd‘êØú–)_cation r£`°dONLNd‹ê–úÒ)!equest. ˇB*@ˇ ˇˇˇˇ@
  11356. ˇ·ˇ‚7^
  11357. 4H\, Palatino&e.3+ä"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@äResponding to ,): Apple Events4⁄ä˙(‡äInteracting WÅ0)5 ith the User
  11358. , (‡4-47
  11359. ˇˇˇˇˇˇˇˇ4l4älòÄ.lBäoMM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""lBäolBäo$””””””””””””””””””””””””””””””òÄ
  11360. l6ä@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""l6ä@l6ä@˜˜˜˜˜˜˜˜˜˜˜˜˜¸ˇˇ˛¸˛ˇˇ¸ˇˇˇ˛˙ˇ˛˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜
  11361. 4è4Ö?òÄ
  11362. è6Ö@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""è6Ö@è6Ö@$˛˙ˇ˚ˇˇ˚ˇˇ˚ˇˇ    ˛˛ˇˇˇ˜˝˛ˇ˛
  11363. ˛ˇˇˇˇ
  11364. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜    ˛ˇˇ˛
  11365. ˛ˇˇˇˇ
  11366. ˛ˇˇˇˇ    ˝ˇˇˇ˙ˇˇ
  11367. ˛ˇ˛ˇˇ
  11368. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  11369. ˛ˇ˛ˇˇ
  11370. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝˛ˇ˛
  11371. ˛ˇ˛ˇˇ
  11372. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˜˜˜˝¸ˇ
  11373. ˛ˇ˛ˇˇ˝˛ˇ˛
  11374. ˛ˇ˛ˇˇ
  11375. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  11376. ˛ˇ˛ˇˇ
  11377. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  11378. ˛ˇ˛ˇˇ
  11379. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  11380. ˛ˇˇˇˇ
  11381. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  11382. ˛ˇˇˇ
  11383. ˛ˇˇˇ
  11384. ˛ˇˇˇ
  11385. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  11386. ˛ˇˇˇˇ
  11387. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  11388. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  11389. ˛ˇˇˇˇ
  11390. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿°dONLNd\ähö(eäthe °dONLNd\öh∑)Apple |Ä°dONLNd
  11391. \∏h!)Event Manager sets the ,
  11392. Courier@°dONLNd!\"hÇ)jkAENeverInteract @°dONLNd1\Çhä)` flò°dONLNd4\ähÒ)ag as the default. If the °dONLNdNiäuß(räserver [¿°dONLNdUi®uE)$application is on the local computeró°dONLNdyiEuZ)ù, the ñ°dONLNdiZu·)Apple Event Manager sets the °dONLNdúväÇfi(äkAECanInteractz¿°dONLNd™vfiÇ„)T f °dONLNd¨v‰Ç) lag as the 1°dONLNd∑vÇ1),default.°dONLNd¿àäîç(ëäIfiÄ°dONLNd¡àçîÂ)n addition to the thrØ`°dONLNd÷àÊî?)Yee user interaction flj°dONLNdÏà@î˛)Z-ags, the client application can set another fló°dONLNdà˛î )æag °dONLNdïä°•(ûäin the  °dONLNd$ﶰ÷)sendMode °dONLNd,ï÷°)0 parameter to ›°dONLNd:ï°7)=AESend⁄¿°dONLNd@ï7°H)$ to rW†°dONLNdEïI°å)equest that the _†°dONLNdUïå°)CApple Event Manager °dONLNdi¢äÆN(´ä,immediately bring the server application dir]‡°dONLNdï¢NÆç)ƒectly to the forı@°dONLNd•¢çÆõ)?egr°dONLNd®¢úÆ)ound instead of posting a °dONLNd¬Ø䪰(∏änotifi˛`°dONLNd»Ø°ª¬)cation r%@°dONLNd–Ø√ª‚)"equest:°dONLNdç;äG∞(DäNote tha‰ °dONLNdï;∞G„)& t although tB °dONLNd°;‰GÒ)4he ] °dONLNd§;ÒGW)kAECanSwitchLayerV¿°dONLNdµ;WG_)f fl„Ä°dONLNd∏;_Gö)ag must be se•°dONLNd≈;õG§)<t fª@°dONLNd»;§G¿)    or the ¢`°dONLNdœ;¿G˙) Apple Event °dONLNd€HäTH(Qä+Manager to bring the server application dirF °dONLNdHITà)øectly to the for›Ä°dONLNdHàTñ)?egr˚@°dONLNdHñT ) ound, settin™ °dONLNd%HÀT)5g it does not °dONLNd3Uäaè(^äg °dONLNd4Uêa›)uarantee that the °dONLNdFU›aù)M)Apple Event Manager will bypass the notifi≤†°dONLNdpUùaæ)¿cation rŸÄ°dONLNdxUæa˚)!equest if user °dONLNdábänˆ(käinteraction is permitted. Δ °dONLNd°bˆn#)l    Another fl1°dONLNd´b$nC).ag, the Ä°dONLNd≥bDnå)  kAEWaitReply°dONLNdøbånî)H fl•¿°dONLNd¬bîn)ag, must also be set in the °dONLNdfioä{∫(xäsendMode}°dONLNdÊo∫{Ê)0     parameteõ`°dONLNdÔoÊ{È),r–†°dONLNdoÈ{É)$, and the client application must pr°dONLNdoÑ{Á)õovide an idle function.°dONLNd,Åäçù(ääThe ª¿°dONLNd0ÅùçÂ) kAEWaitReply∑@°dONLNd<ÅÂçÌ)H flD°dONLNd?ÅÓç/)    ag is one of thr´ °dONLNdOÅ/çA)Aee flÀ °dONLNdTÅAçm) ags in the Æ`°dONLNd_Ånçû)-sendMode´`°dONLNdgÅûç)0 parameter that a client °dONLNdÄéäöŸ(óäMapplication can set to specify whether and how the client should wait for a rò`°dONLNdÕéŸöÏ(óŸeplyø‡°dONLNd—éÎö). °dONLNd”õäßú(§ä(ForÀ °dONLNd◊õúßû) K °dONLNdÿõüߧ)aK °dONLNdŸõ§߶) À °dONLNd⁄õ¶ß)description of these flʆ°dONLNdÒõß))_    ags, see °dONLNd˙õ*ßc)% “Sending an µ`°dONLNdõbß)8$Apple Event and Handling the Reply” °dONLNd*®ä¥Ø(±äon page !¿°dONLNd2®∞¥¬)&3-30u†°dONLNd6®¬¥å)3.) If the client application is not waiting for a r®¿°dONLNdi®å¥ü) eply–@°dONLNdm®û¥ˆ), the user may have °dONLNdŵä¡˚(æäcontinued with other wor˜Ä°dONLNdôµ˚¡)qk. (@°dONLNdúµ¡) An¿‡°dONLNdûµ¡i) application switch ¯ °dONLNd≤µi¡†)Vat this point g`°dONLNd¿µ°¡∏)8mighÑ@°dONLNdƒµ∏¡√)t bŒ@°dONLNd«µ√¡ˇ) e unexpected °dONLNd‘¬äŒö(Àäandm °dONLNd◊¬õŒù) Ì °dONLNdÿ¬ùŒº)would D‡°dONLNdfi¬ΩŒ“) thus ¿°dONLNd„¬”Œe)#violate the principle of user contr∂ °dONLNd¬eŒ¥)íol as described in Â`°dONLNd¬¥Œ)OMacintosh Human °dONLNd)œä€›(ÿäInterface Guidelines.°dONLNd?·äÌ*#If the client application sets the H`°dONLNdb·Ì^)å kAEWaitReplyC‡°dONLNdn·^Ìf)H fl–†°dONLNdq·fÌΩ)ag, it should also pr˚†°dONLNdÜ·Ω̯)Wovide an idle °dONLNdîÓä˙Î(˜äfunction when it calls ˙`°dONLNd´ÓÎ˙)aAESend¯ °dONLNd±Ó˙ )$< so that it can handle events such as update events that it °dONLNdÌ˚äç(ärE°dONLNdÓ˚é)eceives while waiting for the rIÄ°dONLNd˚&)Öeplyq°dONLNd˚%r). Idle functions ar≠Ä°dONLNd$˚r±)Me described in ãÄ°dONLNd3˚≤¡)@“WŒ °dONLNd5˚¿˚)riting an Idle °dONLNdDä∏(ä
  11393. Function,”IÄ°dONLNdNπ)/ which begins on π‡°dONLNd_)Mpage î¿°dONLNdd0)5-21ˆ°dONLNdh02).°dONLNdjä&(#ä When a server application calls ˝°dONLNdä&Ç)åAEInteractWithUser8‡°dONLNdúÇ&ƒ)l, the function fi1@°dONLNd≠≈&Î)C    rst check-‡°dONLNd∂Ï&Ú)'s °dONLNd∏'ä3¥(0ä    whether t`°dONLNd¡'µ3¬)+he `°dONLNdƒ'¬3")kAENeverInteract`°dONLNd‘'"3*)` fl¶ °dONLNd◊'*3R)
  11394. ag in the L`°dONLNd·'S3À))keyInteractLevelAttrD‡°dONLNdı'À3)x attribute of the °dONLNd    4ä@Ù(=äApple event is set. (The j`°dONLNd     4Ù@Ω)j-Apple Event Manager sets this attribute accoṙ°dONLNd    M4Ω@ı)…ding to the fltÄ°dONLNd    [4ˆ@)9ags °dONLNd    _AäM¶(JäspecifiÓ °dONLNd    fA¶MŒ)
  11395. ed in the ͆°dONLNd    pAœMˇ))sendModeÁ†°dONLNd    xAˇM<)0 parameter of ¬°dONLNd    ÜA=Ma)>AESendø¿°dONLNd    åAaMÇ)$
  11396. .) If the £`°dONLNd    ñAÉM„)"kAENeverInteractù`°dONLNd    ¶A„MÎ)` fl* °dONLNd    ©AÏM)     ag is set, °dONLNd    ¥NäZˆ(WäAEInteractWithUsery@°dONLNd    ΔNˆZ6)l immediately r‡°dONLNd    ‘N7Ze)A eturns the `°dONLNd    flNfZÍ)/errAENoUserInteraction     °dONLNd    ıNÍZ)Ñ rN °dONLNd    ˜NZ)esult °dONLNd    ˝[ägÙ(däcode. If the client specifiÁ`°dONLNd
  11397. [Ùg)jed L¿°dONLNd
  11398. [gV)kAECanInteractGÄ°dONLNd
  11399. )[Vgd)T or ؆°dONLNd
  11400. -[dg )kAEAlwaysInteract©@°dONLNd
  11401. >[ gœ)f, °dONLNd
  11402. @hätˆ(qäAEInteractWithUsery@°dONLNd
  11403. RhˆtD)l checks the server7`°dONLNd
  11404. dhEtX)O’s prÇ¿°dONLNd
  11405. ihXth)efer.‡°dONLNd
  11406. mhit⁄)ences for user interaction.ó`°dONLNd
  11407. àh⁄t‹)q     °dONLNdÿ»ä”ú(–äFlag°dONLNd›»”5)z Description
  11408. °dONLNdÍ÷ä‚(fläkAECanSwitchLayer°dONLNd¸÷‚)zCIf both the client and server allow interaction, and if the client °dONLNd?·Ì“* 1application is the active application on the locam¿°dONLNdp·”Ì)œ l computer °dONLNd{ϯ    (ıa°dONLNd|Ï    ¯`)nd is waiting for a r^ °dONLNdëÏ`¯“)Weply (that is, it has set the °dONLNdؘL( kAEWaitReply{Ä°dONLNdª˜LQ)H f‡°dONLNdΩ˜Rg)lag), Î@°dONLNd√˜g”)AEInteractWithUser‰Ä°dONLNd’˜”)l  brings the °dONLNd·.( 
  11409. server dir$‡°dONLNdÎ/n)+ectly to the forº@°dONLNd˚n|)?egr⁄°dONLNd˛|À)ound. Otherwise, °dONLNdp(AEInteractWithUsery@°dONLNd!pØ)l uses the Notif4‡°dONLNd0∞)@ication Manager to °dONLNdC$(!rE°dONLNdD$˘)9equest that the user bring the server application to the °dONLNd}#/(,for`°dONLNdÄ#/)egr, °dONLNdÉ#/8)ound.‡°dONLNdà#9/;) dONLNdâ#;/=) ˇ∞@ˇ ˇˇˇˇ@
  11410. ˇ·ˇ‚7^
  11411. 4*\¯, Palatino&e.3+l"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@lResponding to ,): Apple Events4⁄*˙¯
  11412. (‡*4-48    )BInteracting WÅ0)5 ith the User4^*¿¯
  11413. k*r¯4l*r¯ mlm¯
  11414. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd\lk›(glSetting the Server ˝J°dONLNd\‹k!)p Application’°2°dONLNd\"k⁄)Fs User Interaction Preferencesˇˇˇˇˇˇ€r)Œ4
  11415. °dONLNd?rl~({l'The server sets its user interaction prÁ°dONLNdfr~)¢eferì °dONLNdjr~r)ences by using the ,
  11416. Courier°dONLNd}lãˆ(àlAESetInteractionAllowedw`°dONLNdîˆã)ä     function†°dONLNdùã.)(. Th˜¿°dONLNd°.ãV)
  11417. is functio⁄°dONLNd´Wãy))n specif± °dONLNd≥yã»)"ies the conditions °dONLNdΔålòâ(ïlunder ∞Ä°dONLNdÃåâòë)wÄ°dONLNdÕåíòà)    :hich your application is willing to interact with the userL‡°dONLNdåáòâ)ı.°dONLNd    £lØ\(¨l(myErr := AESetInteractionAllowed(level);°dONLNd2ªl«*The ª¿°dONLNd6ª«ù)levelπ‡°dONLNd;ªù«˙) parameter is of type V‡°dONLNdQª˚«a)^AEInteractAllowedPÄ°dONLNdbªa«f)f. °dONLNde“lfiÑ(€lTYPE°dONLNdk“êfiå)$*AEInteractAllowed = (kAEInteractWithSelf, °dONLNdü‡Ïí+~kAEInteractWithLocal, °dONLNdøÓ˙Ü*kAEInteractWithAll);°dONLNd‘lr(lY@Ä°dONLNd’rs)=ou can specify one of these values for the interaction level:°dONLNd∫»l‘Ä(—lCIf the server application does not set the user interaction level, ¿°dONLNd˝»Å‘Ì(—ÅAEInteractWithUser°dONLNd»Ì‘Ô)l °dONLNd’l·Å(filuses J¿°dONLNd’Ç·˙)kAEInteractWithLocalC@°dONLNd)’˙·3)x as the value.°dONLNd8ÁlÛ˙(l#If the application sends itself an ÿ°dONLNd[Á˙ÛV)éApple event (that is, Ú °dONLNdqÁVÛ^)\if Æ`°dONLNdtÁ_ÛÓ)    #the application is both the client °dONLNdóÙl(˝l$and the server) without setting the Ω‡°dONLNdªÙg)õkAENeverInteract∑‡°dONLNdÀÙgo)` flD†°dONLNdŒÙp)    ag, ”¿°dONLNd“ÙÎ)AEInteractWithUserÕ°dONLNd‰ÙÎÌ)l °dONLNdÂlz(
  11418. lAalways allows user interaction. If the client application is a pr—‡°dONLNd&z√(
  11419. zocess on the locam†°dONLNd7ƒˆ)J l computer °dONLNdBlõ(l
  11420. and specifi[@°dONLNdMúß)0es ·‡°dONLNdPß˚) kAECanInteract‹†°dONLNd^˚    )T or D¿°dONLNdb
  11421. p)kAEAlwaysInteract>`°dONLNdspr)f,æ`°dONLNdtrá) and ´Ä°dONLNdyàê)if g¿°dONLNd|ë∏)        the serve.@°dONLNdÖπ„)( r has set t:†°dONLNdê„)*he °dONLNdìl'∏($linteraction level tf‡°dONLNd¶π'¿)Mo \`°dONLNd®¡'«)k\°dONLNd©«'9)AEInteractWithLocalT‡°dONLNdº9'G)r or Ω°dONLNd¿G'≠)kAEInteractWithAl∂†°dONLNd—≠'≥)fl∂@°dONLNd“≥'µ),6@°dONLNd”∂'Œ) then °dONLNdŸ(l4ÿ(1lAEInteractWithUsery@°dONLNdÎ(ÿ4ì)l/ allows user interaction. If the client is a prà¿°dONLNd(ì4≈)ª ocess on a r>°dONLNd&(Δ4„)3emote °dONLNd,5lA‹(>lcomputer on the networkÄ°dONLNdC5›A)q  and specifil¿°dONLNdO5A)2es Û`°dONLNdR5An) kAECanInteractÓ °dONLNd`5nA|)T or V@°dONLNdd5}A„)kAEAlwaysInteractO‡°dONLNdu5„AÂ)f,œ‡°dONLNdv5ÂAÁ) °dONLNdwBlNÿ(KlAEInteractWithUsery@°dONLNdâBÿN®)l2 allows user interaction only if the server specif߆°dONLNdªB®N∏)–ied °dONLNdøOl[|(Xlthe ›`°dONLNd√O|[Ë)kAEInteractWithAll÷†°dONLNd’OË[)l flc`°dONLNdÿOÒ[∏)    2ag for the interaction level. In all other cases, °dONLNd
  11422. \lhÿ(elAEInteractWithUsery@°dONLNd\ÿhe)l! does not allow user interaction.“@°dONLNd=\ehg)ç R@°dONLNd>\hhj)     °dONLNdl*~('lFlag°dONLNd¯*))å Description
  11423. °dONLNd%-l9fi(6lkAEInteractWithSelf°dONLNd9-¯9˛)åY@Ä°dONLNd:-˛9)o∂°dONLNd;-9a)ur server application B`°dONLNdQ-b9‘)_can interact with the user ü‡°dONLNdl-‘9fl)rin °dONLNdo8¯D˚(A¯rE°dONLNdp8¸D:)esponse to an F °dONLNd~8:Dm)>
  11424. Apple evenNÄ°dONLNdà8mDx)3t oÜ`°dONLNdã8xDà) nly O@°dONLNdè8âD¿) when your a°dONLNdö8¡DÛ)8 pplication i0@°dONLNd¶8ÛD˘)2s °dONLNd®C¯O<(L¯also the client añ†°dONLNdπC<Oh)D
  11425. pplicationMÄ°dONLNd√CiO€)-—that is, only when your °dONLNd‹N¯Zi(W¯application is sending theˆ@°dONLNdˆNiZk)q ‡°dONLNd˜NlZ«)Apple event to itself.°dONLNd^lj‰(glkAEInteractWithLocal°dONLNd$^¯j˛)åY@Ä°dONLNd%^˛jfl)5our server application can interact with the user in °dONLNdZi¯u˚(r¯rE°dONLNd[i¸u:)esponse to an F °dONLNdii:u)>+Apple event only if the client application °dONLNdît¯ÄÔ(}¯9is on the same computer as your application. This is the °dONLNdÕ¯ãˆ* =default if the server application does not call the function °dONLNd
  11426. ä¯ñÇ* AESetInteractionAllowedw`°dONLNd!äÇñÑ)ä.°dONLNd$öl¶ÿ(£lkAEInteractWithAll°dONLNd7ö¯¶˛)åY@Ä°dONLNd8ö˛¶)our sl¿°dONLNd=ö¶a)erver application B`°dONLNdOöb¶‘)Ncan interact with the user ü‡°dONLNdjö‘¶fl)rin °dONLNdm•¯±˚(ƯrE°dONLNdn•¸±:)esponse to an F °dONLNd|•:±m)>
  11427. Apple evenNÄ°dONLNdÜ•m±ô)3 t sent by aB°dONLNdë•ö±ß)-ny "Ä°dONLNdî•®±«)client a¿‡°dONLNdú•«±ˆ) pplication °dONLNdß∞¯ºC(π¯on any computer+†°dONLNd∂∞CºE)K.ˇ9¶@ˇ ˇˇˇˇ@
  11428. ˇ·ˇ‚7^
  11429. 4H\, Palatino&e.3+ä"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@äResponding to ,): Apple Events4⁄ä˙(‡äInteracting WÅ0)5 ith the User
  11430. , (‡4-49
  11431. ˇˇˇˇˇˇˇˇ4l4älòÄ.lBäoMM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""lBäolBäo$””””””””””””””””””””””””””””””òÄ
  11432. l6ä@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""l6ä@l6ä@˜˜˜˜˜˜˜˜˜˜˜˜˜¸ˇˇ˛¸˛ˇˇ¸ˇˇˇ˛˙ˇ˛˙ˇ˜˜˜˜˜˜˜˜˜˜˜˜
  11433. 4è4Ö?òÄ
  11434. è6Ö@MM! ġˇˇˇˇˇˇˇˇˇˇÃÃˇˇˇˇôôˇˇˇˇffˇˇˇˇ33ˇˇˇˇˇˇÃÃˇˇˇˇÃÃÃÃˇˇÃÃôôˇˇÃÃffˇˇÃÃ33ˇˇÃÃˇˇôôˇˇˇˇôôÃÃˇˇôôôôˇˇôôffˇˇôô33ˇˇôôˇˇffˇˇˇˇffÃÃˇˇffôôˇˇffffˇˇff33ˇˇffˇˇ33ˇˇˇˇ33ÃÃˇˇ33ôôˇˇ33ffˇˇ3333ˇˇ33ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇˇˇÃÃˇˇÃÃÃÃˇˇôôÃÃˇˇffÃÃˇˇ33ÃÃˇˇÃÃÃÃˇˇÃÃÃÃÃÃÃÃÃÃôôÃÃÃÃffÃÃÃÃ33ÃÃÃÃÃÃôôˇˇÃÃôôÃÃÃÃôôôôÃÃôôffÃÃôô33ÃÃôôÃÃffˇˇÃÃffÃÃÃÃffôôÃÃffffÃÃff33ÃÃffÃÃ33ˇˇÃÃ33ÃÃÃÃ33ôôÃÃ33ffÃÃ3333ÃÃ33ÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇˇˇôôˇˇÃÃôôˇˇôôôôˇˇffôôˇˇ33ôôˇˇôôÃÃˇˇôôÃÃÃÃôôÃÃôôôôÃÃffôôÃÃ33ôôÃÃôôôôˇˇôôôôÃÃôôôôôôôôôôffôôôô33ôôôôôôffˇˇôôffÃÃôôffôôôôffffôôff33ôôffôô33ˇˇôô33ÃÃôô33ôôôô33ffôô3333ôô33ôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇˇˇffˇˇÃÃffˇˇôôffˇˇffffˇˇ33ffˇˇffÃÃˇˇffÃÃÃÃffÃÃôôffÃÃffffÃÃ33ffÃÃffôôˇˇffôôÃÃffôôôôffôôffffôô33ffôôffffˇˇffffÃÃffffôôffffffffff33ffffff33ˇˇff33ÃÃff33ôôff33ffff3333ff33ffˇˇffÃÃffôôffffff33ff33ˇˇˇˇ33ˇˇÃÃ33ˇˇôô33ˇˇff33ˇˇ3333ˇˇ33ÃÃˇˇ33ÃÃÃÃ33ÃÃôô33ÃÃff33ÃÃ3333ÃÃ33ôôˇˇ33ôôÃÃ33ôôôô33ôôff33ôô3333ôô33ffˇˇ33ffÃÃ33ffôô33ffff33ff3333ff3333ˇˇ3333ÃÃ3333ôô3333ff333333333333ˇˇ33ÃÃ33ôô33ff333333ˇˇˇˇˇˇÃÃˇˇôôˇˇffˇˇ33ˇˇÃÃˇˇÃÃÃÃÃÃôôÃÃffÃÃ33ÃÃôôˇˇôôÃÃôôôôôôffôô33ôôffˇˇffÃÃffôôffffff33ff33ˇˇ33ÃÃ33ôô33ff333333ˇˇÃÃôôff33ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓ››ªª™™ààwwUUDD""ÓÓÓÓÓÓ››››››ªªªªªª™™™™™™ààààààwwwwwwUUUUUUDDDDDD""""""è6Ö@è6Ö@$˛˙ˇ˚ˇˇ˚ˇˇ˚ˇˇ    ˛˛ˇˇˇ˜˝˛ˇ˛
  11435. ˛ˇˇˇˇ
  11436. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜    ˛ˇˇ˛
  11437. ˛ˇˇˇˇ
  11438. ˛ˇˇˇˇ    ˝ˇˇˇ˙ˇˇ
  11439. ˛ˇ˛ˇˇ
  11440. ˛ˇ˛ˇˇ˝˛ˇ˛˜˝˛ˇ˛
  11441. ˛ˇ˛ˇˇ
  11442. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝˛ˇ˛
  11443. ˛ˇ˛ˇˇ
  11444. ˛ˇ˛ˇˇ˛˙ˇ˜˛¸ˇˇ˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜    ˇ˛ˇ˛ ˇˇ˛ˇˇ ˇˇ˛ˇˇ˚ˇˇ˜˜˜˜˝¸ˇ
  11445. ˛ˇ˛ˇˇ˝˛ˇ˛
  11446. ˛ˇ˛ˇˇ
  11447. ˛ˇ˛ˇˇ˝˛ˇ˛˜˜˜˛ˇˇ¸¸ˇˇ˛¸ˇ˛ˇ¸ˇˇ˛˛ˇˇ¸˜˙ˇˇ
  11448. ˛ˇ˛ˇˇ
  11449. ˛ˇ˛ˇˇ˝˛ˇ˛˜˙ˇˇ
  11450. ˛ˇ˛ˇˇ
  11451. ˛ˇ˛ˇˇ˝˛ˇ˛˜˛˙ˇ˜˝˛ˇ˛
  11452. ˛ˇˇˇˇ
  11453. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˜˜˜˛˙ˇ
  11454. ˛ˇˇˇ
  11455. ˛ˇˇˇ
  11456. ˛ˇˇˇ
  11457. ˛ˇˇˇ˜˙ˇˇ¸ˇˇ˛˛ˇˇ¸¸ˇˇ˛˝˝ˇˇ
  11458. ˛ˇˇˇˇ
  11459. ˛ˇˇˇˇ    ˛ˇˇˇ˛˜˛¸ˇˇ˚ˇ˛˙ˇˇ˛˝ˇ˛˜˝¸ˇ
  11460. ˛ˇ˛ˇˇ˜    ˛ˇˇ˛
  11461. ˛ˇˇˇˇ
  11462. ˛ˇˇˇˇ    ˝ˇˇˇ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜4^H¿
  11463. kHr4lHr mäm
  11464. ˇ·ˇ‚7^ˇˇ‹.ˇ◊°dONLNd\äk3(gäRequesting User Interactionˇˇˇˇˇˇ€r(g4
  11465. °dONLNdrä~™({äDIf your server application needs to interact with the user for any r6°dONLNdar´~ ({´eason, it must call the ,
  11466. Courier°dONLNdyäãˆ(àäAEInteractWithUsery@°dONLNdãˆãT)l function to make suru@°dONLNd†Tãï)^e it is in the for4Ä°dONLNd≤ñã§)BegrR@°dONLNdµ§ã‘)
  11467. ound befor†°dONLNdø’ã
  11468. )1e it actually °dONLNdÕåäòÏ(ïäinteracts with the userÄ°dONLNd‰åÏò)b. When ‡°dONLNdÎåòz)"AEInteractWithUser °dONLNd˝åzò)l# allows user interaction (based on °dONLNd ôä•Í(¢äthe client’s and server@°dONLNd7ôÏ•ˇ)b’s prQ†°dONLNd<ôˇ•)efer˝¿°dONLNd@ô•/)ences), cÄ°dONLNdHô0•ú)!AEInteractWithUser\¿°dONLNdZôú•Î)l brings the server °dONLNdm¶ä≤Ê(Øäapplication to the for⁄Ä°dONLNdɶÊ≤Ù)\egr¯@°dONLNdܶÙ≤>)ound—either dir- °dONLNdï¶?≤¢)Kectly or after the user r˛@°dONLNdƶ¢≤Û)cesponds to a notifi\‡°dONLNd¡¶Ù≤)Rcation °dONLNd»≥äøç(ºärE°dONLNd…≥éø‚)equest—and then rX¿°dONLNd⁄≥‚ø)T    eturns a l‡°dONLNd„≥ø&)&noErrk°dONLNdË≥&ø,) r∞°dONLNdÍ≥,øf)esult code. If f°dONLNd˘≥gø”);AEInteractWithUser_@°dONLNd ≥”ø)l  brings the °dONLNd¿äÖ(…äserver to the for`°dONLNd(¿–Ãfi)Fegrù °dONLNd+¿fiÃ)ound dirP°dONLNd3¿Ã)'ectly(°dONLNd8¿ÃC) , the cliena`°dONLNdC¿CÃL)*t rË¿°dONLNdF¿LÃZ)    etu˚‡°dONLNdI¿ZÃh)rns¸‡°dONLNdL¿hÃí)  to the for†Ä°dONLNdW¿ìð)+egræ@°dONLNdZ¿°Ã )ound immediately after °dONLNdqÕ䟜(÷äthe server has fiT@°dONLNdÇÕ–Ÿ\)F nished interacting with the user) °dONLNd¢Õ\Ÿj)å. If [Ä°dONLNdßÕjŸ÷)AEInteractWithUserT¿°dONLNdπÕ÷Ÿ)l  brings the °dONLNd≈⁄äÊ–(„äserver to the for`°dONLNd÷⁄–Êfi)Fegrù °dONLNdŸ⁄fiÊ8)ound after the user r¸ °dONLNdÓ⁄8Êâ)Zesponds to a notifiZ¿°dONLNd⁄äÊ´)Rcation rņ°dONLNd    ⁄´Ê˙)!equest, the server °dONLNdÁäÛç(ärE°dONLNdÁéÛÿ)emains in the for~‡°dONLNd.ÁÿÛÊ)Jegrú†°dONLNd1ÁÊÛ£)+ound after completing the user interaction.°dONLNd]˘äï(äThr °dONLNd_˘ñù) e ª¿°dONLNda˘ù£)Aª`°dONLNdb˘£    )EInteractWithUserµ°dONLNds˘    O)f function specifi1`°dONLNdÑ˘P)G,es how long your handler is willing to wait °dONLNd∞ä§(äfor a r°dONLNd∑•“)
  11469. esponse fr °dONLNd¡—), om the userZ°dONLNdî)4'. For example, if the timeout value is Ò`°dONLNdÛ®”)£ 900 ticks (¨`°dONLNd˛‘),
  11470. 15 secondsB‡°dONLNd)0)ñ¿°dONLNd        ) °dONLNd
  11471. ä≠(äand the Ï °dONLNd≠I)#!Apple Event Manager posts a notifiÕ`°dONLNd4Jk)ùcation rÙ@°dONLNd<k∑)!equest, the Notifi`°dONLNdN∏ˇ)Mcation Manager °dONLNd] ä,¨()äbegins tÄ°dONLNde ≠,
  11472. )#o display a blinking i3‡°dONLNd{ 
  11473. ,R)]con in the upperú °dONLNdã R,¥)H-right corner of the scrχ°dONLNd£ ¥,Ω)beeÄ °dONLNd• æ,‚)
  11474.     n, then rE@°dONLNdÆ „,)%emoves °dONLNdµ-ä9±(6ä    the notifi[¿°dONLNdø-≤9”)(cation rdž°dONLNd«-”9)!equest (and thä@°dONLNd’-9C)? e blinking i>°dONLNd·-D9¥)2con) if the user does not rI °dONLNd¸-¥9ˆ)pespond within °dONLNd
  11475. :äFî(Cä15°dONLNd :îFñ)
  11476.  °dONLNd:óF∫)secondsÄ°dONLNd:∫FÜ)#/. (The discussion that follows describes some r톰dONLNdC:ÜF)Ã"estrictions on the icons that can °dONLNdeGäS(Pä be displayed in this situation.)°dONLNdÜYäeí*NŒ‡°dONLNdáYíeB))ote that the timeout value passed to the a`°dONLNd∞YCeØ)±AEInteractWithUserZ†°dONLNd¬YØe
  11477. )l function is separate °dONLNdÿfärë(oäfrò‡°dONLNd⁄fër.)#om the timeout value passed to the @°dONLNd˝f/rS)ûAESend°dONLNdfSrπ)$ function, which specifiÈ¿°dONLNdfπr)fes how long the °dONLNd+säI(|ä/client application is willing to wait for the rk†°dONLNdZsIn)ø    eply or r‹°dONLNdcsnå)%eturn r¯ °dONLNdjsåØ)    eceipt fr¡`°dONLNdss∞Ô)$om the server °dONLNdÅÄäåª(âä application6‡°dONLNdåĺåƒ)2. Iï`°dONLNdèăå…)f i@°dONLNdëÄ å6)AEInteractWithUserbÄ°dONLNd£Ä6åd)l  does not r»†°dONLNdÆÄdåç).
  11478. eceive a rÈ`°dONLNd∏Äçå∫))
  11479. esponse frÿÄ°dONLNd¬Ä∫å)-om the user within °dONLNd’çäô∂(ñä
  11480. the specifiKÄ°dONLNd‡ç∑ô”)-ed tim؆°dONLNdÊç”ô⁄)e,˘@°dONLNdËç⁄ô‹) y@°dONLNdÈç›ôI)AEInteractWithUserrÄ°dONLNd˚çIôO)l r∑Ä°dONLNd˝çOôm)eturns K†°dONLNdçnô∂) errAETimeoutG °dONLNdç∂ôª)H. °dONLNdüä´ê(®äY@Ä°dONLNdüê´)Uou may want to give the user a method of setting the interaction level. For example, °dONLNdi¨ä∏.(µä$some users may not want to be interrÑ¿°dONLNdç¨.∏É)§upted while backgrS†°dONLNdü¨Ñ∏ß)Vound prÄ°dONLNd¶¨®∏Ë)$ocessing of an 3 °dONLNdµ¨Ë∏)@Apple °dONLNdªπä≈7(¬ä'event occurs, or they may not want to rdž°dONLNd‚π7≈)≠0espond to dialog boxes when your application is °dONLNdΔä“¥(œä    handling ë`°dONLNdΔ¥“ )*Apple events sent frL`°dONLNd/Δ“m)Yom another computer±°dONLNdBΔl“n)_.ˇ$å@ˇ ˇˇˇˇ@
  11481. ˇ·ˇ‚7^
  11482. 4*\¯, Palatino&e.3+l"CHAPTER ”)>4,     Helvetica    ˇˇ—ÚˇÆ(@lResponding to ,): Apple Events4⁄*˙¯
  11483. (‡*4-50    )BInteracting WÅ0)5 ith the User4^*¿¯
  11484. °dONLNd\lhü(el Listing 4-14 @°dONLNd \†h)4 illustrates the use of the ,
  11485. Courier-`°dONLNd(\hz)nAEInteractWithUser&†°dONLNd:\zh¶)l  function. á@°dONLNdE\¶h¨),YG¿°dONLNdF\¨hfi)ou call this °dONLNdSilu™(rlfunction befoṙ°dONLNdai™uÊ)>Ie your application displays a dialog box or otherwise interacts with the °dONLNd™vlǶ(l user when pr
  11486. ‡°dONLNd∂vßÇ‹); ocessing an  °dONLNd¬v€Ç)4Apple event. @°dONLNdœvÇ)<YÕ¿°dONLNd–vÇ“)+ou specify a timeout value, a pointer to a °dONLNd˚ÉlèÖ(ålNotifi{‡°dONLNdÉÜè—)cation Manager r¥¿°dONLNdÉ—è„)Kecor) °dONLNdɉè()d, and the addr ‡°dONLNd$É(è÷)D)ess of an idle function as parameters to °dONLNdMêlúÿ(ôlAEInteractWithUserª‡°dONLNd_ê◊úŸ)k.
  11487. ø*«¯4¿*«¯"¿*_
  11488. ˇ·ˇ‚7^    °dONLNdaµl¿ù(Ωl Listing 4-14°dONLNdnµ∞¿ÿ)D
  11489. Using the @°dONLNdxµŸ¿3))AEInteractWithUser/`°dONLNdäµ:¿\)a     function
  11490. °dONLNdïœl€(ÿlmyErr := AEInteractWithUsev@°dONLNdØœ€)úr(uÄ°dONLNd±œ€h) kAEDefaultTimep@°dONLNdøœh€n)Too‡°dONLNd¿œn€z)uto °dONLNd¬œz€Œ) , gMyNotifyReci‡°dONLNd–œŒ€‡)TPtrh¿°dONLNd”œ‡€Ï), °dONLNdfl›È(Ê †°dONLNd‡›È)@@°dONLNd·›Èz)MyIdleFunction);°dONLNdÚÎl˜(ÙlIF myErr <> noErr THEN°dONLNd
  11491. ˘~»+7{the attempt to interact failed; do any error handling}°dONLNdC~“*DoError(myErr)°dONLNdRl!Ñ(lELSE°dONLNdX#~/∂+4{interact with the user by displaying a dialog box }°dONLNdé1~=»*7{ or by interacting in any other way that is necessary}°dONLNd«?~K*DisplayMyDialogBox;x‡°dONLNd⁄?Kˆ)r °dONLNd‹Wlcr(`lY@Ä°dONLNd›Wrc0).ou can set a timeout value, in ticks, in the fiÛ@°dONLNd W0cy)ærst parameter to . °dONLNdWzcÊ)JAEInteractWithUserj°dONLNd/WÂcÍ)k. °dONLNd1dlpè(mlUse the +@°dONLNd9dêpˆ)$kAEDefaultTimeout$‡°dONLNdJdˆpe)f constant if you want the †‡°dONLNdddepÌ)oApple Event Manager to use a °dONLNdÅql}(zl)default value for the timeout value. The (°dONLNd™q}Í)≤,Apple Event Manager uses a timeout value of °dONLNd÷~lä7(ál/about one minute if you specify this constant. ⁄ °dONLNd~7ä=)ÀYö†°dONLNd~=ä¢)ou can also specify the ïÄ°dONLNd~£äfl)f
  11492. kNoTimeOutë¿°dONLNd(~flä·)< °dONLNd)ãló[(îl8constant if your application is willing to wait an indefiq°dONLNdbã\ó–)nite amount of time for a r≠‡°dONLNd}ã–óı)tesponse °dONLNdÖòl§s(°lfrò‡°dONLNdáòs§ß) om the user¿°dONLNdíòߧ)4. Usually you should prP°dONLNd©ò§Ò)h4ovide a timeout value, so that your application can °dONLNd›•l±†(Æl complete prA°dONLNdË•°±‰)5ocessing of the {†°dONLNd¯•‰±3)CApple event in a r≈ °dONLNd
  11493. •3±©)Oeasonable amount of time. °dONLNd%∑l√™(¿lIf you specify Ä°dONLNd4∑´√Ω)?NIL£°dONLNd7∑º√) instead of a NotifiÜ¿°dONLNdK∑√Y)Rcation Manager rø†°dONLNd[∑Y√k)Kecor4°dONLNd_∑l√Ï)d in the second parameter of °dONLNd|ƒl–ÿ(ÕlAEInteractWithUserª‡°dONLNdéƒ◊–Ï)k, the ∫‡°dONLNdîƒÏ–˜);Apple Event Manager looks for an application icon with the °dONLNdœ—l›ñ(⁄l    ID specifi⇰dONLNdŸ—ñ›!)* ed by the application’s bundle ( @°dONLNd˘—"›()å'‡°dONLNd˙—(›@)BNDL`°dONLNd˛—@›F)'°dONLNdˇ—F›O)) r∂‡°dONLNd—O›g)    esourˇ °dONLNd—g›◊)ce and the application’s fiÀ`°dONLNd"—ÿ›‚)qle °dONLNd%filÍo(ÁlrE°dONLNd&fipÍÄ)eferÒ °dONLNd*fiÄÍô)ence (ô‡°dONLNd0fiö͆)'ôÄ°dONLNd1fi†Í∏)FREFò°dONLNd5fi∏Íæ)'ó†°dONLNd6fiæÍ«)) r0Ä°dONLNd9fi»͇)
  11494. esourx¿°dONLNd>fi‡Í)ce. The ê°dONLNdFfiÍk)!Apple Event Manager fiÀ†°dONLNd\fikÍ¢)jrst looks for  °dONLNdjfi£Í∞)8an jÄ°dONLNdmfi∞Í∂)'j °dONLNdnfi∂ÍŒ)SICNh†°dONLNdrfiŒÍ‘)'h@°dONLNdsfi‘Í÷) °dONLNdtÎl˜o(ÙlrE°dONLNduÎp˜à)esourç@°dONLNdzÎà˜◊)ce with the specifi¿°dONLNdçÎ◊˜#)Oed ID; if it can’t fi•‡°dONLNd¢Î$˜?)Mnd an d`°dONLNd®Î@˜F)'d°dONLNd©ÎF˜^)SICNbÄ°dONLNd≠Î^˜d)'b °dONLNdÆÎd˜j) rß °dONLNd∞Îj˜Ç)esourÔ`°dONLNdµÎǘ“)ce, it looks for the °dONLNd ¯lr(l'†°dONLNdÀ¯rä)ICN#~ °dONLNdœ¯äê)'}¿°dONLNd–¯êñ) r¬¿°dONLNd“¯ñÆ)esour °dONLNd◊¯Ø≈)ce anñ@°dONLNd‹¯≈Í)d compr≤‡°dONLNd„¯Í+)%esses the icon t<`°dONLNdÛ¯,7)Bo fV@°dONLNdˆ¯7Ö) it in the menu barK °dONLNd¯Öù)N. The (Ä°dONLNd¯ù◊) Apple Event °dONLNdl‘(lOManager won’t look for any members of an icon family other than the icon specifi†°dONLNdj’Ì(’ed in °dONLNdpl|(lthe ›`°dONLNdt|Ç)'›°dONLNduÇö)ICN#€Ä°dONLNdyö†)'€ °dONLNdz†¶) r  °dONLNd|ßø)esourh`°dONLNdÅø )ce.°dONLNdÖ$l0Ù(-l If the application doesn’t have ˙¿°dONLNd•$Ù0˙)à'˙`°dONLNd¶$˙0)SICN¯‡°dONLNd™$0)'¯Ä°dONLNd´$0&) or `†°dONLNdØ$'0-)'`@°dONLNd∞$-0E)ICN#^¿°dONLNd¥$E0K)'^`°dONLNdµ$K0Q) r£`°dONLNd∑$Q0i)esourΆ°dONLNdº$i0·)ces, or if it doesn’t have a fiÚÄ°dONLNd€$·0